2017-07-14 1 views
0

J'utilise une application sous JBoss 7 (Java 1.7) qui se connecte à une base de données Oracle 10.2.0.3 en utilisant ojdbc14.jar.JBoss n'utilisera pas le pilote Oracle DataSource du module correct où 2 versions sont dans 2 modules

La même application doit également se connecter à une base de données Oracle différente, 12.1.0.2 pour laquelle j'ai un ojdbc7.jar.

Chaque pot de pilote Oracle a été placé dans son propre module 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 

On suppose les fichiers module.xml sont corrects (ils sont, le fichier ojdbc#.jar.index est créé).

En standalone.xml, je déclare ce qui suit sous <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> 

Pour mes sources de données, je l'ai fait ce qui suit:

<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> 

Lorsque vous essayez de courir contre le Oracle 12 source de données, il utilise le Pilote Oracle 10, comme en témoigne le lancement du code:

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 

Lorsque je commente le pilote oracle14 et la source de données en l'utilisant dans standalone.xml, la source de données Oracle 12 s'exécute comme prévu. Je suppose qu'il s'agit d'une sorte de problème de chargeur de classe, mais les modules n'étaient-ils pas censés résoudre ce problème? Que dois-je faire pour permettre aux deux de se connecter sans problèmes?

Je n'ai pas encore essayé de rendre la source de données Oracle 10 dépendante des pilotes Oracle 12.

Répondre

1

Enlever ojdbc14.jar. Utilisez ojdbc7.jar dans les deux/tous les modules.

Le pilote 12.1.0.2 est rétrocompatible avec un serveur 10.2.0.3.

La matrice sur this page ne couvre pas 10,2, mais il dit:

les meilleures pratiques que nous recommandons est, JDBC version du pilote doit toujours être soit identique à ou supérieure à la version de base de données Oracle étant utilisé afin de tirer parti des dernières fonctionnalités du pilote JDBC.

+0

Terminé. Ça semble fonctionner. Merci. – JoshDM