if (!remote && e instanceof RemoteException) {
if (e instanceof TransactionRequiredException) {
return new TransactionRequiredLocalException(e.getMessage()).initCause(getCause(e));
}
if (e instanceof TransactionRolledbackException) {
return new TransactionRolledbackLocalException(e.getMessage()).initCause(getCause(e));
}
/**
* If a client attempts to invoke a method on a removed bean's business interface,
* we must throw a javax.ejb.NoSuchEJBException. If the business interface is a
* remote business interface that extends java.rmi.Remote, the
* java.rmi.NoSuchObjectException is thrown to the client instead.
* See EJB 3.0, section 4.4
*/
if (e instanceof NoSuchObjectException) {
if (java.rmi.Remote.class.isAssignableFrom(method.getDeclaringClass())){
return e;
} else {
return new NoSuchEJBException(e.getMessage()).initCause(getCause(e));
}
}
if (e instanceof AccessException) {
return new AccessLocalException(e.getMessage()).initCause(getCause(e));
}
return new EJBException(e.getMessage()).initCause(getCause(e));
}
if (remote && e instanceof EJBAccessException) {
if (e.getCause() instanceof Exception) {
return new AccessException(e.getMessage(), (Exception) e.getCause());
} else {
return new AccessException(e.getMessage());
}
}
if (!remote && e instanceof EJBTransactionRolledbackException) {
return new TransactionRolledbackLocalException(e.getMessage()).initCause(getCause(e));
}
return e;
}