我会使用另一种方法。
与其直接从调度的方法中引发异常,不如尝试引入一种间接级别,如下所示:
...@Inject RealWorkHere realImplementation;@Schedule(second = "*/5", minute = "*", hour = "*", persistent = false)public void myTimerMethod(){ try{ realImplementation.myTimerMethodImpl() }catch (Exception x){ // hopefully log it somewhere }}...
RealWorkHere实际实现的bean 在哪里,如:
@Statelesspublic class RealWorkHere{ @TransactionAttribute(REQUIRES_NEW) public void myTimerMethod() throws Exception { }}
它具有以下优点:
- 在容器初始化的事务中不引发异常(从而避免删除)
- 更好地记录异常
- 明确划分“真实”业务交易
- ejb-spec#111:如果在执行计时器回调方法期间引发了应用程序异常,请清除容器的行为
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)