Java 提交()后是否可以重用UserTransaction实例?

Java 提交()后是否可以重用UserTransaction实例?,java,transactions,jta,atomikos,Java,Transactions,Jta,Atomikos,以下代码中ut实例的重用是否正确 UserTransaction ut = (UserTransaction)ctx.lookup("java:comp/UserTransaction"); ut.begin(); doSomeWork(); ut.commit();//Or rollback (I think it doesn't matter) ut.begin(); //Or rollback (I think it doesn't matter) doOtherW


以下代码中ut实例的重用是否正确

UserTransaction ut = (UserTransaction)ctx.lookup("java:comp/UserTransaction");  
ut.begin();  
doSomeWork();  
ut.commit();//Or rollback (I think it doesn't matter)  
ut.begin();   //Or rollback (I think it doesn't matter)  
doOtherWork();  
ut.commit();  
当JNDI资源定义为:

Reference atomikosUserTransactionFactoryDS = new Reference("com.atomikos.icatch.jta.UserTransactionImp", 
                "com.atomikos.icatch.jta.UserTransactionFactory", null);
atomikosUserTransactionFactoryDS.add(new RefAddr("name") {  
public Object getContent() {  
        return "UserTransaction";  
}});  
atomikosUserTransactionFactoryDS.add(new RefAddr("type") {  
    public Object getContent() {  
    return "com.atomikos.icatch.jta.UserTransactionImp";  
}});  
initContext.rebind("java:comp/UserTransaction", atomikosUserTransactionFactoryDS);
我不确定的是,在开始新的UserTransaction之前,是否需要添加另一个查找,以便从工厂检索新的UserTransaction

我不认为这有什么关系,但正如资源定义所述,我使用Atomikos作为我的事务管理器(因此,工厂就是工厂)

谢谢,
它可以重复使用

UserTransaction并不表示特定的事务实例,而是提供了一种管理当前线程的事务上下文的方法。如果你愿意,可以把它想象成单身汉。UserTransaction通常是无状态的

事务的单个实例是一个独特的实体,用户代码通常不直接需要它。为每个发送创建一个,不能重复使用


如果你是一个冬眠的人,那么从会话工厂和会话的角度考虑。

一个动作应该做一件事,而且只能做一件事。为什么要在一次调用中调用多个事务?实际情况有点不同:它更像是一个while(true)循环,线程内部等待一个文件,当找到一个文件时,它使用ut.begin、ut.commit。在每次这样的迭代结束时,线程休眠,因此我在休眠之前提交事务,当它醒来时,如果有文件,则有一个新的逻辑事务。当然,一旦找到一个文件,您可以将代码重构到另一个方法,该方法获取ut并执行逻辑和提交,但当前的设计不是我的,我只是想验证这是否正确。谢谢你的评论。