分享
 
 
 

JDO PersistenceManagerFactory介绍

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

PersistenceManageFactory

JDO中一个很重要的类除了JDOHelper助手类之外就是这个PersistenceManagerFactory了,它是进行JDO开发初始化配置和获得PersistenceManager的工厂类,写这篇文章的目的是为了详细介绍这个类的内部方法和它们的用途以便大家在使用JDO是作为参考。

上图显示了PersistenceManagerFactory的主要属性和方法。PersistenceManagerFactory负责为应用程序创建PersistenceManager对象实例,它可以设置数据库连接的相关参数并可以设置创建的PersistenceManager对象的缺省设置。你也可以使用它来规划JDO厂商的实现,根据不同厂商提供的附加支持实现应用的优化。

下面我将对PersistenceManagerFactory进行详细的介绍:

1、 如何获得PersistenceManagerFactory

多数JDO厂商都提供构造PersistenceManagerFactory的方法, 每个厂商之间也许存在着不同,但一般情况下还是推荐使用标准的JDOHelper的getPersistenceManagerFactory方法,这个方法的Properties参数可以设置这个工厂对象的属性,一旦获得这个工厂对象,那么他的所有属性会被“冻结”,也就是说你不能再修改这个对象的属性,如果你试图这样做的话,会抛出一个JDOUserException异常,这是因为这个工厂对象可能是来自一个对象池或着它还要被共享供其他的应用使用。

JDO要求具体的PersistenceManagerFactory类必须实现Serializable接口,这样就可以把它放到一个文件或是JNDI树中以便随时使用。

2、 PersistenceManagerFactory的属性

PersistenceManagerFactory中大部分方法是标准的JavaBean风格的getter和setter方法他们对应相应的属性字段(如上图所示)。这些属性可以分为两个范畴Connection的配置以及PersistenceManager和Transaction的缺省选项

1) Connection配置

所谓Connection就是数据库连接,我通过一段例子代码来讲述它的设置过程。

下面这段代码告诉JDOHelper如何连接到数据库和数据库的登录用户名

public String getConnectionUserName ();

public void setConnectionUserName (String user);

props.setProperty ("javax.jdo.option.ConnectionUserName", user);

设置连接数据库的密码

public String getConnectionPassword ();

public void setConnectionPassword (String pass);

props.setProperty ("javax.jdo.option.ConnectionPassword", pass);

设置数据库连接的信息

public String getConnectionURL ();

public void setConnectionURL (String url);

props.setProperty ("javax.jdo.option.ConnectionURL", url);

设置数据库的驱动

public String getConnectionFactoryName ();

public void setConnectionFactoryName (String name);

props.setProperty ("javax.jdo.option.ConnectionFactoryName", name);

通过JNDI查找连接工厂,你可以使用连接池通过DataSource获得这个连接工厂

public Object getConnectionFactory ();

public void setConnectionFactory (Object factory);

//用于获得本地连接的方法

public Object getConnectionFactory2 ();

public void setConnectionFactory2 (Object factory);

2) PersistenceManager和Transaction的缺省选项

下面的方法将设置由PersistenceManagerFactory创建的PersistenceMangere和相关的Transaction对象的缺省属性。有些JDO实现厂商也许没有实现全部这些属性,当你设置一个没有被支持的属性的时候会抛出一个JDOUnsupportedOptionException异常。

public boolean getMultithreaded ();

public void setMultithreaded (boolean multithreaded);

props.setProperty ("javax.jdo.option.Multithreaded", multithreaded);

上面的值如果被设置为true,代表PersistenceManger对象和由这个对象控制的持久化对象可以同时被多个线程访问,如果被设置为false,一些JDO实现可以通过避免同步来优化执行。

public boolean getOptimistic ();

public void setOptimistic (boolean optimistic);

props.setProperty ("javax.jdo.option.Optimistic", optimistic);

上面的方法缺省为true,代表使用优化处理,有关优化处理将在TransactionType一节中讨论。

public boolean getRetainValues ();

public void setRetainValues (boolean retain);

props.setProperty ("javax.jdo.option.RetainValues", retain);

如果上面的值设置为true,代表当数据被提交到数据库之后,持久化对象的字段值仍然保留,否则就清除字段的值。

public boolean getRestoreValues ();

public void setRestoreValues (boolean restore);

props.setProperty ("javax.jdo.option.RestoreValues", restore);

上面的方法用于控制持久化对象的行为和字段的回滚。

public boolean getNontransactionalRead ();

public void setNontransactionalRead (boolean read);

props.setProperty ("javax.jdo.option.NontransactionalRead", read);

这些方法定义了你是否能够通过Transaction读取持久对象的状态。如果被设置为false,那么你通过外部的Transaction来对持久化对象执行查询就会抛出一个JDOUserException异常。

public boolean getNontransactionalWrite ();

public void setNontransactionalWrite (boolean write);

props.setProperty ("javax.jdo.option.NontransactionalWrite", write);

这些方法定义了你是否可以通过外部的Transaction对持久化对象进行写的操作,如果是false,那么你通过外部的Transaction来对持久化对象执行更新操作时就会抛出一个JDOUserException异常。

public boolean getIgnoreCache ();

public void setIgnoreCache (boolean ignore);

props.setProperty ("javax.jdo.option.IgnoreCache", ignore);

上面的方法设置当在一个持久化对象上执行”测试查询”时,是否在当前的处理过程中更改持久化对象的状态,true标识忽略更改。如果设置为false那么在执行查询的时候会立即将结果更新的到数据库。

3、 如何获得PersistenceManager

获得PersistenceManager可以调用下面的方法

public PersistenceManager getPersistenceManager ();

public PersistenceManager getPersistenceManager (String user, String pass);

两个方法都可以获得PersistenceManage,第一个方法通过PersistenceManagerFactory的setConnectionUserName和setConnectionPassword方法来设置数据库的连接信息,第二个通过传入的参数来设置数据库连接的用户名和密码。

4、 属性和支持的选项设置

public Properties getProperties ();

public Collection supportedOptions ();

getProperties方法可以获得一个Properites对象,他包含的特定的JDO厂商信息和版本信息,其中包含两个键:

VendorName:JDO厂商的名称

VersionNumber:JDO实现的版本号

getProperties方法可以获得一组包含字符串(String)的集合,它包含JDO实现实现的选项:

l javax.jdo.option.TransientTransactional

l javax.jdo.option.NontransactionalRead

l javax.jdo.option.NontransactionalWrite

l javax.jdo.option.RetainValues

l javax.jdo.option.Optimistic

l javax.jdo.option.ApplicationIdentity

l javax.jdo.option.DatastoreIdentity

l javax.jdo.option.NonDurableIdentity

l javax.jdo.option.ArrayList

l javax.jdo.option.HashMap

l javax.jdo.option.Hashtable

l javax.jdo.option.LinkedList

l javax.jdo.option.TreeMap

l javax.jdo.option.TreeSet

l javax.jdo.option.Vector

l javax.jdo.option.Map

l javax.jdo.option.List

l javax.jdo.option.Array

l javax.jdo.option.NullCollection

l javax.jdo.option.ChangeApplicationIdentity

l javax.jdo.query.JDOQL

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有