Ik heb dit zojuist getest op WebSphere Liberty en de volgende code werkte voor mij:
@Resource(lookup = "jdbc/oracle")
private DataSource ds;
// ...
Connection conn = ds.getConnection();
OracleConnection oracleConn = conn.unwrap(oracle.jdbc.OracleConnection.class);
Mijn server.xml ziet er als volgt uit:
<dataSource jndiName="jdbc/oracle">
<jdbcDriver libraryRef="oracleLib"/>
<properties.oracle URL="${jdbc.URL}" user="${jdbc.user}" password="${jdbc.password}"/>
</dataSource>
<library id="oracleLib">
<fileset dir="${server.config.dir}/oracle"/>
</library>
<application location="myApp.war" >
<classloader commonLibraryRef="oracleLib"/>
</application>
Het belangrijkste om hier op te merken is het gebruik van commonLibraryRef
op de <classloader>
element. Als u privateLibraryRef
. gebruikt het zal niet werken omdat de app en de door de server gedefinieerde gegevensbron geïsoleerde classloaders zullen gebruiken om de Oracle JDBC-klassen te laden.
Als dit antwoord niet nuttig voor u is, werk dan uw vraag bij met uw server.xml-configuratie, en ook hoe u een exemplaar van uw DataSource
verkrijgt .