快速业务通道

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(一) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
return (EntityManager) tls.get();   }   public static void closeSession() {    EntityManager s = (EntityManager) tls.get();    tls.set(null);    if (s != null && s.isOpen()) s.close ();   }   ... }

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(一)(5)

时间:2011-09-18 Donald Vines

4. 事务管理

Hibernate 应用程序可以运行于使用不同事务策略的环境中。应用程序可以运行于使用本地 JDBC 或 全局 Java Transaction API (JTA) 事务的环境中。

使用本地 JDBC 事务是最常见的场景。如果具有异类数据存储(如数据库和消息队列),则 JTA 事务 非常有用;JTA 允许您将其视为单个事务。

Hibernate 应用程序通过调用事务 API 来管理自己的事务。您使用的事务策略(JDBC 或 JTA)是在 Hibernate 配置文件中设置的,所以它与应用程序无关。

Hibernate 约定

在 Hibernate 中,事务管理按照以下方式进行映射:

使用 Session#beginTransaction() 开始事务。

使用 Transaction#commit() 提交事务。

使用 Transaction#isActive 和 Transaction#rollback() 回滚事务。

清单 5. Hibernate 事务管理

public class ORMHelper {   private static final ThreadLocal tltx = new ThreadLocal();   public static void beginTransaction() {    Transaction tx = (Transaction) tltx.get();    if (tx == null) {      tx = getCurrentSession ().beginTransaction();      tltx.set(tx);    }   }   public static void commitTransaction() {    Transaction tx = (Transaction)tltx.get();    if (tx != null && tx.isActive()) tx.commit();    tltx.set(null);   }   public static void rollbackTransaction() {    Transaction tx = (Transaction)tltx.get();     tltx.set(null);    if (tx != null && tx.isActive()) tx.rollback();   }   ... }

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(一)(6)

时间:2011-09-18 Donald Vines

OpenJPA 约定

在 OpenJPA 中,等效的事务管理按照以下方式进行映射:

使用 EntityManager#getTransaction() 和 EntityTransaction#begin()。

使用 EntityTransaction#commit()。

使用 EntityTransaction#isActive() 和 EntityTransaction#rollback()。

清单 6. OpenJPA 事务管理

public class ORMHelper {   private static final ThreadLocal tltx = new ThreadLocal();   public static void beginTransaction() {    EntityTransaction tx = (EntityTransaction) tltx.get();    if (tx == null) {      tx = getCurrentSession().getTransaction();      tx.begin();      tltx.set(tx);    }   }   public static void commitTransaction() {    EntityTransaction tx = (EntityTransaction)tltx.get();    if (tx != null && tx.isActive()) tx.commit();    tltx.set(null);   }   public static void rollbackTransaction() {    EntityTransaction tx = (EntityTransaction)tltx.get();    tltx.set (null);    if (tx != null && tx.isActive()) tx.rollback();   }   ... }

尽管 OpenJPA 示例将事务存储在 ThreadLocal 中,但通常仅调用 getCurrentSession ().getTransaction().begin(),并在以后调用 getCurrentSession().getTransaction().commit()。因 此,使用 OpenJPA,实际上不需要将事务存储在 ThreadLocal 中。

5. 实体管理

实体管理的常见场景包括:

创建持久对象。

使用主键检索

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号