Ich habe dies gerade auf WebSphere Liberty getestet und der folgende Code hat für mich funktioniert:
@Resource(lookup = "jdbc/oracle")
private DataSource ds;
// ...
Connection conn = ds.getConnection();
OracleConnection oracleConn = conn.unwrap(oracle.jdbc.OracleConnection.class);
Meine server.xml sieht so aus:
<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>
Wichtig ist hier die Verwendung von commonLibraryRef
auf dem <classloader>
Element. Wenn Sie privateLibraryRef
verwenden es wird nicht funktionieren, da die App und die serverdefinierte Datenquelle isolierte Classloader verwenden, um die Oracle JDBC-Klassen zu laden.
Wenn diese Antwort für Sie nicht hilfreich ist, aktualisieren Sie bitte Ihre Frage mit Ihrer server.xml-Konfiguration und auch, wie Sie eine Instanz Ihrer DataSource
erhalten .