相关文章推荐
冷冷的棒棒糖  ·  vue3变量VUE.js-阿里云·  8 月前    · 
憨厚的小马驹  ·  [sql server] ...·  1 年前    · 
绅士的墨镜  ·  WPF ...·  1 年前    · 

上图显示的是 PersistenceManager 接口的常用方法和属性,它包含很多标准的 JavaBean 属性方法 setter getter ,其中方法的参数中包含很多省略号的方法说明他们有多种重载的实现,完整的 PersistenceManager 接口可以参考 JDO JavaDoc

PersistenceManager 接口是开发人员在应用程序中与 JDO 进行交换的主要接口。每一个 PersistenceManager 接口控制着一系列的持久化对象和传输对象并且关联唯一的一个 Transaction 对象。

PersistenceManager 接口的方法从功能上可以划分为以下几个部分:

l 用户对象的关联

l 配置属性

l Transaction 的关联

l 可持久化生命周期的控制

l JDO 一致性控制

l Query 工厂

l Extent 工厂

l 关闭方法

1、 用户对象关联

public Object getUserObject ();

public void setUserObject (Object obj);

PersistenceManager UserObject 允许为每一个 PersistenceManager 关联任意的对象。这个对象不会被 JDO 实现使用。

2、 配置属性

public boolean getMultithreaded ();

public void setMultithreaded (boolean threaded);

public boolean getIgnoreCache ();

public void setIgnoreCache (boolean ignore);

PersistenceManager 的配置属性有两个: Multithreaded Ignore 。分别设置它是否可以被线程共享和是否忽略持久化对象状态的变化,具体的细节已经在上一节中讲过了,这里就不在重复了。

3、 Transaction 关联

public Transaction currentTransaction ();

每一个 PersistenceManager 都对应一个唯一的 Transaction 对象。实际上很多厂商使用一个类来实现 PersistenceManager Transaction 接口。如果你需要多个 Transaction 对象就需要多个 PersistenceManager 。你可以通过上面的方法获得当前 PersistenceManager Transaction

4、 可持久化生命周期的控制

PersistenceManager 通过几个动作来控制持久化对象的生命周期。每一种动作都有多个方法来实现。比如, makePersistent 接收一个持久化对象,而 makePersistentAll 接收一系列持久化对象的集合。

public void makePersistent (Object pc);

public void makePersistentAll (Collection pcs);

public void makePersistentAll (Object[] pcs);

上面的方法用于一个活动的处理构成,当一个处理过程被提交之后新的数据就会被写入到数据库中。

public void deletePersistent (Object pc);

public void deletePersistentAll (Collection pcs);

public void deletePersistentAll (Object[] pcs);

上面的方法在持久化对象删除的时候调用。

public void makeTransient (Object pc);

public void makeTransientAll (Collection pcs);

public void makeTransientAll (Object[] pcs);

上面的方法会把持久化对象转换为瞬时对象,这样这个对象将和 PersistenceManager JDO 一致性失去关联,因此对象的改变将不会影响到数据库。

public void makeTransactional (Object pc);

public void makeTransactionalAll (Collection pcs);

public void makeTransactionalAll (Object[] pcs);

上面的方法可以把非持久化对象放到当前的处理会话中,以便进行处理。

public void makeNontransactional (Object pc);

public void makeNontransactionalAll (Collection pcs);

public void makeNontransactionalAll (Object[] pcs);

将瞬时清楚对象转换为瞬时对象,将持久清楚对象转换为持久化非处理对象。如果在一个已经“脏化”的对象上调用这个方法会抛出一个 JDOUserException 异常。

public void evict (Object pc);

public void evictAll (Collection pcs);

public void evictAll (Object[] pcs);

public void evictAll ();

取出一个对象,它告诉 PersistenceManager 应用程序已经不再需要这个对象了。

public void refresh (Object pc);

public void refreshAll (Collection pcs);

public void refreshAll (Object[] pcs);

public void refreshAll ();

使用上面的方法保持持久化对象与数据库中的数据同步。

public void retrieve (Object pc);

public void retrieveAll (Collection pcs);

public void retrieveAll (Object[] pcs);

public void retrieveAll (Collection pcs, boolean dfgOnly);

public void retrieveAll (Object[] pcs, boolean dfgOnly);

从数据库中获得持久化对象的数据值。

5、 一个生命周期的例子

1) 处理对象

// 创建对象

Magazine mag = new Magazine ("1B78-YU9L", "JavaWorld");

Company pub = new Company ("Weston House");

pub.setRevenue (1750000D);

mag.setPublisher (pub);

pub.addMagazine (mag);

Article art = new Article ("JDO Rules!", "Transparent Object Persistence");

art.setAuthor (new Person ("Fred", "Hoyle"));

mag.addArticle (art);

// 获得 PersistenceManager 对象

PersistenceManager pm = pmFactory.getPersistenceManager ();

pm.currentTransaction ().begin ();

pm.makePersistent (mag);

pm.currentTransaction ().commit ();

// 关闭 PersistenceManager 对象

pm.close ();

2) 更新对象

// 假设我们已经通过 getObjectId 获得了一个对象

Object oid = ...;

// 创建 PersistenceManager 并获得 Mahazine 对象

PersistenceManager pm = pmFactory.getPersistenceManager ();

