ConnectionPoolDataSourceとDataSourceの実装はすべて、JNDIに保管することができます。 プール処理を行わない実装の場合、インスタンスが保管されていた場合と同じ設定で、JNDIからオブジェクトが取り出される度に、新規のインスタンスが作成されます。 プール処理を行う実装の場合、利用できる限り(例えばJNDIからプールを取り出すJVMが異ならない限り)同じインスタンスが取り出されます。 さもなくば、同じ設定の新しいインスタンスが取り出されます。
アプリケーションサーバ環境では、通常PostgreSQL™のConnectionPoolDataSource実装ではなく、アプリケーションサーバのDataSourceインスタンスがJNDIに保管されます。
アプリケーション環境では、DataSourceを使用する必要があるすべてのアプリケーション要素でDataSourceへの参照を作成しなくてもすむように、アプリケーションはDataSourceをJNDIに保管することができます。 例 11.2にこの例を示します。
プール処理を行うDataSourceを初期化しJNDIに追加するアプリケーションコードは以下のようになります。
PGPoolingDataSource source = new PGPoolingDataSource();
source.setDataSourceName("A Data Source");
source.setServerName("localhost");
source.setDatabaseName("test");
source.setUser("testuser");
source.setPassword("testpassword");
source.setMaxConnections(10);
new InitialContext().rebind("DataSource", source);
そして、プールから接続を使用するコードは以下のようになります。
Connection conn = null;
try {
DataSource source = (DataSource)new InitialContext().lookup("DataSource");
conn = source.getConnection();
// use connection
} catch (SQLException e) {
// log error
} catch (NamingException e) {
// DataSource wasn't found in JNDI
} finally {
if (con != null) {
try { conn.close(); } catch (SQLException e) {}
}
}