Ser*_*ion 2 jboss transactions ejb-3.0
我正在实现一个EJB应用程序.此时我需要一个交易.我需要在行中执行3个方法,如果一个失败,应该回滚所有内容.在这里:http://www.conceptgo.com/gsejb/eb04.html,我找到了一个教程.我的代码:
try {
javax.transaction.UserTransaction ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
ut.begin();
Feeds feed = loadFeed(url);
try{
em.persist(feed);
uf.setFeedId(feed.getFeedId());
uf.setUserId(user_id);
em.persist(uf);
}catch (EntityExistsException e){
ut.rollback();
return false;
}catch (IllegalArgumentException ea){
ut.rollback();
return false;
}
if (feed.getFeedId()!= null && feed!=null) {
ut.commit();
}else{
ut.rollback();
return false;
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,我收到下一条错误消息
Caused by: java.lang.IllegalStateException: BaseTransaction.checkTransactionState
- ARJUNA016051: thread is already associated with a transaction
Run Code Online (Sandbox Code Playgroud)
谁知道原因是什么以及如何解决?
该错误意味着您已经有一个正在进行的事务,很可能是一个容器管理的事务.
你的bean /方法是什么样的?JBoss7中无状态会话bean的默认事务行为是它使用Container托管事务和"Required"事务属性执行.
因此,假设容器管理的事务适合您,则不需要UserTransaction.因此,您可以删除查找和begin/commit/rollback,因为这将为您管理.
如果您确实想自己管理事务,那么将bean标记为使用Bean托管事务,然后您可以开始/提交/回滚UserTransaction.要将bean标记为使用bean管理的事务,您需要将注释@TransactionManagement(TransactionManagementType.BEAN)应用于类或方法.
| 归档时间: |
|
| 查看次数: |
4266 次 |
| 最近记录: |