当2个不同的版本位于2个单独的模块中时,JBoss不会使用来自正确模块的Oracle DataSource驱动程序

问题描述 投票:0回答:1

我正在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驱动程序。

java oracle configuration jboss datasource
1个回答
1
投票

删除ojdbc14.jar。在两个/所有模块中使用ojdbc7.jar

12.1.0.2驱动程序向后兼容10.2.0.3服务器。

this page上的矩阵不包括10.2,但是它说:

我们建议的最佳实践是,JDBC驱动程序版本应始终与正在使用的Oracle数据库版本相同(或更高)>,以便利用JDBC驱动程序的最新功能。

© www.soinside.com 2019 - 2024. All rights reserved.