java - JBoss 对比Tomcat JDBC 驱动程序注册差异

标签 java tomcat jdbc jboss registration

我有一个 JDBC 驱动器,我以前在 JBoss 7 上使用得很好我已经切换到 Tomcat(也是 v7)以便在调试时更快地部署并注意到不再自动加载相同的 JDBC 驱动程序。我必须自己手动注册,然后才起作用。这是 Tomcat 中 JBoss 中不存在的限制吗?

我还以为JBoss内部用的是Tomcat....

P.S:我正在针对 JRE 1.6 运行所有内容,因此应该提供自动注册。

最佳答案

自动 JDBC 驱动程序注册取决于 Driver 实现,它提供一个调用 DriverManager.registerDriver(...) 的静态初始化程序 block ;只有在加载 Driver 类时才会调用该 block 。可能是驱动程序实现没有这样的静态初始化器,或者应用程序服务器没有加载类(不太可能)。

如果驱动程序声称是 JDBC 4.0 兼容驱动程序,如果没有静态初始化程序 block ,请考虑提交错误,因为 JDBC 4.0 规范的第 9.2 节特别指出(强调我的):

JDBC drivers must implement the Driver interface, and the implementation must contain a static initializer that will be called when the driver is loaded. This initializer registers a new instance of itself with the DriverManager, as shown in CODE EXAMPLE 9-1.

public class AcmeJdbcDriver implements java.sql.Driver {
  static {
    java.sql.DriverManager.registerDriver(new AcmeJdbcDriver());
  }
  ...
}

CODE EXAMPLE 9-1 Example static initializer for a driver implementing java.sql.Driver

关于java - JBoss 对比Tomcat JDBC 驱动程序注册差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7405679/

相关文章:

java - 如何更改wsse :KeyIdentifier to wsse:Reference with CXF

java - HashMap 为未找到的键返回默认值?

java - 如何回滚android studio中的更改?

java - 如何设置 Eclipse 以开始使用 Axis2 编写 Web 服务

java - 修改Spring boot Embedded Tomcat解压路径

java - ReadyStatement 更新显示错误 ORA-00927 缺少等号

java - JDBC MySql连接池实践避免连接池耗尽

java - RMI 的动态代理 stub 实现

java - Azure 上的自定义 Tomcat 配置(平台即服务)

java - 使用 executeUpdate 的 SELECT 查询行为