看了很多关于JTA的博客,还是有一些点让我困惑。
比如我发现在 JTA实例
博客提供了一张图片来解释分布式交易中各组件之间的关系。
这张图似乎意味着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();
}
事务管理器只是一个方便的方法来做我们可以手动做的事情吗?
你的例子只有一个资源,只能用JDBC执行,而没有JTA。
JTA是关于分布式事务的
即访问和更新两个或更多网络计算机资源上的数据的事务。
一个好的例子应该至少涉及两个资源。
两个不同的数据库
或
1个数据库和1个文件系统。