问题描述:
JBoss使用JDBC驱动时,第一次建立如果库连接会抛出类似于下面的异常
21:21:36,666 WARN [JBossManagedConnectionPool] Throwable while attempting to get a new connection: null
org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver class specified for URL: class: oracle.jdbc.driver.OracleDriver, url: jdbc:oracle:thin:@ 10.0.32 .25:1521:sid)
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:179)
at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:565)
但在第二次取得数据库连接时却是正常的。
解决方法一:
将JDBC驱动拷贝到jboss_server_home/lib目录下。这个方法对于每一个jboss环境都需要进行这样的拷贝,比较麻烦。
解决方法二:
将webapp打包到一个ear包里,在ear包的META-INF/application.xml文件里添加类似下面的内容:
<module>
<java>oracle_jdbc_path/ojdbc14.jar</java>
</module>
其中的oracle_jdbc_path是相对于ear包的一个路径,以指示驱动程序的位置,通常可以设置成ear中包含的war包的lib目录。这种方法使部署和jboss的环境无关。
对于第二次方法也可以将*-ds.xml文件一起打包到ear里,只要在ear包的META-INF/application.xml添加类似下面的内容就可以了:
<module>
<java>oracle-ds.xml</java>
</module>
这样使用数据库连接池的配置也随ear一起发布。
问题分析:
出现这个问题的JBoss服务器配置文件jboss_server_home/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml里的UseJBossWebLoader