private AppExceptionItem createApplicationException(Class<?> exn,
boolean isSystem)
{
if (exn == Error.class || exn == RuntimeException.class)
return new AppExceptionItem(false, true, true);
else if (exn == Exception.class)
return new AppExceptionItem(true, false, true);
ApplicationExceptionConfig cfg = _appExceptionConfig.get(exn);
if (cfg != null) {
return new AppExceptionItem(true, cfg.isRollback(), cfg.isInherited());
}
ApplicationException appExn = exn.getAnnotation(ApplicationException.class);
if (appExn != null) {
// ejb/1276
return new AppExceptionItem(true, appExn.rollback(), appExn.inherited());
}
AppExceptionItem parentItem = getApplicationException(exn.getSuperclass(),
isSystem);
if (parentItem.isInherited())
return parentItem;
else if (isSystem)
return new AppExceptionItem(false, true, true);
else
return new AppExceptionItem(true, false, true);
}