Tomcat oracle钱包配置。如何将oraclepki.jar添加到classpath

时间:2015-11-10 14:25:20

标签: java oracle tomcat

我正在按照以下指南将oracle钱包支持添加到我的Vaadin webapp。

https://sysapp.wordpress.com/2010/08/31/how-to-oracle-wallet-with-jdbc-thin-driver-datasource-tomcat/

但是,我的应用程序中出现以下异常。

Caused by: java.sql.SQLException: PKI classes not found. To use 'connect /' functionality, oraclepki.jar must be in the classpath: java.lang.NoClassDefFoundError: oracle/security/crypto/core/RSAPrivateKey
    at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.PhysicalConnection.getSecretStoreCredentials(PhysicalConnection.java:2626) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.PhysicalConnection.parseUrl(PhysicalConnection.java:2394) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.PhysicalConnection.readConnectionProperties(PhysicalConnection.java:1932) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:489) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:203) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:510) ~[ojdbc6.jar:Oracle JDBC Driver version - "11.1.0.7.0-Production"]
    at org.apache.tomcat.dbcp.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) ~[tomcat-dbcp.jar:8.0.24]
    at org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:255) ~[tomcat-dbcp.jar:8.0.24]
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2303) ~[tomcat-dbcp.jar:8.0.24]
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2289) ~[tomcat-dbcp.jar:8.0.24]
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2038) ~[tomcat-dbcp.jar:8.0.24]
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532) ~[tomcat-dbcp.jar:8.0.24]
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) ~[spring-jdbc-4.1.2.RELEASE.jar:4.1.2.RELEASE]
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77) ~[spring-jdbc-4.1.2.RELEASE.jar:4.1.2.RELEASE]
    ... 55 more

异常说要将oraclepki.jar(在oracle客户端分发中找到)添加到classpath。我尝试通过以下方法将它添加到classpath。

  • oraclepki.jar添加到$CATALINA_HOME/lib

  • oraclepki.jar添加到$CATALINA_HOME/webapps/<my_extracted_war>/WEB-INF/lib

  • 使用CLASSPATH环境变量添加到类路径。

以上行为均未作出任何改变。

这可能是什么原因?

1 个答案:

答案 0 :(得分:2)

我必须再向$ORACLE_HOME/jlib添加两个罐子,然后才有效。

所有必要的图书馆如下:

  • osdt_cert.jar
  • osdt_core.jar
  • oraclepki.jar

以上jar可在完整的Oracle客户端发行版中找到(例如,不是Oracle Instant Client)。

oracle客户端安装中库的位置:Tools -> Options -> Editor -> Code Completion