为啥 JDBC 驱动程序调用在 Tomcat 中有效,但在 JBOSS 中无效
Posted
技术标签:
【中文标题】为啥 JDBC 驱动程序调用在 Tomcat 中有效,但在 JBOSS 中无效【英文标题】:Why JDBC driver call works in Tomcat but not in JBOSS为什么 JDBC 驱动程序调用在 Tomcat 中有效,但在 JBOSS 中无效 【发布时间】:2012-09-05 23:03:37 【问题描述】:我有一个应用程序通过 Tomcat 使用DriverManager
中的以下方法连接到数据库
DriverManager.getConnection(url, user,password);
在 Tomcat 中可以正常工作,完全没有问题。
但是当我将同一个应用程序移植到 JBOSS 时,连接总是返回 NULL
。
我有一些要求会阻止我通过使用DriverManager.getConnection(url)
访问JNDI 资源来建立JDBC 连接;
有谁知道为什么会发生这种情况以及我该如何解决?
这是我收到的堆栈跟踪.....
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:419)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at TestSterlingConnection.getStrelingDBDetails(TestSterlingConnection.java:48)
at TestSterlingConnection.makeCall(TestSterlingConnection.java:95)
at TestSterlingConnection.doGet(TestSterlingConnection.java:77)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
【问题讨论】:
【参考方案1】:可能是因为您的类路径中没有合适的 JDBC 驱动程序。驱动程序现在使用ServiceLoader
(META-INF/services) 机制自动注册自己。所以它只需要在类路径上。 DriverManager.getConnection
扫描已注册的驱动程序以找到与 url 模式匹配的驱动程序(即 oracle、postgres 等)。您的 Tomcat 实例可能在 lib 目录之一中有一个 jdbc jar 文件。
【讨论】:
我相信你是正确的,因为 jdbc jar 文件位于我正在部署的 war 文件中的 lib 目录中。你知道我应该把jar文件放在哪里吗?我了解不应修改 JBOSSPATH/lib。 不熟悉 JBOSS,但是搜索“在 JBOSS 上安装 jdbc 驱动程序”会发现类似 this 的链接,建议将驱动程序放在这里:jboss-as/server/我通过在容器外的这个盒子上执行相同的调用来消除 JBOSS。当我这样做时,我会收到相同的错误消息,这使我相信此问题是由某些网络配置引起的。我现在正在上报负责维护此服务器的管理员。
非常感谢!!非常感谢您的帮助 glen。
【讨论】:
以上是关于为啥 JDBC 驱动程序调用在 Tomcat 中有效,但在 JBOSS 中无效的主要内容,如果未能解决你的问题,请参考以下文章