【发布时间】: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