技术开发 频道

JDO技术分析及如何进入企业应用的研究

对象删除
  
  对象删除采用方法deletePersistence。示例如下:
  
  pm.currentTransaction().begin();
  Object obj =
  pm.newObjectIdInstance
  (Book.class,isbn);
  Book book =
  (Book)pm.getObjectById(obj,true);
  pm.deletePersistence(book);
  pm.currentTransaction().commit();
  
获得PersistenceManager实例
  
  上述的所有操作与需要PersistenceManager实例,它可以在两种环境方法下获得:非受管环境和受管环境。
  
非受管环境
  
  非受管环境是多指两层开发模式,应用程序直接获得资源对象,进行业务操作。一般事务管理、安全管理或资源管理都需要应用程序自行维护。
  
  
  Properties properties =
  new Properties();
  properties.put(javax.jdo.
  PersistenceManagerFactoryClass,
  com.xxx.jdo.xxxPMFClass);
  properties.put(javax.jdo.
  option.ConnectionURL, xxx);
  properties.put(javax.jdo.
  option.ConnectionUserName, xxx);
  properties.put(javax.jdo.
  option.ConnectionPassword, xxx);
  PersistenceManagerFactory pmf =
  JDOHelper.getPersistence
  ManagerFactory(properties);
  PersistenceManager pm =
  pmf.getPersistenceManager();
  
  与JDBC获取类似。
  
受管环境
  
  受管环境一般是多层开发模式,尤其是处于J2EE应用环境中,程序通过容器获得资源对象,进行业务操作,由于在容器环境下,事务、安全及资源管理都由容器进行统一集中管理,从而简化了代码结构。
  
  以下是EJB(EntityBean、SessionBean、MessageDrivenBean)中的setXXXContext中的代码示例。
  
  private PersistenceManagerFactory pmf;
  public void setXXXContext
  (XXXContext context)
  {
   try{
      InitialContext ctx =
  new InitialContext();
      Object obj = ctx.lookup
  (java:compenvjdofactory);
      pmf = (PersistenceManagerFactory)
  PortableRemoteObject.narrow
  (o,PersistenceManagerFactory.class);
   }catch(NamingException e)
   {
      throw new Exception(e);
   }
  }
  
  PMF是如何绑定到J2EE环境下的JNDI上,有兴趣可参考JCA相关的技术文档。
  
事务管理
  
  事务管理及使用,主要有以下三种情形。
  
  使用JDO事务的Bean管理情形
  
  一般在非J2EE环境下,使用该事务管理模式。
  
  PersistenceManager pm =
  pmf.getPersistenceManager();
  pm.currentTransaction().begin();
  //do some business with jdo
  pm.currentTransaction().commit();
  pm.close();
  
  使用JTA事务的Bean管理情形
  
  一般在J2EE环境下,采用Bean管理的事务情形下,使用以下方式。
  
  该方式可用在EJB的事务环境下。
  
  xxxContext.getUser
  Transaction().begin();
  PersistenceManager pm =
  pmf.getPersistenceManager();
  //do some business with jdo
  xxxContext.getUserTransaction().commit();
  pm.close();
  
  使用JTA事务的容器管理情形
  
  一般在J2EE环境下,采用容器管理的事务情形下,使用如下方式。
  
  如下是某个会话Bean的业务方法。
  
  public void doBusiness(){
   PersistenceManager pm ;
   try{
      pm = pmf.getPersistenceManager();
      //do some business with jdo
   }catch(Exception e){
      xxxContext.setRollbackOnly();
      System.out.println(e);
   }finally{
      try{
        if (pm != null && !pm.isClosed())
          pm.close();
      }catch(Exception ex){
        System.out.println(ex);
      }
   }
  }
  
  综上,可以得出结论,JDO的操作完全与JDBC的操作相差无几。
0
相关文章