JDBCオブジェクト(DataSource、Connectionなど)をベンダー固有のインターフェースにアンラップする場合は、構成済みの<datSource>
内のJDBCドライバー アプリケーションクラスローダーで使用可能である必要があります。構成は次のようになります。
<application location="oraclejdbcfat.war" >
<!-- expose the 'DBLib' containing the JDBC driver jar to the app classloader -->
<classloader commonLibraryRef="DBLib"/>
</application>
<library id="DBLib">
<fileset dir="${server.config.dir}/postgresql/" includes="*.jar"/>
</library>
<dataSource jndiName="jdbc/myDS">
<jdbcDriver libraryRef="DBLib"/>
<properties .../>
</dataSource>
そこから、以前と同じ方法でオブジェクトをアンラップできます。つまり、次のようになります。
DataSource ds = InitialContext.doLookup("jdbc/myDS");
Connection conn = ds.getConnection();
PGConnection pgConn = conn.unwrap(org.postgresql.PGConnection.class);
また、enableConnectionCasting
があります <dataSource>
のブール属性 getConnection()
時に自動的にunwrapを呼び出す構成 。
<dataSource jndiName="jdbc/myDS" enableConnectionCasting="true">
次に、Javaコードは少し単純です:
DataSource ds = InitialContext.lookup("jdbc/indi");
PGConnection pgConn = (PGConnection) ds.getConnection();