我正在JBoss 7(Java 1.7)下运行一个应用程序,该应用程序使用ojdbc14.jar
连接到Oracle 10.2.0.3数据库。
同一应用程序还必须连接到另一个Oracle数据库,我拥有ojdbc7.jar
的12.1.0.2。
每个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
中使用它的数据源时,Oracle 12数据源将按预期运行。
我假设这是某种类加载器问题,但是模块不应该解决这个问题吗?我该怎么做才能使两者都没有问题地连接?
我尚未尝试使Oracle 10数据源依赖于Oracle 12驱动程序。
删除ojdbc14.jar
。在两个/所有模块中使用ojdbc7.jar
。
12.1.0.2驱动程序向后兼容10.2.0.3服务器。
this page上的矩阵不包括10.2,但是它说:
我们建议的最佳实践是,JDBC驱动程序版本应始终与正在使用的Oracle数据库版本相同(或更高)>,以便利用JDBC驱动程序的最新功能。