我有一个使用2个数据库(DB2)的现有项目,并且保存在2个数据库中的记录是相关的。因此需要维护事务。例如,每当要添加新事物时,都必须对x编号进行输入数据库1中的表的数量和数据库2中的y个表的数量。
现在在预先存在的代码中(由其他人开发),我看到类似

UserTransaction utx = getTranscationU();
//getTranscation() is a user defined method as show   below

public UserTransaction getTransactionU()  {
        InitialContext ic = new InitialContext();
        return (UserTransaction) ic.lookup("java:comp/XYZ");
    }


因此在代码中遵循以下顺序:


启动utx
为db1和db2创建单独的实体管理器ems
使用此em在两个表中创建条目
如果抛出任何异常,则回滚utx


现在我的问题是


此代码是否可以确保在数据库中都输入了条目,还是没有输入?
谁能解释给我getTransactionU()中的代码做什么?
XYZ在哪里定义?

最佳答案

初始化UserTransaction时,如果两个实体管理器都使用链接到事务管理器的数据源,则其所有操作都将包括在事务中。如果您要访问其他数据库,则该事务必须是XATransaction(分布式)。
getTransactionU()方法通过JNDI访问Java EE容器的命名目录,必须在其中配置事务管理器。
这是在服务器上设置的事务管理器的路径。

10-05 22:47