【问题标题】:EJB 3, Transaction flow in same beanEJB 3,同一个 bean 中的事务流
【发布时间】:2013-11-18 02:46:24
【问题描述】:

如果我在 EJB bean 中有两个方法,一个具有 NOT_SUPPORTED 的 Transaction 属性,需要使用 REQUIRED 调用另一个,如果我通过注入的 bean 进行调用,我是否可以期望事务启动:

@Stateless
@LocalBean
public class LeBean {

    @EJB LeBean bean;

    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public void someMethod(){
        ...
        bean.otherMethod();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void otherMethd(){
        ...
    }
}

或者我可以像这样在本地拨打电话吗:

@Stateless
@LocalBean
public class LeBean {

    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public void someMethod(){
        ...
        otherMethod();
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void otherMethd(){
        ...
    }
}

现在someMethod() 在到达otherMethod() 之前需要很长时间来处理信息,因此事务超时,即使我已将 NOT_SUPPORTED 声明为第一种方法的事务属性。

【问题讨论】:

    标签: java ejb-3.1


    【解决方案1】:

    如果我通过 注入bean:

    如果你想要一个事务,你必须通过注入的 bean 进行调用。必须通过业务接口进行调用,否则您的事务属性将被忽略。在您的情况下,如果您从没有事务或暂停事务(即 - NOT_SUPPORTED)的方法调用 otherMethod(),那么它只是一个 POJO 调用。

    从技术上讲, otherMethod() 将“骑在” someMethod() 的事务之上,如果确实存在的话。例如,您对 someMethod() 有 NOT_SUPPORTED,但如果它是 REQUIRED 或 REQUIRES_NEW,则 otherMethod() 将共享该事务。 someMethod() 的回滚也会从 otherMethod() 回滚操作。

    现在 someMethod() 需要很长时间来处理信息 到达 otherMethod() 所以事务超时

    这完全是一个不同的问题。您可能希望增加事务超时,并考虑将其作为单独的异步进程运行。

    【讨论】:

    • 谢谢!现在更有意义了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    相关资源
    最近更新 更多