1、Toplink JPAToplink JPAToplink是Oracle公司捐献给开源社区的,是最早的ORM映射框架之一,也是对JPA规范支持最好的一个框架。它遵循CDDL v1.01开源许可协议,官方主页是http:/www.oracle. com/ technology/global/cn /products/ias/ toplink/index.html。14.3.1 Toplink 与JPA Toplink最新的版本是Version 2 Build 41,Oracle已经将其捐献给Eclipse社区,并且在Sun的开源应用服务器Glassfish中,被使用为默认的JPA的实现。由于它有
2、良好的商业背景及广泛的应用,因此对使用JPA的开发人员来说,它便是更好的实现者选择。14.3.2 Toplink下载 使用浏览器打开下载后找到一个JAR包文件glassfish-persistence-installer-v2-b41.jar,它是可运行的JAR包,需要使用命令行解压缩。例如笔者将其保存在E:down文件夹下,则命令行的命令如下所示。java -jar glassfish-persistence-installer-v2-b41.jar运行后,命令行页面如图14-7所示。 图14-6 Toplink下载页面 图14-7 解压缩Toplink文件解压缩文件后,会在相应的文件目录下
3、生成glassfish-persistence文件夹,例如这里生成的目录是E:downglassfish-persistence。在该文件目录下,找到如下所示的两个JAR包文件,这些就是Toplink运行所必需的类包。 toplink-essentials.jar:Toplink的核心类包文件。 toplink-essentials-agent.jar:Toplink运行时代理类包,支持JVM级别的AOP。方法: oracle.toplink.essentials.PersistenceProvider com.User 配置日志在Toplink中有关日志配置可以有多种情况,例如日志的级别、日
4、志的输出内容等。这些日志的配置如以下属性所示。 属性名:toplink.logging.logger描述:日志的实现类名。可选值: DefaultLogger(默认):Toplink默认的日志实现类,oracle.toplink.essentials.logging. DefaultSessionLog。 JavaLogger:使用JDK自带的java.util.logging的实现类,oracle.toplink.essentials.logging. JavaLog。 自定义日志类的全名:如com.fengmanfei.jpa.logger.MyCustomLogger,自定义的日志类必须
5、实现oracle.toplink.essentials.logging.SessionLog类。示例如下: 属性名:toplink.logging.level描述:日志级别,这些值定义在java.util.logging.Level类中。可选值:级别由低到高顺序依次如下所示。 OFF:不记录任何日志。 SEVERE:记录Toplink不能继续运行时的严重异常和登录时的异常,并且记录异常的堆栈信息。 WARNING:记录Toplink并不是影响运行的异常没有记录到SEVERE 级别的异常,但这种方式记录的异常不包含堆栈信息。 INFO(默认):记录每次的登录和退出会话的信息(包括用户名)和会话连
6、接后详细的登录信息。 CONFIG:仅记录登录、JDBC连接和数据库信息。 FINE:记录SQL执行的语句。 FINER:记录的内容与WARNING 级别相同,但记录中包括异常的堆栈信息。 FINEST :记录所有的日志信息。示例如下: 属性名:toplink.logging.level.描述:配置不同日志类别的级别,日志的分类都定义在oracle.toplink.essentials.logging. SessionLog类中。可选值: SQL:SQL日志。 TRANSACTION:事务相关日志。 EVENT:事件相关日志。 CONNECTION:数据库会话相关日志。 QUERY:查询数据库
7、相关日志。 CACHE :缓存相关日志。 SEQUENCING:生成sequence相关日志。 EJB:EJB日志。 DMS:Oracle动态监控系统(Oracle Dynamic Monitoring System )相关日志。 EJB_OR_METADATA :EJB注释相关日志。 WEAVER :类织入(class weaver)日志。 PROPERTIES :开发环境属性相关日志。示例如下: 属性名:toplink.logging.timestamp描述:是否输出日志的时间戳。可选值: true(默认):记录时间戳。 false:不记录时间戳。示例如下: 属性名:toplink.log
8、ging.thread描述:是否输出日志线程ID。可选值: true(默认):记录线程ID。 false:不记录线程ID。示例如下: 属性名:toplink.logging.session描述:是否输出日志会话ID。可选值: true(默认):记录会话ID。 false:不记录会话ID。示例如下: 属性名:toplink.logging.exceptions描述:是否在应用程序抛出异常之前记录异常日志。可选值: true:记录所有的异常。 false(默认):不记录应用程序的异常。示例如下:配置缓存缓存能够提高系统的性能,系统要根据不同的需求选择最佳的优化方式。Toplink提供了各种情况下,
9、各种缓存的设置方式,这些配置如下所示。 属性名:toplink.cache.type.default描述:默认会话缓存的类型,这些值是定义在oracle.toplink.essentials.config.CacheType类中的常量。可选值: Full:完全缓存实体,实体只有删除后才同时删除内存中的缓存。建议在数据量小,内存足够大时采用该种缓存类型。 Weak:与Full类似,不过缓存采用的是弱引用(Weak Reference)的方式,当垃圾回收时,会自动回收弱引用的对象。如果使用了事务,建议采用该种缓存方式。 HardWeak :与Weak类似,但是对二级缓存采用强缓存(Hard Ref
10、erence)。 SoftWeak(默认):与Weak类似,但是对二级缓存采用软缓存(Soft Reference)。当内存不足时,Toplink会自动优化回收缓存的对象,大多数情况下,建议采用该配置。 NONE:不缓存实体,不建议采用该配置。 提示 有关弱引用、软引用的相关知识涉及JVM底层对象引用优化的内容,读者若想进一步了解,可以参阅java.lang.ref.SoftReference和java.lang.ref.WeakReference类相关知识。示例如下: 属性名:toplink.cache.size.default,描述:默认缓存的最大容量,可以为0到Integer.MAX_V
11、ALUE之间的数值,默认为1000。示例如下: 属性名:toplink.cache.shared.default描述:默认是否共享缓存。可选值: true(默认):多个会话共享缓存。 false:每个会话分别缓存。示例如下: 属性名:toplink.cache.type.描述:针对特定实体设置缓存类型,其中ENTITY为Entity标注的实体名称,类型值toplink.cache.type.default配置相同。可选值: Full:同toplink.cache.type.default。 HardWeak:同toplink.cache.type.default。 None:同toplink.
12、cache.type.default。 SoftWeak(默认):同toplink.cache.type.default。 Weak:同toplink.cache.type.default。示例如下: 属性名:toplink.cache.size.描述:针对特定实体缓存的最大容量,可以为0到Integer.MAX_VALUE之间的数值,默认为1000。示例如下: 属性名:toplink.cache.shared.描述:指定实体是否共享缓存。可选值: true(默认):多个会话共享缓存。 false:每个会话分别缓存。示例如下:配置JDBC和数据库在J2SE环境中,配置JDBC时可以采用如下所示
13、的配置进行优化。 属性名:toplink.jdbc.bind-parameters描述:是否使用预编译SQL和参数查询。可选值: true(默认):预编译SQL和参数查询。 false:不使用。示例如下: 属性名:toplink.jdbc.driver描述:JDBC驱动的类的全名。示例如下: 属性名:toplink.jdbc.password描述:JDBC连接的密码。示例如下: 属性名:toplink.jdbc.read-connections.max描述:读取JDBC数据库时最大连接数,可以为0到Integer.MAX_VALUE之间的数值,默认为2。示例如下: 属性名:toplink.jd
14、bc.read-connections.min描述:读取JDBC数据库时最小连接数,可以为0到Integer.MAX_VALUE之间的数值,默认为2。示例如下: 属性名:toplink.jdbc.read-connections.shared描述:读取数据库时,是否共享连接。可选值: true:允许用户共享连接。 false(默认):不共享连接。示例如下: 属性名:toplink.jdbc.url描述:JDBC连接的URL。示例如下: 属性名:toplink.jdbc.user描述:JDBC连接的用户名。示例如下: 属性名:toplink.jdbc.write-connections.max描
15、述:写JDBC数据库时最大连接数,可以为0到Integer.MAX_VALUE之间的数值,默认为10。示例如下: 属性名:toplink.jdbc.write-connections.min描述:写JDBC数据库时最小连接数,可以为0到Integer.MAX_VALUE之间的数值,默认为5。示例如下:另外,如果在J2EE环境中,也可以配置数据库相关的具体配置,如下所示。 属性名:toplink.target-database描述:指定JPA使用的数据库类型,这些值定义在oracle.toplink.essentials.config.Target Database枚举类型的常量中。可选值:Au
16、to(默认)、Attunity、Cloudscape、Database、DB2、DB2Mainframe、DBase、Derby、HSQL、Informix、JavaDB、MySQL4、Oracle、PointBase、PostgreSQL、SQLAnyWhere、SQLServer、Sybase和TimesTen。示例如下: 属性名:toplink.session-name描述:指定会话的名称,如果要在持久化上下文外访问Toplink会话需指定该名称。如果不指定,则自动生成一个唯一标识。示例如下: 属性名:toplink.target-server描述:指定JPA运行的服务器类型,这些值定义
17、在oracle.toplink.essentials.config.Target Server枚举类型的常量中。可选值:None(默认)、OC4J_10_1_3、SunAS9。示例如下:配置DDLDDL是针对映射是否自动更新数据库脚本的配置,配置这些内容可以优化对DDL的支持。有关DDL的配置如下所示。 属性名:toplink.ddl-generation描述:指定DDL生成方式,这些值定义在cle.toplink.essentials.ejb.cmp3.EntityManager FactoryProvider类中。可选值: none(默认):不生成DDL,不自动生成数据库。 create-
18、tables:只生成不存在的表,不改变原有表结构。 drop-and-create-tables:删除原表,重新生成新表。示例如下: 属性名:toplink.application-location描述:指定DDL生成SQL脚本的文件的目录,默认为当前的.+File.separator。示例如下: 属性名:toplink.create-ddl-jdbc-file-name描述:指定DDL生成创建SQL脚本的文件名,默认为createDDL.jdbc。示例如下: 属性名:toplink.drop-ddl-jdbc-file-name描述:指定DDL生成删除SQL脚本的文件名,默认为dropDDL
19、.jdbc。示例如下: 属性名:toplink.ddl-generation.output-mode描述:指定DDL的输出方式,这些值定义在cle.toplink.essentials.ejb.cmp3.EntityManager FactoryProvider类中。可选值: both(在J2SE中默认):即生成SQL文件,又在数据库中执行。 database:仅在数据库中执行。 sql-script(在Java EE中默认):仅生成SQL文件。示例如下:配置查询优化在本书的第9.3.6节中,曾讲述了对于不同的实现框架,可以设置提示来优化查询。Toplink中也提供了针对查询的优化配置,这些可
20、配置的常量都定义在oracle.toplink. essentials.config. TopLinkQueryHints 类中。 属性名:toplink.jdbc.bind-parameters描述:是否使用参数查询,可设置的值都定义在oracle.toplink.essentials.config.HintValues类中。可选值: true:使用参数查询。 false:不使用参数查询。 PersistenceUnitDefault(默认):根据JDBC的设置决定是否使用参数查询。示例如下:import oracle.toplink.essentials.config.HintValues
21、;import oracle.toplink.essentials.config.TopLinkQueryHints;query.setHint(TopLinkQueryHints.BIND_PARAMETERS, HintValues.TRUE); 属性名:toplink.pessimistic-lock描述:是否使用悲观锁(Pessimistic Lock),可设置的值都定义在oracle.toplink.essentials. config.PessimisticLock类中。可选值: NoLock(默认):不使用悲观锁。 Lock:相当于SELECT . FOR UPDATE。 LockNoWait:相当于SELECT . FOR UPDATE NO WAIT。示例如下:import oracle.toplink.essentials.config.PessimisticLock;import oracle.toplink.essentials.config.TopLinkQueryHints;query.setHint(TopLinkQueryHints.PESSIMISTIC_LOCK, PessimisticLock.LockNoWait); 属性名:toplink.refresh描述:是否更新查询结果中会话缓存中的对象,可设置的值都定义在
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1