首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >本地方法调用中的EJB事务

本地方法调用中的EJB事务
EN

Stack Overflow用户
提问于 2009-01-09 09:02:25
回答 3查看 25.3K关注 0票数 22

在下面的设置中,方法B是否在(新的)事务中运行?

一个EJB,有两个方法,方法A和方法B

代码语言:javascript
运行
复制
public class MyEJB implements SessionBean
    public void methodA() {
       doImportantStuff();
       methodB();
       doMoreImportantStuff();
    }

    public void methodB() {
       doDatabaseThing();
    }
}

EJB是容器托管的,在requires_new事务中使用methodB,而在required事务中使用方法A。因此:

代码语言:javascript
运行
复制
<container-transaction id="MethodTransaction_1178709616940">
  <method id="MethodElement_1178709616955">
    <ejb-name>MyName</ejb-name>
    <method-name>*</method-name>
  <trans-attribute>Required</trans-attribute>
  </method>
  <method id="MethodElement_1178709616971">
    <ejb-name>MyName</ejb-name>
    <method-name>methodB</method-name>
  </method>
  <trans-attribute>RequiresNew</trans-attribute>
</container-transaction>

现在让另一个EJB通过EJB方法调用来调用methodA。methodA现在在事务中运行。从methodA对methodB的后续调用是在同一事务中运行,还是在新事务中运行?(注意,这里是实际的代码。没有对方法B的显式ejb调用)

EN

Stack Overflow用户

发布于 2012-09-08 20:11:39

注入SessionContext,并向它请求您的代理实例:

代码语言:javascript
运行
复制
@Stateless
public class UserFacade implements UserFacadeLocal {
    @Resource
    private SessionContext context;

    @Override
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    private void create(User user) {
        System.out.println("Users Count: "+count()); //invocation#1
        System.out.println("Users Count Through Context: "+context.getBusinessObject(UserFacadeLocal.class).count()); //invocation#2
    }

    @Override
    @TransactionAttribute(TransactionAttributeType.NEVER)
    public int count() {
        return ((Long) q.getSingleResult()).intValue();
    }
}

在“invocation#1”中,这是一个本地调用,不通过proxy传递,它将返回计数

在'invocation#2‘中,这是一个通过代理的调用,因此您将其注释为不支持transaction -which现在由create(user)方法打开-,此调用将抛出事务异常:

javax.ejb.EJBException:无法在全局事务中调用EJB

票数 23
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/427452

复制
相关文章

相似问题

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