小弟就 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/ 目录中。
将JDBC driver 复制到: $TOMCAT_HOME/common/lib/ 目录中。
将文件:carol.properties 复制到:$TOMCAT_HOME/common/classes/ 目录中。
下面,修改 Tomcat 的 Server.xml 配置文件。
[code]
<Resource name="jdbc/dataSrc" auth="Container" type="javax.sql.DataSource"/>
<parameter>
<name>factory</name>
<value> org.objectweb.jndi.DataSourceFactory</value>
..........
</parameter>
<Resource name="UserTransaction" auth="Container"
type="javax.transaction.UserTransaction"/>
<ResourceParams name="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 中
好了,现在可以使用网上最常见的代码:
写出来,以防止自己以后忘记了。呵呵。
由于我不断尝试,所以,现在写下的是最后的结果,如果有谁知道其中有哪些步骤可以省略,请告诉我。
这次就是使用: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/ 目录中。
将JDBC driver 复制到: $TOMCAT_HOME/common/lib/ 目录中。
将文件:carol.properties 复制到:$TOMCAT_HOME/common/classes/ 目录中。
下面,修改 Tomcat 的 Server.xml 配置文件。
[code]
<Resource name="jdbc/dataSrc" auth="Container" type="javax.sql.DataSource"/>
<parameter>
<name>factory</name>
<value> org.objectweb.jndi.DataSourceFactory</value>
..........
</parameter>
<Resource name="UserTransaction" auth="Container"
type="javax.transaction.UserTransaction"/>
<ResourceParams name="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 中
<property name="transaction.factory_class"> net.sf.hibernate.transaction.JTATransactionFactory </property> <property name="transaction.manager_lookup_class"> net.sf.hibernate.transaction.JOTMTransactionManagerLookup </property> <property name="jta.UserTransaction"> java:comp/UserTransaction </property> |
好了,现在可以使用网上最常见的代码:
1 javax.transaction.UserTransaction tx = 2 new InitialContext().lookup("java:comp/UserTransaction"); 3 tx.begin(); 4 5 Session s1 = sf.openSession(); 6 ... 7 s1.flush(); 8 s1.close(); 9 10 ... 11 12 Session s2 = sf.openSession(); 13 ... 14 s2.flush(); 15 s2.close(); 16 17 tx.commit(); |