Magazine mag = (Magazine) pm.getObjectById (oid, false);

Company pub = mag.getPublisher ();

// 更新数据并提交到数据库

pm.currentTransaction ().begin ();

mag.setIssue (23);

company.setRevenue (1750000D);

pm.currentTransaction ().commit ();

// 关闭 PersistenceManager 对象,释放资源。

pm.close ();

3) 删除对象

// 假设我们已经通过 getObjectId 获得了一个对象

Object oid = ...;

// 创建 PersistenceManager 并获得 Mahazine 对象

PersistenceManager pm = pmFactory.getPersistenceManager ();

Magazine mag = (Magazine) pm.getObjectById (oid, false);

// 删除对象中的数据并提交到数据库

pm.currentTransaction ().begin ();

pm.deletePersistentAll (mag.getArticles ());

pm.currentTransaction ().commit ();

// 关闭 PersistenceManager 对象,释放资源。

pm.close ();

6、 JDO 一致性控制

每个 PersistenceManager 负责维护当前持久化对象的 JDO 一致性。下面的代码使你能够控制 JDO 的一致性:

public Class getObjectIdClass (Class pcClass);

下面的方法通过 getObjectId 获得持久化对象并根据给定的一致性字符字段维护 JDO 一致性

public Object getObjectId (Object pc);

public Object newObjectIdInstance (Class pcClass, String identityString);

7、 Extent 工厂

public Extent getExtent (Class pcClass, boolean includeSubclasses);

Extent 是一个给定的持久化对象实例的逻辑表示,它可以通过 PersistenceManager getExtent() 方法获得。这个方法有两个参数:第一个是持久化类,第二个是一个 boolean 值代表是否包含这个持久化类的子类。

如果这个方法中的持久化类的元数据中 requires-extent false 那么你将无法获得这个持久化类的 Extent

8、 Query 工厂

public Query newQuery ();

public Query newQuery (Class candidateClass);

public Query newQuery (Extent candidates);

public Query newQuery (Class candidateClass, Collection candidates);

public Query newQuery (Class candidateClass, String filter);

public Query newQuery (Class candidateClass, Collection candidates, String filter);

public Query newQuery (Extent candidates, String filter);

public Query newQuery (String language, Object serialized);

public Query newQuery (Object serialized);

Query 对象用于从持久化对象查询匹配的数据,你可以通过 PersistenceManager 的一系列 newQery 方法获得 Query 对象,有关 Query 对象的使用我会在后面详细讲述。

9、 关闭方法

public boolean isClosed ();

public void close ();

当一个 PersistenceManager 对象不再使用的时候你应该调用它 colose 方法把它关闭,这样就释放了这个 PersistenceManager 对象的资源。这是由这个 PersistenceManager 控制的其他对象也无法使用,如果你调用这个 PersistenceManager 的方法时(除了 isClosed )或抛出一个 JDOUserException 异常。

版权声明:

我写的有关 JDO 的所有文章都可以任意转载,但转载文章中请务必保留作者信息 , 谢谢。

作者:刘国栋

Mail:wafd@hotmail.com

Qq:282099538

PersistenceManagerPersistenceManager可以说是JDO中使用非常频繁的一个类。很多对持久化对象的操作(就是对数据库的操作)都是通过这个类进行的,今天我把这个类中主要方法的使用和说明作一个简单的讲解,希望对大家学习JDO有所帮助。上图显示的是PersistenceManager接口的常用方法和属性,它包含很多标准的JavaBean属性方法setter和
持续性管理器 一个数据存储库,可用于将数据存储在JSON文件中。 创建Peristence Manager 的目的是将数据存储在一个称为持久性的JSON文件中。 它被设计为仅使用本机的node.js依赖项。 在持久性内部存储着容器对象,其中包含已保存的数据。 每个容器包含一个元数据对象和一个数据数组。 const Persistence Lib = require ( ' Persistence Manager ' ) ; const Manager = Persistence Lib . Manager ( ) ; var Persistence Container = Manager . create Persistence ( "TempSave" , [ 5 , 10 , 15 , " String Element" ] ) ; Persistence Container . addElement
DataSourceTransaction Manager :位于org.springframework.jdbc.datasource包中,数据源事务管理器,提供对单个javax.sql.DataSource事务管理,用于Spring JDBC抽象框架、iBATIS或MyBatis框架的事务管理; Jdo Transaction Manager :... BaseDao 可指定数据源 执行sql V0兑现操作 Persistence Manager 可指定数据源 执行sql语句 DataAccessUtils 没有深入了解 看了下方法也是执行sql语句 同样 如果前段要调用 必须要通过接口访问 跟前面的BaseDao差不多 @Override public in...
在EJB中,一个实体Bean应用由实体类和 persistence .xml文件文件组成。 persistence .xml文件在jar文件的META-INF目录下。 persistence .xml文件指定实体Bean使用的数据源及Entity Manager 对象的默认行为。        我们来看一个最简单的 persistence .xml文件,了解一下它的配置。 1.HYPubBO_Client类 该类是对实例对象VO进行相关操作,里面的方法都是公共静态方法,所以调用的话就用类引用相关的方法即可。 public class HYPubBO_Client { private static IUifService service = (IUifService) NCLocator.getInstance().lookup(IUifService. class .getName()); * @return Returns the service.