我有一个EJB作为如下─在交易另一EJB方法处理异常属性REQUIRES_NEW
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将called.As事务属性是REQUIRES_NEW,processActivity的交易将被暂停&将为handle创建新的事务
如果handleException成功,handleException的事务将被保存。
processActivity的挂起事务将被恢复,但由于 context.setRollbackOnly,它将被回滚。