java中的UserTransaction问题

时间:2010-09-30 14:50:38

标签: java transactions commit rollback

我有一个使用2个数据库(DB2)的现有项目,并且保存在2个数据库中的记录是相关的。因此需要维护事务.Eg每当要添加新事物时,必须完成条目到Database1中的x个表,以及database2中的y个表。 现在在预先存在的代码中(由somone开发)我看到了一些像

这样的东西
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");
    }

所以在代码中遵循以下顺序:

  1. 启动utx
  2. 为db1和db2
  3. 创建一个单独的实体管理器ems
  4. 使用此ems
  5. 在两个表中创建条目
  6. 如果抛出任何异常,则回滚utx
  7. 现在我的问题是

    1. 此代码是否确保在db或两者中都输入了条目?
    2. 任何人都可以解释一下getTransactionU()里面的代码是什么吗?
    3. XYZ定义在哪里?

1 个答案:

答案 0 :(得分:2)

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