在JTA中,交易经理的具体流程是什么?

问题描述 投票:0回答:1

看了很多关于JTA的博客,还是有一些点让我困惑。

比如我发现在 JTA实例

博客提供了一张图片来解释分布式交易中各组件之间的关系。

enter image description here

这张图似乎意味着Java应用程序可以直接访问资源管理器,在这种情况下,资源管理器是JDBC驱动程序。

但在我看来,Java应用程序只能访问事务管理器,所有对DataSource的访问都是由事务管理器控制的。

是不是我的理解有问题?



对于另一个困惑。

既然我们可以这样控制事务。

XADataSource xaDS;
XAConnection xaCon;
XAResource xaRes;
Xid xid;
Connection con;
Statement stmt;
int ret;

xaDS = getDataSource();
xaCon = xaDS.getXAConnection("jdbc_user", "jdbc_password");
xaRes = xaCon.getXAResource();
con = xaCon.getConnection();
stmt = con.createStatement();
xid = new MyXid(100, new byte[]{0x01}, new byte[]{0x02});
try {
    xaRes.start(xid, XAResource.TMNOFLAGS);
    stmt.executeUpdate("insert into test_table values (100)");
    xaRes.end(xid, XAResource.TMSUCCESS);

    ret = xaRes.prepare(xid);
    if (ret == XAResource.XA_OK) {
        xaRes.commit(xid, false);
    }
} catch (XAException e) {
    e.printStackTrace();
} finally {
    stmt.close();
    con.close();
    xaCon.close();
}

事务管理器只是一个方便的方法来做我们可以手动做的事情吗?

java database transactions jta distributed-transactions
1个回答
1
投票

你的例子只有一个资源,只能用JDBC执行,而没有JTA。

JTA是关于分布式事务的

即访问和更新两个或更多网络计算机资源上的数据的事务。

一个好的例子应该至少涉及两个资源。

两个不同的数据库

1个数据库和1个文件系统。

© www.soinside.com 2019 - 2024. All rights reserved.