我想知道JBoss ExceptionSorter類是如何檢查數據庫錯誤的。JBoss中的ExceptionSorter類如何工作?
的應用程序(EJB或持久性框架)握持參照數據庫連接,所以SQLExceptions的由應用程序捕獲。 JBoss如何能夠看到異常的內容?
是否JBoss的包裹連接和攔截這些消息或類似的東西?
我想知道JBoss ExceptionSorter類是如何檢查數據庫錯誤的。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源代碼。
哇,我什至不記得問這個問題! – 2012-11-28 00:36:32