EJB 3.0-Ausnahmenbehandlung

8

Ein Zitat aus der EJB-Spezifikation:

  

Wenn die Bean-Methode auf eine Systemausnahme oder einen Systemfehler stößt, sollte dies der Fall sein   propagieren Sie einfach den Fehler von der Bean-Methode zum Container   (d. h. die Bean-Methode muss die Ausnahme nicht abfangen).

Aber ich verstehe es nicht. Bedeutet es, dass ich nicht alle Arten von Ausnahmen abfangen sollte (d. H. Versuche, Exception class abzufangen) und sie erneut als Ausnahme für meine Anwendung austrage?

Ein Beispiel für mehr Klarheit:

%Vor%

Oder ist das nicht für EJB-Entwickler, sondern nur für EJB-Referenzimplementierungsentwickler (Containerentwickler): Im letzteren Fall darf der Container keine Systemausnahmen an meine Geschäftsmethode weitergeben, und mein catch(Exception e) Block fängt nie irgendeine Systemausnahme?

    
MyTitle 18.01.2013, 22:01
quelle

2 Antworten

10

Es gibt mehr Arten von Ausnahmen:

  • Systemausnahmen (RuntimeExceptions zB NullPointerException)
  • Business-Ausnahmen (eigene Ausnahme, erweitert Ausnahme, aber nicht RuntimeException, z. B. NotEnoughMoneyOnYourAccountException)
  • Fehler (zB OutOfMemoryError)

Normalerweise sollten Sie Business Exceptions abfangen. Aber natürlich können Sie es auf die Client-Seite werfen, wenn Sie damit umgehen wollen. Standardmäßig wird der EJB-Container die Transaktion nicht zurücksetzen, wenn Sie eine BusinessException auslösen. Sie können dieses Verhalten jedoch ändern, indem Sie Ihre Exception wie folgt kommentieren:

%Vor%

Wenn Ihr Programm eine RuntimeException auslöst, wird sie als RemoteException an den Client gesendet, und Ihre Transaktion wird zurückgesetzt. Dies sind weniger Ausnahmen als Geschäftsausnahmen, daher fangen wir sie normalerweise nicht auf der EJB-Seite ab.

Fehler sind die am wenigsten ausgenommenen, sie können sogar die JVM herunterfahren, normalerweise fangen wir sie nicht ein, weil wir sie normalerweise nicht im Programm behandeln können.

    
Donato Szilagyi 18.01.2013, 22:20
quelle
0

Ich weiß nicht, woher du diesen Tip bekommen hast und was der Kontext ist, aber es scheint zu bedeuten, dass die Bean-Methode selbst keine Ausnahmebehandlung durchführen sollte, einfach werfen, was auch immer sie bekommt. Dieses Verhalten wird normalerweise am besten durch Hinzufügen der Exceptions erreicht, die Ihr Methodenhauptteil abhängig von Umgebungsfaktoren / zufälligen Faktoren wie variabler Eingabe in Ihrer throws -Klausel, in der MyApplicationException jetzt ist, auslösen kann.

Ausnahmen, die direkt von Codefehlern in der Methode (nicht in Methodenaufrufen) verursacht werden, müssen normalerweise nicht ordnungsgemäß behandelt werden, da sie durch Testen und Debuggen herausgenommen werden sollten.

    
Mark Tielemans 18.01.2013 22:07
quelle

Tags und Links