Frage

Ich frage mich, wie die JBoss ExceptionSorter Klassen der Lage sind, für Datenbankfehler zu überprüfen.

Die Anwendung (der EJB oder Persistenz-Framework) ist der Verweis auf die Datenbankverbindung zu halten, so SQLExceptions durch die Anwendung gefangen werden. Wie ist JBoss der Lage, den Inhalt der Ausnahme zu sehen?

Hat JBoss die Verbindung wickeln und diese Nachrichten oder so etwas abfangen?

War es hilfreich?

Lösung

Wenn Sie jemals einen Debugger gegen Code ausgeführt haben innerhalb von JBoss ausgeführt wird, während die, die eine offene Datenbankverbindung hat, werden Sie feststellen, dass die Verbindung tatsächlich eine JBoss-spezifische Klasse, die die reale Datenbankverbindung wickelt.

In einigen Fällen können Sie diese Wrapper als eine Linie in der Stack-Trace sehen, wenn eine Ausnahme von der Datenbank, wie eine SQL-Syntax Ausnahme ausgelöst. Siehe letzte Zeile in Beispiel unten:

java.sql.SQLException: ORA-00942: table or view does not exist
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:810)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
    at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:850)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1134)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3384)
    at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:342)

Ich stelle mir diese Wrapper die Ausnahme-Inspektion zur Verfügung stellen können Sie vorgeschlagen.

Andere Tipps

JBoss verwendet einen Verbindungspool für seine Datenquellen (org.jboss.resource.adapter.jdbc.local.LocalTxDataSource). Die ExceptionSorter nimmt eine SQLException als Parameter, die es überprüft dann nur für bestimmte Zeichenfolgen, die auf bestimmte Fehler zuordnen. Wenn die Fehler eine physikalische Verbindung Problem haben, dann werden sie sehen ein wenig wie „Socketfehler“ oder „Rohrbruch“.

Diese Ausnahme Sorter wird dann wieder einen Booleschen Wert, der den Status der Verbindung zurück an den Verbindungspool darstellt, die dann ungültig wird und alle Verbindungen entfernen, die falsch zurückgegeben.

Für eine Oracle-Datenbank:

<property name="exceptionSorterClassName"><value>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</value></property>

Dies wird für eine Oracle-Datenbank arbeiten. Hier ist der Code für die Implementierung ExceptionSorter:

http://kickjava.com /src/org/jboss/resource/adapter/jdbc/vendor/OracleExceptionSorter.java.htm

Wie die interne Programmierung von wo oder wie der Verbindungspool prüft die Verbindung zu mir unbekannt ist. Überprüfen Sie die JBoss-Quellcode.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top