JTA 二(Jotm 与StandardXADataSource )
JTA 二(Jotm 与StandardXADataSource )
独行侠 发表于2年前
JTA 二(Jotm 与StandardXADataSource )
  • 发表于 2年前
  • 阅读 10
  • 收藏 0
  • 点赞 1
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

摘要: JTA 二(Jotm 与StandardXADataSource )

Jotm是一个open source的JTA实现(可以google或者百度其下载连接),下面就用例子来说明其应用,并且在代码中说明一些问题.(后面我都将主要的code写出来,方法名,或者类名之类的,我都省略)


前面提到JTA可以处理的,是符合XA接口的资源,而我们通常的资源不是XA接口的,那么我们可以做的是:

1) 将非XA的资源通过某种方式转为XAResource(这种方式我并不推荐,因为其实质还是非XA的Resource,其并不能从jta中获益),

2) 利用实现方提供的XA实现,常见的商用数据库或者一些open source的database,jms等都有提供xa的实现


jotm提供了一种将非xa的jdbc转为xadatasource的接口,代码如下:


        StandardXADataSource xaDataSource=new StandardXADataSource();            
        xaDataSource.setUser("sa");
        xaDataSource.setPassword("");
        xaDataSource.setDriverName("org.h2.Driver");
        xaDataSource.setUrl("jdbc:h2:~/test");
        XAConnection xaConnection=xaDataSource.getXAConnection();

        XAResource xaResource=xaConnection.getXAResource();

        java.sql.Connection conn=xaConnection.getConnection();

        Statement sta=conn.createStatement();
       sta.executeUpdate("insert into Test(id,name)values(5,'xiaoming')");



之后呢,我们就可以对conn进行数据库的操作了,在上面的代码中,我们只是将一个非XA的数据库连接,封装为了一个XA的Resource以方便后面进行与JTA相关的操作。

怎么样操作呢?我们需要一个JTA的TransactionManager,这个对象是用来对XAResource事务管理的,jotm作为一个JTA的实现,可以在脱离javaee的容器的环境中,来使用JTA。

下面是如何获得TransactionManager(很简单):

Jotm jotm=new Jotm(true,false);//除了将jotm的所依赖包放入classpath之外,记得一定将jotm的一个属性文件 carol.properties也要复制到src下
 TransactionManager transactionManager=jotm.getTransactionManager();

这样子我们就有了进行事务管理的两个重要资源TransactionManager,XAResource


完全的代码如下


public static void main(String[]args)throws Exception{


try{

        StandardXADataSource xaDataSource=new StandardXADataSource();            
        xaDataSource.setUser("sa");
        xaDataSource.setPassword("");
        xaDataSource.setDriverName("org.h2.Driver");
        xaDataSource.setUrl("jdbc:h2:~/test");
        XAConnection xaConnection=xaDataSource.getXAConnection();

        XAResource xaResource=xaConnection.getXAResource();


       Jotm jotm=new Jotm(true,false);
       TransactionManager transactionManager=jotm.getTransactionManager();

        transactionManager.begin();//事务开始
       Transaction transaction=transactionManager.getTransaction();/整个事务的过程,也是一个对象Transaction

        transaction.enlistResource(xaResource);


        java.sql.Connection conn=xaConnection.getConnection();

        Statement sta=conn.createStatement();
       sta.executeUpdate("insert into Test(id,name)values(5,'xiaoming')");

       try{

             transaction.commit();//事务提交

       }catch(Exception e){

             transaction.rollback;//事务提交

      }       
      jotm.stop();//停止jotm

}finally{

     System.exit(0);//退出

}


以上就是整个例子了,网上jotm+spring的例子有很多,可以参考.

说明的是,对于JTA的事务管理,有点类似与jdbc中将Connection AutoCommit设置为false,也就是说,如果不进行最后的commit,那么对于数据所做的更改,是不会反应到数据库的。


共有 人打赏支持
粉丝 1
博文 19
码字总数 9797
×
独行侠
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: