Oracle
 sql >> Base de données >  >> RDS >> Oracle

utiliser DBMS_APPLICATION_INFO avec Jboss

oui, vous pouvez écrire une classe wrapper autour de votre pool de connexion, et un wrapper autour des connexions, disons que vous avez :

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

Changez-le en :

public class LoggingConnectionPool étend 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;"); essayez{ call.setString(1,module); call.setString(2,action); call.execute(); enfin{ call.close(); } return new WrappedOracleConnection(conn); } 

Notez l'utilisation de WrappedOracleConnection ci-dessus. Vous en avez besoin parce que vous devez piéger l'appel proche

public class WrappedOracleConnection étend OracleConnection{ public void close(){ CallableStatement call=this.preparedCall("begin dbms_application_info.setModule(module_name => ?, action_name => ?); end;"); essayez{ call.setNull(1,Types.VARCHAR); call.setNull(2,Types.VARCHAR); call.execute(); enfin{ call.close(); } } // et vous devez implémenter toutes les autres méthodes // par exemple public CallableStatement prepareCall(String command){ return super.prepareCall(command); } ...}

J'espère que cela vous aidera, je fais quelque chose de similaire sur un serveur de développement pour intercepter les connexions qui ne sont pas fermées (non renvoyées au pool).