第七章 PersistenceManagerFactory
PersistenceManagerFactory 创建PersistenceManager实例以供应用程序使用.它允许你配置数据连接方
式和指定所创建的PersistenceManager的默认设置.你也可以通过它在编程中获知你当前厂商支持的JDO选项
.使你能使用产品的全部特性来最优化你的程序.
7.1. 获得PersistenceManagerFactory
JDO厂商实现PersistenceManagerFactory 时也许支持公开的构造函数,但推荐你使用JDOHelper的
getPersistenceManagerFactory 方法来获得PersistenceManagerFactory方法.这个方法的属性参数提
供了工厂的配置信息.从getPersistenceManagerFactory 返回的PersistenceManagerFactory 对象是"
冰冻的",试图改变它的属性设置会导致JDOUserException.这是因为返回的工厂可能来自连接池,和其他应用
程序组建共享.
JDO要求具体的PersistenceManagerFactory 类实现Serializable 接口.这允许你创建和配置
PersistenceManagerFactory,然后序列化到文件或者存储到JNDI树供日后取出和使用.
7.2. PersistenceManagerFactory 属性
多数PersistenceManagerFactory 接口包含JAVA BEAN风格的getter 和setter方法来读取和设置属性
.这些属性按照功能可以分为两类:数据连接配置,默认持久化管理者和事务选项.
下面章节介绍了每一种属性,许多可以通过传给getPersistenceManagerFactory 方法的属性参数来设置
.这是一种情况.在方法声明后列出了属性的配置代码.
7.2.1. 连接配置
使用下面的属性告诉JDO如何连接你的数据库
1)指定数据连接的用户名
2)指定数据连接的密码
3)数据连接的URL
4)数据连接的驱动类名称
5)连接工厂的JNDI位置用来取得数据连接.这个属性会覆盖上面列出的数据连接属性.
连接工厂可以取得连接.这个属性覆盖所有其他的数据连接属性,包括连接工厂名称.工厂的准确类型是和具
体实现相关的,许多JDO实现品要求标准JAVA连接器体系连接工厂(JCA).在JDBC层上实现的JDO要求给出JDBC
数据源,其他的实现品会使用其他的工厂类型.
在一个受管制的环境,从主要连接工厂取得的连接会自动加入到正在进行的任一全局事务.JDO会要求一个另
外没有配置为参与全局事务的连接工厂.例如,Kodo默认的数据存储标识生成算法要求一个自身的非管制事务.
工厂的JNDI位置可以在这个属性中指定.
7.2.2. 默认的PersistenceManager 和事务
下面的设定会作为PersistenceManagers 和PersistenceManagerFactory生成的事务的默认属性值.一
些实现品可能不支持所有这些属性,如果你设置不支持属性的值,会导致JDOUnsupportedOptionException
1)设置这个属性为true.这样在你的程序里, PersistenceManagers 和它所管理的能持久类能被多线程的
访问.如果属性设为false,那么一些JDO实现品会通过避免同步的方式来优化性能.
2)默认值为true以使用最优化的事务.在事务的章节我们会讨论最优化事务.
3)如果这个属性值为true,那么在事务提交之后,持久对象的字段值不会被清空.否则,持久字段会被清空,在下
次访问它们的时候它们会再从数据库中读取值.
4)管理事务回滚时持久事务字段的行为.如果设为true,那么它们的值会被设为事务没有开始时的值.
5)指定是否在事务外读持久状态.如果属性为false,在事务之外,任何枚举extent, 执行查询或者访问非主键
行为都会导致JDOUserException
6)指定是否在事务外写持久状态.如果设为false,任何在事务外的修改持久字段行为都会导致
JDOUserException
注意事务外的更改并不会存储到数据库.当被修改对象一进入事务后更改就马上被忽略.
7)这个属性控制当执行查询时是否考虑持久实例的更改.设为true,则表示当前事务的更改可以忽略.这通常使
实现品可以使用数据库的本地接口来执行查询.如果设为false,JDO会在执行查询前保存数据的更改,或者在内
存中执行事务性查询.两者都会影响性能.
7.3. 获得PersistenceManagers
PersistenceManagerFactory 接口包含两个getPersistenceManager 方法.一个版本以用户名和密码
设置PersistenceManager的数据连接,另一个无参,依赖于PersistenceManagerFactory的连接用户名和连
接密码.
两个方法都会返回一个新构造的PersistenceManager对象或者返回连接池的一个PersistenceManager实例
.
从PersistenceManagerFactory获得第一个PersistenceManager 之后,工厂的配置进入"冰冻"状态.任
何对属性的改变都会导致JDOUserException.
VendorName: JDO厂商
VersionNumber: 产品版本号
The supportedOptions method returns a Collection of Strings enumerating the JDO
options supported by the implementation. The following option names are recognized:
除了支持PersistenceManagers,PersistenceManagerFactory 还支持当前JDO实现品的元数据
.getProperties 方法返回一个属性对象,至少包含下列关键字值:
VendorName: JDO厂商
VersionNumber: 产品版本号
supportedOptions 方法返回一个字符串集合,列举该JDO实现品所支持的配置选项.以下选项名是承认的:
javax.jdo.option.TransientTransactional
javax.jdo.option.NontransactionalRead
javax.jdo.option.NontransactionalWrite
javax.jdo.option.RetainValues
javax.jdo.option.Optimistic
javax.jdo.option.ApplicationIdentity
javax.jdo.option.DatastoreIdentity
javax.jdo.option.NonDurableIdentity
javax.jdo.option.ArrayList
javax.jdo.option.HashMap
javax.jdo.option.Hashtable
javax.jdo.option.LinkedList
javax.jdo.option.TreeMap
javax.jdo.option.TreeSet
javax.jdo.option.Vector
javax.jdo.option.Map
javax.jdo.option.List
javax.jdo.option.Array
javax.jdo.option.NullCollection
javax.jdo.option.ChangeApplicationIdentity
javax.jdo.query.JDOQL
Kodo支持除javax.jdo.option.ChangeApplicationIdentity和
javax.jdo.option.NonDurableIdentity. 之外的所有选项
本文地址:http://com.8s8s.com/it/it13811.htm