[英]Can I reuse a UserTransaction instance after commit()?
以下代碼中的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不代表特定的事務實例,而是提供管理當前Thread的事務上下文的方法。 如果你願意,可以把它想象成一個單身人士。 UserTransaction通常是無狀態的。
Transaction的單個實例是一個獨特的實體,通常不需要用戶代碼直接使用。 一個是為每個tx創建的,不能重復使用。
如果你是一個休眠的人,那么請考慮SessionFactory和Session。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.