簡體   English   中英

我可以在commit()之后重用UserTransaction實例嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM