tak, możesz napisać klasę opakowującą wokół swojej puli połączeń i opakowującą wokół połączeń, więc powiedzmy, że masz:
OracleConnection conn=connectionPool.getConnection("java:example@sqldat.com");
Zmień go na:
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);
}
Zwróć uwagę na użycie opcji WrappedOracleConnection powyżej. Potrzebujesz tego, ponieważ musisz złapać bliskie połączenie
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);
}
...
}
Mam nadzieję, że to pomoże, robię coś podobnego na serwerze deweloperskim, aby przechwycić połączenia, które nie są zamknięte (nie są zwracane do puli).