在Hibernate中使用JTA事务
在Hibernate中使用JTA事务
JTA(Java Transaction API)是事务服务的J2EE解决方案。本质上,它是描述事务接口的J2EE模型的一部分,开发人员直接使用该接口或者通过J2EE容器使用该接口来确保业务逻辑能够可靠地运行。
JTA有3个接口,它们分别是UserTransaction接口、TransactionManager接口和Transaction接口。这些接口共享公共的事物操作,例如commit()和rollback(),但也包含特殊的事务操作,例如suspend()、resume()和enlist(),它们只出现在特定的接口上,以便在实现中允许一定程度的访问控制。
在一个具有多个数据库的系统中,可能一个程序会调用几个数据库中的数据,需要一种分布式事务,或者准备用JTA来管理跨Session的长事务,那么就需要使用JTA事务。下面介绍如何在Hibernate的配置文件中配置JTA事务。在hibernate.properties文件中设置如下(把JTATransactionFactory所在的配置行的注释符“#”取消掉):
hibernate.transaction.factory_class? org.hibernate.transaction.JTATransactionFactory# hibernate.transaction.factory_class? org.hibernate.transaction.JDBCTransactionFactory
或者在hibernate.cfg.xml文件中配置如下:
<session-factory>…..<property name=” hibernate.transaction.factory_class”>org.hibernate.transaction.JTATransactionFactory</property>……</session-factory>
下面是一个应用JTA事务的例子:
javax.transaction.UserTransaction tx = null;tx = new initialContext().lookup(” javax.transaction.UserTransaction ”) ;tx.begin();Session s1 = sf.openSession();……s1.flush();? s1.close();Session s2 = sf.openSession();……s2.flush();? s2.close();tx.commit();
?
转自:http://book.51cto.com/art/200804/71576.htm