Tomcat、JDBC 瘦客户端和 Oracle 钱包

Posted

技术标签:

【中文标题】Tomcat、JDBC 瘦客户端和 Oracle 钱包【英文标题】:Tomcat, JDBC Thin Client and Oracle Wallet 【发布时间】:2015-08-14 14:25:46 【问题描述】:

我很难让 JDBC 瘦客户端识别我的 Oracle Wallet。在 SQLPlus、SQLDeveloper 甚至 .NET 应用程序中使用相同的钱包没有问题。我们将其用作 SSO 机制,即不提供用户名和密码,以及用于特定目的的用户名和密码。

这个文档我翻遍了:http://www.oracle.com/technetwork/topics/wp-oracle-jdbc-thin-ssl-130128.pdf

根本的例外是: 原因:oracle.net.ns.NetException:无法解析连接标识符“D501_SSL”

我通过 Eclipse 使用以下 VM 参数启动 Tomcat: -Doracle.net.wallet_location="C:\oracle_wallet\SFVRL" -Doracle.net.tns_admin="C:\oracle_wallet\SFVRL"

我在 tnsnames.ora 文件中定义了 D501_SSL。协议是端口 2484 上的 TCPS。如前所述,它在瘦客户端之外也能正常工作。

我已经在网上找到了一些有趣的话题,但没有任何效果。我已经按照指示修改了我的 java.security 文件。我有 类路径中必需的 jars(ojdbc7-12.1.0.2.jar、oraclepki.jar、osdt_cert.jar、osdt_core.jar)。

我已经尝试了上述选项的各种格式,但没有任何乐趣。我把我的 tnsnames.ora 放在钱包的同一个文件夹中,只是为了简单一点。

我正在运行 Tomcat 8、JAVA 1.8。下面是我的 JNDI 配置。任何见解将不胜感激。

<Resource auth="Container" name="jdbc/SVRSDS_SSL" driverClassName="oracle.jdbc.OracleDriver" logAbandoned="true" maxActive="24" maxIdle="24" maxWait="-1" minIdle="2" poolPreparedStatements="true" removeAbandoned="true" removeAbandonedTimeout="30" testWhileIdle="true" timeBetweenEvictionRunsMillis="60000" type="javax.sql.DataSource" url="jdbc:oracle:thin:/@D501_SSL" validationQuery="Select 1 from dual" />

【问题讨论】:

【参考方案1】:

错误“oracle.net.ns.NetException: could not resolve the connect identifier D501_SSL”表示 JDBC 瘦驱动程序在您的文件 tnsnames.ora 中找不到 TNS 名称“D501_SSL。该错误与钱包配置,所以我会先尝试解决此错误而不尝试配置钱包。一旦配置错误解决,您可以尝试添加钱包。

【讨论】:

以上是关于Tomcat、JDBC 瘦客户端和 Oracle 钱包的主要内容,如果未能解决你的问题,请参考以下文章

oracle 瘦 jdbc 连接在不活动后接收“连接重置”

为 Oracle JDBC 瘦客户端设置语言

使用 tomcat 6 dbcp 和 oracle 11 瘦驱动程序的堆空间不足

Oracle 中的 JDBC 瘦连接字符串同时使用冒号和正斜杠

如何使用带有 TNSNames 别名语法的 JDBC 瘦驱动程序连接到 Oracle 数据库

Oracle笔记