kodojdo指南第七章

类别:Java 点击:0 评论:0 推荐:

第七章 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