Mik*_*zak 34 java ejb glassfish java-ee ejb-3.1
当我@Asynchronous在EJB中有一个方法,而我没有指定@TransactionAttribute,那么容器究竟是如何处理事务边界的呢?显然,它不能使用调用线程的事务,那么它有什么作用呢?
同样的问题,但关于TimerService触发的方法.
编辑:我想我措辞不好.我已经知道默认模式是'REQUIRED'.因此,假设在事务中始终调用这些方法应该是安全的.但我的问题是,该交易的生命周期是什么样的?容器是否为每个调用创建一个新事务?或者它是否为异步工作线程上的所有调用重用相同的事务?如果是后者,那么交易什么时候关闭?
Dav*_*ins 45
一个MDB交易类似由容器只是你之前开始@Asynchronous,@Schedule或@Timeout方法(适用拦截器)实际上被调用,并承诺方法(和拦截器)完成之后.
按照惯例,事务传播到所述方法中调用的所有bean以及bean以递归方式调用的所有bean.当然,欢迎调用的其他bean通过指定其他@TransactionAttribute设置(例如REQUIRES_NEW,或NOT_SUPPORTED)来更改其方法调用的事务语义.
旁注,事务永远不会传播到bean @TransactionManagement(BEAN).在调用Bean-Managed Transaction bean上的方法之前,容器将始终挂起正在进行的任何事务.
小智 36
来自EJB 3.1规范.
4.5.3交易
客户端事务上下文不会随异步方法调用一起传播.从Bean Developer的角度来看,从来没有从客户端流入事务上下文.这意味着,例如,异步方法上REQUIRED事务属性的语义与REQUIRES_NEW完全相同.