【发布时间】:2012-06-27 07:47:16
【问题描述】:
我正在构建一个使用 CDI(焊接容器)和 @ConversationScope 作为视图的应用程序。我需要在对话开始时启动 JTA 事务并在最后提交/回滚。所以我编写了这个代码:
@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:33,795 错误 [org.jboss.as.txn] (http--127.0.0.1-8180-1) JBAS010152:应用程序错误:事务在请求中仍处于活动状态,状态为 0
当我提交提交时:
09:23:56,513 错误 [stderr] (http--127.0.0.1-8180-1) java.lang.IllegalStateException: BaseTransaction.commit - ARJUNA016074: 没有事务!
知道这怎么可能吗?我的环境是 JBoss 应用服务器 7.1.1(焊接容器)。 谢谢 琳达
【问题讨论】:
-
看起来您已经有一个活动事务(可能是因为之前的 EJB 调用?)
-
感谢您的回复 - 但是 startConversation() 和 endConversation() 直接作为 JSF 页面中的操作调用......
标签: cdi jboss7.x jboss-weld