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/ 目录中。
   将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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值