我有一个JDBC驱动器,我以前习惯使用JBoss 7我已经切换到Tomcat(也是v7)以便在调试时更快部署,并注意到相同的JDBC驱动程序不再自动加载。我必须自己手动注册,然后工作。这在Tomcat中是不是在JBoss中不存在?
我原以为JBoss在内部使用了Tomcat ......
P.S:我正在针对JRE 1.6运行所有内容,因此应该自动注册。
答案 0 :(得分:1)
自动JDBC驱动程序注册取决于提供调用Driver
的静态初始化程序块的DriverManager.registerDriver(...)
实现;只有在加载Driver
类时才会调用该块。有可能驱动程序实现没有这样的静态初始化程序,或者应用程序服务器没有加载类(不太可能)。
如果驱动程序声称是JDBC 4.0兼容驱动程序,请考虑在没有静态初始化程序块的情况下提交错误,因为JDBC 4.0规范的第9.2节明确指出(强调我的):
JDBC驱动程序必须实现Driver接口,并且 实现必须包含一个静态初始化程序 加载驱动程序时调用。此初始化程序注册一个新的 使用DriverManager自身的实例,如代码示例所示 9-1。
public class AcmeJdbcDriver implements java.sql.Driver {
static {
java.sql.DriverManager.registerDriver(new AcmeJdbcDriver());
}
...
}
代码示例9-1驱动程序实现的静态初始化程序示例 java.sql.Driver中