vâng, bạn có thể viết một lớp trình bao bọc xung quanh nhóm kết nối của mình và một lớp bao bọc xung quanh các kết nối, do đó, giả sử bạn có:
OracleConnection conn=connectionPool.getConnection("java:[email protected]");
Thay đổi nó thành:
public class LoggingConnectionPool extends ConnectionPool{ public OracleConnection getConnection(String datasourceName, String module, String action){ OracleConnection conn=getConnection(datasourceName); CallableStatement call=conn.preparedCall("begin dbms_application_info.setModule(module_name => ?, action_name => ?); end;"); try{ call.setString(1,module); call.setString(2,action); call.execute(); finally{ call.close(); } return new WrappedOracleConnection(conn); }
Lưu ý cách sử dụng WrappedOracleConnection ở trên. Bạn cần điều này bởi vì bạn cần bẫy cuộc gọi đóng
public class WrappedOracleConnection extends OracleConnection{ public void close(){ CallableStatement call=this.preparedCall("begin dbms_application_info.setModule(module_name => ?, action_name => ?); end;"); try{ call.setNull(1,Types.VARCHAR); call.setNull(2,Types.VARCHAR); call.execute(); finally{ call.close(); } } // and you need to implement every other method //for example public CallableStatement prepareCall(String command){ return super.prepareCall(command); } ... }
Hy vọng điều này sẽ hữu ích, tôi làm điều gì đó tương tự trên máy chủ phát triển để bắt các kết nối không bị đóng (không được trả về nhóm).