我正在構建一個使用CDI(Weld Container)和@ConversationScope作爲視圖的應用程序。我需要在對話開始時啓動一個JTA事務,並在最後提交/回滾。所以,我有編碼的:使用交易與CDI對話
@Named
@ConversationScoped
public class ConversationBean implements Serializable {
private @Inject UserTransaction utx;
private @Inject Conversation conversation;
public void startConversation(){
conversation.begin();
try {
utx.begin();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void stopConversation(){
conversation.end();
try {
utx.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
然而結果是,當我開始談話/交易
09:23:33795 ERROR [org.jboss.as.txn](HTTP - 127.0 .0.1-8180-1)JBAS010152:應用程序錯誤:交易與狀態0
請求仍然有效,而當我發出提交:
09:23:56513 ERROR [stderr的](http-- 127.0.0.1-8180-1)java.lang .IllegalStateException:BaseTransaction.commit - ARJUNA016074:無事務!
任何想法如何工作?我的環境是JBoss應用服務器7.1.1(焊接容器)。 謝謝 琳達
看起來您已經擁有一個活動的事務(可能是因爲之前的EJB調用?) –
感謝您的答覆 - 但是,直接調用startConversation()和endConversation()作爲來自JSF頁面的操作...... –