Hibernate的JTA事务应用有什么?

Hibernate的JTA事务应用有什么?

小弟就Hibernate的JTA事务应用花了三天的时间才算搞好,真是有点汗颜。在网上搜出来的例子,都不能用,可能小弟的Java基础太弱了。不知道大家是不是都是用JTA的事务。网上的例子可都是用Session的事务。

写出来,以防止自己以后忘记了。呵呵。

由于我不断尝试,所以,现在写下的是最后的结果,如果有谁知道其中有哪些步骤可以省略,请告诉我。

这次就是使用:Tomcat+Hibernate+JOTM

1.在Tomcat中配置JOTM(Hibernate的JTA事务应用有什么?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();