kodojdo指南第七章

本文介绍了PersistenceManagerFactory,它可创建PersistenceManager实例,允许配置数据连接和指定默认设置以优化程序。文中说明了获取该工厂的方法,介绍其属性,包括数据连接配置和默认持久化管理者及事务选项,还提及获取PersistenceManagers的方式和JDO实现品支持的配置选项。

第七章 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. 之外的所有选项

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值