Se desideri annullare il wrapping di un oggetto JDBC (DataSource, Connection, ecc.) su un'interfaccia specifica del fornitore, il driver JDBC nel <datSource>
configurato deve essere disponibile per il classloader dell'applicazione. La configurazione sarà simile a questa:
<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>
Da lì, puoi scartare l'oggetto nello stesso modo in cui stavi facendo prima, ovvero:
DataSource ds = InitialContext.doLookup("jdbc/myDS");
Connection conn = ds.getConnection();
PGConnection pgConn = conn.unwrap(org.postgresql.PGConnection.class);
Inoltre, c'è un enableConnectionCasting
attributo booleano su <dataSource>
configurazione che chiamerà automaticamente unwrap per te su getConnection()
.
<dataSource jndiName="jdbc/myDS" enableConnectionCasting="true">
Quindi il codice java è un po' più semplice:
DataSource ds = InitialContext.lookup("jdbc/indi");
PGConnection pgConn = (PGConnection) ds.getConnection();