分享
 
 
 

kodojdo指南第八章

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

第八章 PersistenceManager

上图概括了PersistenceManager 接口最常用的方法和属性。参考Javadoc了解更完整的信息。类JAVA

BEAN风格的getter和setter方法在字段声明时给出。入参为....的方法表示重载函数。

PersistenceManager 是应用程序和JDO运行时结合的主要接口。每个PersistenceManager 管理一个持

久事务对象的缓存,并关联一个单一的事务。

按照功能,PersistenceManager 的方法可以如下分类:

1)关联用户对象

2)属性配置

3)关联事务

4)能持久生存期管理

5)JDO标识管理

6)查询工厂

7)扩展工厂

8)关闭

8。1 关联用户对象

PersistenceManager的UserObject 属性允许你将任意一个对象和一个PersistenceManager关联。这

个对象不能是JDO实现品使用的对象。

8.2. 属性配置

PersistenceManager 包括两个配置属性的getter和setter方法。分别是Multithreaded 和

IgnoreCache. 这些属性在PersistenceManagerFactory 设置一节里已经详细讨论过了。

8。3 关联事务

PersistenceManager 和事务实例有着一对一的关系。事实上,许多厂商用单一的类来实现

PersistenceManager 和Transaction 接口。如果你的程序要求并发事务,你必须使用多重的

PersistenceManagers.

你可以使用currentTransaction方法来取得当前PersistenceManager 所关联的事务。

8。4 能持久生存期管理

PersistenceManagers 执行许多影响能持久类生存期实例状态的动作。这点通过提供多个函数来表现。例

如,可以将某个能持久对象作为参数,例如makePersistent方法, 也可以将整个能持久类的数组或集合作为

参数。例如makePersistentAll方法

1)由暂时性转化为新持久状态。这个行为只能在活动事务的上下文环境中使用。事务提交之后,新的持久

实例会插入到数据库。

2)这个行为使持久实例向暂时性状态转化。这个实例马上失去关联的PersistenceManager 和JDO标识。

但在数据库中的记录不会被修改。

这个行为只能在clean对象上执行。如果在dirty对象执行,会抛出JDOUserException

3)用这个方法使暂时性对象变为transient-transactional状态,或者持久非事务的对象进入当前事务

。在第二种情况下,这个行为必须在活动事务中执行。

4)收回对象意味着告诉PersistenceManager你不再使用这个对象。对象的状态会变为hollow且

PersistenceManager 释放所有对该对象的强引用,允许它被垃圾回收。

调用evictAll 方法表示收回所有在PersistenceManager缓存中处于persistent-clean状态的对象

5)使用refresh 行为确保对象的持久状态和数据库中的值同步。这个行为的用意是避免长时间运行的优化

事务发生数据陈旧的危险。

refreshAll 方法针对所有缓存中的事务性对象。如果没有活动的事务,这个方法没有意义。

6)某个持久对象从数据库中取出所有持久字段,用这个方法取得该对象。用这个行为确保在状态转为暂时

性之前所有实例的字段完全被装载。注意,这个行为并不是递归的。假如对象A和B有关系,那么以A作为参数

调用retrieve 方法会装载B,会不必要地以数据库中的值填充B的字段。

8。5 生存期例子

8。6 JDO标识管理

每个PersistenceManager都在缓存中管理持久对象的JDO标识。方法如下:

1)返回能持久类的JDO标识类

2)用JDO标识对象的toString方法返回的字符串重新创建JDO标识对象。假设一个能持久类和它的JDO标识

字符串,这个方法使用上述的getObjectById方法构造一个JDO标识对象,这个对象首先创建一个字符串,然

后根据这个字符串取得持久类对象。

3)返回PersistenceManager 管理的能持久类的JDO标识

4)返回JDO标识对象的相应持久类实例。如果实例已经缓存,会返回缓存里的版本。否则会创建一个新的实

例。是否从数据库中装载数据则不一定。

如果方法的参数为true,当前JDO标识在数据库中的记录不存在,那么JDO会抛出

JDODataStoreException。否则,JDO会返回一个未验证是否被其他持久管理者删除的已缓存的实例。一些

JDO实现品在没有缓存对象存在时会返回一个hollow实例。如果你访问这个对象的持久字段不会抛出异常。

8。7 Extent工厂

扩展是所有能持久类的能持久实例的逻辑体现,包括子类在内。

使用 PersistenceManager 的getExtent 方法可以取得扩展。有两个参数:扩展 包含的对象的类,和

一个提示是否包括子类的布尔类型的参数

假如能持久类在元数据里的requires-extent属性设置为false,那么你不能得到该类的扩展。

8。8 查询工厂

查询对象用来查找符合某些条件的持久化对象。你可以通过PersistenceManager的newQuery得到查询实

例。参考查询章节和Javadoc可以获得更详细信息。

8.9 关闭

当不再需要PersistenceManager的时候,你应该调用它的close方法。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有