代码之家  ›  专栏  ›  技术社区  ›  Mike Baranczak

异步方法的默认EJB事务模式?

  •  31
  • Mike Baranczak  · 技术社区  · 14 年前
    1. @Asynchronous 方法,而我没有指定 @TransactionAttribute ,那么容器究竟如何处理事务边界?显然,它不能使用调用线程的事务,那么它做什么呢?


    编辑:我想我的措辞很糟糕。我已经知道默认模式是'REQUIRED'。因此,假设这些方法总是在事务中调用应该是安全的。但我的问题是,交易的生命周期是什么样子的?容器是否为每个调用创建一个新事务?还是对异步工作线程上的所有调用重用同一事务?如果是后者,那么交易什么时候结束?

    2 回复  |  直到 14 年前
        1
  •  45
  •   David Blevins    14 年前

    与MDB类似,事务由容器在 @Asynchronous , @Schedule @Timeout 方法(和适用的拦截器)实际上是在方法(和拦截器)完成之后调用和提交的。

    通常,事务递归地传播到在所述方法中调用的所有bean和那些bean调用的所有bean。当然,我们欢迎调用的其他bean通过指定其他bean来更改其方法调用的事务语义 @TransactionAttribute 设置(例如 REQUIRES_NEW ,或 NOT_SUPPORTED ).

    @TransactionManagement(BEAN) . 集装箱将 总是 在对Bean管理的事务Bean调用方法之前,挂起正在进行的任何事务。

        2
  •  36
  •   Przemysław Pelczar    12 年前

    来自EJB3.1规范。

    4.5.3交易

    客户端事务上下文不通过异步方法调用传播。从Bean开发人员的角度来看,从来没有事务上下文从客户端传入。例如,这意味着异步方法上所需事务属性的语义与REQUIRES\u NEW完全相同。

    推荐文章