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.
Terminé. Ça semble fonctionner. Merci. – JoshDM