Wenn Sie ein JDBC-Objekt (DataSource, Connection usw.) in eine herstellerspezifische Schnittstelle entpacken möchten, muss der JDBC-Treiber in der konfigurierten Datei <datSource>
muss für den Klassenlader der Anwendung verfügbar sein. Die Konfiguration sieht in etwa so aus:
<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>
Von dort aus können Sie das Objekt auf die gleiche Weise wie zuvor auspacken, nämlich:
DataSource ds = InitialContext.doLookup("jdbc/myDS");
Connection conn = ds.getConnection();
PGConnection pgConn = conn.unwrap(org.postgresql.PGConnection.class);
Außerdem gibt es ein enableConnectionCasting
boolesches Attribut auf <dataSource>
Konfiguration, die bei getConnection()
automatisch unwrap für Sie aufruft .
<dataSource jndiName="jdbc/myDS" enableConnectionCasting="true">
Dann ist der Java-Code etwas einfacher:
DataSource ds = InitialContext.lookup("jdbc/indi");
PGConnection pgConn = (PGConnection) ds.getConnection();