【问题标题】:What is exactly the process of transaction manager in JTAJTA中事务管理器的具体流程是什么
【发布时间】:2020-09-20 14:19:13
【问题描述】:

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

例如我在JTA Example找到的

该博客提供了一张图片来解释分布式事务的组件之间的关系

这张图片似乎暗示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】:

    您的示例只有一个资源,只能使用没有 JTA 的 JDBC 执行。

    JTA 是关于分布式事务的

    也就是说,交易 访问和更新两个或多个联网计算机资源上的数据。

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

    2 个不同的数据库

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

    【讨论】:

    • 如果我使用 JTA,Java 应用程序是否可以访问 DataSource?还是Java Application只需要访问事务管理器,让事务管理器来控制DataSource?
    • 我认为应用程序应该访问事务管理器 (TM),因为它是 TM 角色来协调具有不同资源的不同事务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2011-12-10
    • 2016-10-30
    • 2015-01-18
    相关资源
    最近更新 更多