JBossのExceptionSorterクラスはどのように機能しますか?
-
03-07-2019 - |
質問
JBoss ExceptionSorterクラスがデータベースエラーをチェックする方法を知りたいです。
アプリケーション(EJBまたは永続フレームワーク)はデータベース接続への参照を保持しているため、SQLExceptionsはアプリケーションによってキャッチされます。 JBossはどのように例外の内容を見ることができますか?
JBossは接続をラップしてこれらのメッセージまたはそのようなものをインターセプトしますか?
解決
JBoss内で実行されているコードに対してデバッガーを実行したことがあり、データベース接続が開いている場合、実際の接続は実際のデータベース接続をラップするJBoss固有のクラスであることがわかります。
場合によっては、SQL構文例外など、データベースによって例外がスローされたときに、このラッパーをスタックトレースの行として表示できます。以下の例の最後の行を参照してください。
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)
このラッパーは、あなたが提案した例外検査を提供すると思います。
他のヒント
JBossは、データソース(org.jboss.resource.adapter.jdbc.local.LocalTxDataSource)に接続プールを使用します。 ExceptionSorterはSQLExceptionをパラメーターとして受け取り、特定のエラーにマップされる特定の文字列をチェックします。エラーが物理的な接続の問題を表している場合は、「ソケットエラー」のように見えます。または「パイプ破損」。
この例外ソーターは、接続の状態を表すブール値を接続プールに返し、falseを返した接続を無効にして削除します。
Oracleデータベースの場合:
<property name="exceptionSorterClassName"><value>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</value></property>
これは、Oracleデータベースで機能します。 ExceptionSorter実装のコードは次のとおりです。
http://kickjava.com /src/org/jboss/resource/adapter/jdbc/vendor/OracleExceptionSorter.java.htm
接続プールが接続をチェックする場所または方法の内部プログラミングがどのように知られていないか。 JBossソースコードを確認します。