首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有容器管理的事务和工作线程的MDB

具有容器管理的事务和工作线程的MDB
EN

Stack Overflow用户
提问于 2012-11-16 01:05:43
回答 2查看 1.9K关注 0票数 2

我有一个MDB,它使用容器管理的事务(我的容器是IBM Websphere 7)。

如果我的MDB线程启动了一个工作线程,而该线程又开始了一个事务,那么这个新线程是否会与MDB处于同一事务中?

我希望MDB线程提交其事务,并在我的工作线程成功启动后立即确认MQ消息。

代码语言:javascript
复制
    txn = (UserTransaction)ctx.lookup("java:comp/UserTransaction");
    txn.begin();

因此,我需要获取适用于Websphere 7的事务管理器,并在txn.begin()之前调用"suspend()“。预防问题的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-16 03:54:14

将不应与onMessage()方法在同一事务中的代码放入一个单独的方法中,并将该方法的事务属性设置为REQUIRES_NEW。这将在调用该方法时创建一个新事务,此新事务的成功或失败不会影响先前存在的事务。

顺便说一句,您不应该在JavaEE应用程序中进行显式线程管理。

在EJB 3.0规范中:

企业bean不得尝试管理线程。企业bean不得尝试启动、停止、挂起或恢复线程,也不得更改线程的优先级或名称。企业bean不能尝试管理线程组。

您可以考虑使用计时器服务来有效地创建单独的线程,同时将线程管理留给服务器。

票数 2
EN

Stack Overflow用户

发布于 2012-11-16 04:30:58

如果您使用的是EJB3.1,那么可以选择在注释为

代码语言:javascript
复制
@Asynchronous

这将为您提供一个新的事务,该工作将在单独的线程中执行。

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/asyncMethodOfEJB/AsyncMethodEJB.html

阅读有关默认事务模式的更多信息:Default EJB transaction mode for asynchronous methods?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13402585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档