Saya baru saja menguji ini di WebSphere Liberty dan kode berikut berfungsi untuk saya:
@Resource(lookup = "jdbc/oracle")
private DataSource ds;
// ...
Connection conn = ds.getConnection();
OracleConnection oracleConn = conn.unwrap(oracle.jdbc.OracleConnection.class);
Server.xml saya terlihat seperti ini:
<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>
Hal penting yang perlu diperhatikan di sini adalah penggunaan commonLibraryRef
pada <classloader>
elemen. Jika Anda menggunakan privateLibraryRef
itu tidak akan berfungsi karena aplikasi dan sumber data yang ditentukan server akan menggunakan pemuat kelas yang terisolasi untuk memuat kelas Oracle JDBC.
Jika jawaban ini tidak membantu Anda, harap perbarui pertanyaan Anda dengan konfigurasi server.xml Anda, dan juga bagaimana Anda mendapatkan instance DataSource
Anda .