public byte[] modify( ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) { if (logger.isInfoEnabled()) { logger.info("Modifing. {}", javassistClassName); } try { InstrumentClass preparedStatementClass = byteCodeInstrumentor.getClass(classLoader, javassistClassName, classFileBuffer); Interceptor executeInterceptor = new PreparedStatementExecuteQueryInterceptor(); preparedStatementClass.addScopeInterceptor( "execute", null, executeInterceptor, JtdsScope.SCOPE_NAME); Interceptor executeQueryInterceptor = new PreparedStatementExecuteQueryInterceptor(); preparedStatementClass.addScopeInterceptor( "executeQuery", null, executeQueryInterceptor, JtdsScope.SCOPE_NAME); Interceptor executeUpdateInterceptor = new PreparedStatementExecuteQueryInterceptor(); preparedStatementClass.addScopeInterceptor( "executeUpdate", null, executeUpdateInterceptor, JtdsScope.SCOPE_NAME); preparedStatementClass.addTraceValue(DatabaseInfoTraceValue.class); preparedStatementClass.addTraceValue(ParsingResultTraceValue.class); preparedStatementClass.addTraceValue(BindValueTraceValue.class, "new java.util.HashMap();"); bindVariableIntercept(preparedStatementClass, classLoader, protectedDomain); return preparedStatementClass.toBytecode(); } catch (InstrumentException e) { if (logger.isWarnEnabled()) { logger.warn("{} modify fail. Cause:{}", this.getClass().getSimpleName(), e.getMessage(), e); } return null; } }