JDBC接続(プール)

「JDBC接続(プール)」の編集履歴(バックアップ)一覧はこちら

JDBC接続(プール)」(2014/07/25 (金) 10:32:51) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

[[postgreSQLのSSL対応]]をした後の話 *プールの設定 WebContext/META-INF/context.xmlを作成する <?xml version='1.0' encoding='utf-8'?> <Context> <Resource name="jdbc/public" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/データベース" username="ユーザ" password="パスワード" initialSize="5" maxActive="5" maxIdle="5" minIdle="5" maxAge="0" maxWait="1800" /> </Context> WebContext/WEB-INF/web.xml <resource-ref> <res-ref-name>jdbc/public</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> ソース DataSource ds = null; Context ctx = new InitialContext(); ds = (DataSource) ctx.lookup("java:comp/env/jdbc/public"); try { } catch (Exception e) { } Connection conn = ds.getConnection(); *javaの証明書を作成する(サーバ証明書を作成後) 1)cacertsをコピーして名前を変える C:\Program Files\Java\jre7\lib\securityのcacertsをcacerts_java 2)コマンドプロンプトを管理者モードで開き、C:\Program Files\Java\jre7\binに移動して以下を実行する keytool.exe -import -alias postgresql -file c:\Opt\apache\conf\server.crt -trustcacerts -keystore ..\lib\security\cacerts_java キーストアのパスワードを入力してください:changeit 所有者: O=Internet Widgits Pty Ltd, ST=Some-State, C=AU 発行者: O=Internet Widgits Pty Ltd, ST=Some-State, C=AU シリアル番号: cc3fcda13d33aede 有効期間の開始日: Wed Jul 09 14:52:52 JST 2014終了日: Sat Jul 06 14:52:52 JST 20 24 証明書のフィンガプリント: MD5: 82:75:19:B7:23:B2:78:6C:5B:E1:67:66:AA:66:CF:C4 SHA1: 5E:73:BC:CD:67:7F:7A:B9:E1:B2:2D:AA:A5:F2:C2:46:CF:3C:CF:18 SHA256: 76:91:14:B5:4F:E1:FA:45:63:28:00:4C:6E:AB:78:A3:DF:B7:8A:B4:F3: 6E:DE:7A:A1:37:BC:82:95:D6:35:8F 署名アルゴリズム名: SHA1withRSA バージョン: 1 この証明書を信頼しますか。 [いいえ]: はい 証明書がキーストアに追加されました 3)作成した、cacerts_javaをどこでもいいがc:\Opt\apache\confに置く jdbcを呼び出す前に、プロパティをセットする(以下はソースの抜粋) System.setProperty("javax.net.ssl.trustStore", "C:/Opt/apache/conf/cacerts_java"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); *SSL接続にする(postgreSQLをSSL化した後の話) context.xmlを以下を追記する connectionProperties="ssl=true" *context.xmlにベタにユーザ/パスワードを記載したくない場合の抜け道 context.xmlを以下を追記する factory="hoge.dao.MyBasicDataSourceFactory" クラスを作成する public class MyBasicDataSourceFactory extends BasicDataSourceFactory { @Override public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment) throws Exception { if ((obj == null) || (!(obj instanceof Reference))) { return null; } Reference ref = (Reference) obj; if (!("javax.sql.DataSource".equals(ref.getClassName()))) { return null; } // 見えないフィールドなので、リフレクションで取得する Field field = BasicDataSourceFactory.class.getDeclaredField("ALL_PROPERTIES"); field.setAccessible(true); String[] ALL_PROPERTIES = (String[]) field.get(BasicDataSourceFactory.class); Properties properties = new Properties(); for (int i = 0; i < ALL_PROPERTIES.length; ++i) { String propertyName = ALL_PROPERTIES[i]; RefAddr ra = ref.get(propertyName); if (ra != null) { String propertyValue = ra.getContent().toString(); // パラメータ名がpasswordだった場合は復号化して、セットする if ("password".equals(propertyName)) { // 復号化 // TODO: 復号化ロジックを呼び出す // セットしなおす propertyValue = "xxxx"; } properties.setProperty(propertyName, propertyValue); } } System.setProperty("javax.net.ssl.trustStore", "C:/Opt/apache/conf/cacerts_java"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); return createDataSource(properties); } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: