我有一個JDBC驅動器,我曾用JBoss 7很好用,因爲在調試時切換到Tomcat(也是v7)以加快部署,並且注意到相同的JDBC驅動程序不再自動加載。我必須手動註冊它自己,然後工作。這是不是在JBoss中存在的Tomcat中的一個讚美?JBoss v.s. Tomcat JDBC驅動程序註冊差異
我原以爲的JBoss使用Tomcat內部....
P.S:我正在對JRE 1.6使自動登記的一切應該是理所當然的。
我有一個JDBC驅動器,我曾用JBoss 7很好用,因爲在調試時切換到Tomcat(也是v7)以加快部署,並且注意到相同的JDBC驅動程序不再自動加載。我必須手動註冊它自己,然後工作。這是不是在JBoss中存在的Tomcat中的一個讚美?JBoss v.s. Tomcat JDBC驅動程序註冊差異
我原以爲的JBoss使用Tomcat內部....
P.S:我正在對JRE 1.6使自動登記的一切應該是理所當然的。
自動JDBC驅動程序註冊取決於Driver
實現提供的一個靜態初始化塊,它調用DriverManager.registerDriver(...)
;只有在加載Driver
類時才調用該塊。有可能驅動程序實現沒有這樣的靜態初始化程序,或者應用程序服務器沒有加載類(不太可能)。
如果司機聲稱自己是一個JDBC 4.0兼容的驅動程序,考慮向一個錯誤,如果沒有靜態初始化塊,如第9.2節的JDBC 4.0規範明確規定(重點煤礦):
JDBC驅動程序必須實現驅動程序接口,並且 實施必須包含一個靜態初始化程序,將在加載驅動程序時調用 。該初始化程序通過DriverManager註冊一個新的自身實例 ,如代碼示例 9-1所示。
public class AcmeJdbcDriver implements java.sql.Driver {
static {
java.sql.DriverManager.registerDriver(new AcmeJdbcDriver());
}
...
}
實施 java.sql.Driver中的驅動程序代碼示例9-1例靜態初始化
我不認爲你正確讀取我的問題。我知道這一切。我說的驅動器已註冊AUTOMATICALLY在JBoss 7中沒有問題,但在Tomcat 7下使用時需要通過DriverManager.registerDriver()進行手動註冊...我的問題是爲什麼JBoss基於Tomcat的缺點...這不是驅動程序的問題,因爲JBoss可以自動註冊它。 – Ayyoudy
@Ayyoudy,我認爲你沒有正確閱讀我的答案。再次閱讀它。如果需要,請反編譯驅動程序,並瞭解爲什麼註冊過程在Tomcat中而不是在JBoss中失敗。唉,如果你不想發佈驅動程序的詳細信息,我只能提倡這麼多。 –