在Hibernate中使用JTA事务
9.3.5 在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 |
<session-factory> ….. <property name=” hibernate.transaction.factory_class”> org.hibernate.transaction.JTATransactionFactory </property> …… </session-factory> |
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(); |