I'm using the WSO2 Data Services (3.5.1) Server to connect with some Oracle 12c databases. However, to support the legacy, I also need to connect to different versions like 10g and 8i.
There's the problem, using the ojdbc14.jar
driver, the datasources:
8i
works
10g
works
12c
gives: ORA-28040: No matching authentication protocol
(due the changes of SHA algorithm in the version 12)
Using the ojdbc6.jar
or ojdbc7.jar
:
10g
works
12c
works
8i
gives:
org.wso2.carbon.ndatasource.common.DataSourceException: Error establishing data source connection: 4
...
Caused by: java.sql.SQLException: 4
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:290)
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:702)
...
Caused by: java.lang.ArrayIndexOutOfBoundsException: 4
at oracle.jdbc.driver.T4C8TTIdty.<init>(T4C8TTIdty.java:491)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1434)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
...
Searching for solution, I've found some alternative, by setting the parameter SQLNET.ALLOWED_LOGON_VERSION=8
in the oracle/network/admin/sqlnet.ora file in the 12c database and using ojdbc14.jar
, but due infrastructure restrictions, this approach is not acceptable.
I would like to know if there's a way to use simultaneously both drivers in DSS, maybe specifying some custom Java class extending the different OracleDriver
class, and configuring the DSS class loader... or some different solution.
Any help would be appreciated.