Ich habe über EJB Ausnahmebehandlung zu lesen und das ist mein Verständnis so weit:Handhabung EJBException in Client-Code
sei angenommen Bean B (Server) Transaktion Attribut ist erforderlich:
- -System Ausnahmen geben sollte als EJBException an den Aufrufer übergeben.
- Container abfängt EJBException (oder eine andere nicht markiert Ausnahme) wickelt es und wirft es an den Aufrufer
- wenn der Anrufer innerhalb einer Transaktion ausgeführt wird, die Bean-Instanz verworfen wird, und die Transaktion wird zurückgerollt, erhält der Anrufer die EJBException gewickelten innerhalb einer EJBTransactionRolledBackException.
- Wenn der Aufrufer nicht in einer Transaktion ist und die Bean-Instanz verworfen wird, erhält der Aufrufer die EJBException in eine RemoteException eingeschlossen.
Wenn ich es mit Anrufer trans. Attribut, das auf REQUIRED festgelegt wird Ich bekomme die EJBException innerhalb einer EJBTransactionRolledBackException verpackt.
Wenn ich es mit Anrufer trans. Attribut auf NIEDRIG gesetzt, erhalte ich die ursprüngliche EJBException im Aufrufer, nicht in eine RemoteException eingewickelt
Warum bekomme ich die RemoteException im zweiten Fall nicht?
Hier ist eine vereinfachte Ansicht meiner Anrufer und Server Bohnen:
@Stateless
public class BeanA implements BeanAInterface{
@Override
public void callBeanB() {
BeanBInterface beanBInterface;
try{
beanBInterface = (BeanBInterface) new InitialContext().lookup(BeanBInterface.class.getName());
beanBInterface.getResponse();
} catch (Exception e){
log.error("Caught Exception: " + e);
}
}
}
@Stateless
public class BeanB implements BeanBInterface{
@Override
public void getResponse(){
throw EJBException("Catch me.");
}
}
EDIT:
Ich habe gerade gelesen, dass here EJBException an lokale Clients und Remote auf Remote-Clients ausgelöst. Die aufrufende Bean in meinem Beispiel läuft in derselben Serverinstanz wie die Server-Bean, aber sie verbindet sich über die Server-Bean-Remote-Schnittstelle. Ich denke, ich bin nicht klar in der Definition von Remote vs lokalen Client, aber es scheint, dass ich nicht die RemoteException bekomme, weil mein Client nicht remote ist.