当两个不同版本位于两个单独的模块中时,java JBoss不会使用正确模块中的Oracle数据源驱动程序
我正在JBoss 7(Java 1.7)下运行一个应用程序,它使用ojdbc14.jar
连接到Oracle 10.2.0.3数据库
同一个应用程序还必须连接到另一个Oracle数据库12.1.0.2,我有一个ojdbc7.jar
每个Oracle驱动程序jar都放在自己的JBoss模块中:
D:\Jboss\jboss-7.2.0.Final\modules\com\Oracle\ojdbc7\main\ojdbc7.jar
D:\Jboss\jboss-7.2.0.Final\modules\com\Oracle\ojdbc14\main\ojdbc14.jar
假设module.xml
文件是正确的(它们是正确的;创建ojdbc#.jar.index
文件)
在standalone.xml
中,我在<drivers>
下声明如下:
<driver name="oracle14" module="com.oracle.ojdbc14">
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>
<driver name="oracle7" module="com.oracle.ojdbc7">
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>
对于我的数据源,我做了以下工作:
<datasource jndi-name="java:jboss/datasources/OracleTen" pool-name="OracleTen-DEV" enabled="true" use-java-context="true">
<connection-url>jdbc:oracle:thin:@ORACLE10DEV:49125:databasename</connection-url>
<driver>oracle14</driver>
...
</datasource>
<datasource jndi-name="java:jboss/datasources/OracleTwelve" pool-name="OracleTwelve-DEV" enabled="true" use-java-context="true">
<connection-url>jdbc:oracle:thin:@ORACLE12DEV:1521:databasename</connection-url>
<driver>oracle7</driver>
...
</datasource>
在尝试运行Oracle 12数据源时,它使用Oracle 10驱动程序,代码抛出证明了这一点:
Caused by: java.sql.SQLException: ORA-28040: No matching authentication protocol
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOsesskey(T4CTTIoauthenticate.java:294)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:357)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:439)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:254)
... 18 more
当我注释掉oracle14
驱动程序和在standalone.xml
中使用它的数据源时,Oracle12数据源按预期运行
我想这是类加载器的问题,但是模块不是应该解决这个问题吗?我应该怎么做才能让两者都能顺利连接
我还没有尝试让Oracle 10数据源依赖于Oracle 12驱动程序
# 1 楼答案
删除
ojdbc14.jar
。在两个/所有模块中使用ojdbc7.jar
12.1.0.2驱动程序向后兼容10.2.0.3服务器
关于this page的矩阵没有涵盖10.2,但它说: