sql >> Databasteknik >  >> RDS >> Oracle

använder DBMS_APPLICATION_INFO med Jboss

ja, du kan skriva en omslagsklass runt din anslutningspool och en omslag runt anslutningen så låt oss säga att du har:

OracleConnection conn=connectionPool.getConnection("java:[email protected]");

Ändra det till:

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);
    }

Observera användningen av WrappedOracleConnection ovan. Du behöver detta eftersom du behöver fånga det nära samtalet

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);
    }
    ...
}

Hoppas detta hjälper, jag gör något liknande på en utvecklingsserver för att fånga upp anslutningar som inte är stängda (som inte returneras till poolen).



  1. Hur låser man bord med kodantändare?

  2. Enkel lösenordskryptering - hur gör jag?

  3. Infoga datumformat i dd/mm/åååå till laravel Eloquent Model

  4. Inkrementera fält med inte null och unik begränsning i PostgreSQL 8.3