Itt*_*tai 5 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)
doOtherWork();
ut.commit();
Run Code Online (Sandbox Code Playgroud)
当定义 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);
Run Code Online (Sandbox Code Playgroud)
我不确定的是我是否需要添加另一个查找,以便在开始新的 UserTransaction 之前从工厂检索新的 UserTransaction?
我认为这无关紧要,但正如资源定义所述,我使用 Atomikos 作为我的事务管理器(因此它是工厂作为工厂)。
谢谢,一
泰
小智 4
重复使用就可以了。
UserTransaction并不代表具体的事务实例,而是提供了一种管理当前Thread的事务上下文的方法。如果您愿意,可以将其视为单例。UserTransaction 通常是无状态的。
事务的单个实例是一个独特的实体,通常用户代码不需要直接需要。为每个交易创建一个并且不能重复使用。
如果您是一个休眠用户,那么请考虑 SessionFactory 和 Session。