2012-05-20 21 views
7

Ich entwickle eine Anwendung mit Struts, Spring und Hibernate.wo Feder zu behandeln DataAccessException

Meine DAOs verwendet spring jdbc und alle seine Methode löst DataAccessException (das ist unchecked).

Wo sollte ich mit diesen Ausnahmen umgehen? Ich weiß, dass es eine ungeprüfte Ausnahme ist, aber ich denke, ich muss dem Benutzer mitteilen, wenn ein Problem mit der Datenbank oder ihrer Verbindung besteht.

Ich denke, ich sollte die DataAccessException von meiner Service-Klasse Methoden erneut durch Controller abgerufen werden. Ist das eine gute Praxis?

Ich habe mir die Beispiele aus dem Spring-Paket angesehen und keine Exception-Behandlung in der Domäne oder im Servicebereich gefunden. Die DataAccessException scheint nach Verlassen des DAO-Bereichs ignoriert zu werden.

Bitte schlagen Sie ein gutes Design für diese Angelegenheit vor.

+0

mögliche Duplikate von [Kann ich Spring DataAccessException direkt in Service-Schicht verwenden] (http://stackoverflow.com/questions/10672879/cani-i-use-spring-dataaccessexception-directly-in-services-layer) – Raedwald

Antwort

13

Die DataAccessException scheint nach Verlassen des DAO-Bereichs ignoriert zu werden.

Und das ist eine gute Sache! Lass es durch den ganzen Stapel fliegen. Sie haben wahrscheinlich Transaktionen auf der Service-Schicht - die Ausnahme führt dazu, dass die äußerste Transaktion transparent rückgängig gemacht wird. Groß!

Jetzt wird es seinen Weg zum Controller finden. Wenn Sie es im Struts-Controller abfangen, können Sie z. andere Ansicht zurückgeben. Aber höchstwahrscheinlich möchten Sie keine Ausnahme in jeder Struts-Aktion behandeln. Also lass die Ausnahme noch weiter nach unten fliegen. Irgendwann wird Struts diese Ausnahme fangen und versuchen, damit umzugehen. Struts verfügt über ausgefeilte Mechanismen zur Fehlerbehandlung. Sie werden viele Informationen über sie finden. In der Regel wird je nach Ausnahmetyp eine benutzerdefinierte Aktion oder ein Fehlerbildschirm aufgerufen.

Wenn schließlich auch Struts die Ausnahme nicht verarbeiten kann, wird sie erneut in den Container eingetragen, wodurch HTTP 503 mit Ausnahmedetails zurückgegeben wird.

Wie Sie sehen können Sie Ausnahmen auf vielen Ebenen steuern, in der Regel niedriger ist besser.

+0

Dies ist eine ausgezeichnete Antwort. Cudos! – markthegrea