我有一个 EJB 如下 -
class ActivityProcessor{
     @Resource
     private SessionContext context;
     @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
     public boolean processActivity(Activity activity) throws Exception{
          try{
             //required code for processing activity
          }catch(Exception ex){
            //Exception while processing activity
            handleException(ex,activity); 
            context.setRollbackOnly();
            throw ex;   
          }  
     } 
     @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
     public void handleException(Exception ex, Activity activity)  {
          //Code to save this activity in exception table 
     }
}
我们有一个要求,如果处理失败,我们希望将活动保存在异常数据库表中。但是使用上面的代码,如果processActivity有异常,我会在handleException方法中得到事务超时异常。handleException单独工作正常。
如果这个 EJB 事务的问题,请建议我。
我的理解是,1.将为processActivity创建新事务
- 如果processActivity发生异常,会调用handleException。由于事务属性为REQUIRES_NEW,processActivity的事务会被挂起,handleException会创建新事务 
- 如果handleException成功,handleException的事务将被保存。 
- processActivity 暂停的事务将被恢复,但由于 context.setRollbackOnly,它将被回滚。