JTA的事务管理机制学习_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2818 | 回复: 0   主题: JTA的事务管理机制学习        下一篇 
zhongwei.wang
注册用户
等级:中校
经验:1859
发帖:60
精华:1
注册:2013-12-23
状态:离线
发送短消息息给zhongwei.wang 加好友    发送短消息息给zhongwei.wang 发消息
发表于: IP:您无权察看 2014-6-4 16:20:13 | [全部帖] [楼主帖] 楼主

JTA提供的是分布式的事务管理,其事务管理由JTA容器实现,JTA容器对当前加入事务的众多Connection进行调度,满足其事务性要求。
JTA的事务周期可以横跨多个JDBCConnection生命周期。因此,JTA提供了跨越Session的事务管理能力,即可以实现同一事务对应不同的数据库管理。
在JTA中定义了一组Java接口,用于描述JavaEE框架中事务管理器与应用程序、资源管理器以及应用服务器之间的事务通信。它主要包括高层接口,
即面向应用程序的接口;XAResource接口,即面向资源的接口;以及事务管理器的接口。值得注意的是,JTA只提供了接口,而没有具体的实现。
JTS(Java Transaction Service)是服务OTS的JTA的实现,即JTS实现了JTA接口。
要使用JTA事务,必须使用XADataSource来产生数据库连接,产生的连接为一个XA连接。XA连接 (javax.sql.XAConnection)和非XA连接(java.sql.Connection)的区别在于:
XA可以参与JTA的事务,且不支持自动提交。要用JTA进行事务界定,则应用程序需要调用javax.transaction.UserTransaction,
它使用 begin()、commit()和rollback()方法来完成事务范围的界定及事务的提交和回滚。

下面是一个使用JBoss容器对提供的JTA事务进行控制的实例:

javax.transaction.UserTransaction tx = null;
java.sql.Connection conn1 = null;
java.sql.Connection conn2 = null;
try{
      //取得JTA事务,在本例中由JBoss容器来管理
      tx = (javax.transaction.UserTransaction)context.lookup("java:comp/UserTransaction");
      //取得数据库连接池,必须有XA的数据库、驱动程序
      DataSource ds1 = (javax.sql.DataSource) context.lookup("java:/XAOracleDS");
      DataSource ds2 = (javax.sql.DataSource) context.lookup("java:/XASQLServerDS");
      //开始事务
      tx.begin();
      //取得数据库连接
      conn1 = ds1.getConnection();
      conn2 = ds2.getConnection();
      Statement stm1 = conn1.createStatement();
      Statement stm2 = conn2.createStatement();
      //数据库插入操作
      stm1.executeUpdate("insert into(username,password,email) user values(1,'admin','admin','xtlog@163.com')");
      stm1.close();
      //数据库更新操作
      stm2.executeUpdate("update user set email='xiugai@123.com' where id=1" );
      stm2.close();
      //提交事务
      tx.commit();
}catch(Exception e){
try{
tx.rollback();
}catch(Exception e){
      e.printStackTrace();
}
}finally{
//关闭连接
}


以上的事务处理对象tx是从JBoss容器中取得的。数据库连接操作是在事务开始之后进行,这样就实现了多数据库的事务管理。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论