Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTA中事务管理器的具体流程是什么_Java_Database_Transactions_Jta_Distributed Transactions - Fatal编程技术网

Java JTA中事务管理器的具体流程是什么

Java JTA中事务管理器的具体流程是什么,java,database,transactions,jta,distributed-transactions,Java,Database,Transactions,Jta,Distributed Transactions,在阅读了很多关于JTA的博客之后,仍然有一些观点让我感到困惑 例如,我发现 博客提供了一幅图片来解释分布式事务组件之间的关系 这幅图似乎暗示Java应用程序可以直接访问资源管理器,在本例中,资源管理器就是JDBC驱动程序 但在我看来,Java应用程序只能访问事务管理器,对数据源的所有访问都由事务管理器控制 我的理解有问题吗 另一个困惑 因为我们可以像这样控制交易: xadatasourcexads; xaCon; xaRes资源; Xid-Xid; 连接con; 报表stmt; int r

在阅读了很多关于JTA的博客之后,仍然有一些观点让我感到困惑

例如,我发现

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

这幅图似乎暗示Java应用程序可以直接访问资源管理器,在本例中,资源管理器就是JDBC驱动程序

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

我的理解有问题吗



另一个困惑

因为我们可以像这样控制交易:

xadatasourcexads;
xaCon;
xaRes资源;
Xid-Xid;
连接con;
报表stmt;
int ret;
xaDS=getDataSource();
xaCon=xaDS.getXAConnection(“jdbc_用户”、“jdbc_密码”);
xaRes=xaCon.getXAResource();
con=xaCon.getConnection();
stmt=con.createStatement();
xid=新的MyXid(100,新字节[]{0x01},新字节[]{0x02});
试一试{
开始(xid,XAResource.TMNOFLAGS);
stmt.executeUpdate(“插入测试表值(100)”;
end(xid,XAResource.TMSUCCESS);
ret=x制备(xid);
if(ret==XAResource.XA_OK){
提交(xid,false);
}
}捕获(XAE异常){
e、 printStackTrace();
}最后{
stmt.close();
con.close();
xaCon.close();
}

事务管理器只是一种方便的方式来完成上面我们可以手动完成的事情吗?

您的示例只有一个资源,并且只能使用JDBC而不使用JTA执行

JTA是关于分布式事务的

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

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

2个不同的数据库


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

如果我使用JTA,Java应用程序是否有权访问数据源?或者Java应用程序只需要访问事务管理器并让事务管理器控制数据源?我认为应用程序应该访问事务管理器(TM),因为TM的角色是协调不同的事务和不同的资源。