我正在使用 WSO2 数据服务 (3.5.1) 服务器连接一些 Oracle 12c 数据库。但是,为了支持 legacy,我还需要连接到不同的版本,如 10g 和 8i。
有问题,使用ojdbc14.jar
驱动程序,数据源:
8i
works
10g
works
12c
给出:(ORA-28040: No matching authentication protocol
由于版本12中SHA算法的变化)
使用ojdbc6.jar
or ojdbc7.jar
:
10g
works
12c
works
8i
给出:
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)
...
寻找解决方案,我找到了一些替代方法,通过SQLNET.ALLOWED_LOGON_VERSION=8
在12c数据库中的oracle/network/admin/sqlnet.ora文件中设置参数并使用ojdbc14.jar
,但由于基础设施限制,这种方法是不可接受的。
我想知道是否有办法在 DSS 中同时使用两个驱动程序,也许指定一些自定义 Java 类扩展不同的OracleDriver
类,并配置 DSS 类加载器......或一些不同的解决方案。
任何帮助,将不胜感激。