2016-04-10 51 views
0

私はTomcatでJDBCを介してデータベース接続を使用しています。 私たちの環境はTomcat 7 + JDK 8とOracle 12cです。TomcatはTCPS Oracle JDBC接続を作成できません

私は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" /> 

私はパラメータとしてトラスト/ trusttypey /ストア/キータイプを追加した、しかし、私はエラーを得た:記事それにしかしhttps://sysapp.wordpress.com/2010/08/31/how-to-oracle-wallet-with-jdbc-thin-driver-datasource-tomcat/

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 

それから私はからの指示に従っTCPとしてではなくPROTOCALを使用しています。

<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接続を作成する方法は他にありますか?

答えて

0

いくつかの手順を実行する必要があります。 (1)クラスパスにoraclepki.jar、osdt_core.jar、osdt_cert.jarがあることを確認してください。

(2)また、cwallet.ssoファイルの場所は、次のシステムプロパティで指定します。 setenv.shを作成し、必要なシステム・プロパティーを追加することができます。 また、ここに示すように別のシステムプロパティを有効にしてください。 export JAVA_OPTS = "$ CATALINA_OPTS -Doracle.net.wallet_location = '(SOURCE =(METHOD =ファイル)(METHOD_DATA =(DIRECTORY =/test/wallet /)))" " エクスポートJAVA_OPTS =" $ CATALINA_OPTS -Doracle.net .ssl_server_dn_match = true "

(3)ここに示すように、URLに証明書情報があることを確認してください。 URLの「セキュリティ」部分を証明書からコピーしてください。 (DESCRIPTION = (アドレス=(プロトコル= TCPS)(PORT = 1522)(ホスト= myorclhostname)) (CONNECT_DATA =(SERVICE_NAME = myorcldb)) (セキュリティ=(SSL_SERVER_CERT_DN = 「CN = CMAN、O =オラクルデータベース、C = US ")) ) (4)oracle PKIプロバイダをアクティブ化する必要があります。静的にそれを有効にするにはJREの 変更java.securityファイル(JRE_HOME/JRE/libに/セキュリティ/ java.security): security.provider.7 = oracle.security.pki.OraclePKIProvider

は "SSL with JDBC driver" を参照してください。を詳細については。

+0

実際にあなたがここに投稿したものと同じことをしましたが、同じエラーが発生しました。 Oracleウォレットのデータソースを作成できないようです。最後に、コードでOracle Walletデータベース接続を作成する必要がありました。私は最良のソリューションではないかもしれませんが、機能します。 – mikero

関連する問題