有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当两个不同版本位于两个单独的模块中时,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) 个答案

  1. # 1 楼答案

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

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

    关于this page的矩阵没有涵盖10.2,但它说:

    Best Practice that we recommend is, JDBC driver version should always be either same as or higher than the Oracle database version being used in order to leverage the latest capabilities of the JDBC driver.