2016-04-10 28 views
0

Tomcat'ta JDBC aracılığıyla veritabanı bağlantısı kullanıyorum. Ortamımız Tomcat 7 + JDK 8 ve Oracle 12c'dir.Tomcat, TCPS'yi oluşturamıyor Oracle JDBC bağlantısı

Yalnızca Oracle veritabanına TCPS aracılığıyla bağlandığım için (ve Oracle'ın cüzdanını kullanıyoruz), bu yüzden mevcut Tomcat server.xml'imi Oracle'a JDBC bağlantısı oluşturmak için değiştirmem gerekiyor. Benim güncellenmiş yapılandırma pasajı

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

Ben, parametre olarak truststore/trusttypey/deposu/KeyType eklendi ancak hata var: Sonra

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 

ben talimat takip: Ancak makalede https://sysapp.wordpress.com/2010/08/31/how-to-oracle-wallet-with-jdbc-thin-driver-datasource-tomcat/ o TCP olarak PROTOCAL kullanıyor, ancak TCPS değil.

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

Sonra hata var: Ben TCP'lerin aracılığıyla bağlanmak için Java örnek kodunu yazdım

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 

ve bağlantı gayet iyi çalışıyor. Yapılandırma dosyasında bazı önemli noktaları kaçırdım mı? Ve JDBC üzerinden Oracle'ın TCPS bağlantısını oluşturmak için başka bir yolu var mı?

cevap

0

Takip etmeniz gereken birkaç adım vardır. (1) Sınıf 1'de oraclepki.jar, osdt_core.jar, osdt_cert.jar olduğundan emin olun

(2) Ayrıca, aşağıdaki sistem özelliği aracılığıyla cwallet.sso dosyasının konumunu belirtin. Bir setenv.sh oluşturabilir ve gerekli sistem özelliklerini ekleyebilirsiniz. Ayrıca, burada gösterildiği gibi başka bir sistem özelliğini etkinleştirin. export JAVA_OPTS = "$ CATALINA_OPTS -Doracle.net.wallet_location = '(SOURCE = (METOD = dosya) (METHOD_DATA = (DİZİN =/test/cüzdan /)))" " dışa aktarma JAVA_OPTS =" $ CATALINA_OPTS -Doracle.net .ssl_server_dn_match = true "

(3) Burada gösterildiği gibi URL'de sertifika bilgilerine sahip olduğunuzdan emin olun. Lütfen URL’nin 'güvenlik' bölümünü sertifikanızdan kopyalayın. (açıklama = (adres = (protokol = TCPS) (bağlantı noktası = 1522) (ana = myorclhostname)) (connect_data = (Hizmet_adı = myorcldb)) (güvenlik = (ssl_server_cert_dn = "CN cman, O = Oracle Veritabanı, C = ABD ") ) (4) Oracle PKI sağlayıcısını etkinleştirmeniz gerekiyor. statik etkinleştirmek için: JRE (JRE_HOME/jre/lib/güvenlik/java.security) arasında Değişim java.security dosyası: security.provider.7 = oracle.security.pki.OraclePKIProvider

sayfadaki "SSL with JDBC driver" daha fazla ayrıntı için.

+0

Aslında burada gönderdiğiniz şey ile aynı şeyi yaptım, ama aynı hatayı aldım. Oracle cüzdan veri kaynağı oluşturmak başarısız olacak gibi görünüyor. Sonunda kodda Oracle cüzdan veritabanı bağlantısı oluşturmak zorunda kaldım, en iyi çözüm olmayabilir ama işe yarıyor. – mikero

İlgili konular