【发布时间】:2016-07-07 16:40:11
【问题描述】:
我在 EJB 3.0 中创建了一个计时器,
weblogic 10.3,
而当 timeout 方法中发生异常时,该方法会再次执行多次,异常一直在发生。如何禁用此功能?
【问题讨论】:
-
@AlexanderPetrov 这不是同一个问题,那个问题中的一个是由于持久性,我有一个是因为异常后重试。
标签: java jakarta-ee weblogic-10.x
我在 EJB 3.0 中创建了一个计时器,
weblogic 10.3,
而当 timeout 方法中发生异常时,该方法会再次执行多次,异常一直在发生。如何禁用此功能?
【问题讨论】:
标签: java jakarta-ee weblogic-10.x
只要通过 EJB 调用传回 RuntimeException,当前事务就会被标记为回滚。
EJB 计时器是事务性的,因此从计时器方法的 EJB 调用或计时器方法本身引发的任何 RuntimeException 都会导致回滚。
因此,为了防止计时器机制重试计时器,您必须通过在任何 EJB 调用或计时器方法本身抛出上述 RuntimeExceptions 之前捕获它们来防止计时器方法调用链中的任何回滚。
消息驱动的 bean FWIW 中也存在同样的问题。
【讨论】:
@RequiresNew),或者仅从 Timer 调用的 EJB 方法中抛出检查异常。由定时器调用的 EJB 抛出的已检查异常被容器忽略。