Tôi vừa thử nghiệm điều này trên WebSphere Liberty và đoạn mã sau phù hợp với tôi:
@Resource(lookup = "jdbc/oracle")
private DataSource ds;
// ...
Connection conn = ds.getConnection();
OracleConnection oracleConn = conn.unwrap(oracle.jdbc.OracleConnection.class);
Server.xml của tôi trông giống như sau:
<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>
Điều quan trọng cần lưu ý ở đây là việc sử dụng commonLibraryRef
trên <classloader>
thành phần. Nếu bạn sử dụng privateLibraryRef
nó sẽ không hoạt động vì ứng dụng và nguồn dữ liệu do máy chủ xác định sẽ sử dụng bộ nạp lớp riêng biệt để tải các lớp Oracle JDBC.
Nếu câu trả lời này không hữu ích cho bạn, vui lòng cập nhật câu hỏi của bạn với cấu hình server.xml và cả cách bạn lấy một bản sao của DataSource
.