sql >> Databáze >  >> RDS >> Oracle

pomocí DBMS_APPLICATION_INFO s Jboss

ano, můžete napsat obalovou třídu kolem svého fondu připojení a obal kolem připojení, takže řekněme, že máte:

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

Změňte jej 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);
    }

Všimněte si výše uvedeného použití WrappedOracleConnection. Potřebujete to, protože potřebujete zachytit blízký hovor

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

Doufám, že to pomůže, dělám něco podobného na vývojovém serveru, abych zachytil připojení, která nejsou uzavřena (nevrácena do fondu).



  1. Je hexový vstup dostatečný k dezinfekci SQL dotazů?

  2. Nadřazený dětský design pro snadnou identifikaci typu dítěte

  3. Blok anonymního kódu PL/pgSQL

  4. Jak vytvořit Serverless GraphQL API pro MySQL, Postgres a Aurora