oracle - Tomcat 无法创建 TCPS Oracle JDBC 连接

标签 oracle tomcat jdbc tomcat7

我在 tomcat 中通过 JDBC 使用数据库连接。 我们的环境是Tomcat 7 + JDK 8和Oracle 12c。

由于我只能通过 TCPS 连接到 Oracle 数据库(我们使用的是 Oracle 的钱包),所以我必须修改当前的 Tomcat server.xml 以创建到 Oracle 的 JDBC 连接。 我更新的配置片段

    <Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver"
        initialSize="10"
        jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmx(threshold=10000)"
        jmxEnabled="true" logAbandoned="true" maxActive="100" maxIdle="100"
        maxWait="10000" 
        name="jdbc/jndiconnection" password="XXXXXX" removeAbandoned="true"
        type="javax.sql.DataSource" url=""jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=hostname)(PORT=1234))(CONNECT_DATA=(SERVICE_NAME=servicename)))"
        username="XXXXXXXX" validationInterval="30000" validationQuery="SELECT 1 FROM DUAL" />

我添加了 truststore/trusttypey/keystore/keytype 作为参数,但是出现了错误:

Caused by: oracle.net.ns.NetException: Unable to initialize ssl context.
    at oracle.net.nt.CustomSSLSocketFactory.getSSLSocketFactory(CustomSSLSocketFactory.java:296)
    at oracle.net.nt.TcpsNTAdapter.connect(TcpsNTAdapter.java:117)
    at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:370)
    ... 73 more
Caused by: oracle.net.ns.NetException: Unable to initialize the key store.
        at oracle.net.nt.CustomSSLSocketFactory.getKeyManagerArray(CustomSSLSocketFactory.java:369)
        at oracle.net.nt.CustomSSLSocketFactory.getSSLSocketFactory(CustomSSLSocketFactory.java:279)
        ... 76 more
Caused by: java.security.KeyStoreException: SSO not found
        at java.security.KeyStore.getInstance(KeyStore.java:851)
        at oracle.net.nt.CustomSSLSocketFactory.getKeyManagerArray(CustomSSLSocketFactory.java:357)
        ... 77 more
Caused by: java.security.NoSuchAlgorithmException: SSO KeyStore not available
        at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
        at java.security.Security.getImpl(Security.java:695)
        at java.security.KeyStore.getInstance(KeyStore.java:848)
        ... 78 more

然后我按照以下指示进行操作:https://sysapp.wordpress.com/2010/08/31/how-to-oracle-wallet-with-jdbc-thin-driver-datasource-tomcat/ 然而,在本文中,它使用 PROTOCAL 作为 TCP,而不是 TCPS。

<Resource
        name="jdbc/confluence"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.OracleDriver"
        url="jdbc:oracle:thin:/@mywallet"
        connectionProperties=”oracle.net.wallet_location=/opt/wallet"/>

然后我得到了错误:

Caused by: oracle.net.ns.NetException: The method specified in wallet_location is not supported. Location: /opt/wallet
    at oracle.net.nt.CustomSSLSocketFactory.getSSLSocketFactory(CustomSSLSocketFactory.java:219)
    at oracle.net.nt.TcpsNTAdapter.connect(TcpsNTAdapter.java:117)
    at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:370)
    ... 73 more

我已经编写了通过 TCPS 连接的 Java 示例代码,并且连接工作正常。 我是否遗漏了配置文件中的一些关键点?还有其他方法可以通过 JDBC 创建 Oracle 的 TCPS 连接吗?

最佳答案

”oracle.net.wallet_location=/opt/wallet"

这不是该属性应有的样子。应该是:

(SOURCE=(METHOD=文件)(METHOD_DATA=(DIRECTORY=/opt/wallet)))

您收到的错误消息是因为它在您提供的消息中找不到“METHOD=”。

关于oracle - Tomcat 无法创建 TCPS Oracle JDBC 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36524581/

相关文章:

SQL 动态 ASC 和 DESC

oracle - Oracle 和 Hibernate 中的 generatedValue 不起作用

tomcat - 访问 tomcat 别名中的符号链接(symbolic link)

mySQL "select"通过 JDBC 区分大小写,但通过命令行不区分大小写

java - Java 中 SQL 查询不解析整个表的方法 - JDBC

oracle - 检测for循环中的最后一条记录

java - 如何将 BLOB 数组传递给存储的 oracle 过程?

java - eclipse WTP : Remove tomcat specific jar from build path

java - 将请求传递给正确的应用程序

java - 如何做包含JDBC和JMS事务的XA事务?