Hibernate的JTA事务应用有什么?
Hibernate的JTA事务应用有什么?
小弟就Hibernate的JTA事务应用花了三天的时间才算搞好,真是有点汗颜。在网上搜出来的例子,都不能用,可能小弟的Java基础太弱了。不知道大家是不是都是用JTA的事务。网上的例子可都是用Session的事务。写出来,以防止自己以后忘记了。呵呵。
由于我不断尝试,所以,现在写下的是最后的结果,如果有谁知道其中有哪些步骤可以省略,请告诉我。
这次就是使用:Tomcat+Hibernate+JOTM
1.在Tomcat中配置JOTM(http://www.objectweb.org/jotm/)
先到上述网站上下载JOTM。然后将
jotm.jar、jotm_jrmp_stubs.jar、jonas_timer.jar、carol.jar、jta-spec1_0_1.jar
jts1_0.jar、objectweb-datasource.jar、xapool.jar
这些Jar文件复制到:$TOMCAT_HOME/common/lib/目录中。
将JDBCdriver复制到:$TOMCAT_HOME/common/lib/目录中。
将文件:carol.properties复制到:$TOMCAT_HOME/common/classes/目录中。
下面,修改Tomcat的Server.xml配置文件。
[code]
<Resourcename="jdbc/dataSrc"auth="Container"type="javax.sql.DataSource"/>
<parameter>
<name>factory</name>
<value>org.objectweb.jndi.DataSourceFactory</value>
..........
</parameter>
<Resourcename="UserTransaction"auth="Container"
type="javax.transaction.UserTransaction"/>
<ResourceParamsname="UserTransaction">
<parameter>
<name>factory</name>
<value>org.objectweb.jotm.UserTransactionFactory</value>
</parameter>
<parameter>
<name>jotm.timeout</name>
<value>60</value>
</parameter>
</ResourceParams>
[/code]
注意上面的数据库连接池的配置,要用JOTM中的XAPool。
基本上,我们就配置好了Tomcat中的JOTM。
2。Hibernate中的事务配置。(我想这步可以省略,但还没测试。请有心人测试一下。)
在hibernate.cfg.xml中
<propertyname="transaction.factory_class"> net.sf.hibernate.transaction.JTATransactionFactory </property> <propertyname="transaction.manager_lookup_class"> net.sf.hibernate.transaction.JOTMTransactionManagerLookup </property> <propertyname="jta.UserTransaction"> java:comp/UserTransaction </property> |
好了,现在可以使用网上最常见的代码:
1javax.transaction.UserTransactiontx= 2newInitialContext().lookup("java:comp/UserTransaction"); 3tx.begin(); 4 5Sessions1=sf.openSession(); 6... 7s1.flush(); 8s1.close(); 9 10... 11 12Sessions2=sf.openSession(); 13... 14s2.flush(); 15s2.close(); 16 17tx.commit(); |