diff --git a/plugins/oracle-jdbc/src/main/java/com/navercorp/pinpoint/plugin/jdbc/oracle/OraclePlugin.java b/plugins/oracle-jdbc/src/main/java/com/navercorp/pinpoint/plugin/jdbc/oracle/OraclePlugin.java index 994a56cd7eabb..c55415000cf10 100644 --- a/plugins/oracle-jdbc/src/main/java/com/navercorp/pinpoint/plugin/jdbc/oracle/OraclePlugin.java +++ b/plugins/oracle-jdbc/src/main/java/com/navercorp/pinpoint/plugin/jdbc/oracle/OraclePlugin.java @@ -16,7 +16,9 @@ import com.navercorp.pinpoint.bootstrap.instrument.InstrumentClass; import com.navercorp.pinpoint.bootstrap.instrument.InstrumentException; +import com.navercorp.pinpoint.bootstrap.instrument.InstrumentMethod; import com.navercorp.pinpoint.bootstrap.instrument.Instrumentor; +import com.navercorp.pinpoint.bootstrap.instrument.MethodFilter; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplateAware; @@ -26,9 +28,11 @@ import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin; import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPluginSetupContext; import com.navercorp.pinpoint.bootstrap.plugin.jdbc.JdbcUrlParserV2; +import com.navercorp.pinpoint.bootstrap.plugin.jdbc.PreparedStatementBindingMethodFilter; import com.navercorp.pinpoint.bootstrap.plugin.util.InstrumentUtils; import java.security.ProtectionDomain; +import java.util.List; import static com.navercorp.pinpoint.common.util.VarArgs.va; @@ -168,17 +172,20 @@ public byte[] doInTransform(Instrumentor instrumentor, ClassLoader loader, Strin int maxBindValueSize = config.getMaxSqlBindValueSize(); - target.addScopedInterceptor("com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.PreparedStatementExecuteQueryInterceptor", va(maxBindValueSize), ORACLE_SCOPE); final String preparedStatementInterceptor = "com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.PreparedStatementExecuteQueryInterceptor"; InstrumentUtils.findMethod(target, "execute") - .addScopedInterceptor(preparedStatementInterceptor, va(maxBindValueSize), CUBRID_SCOPE); + .addScopedInterceptor(preparedStatementInterceptor, va(maxBindValueSize), ORACLE_SCOPE); InstrumentUtils.findMethod(target, "executeQuery") - .addScopedInterceptor(preparedStatementInterceptor, va(maxBindValueSize), CUBRID_SCOPE); + .addScopedInterceptor(preparedStatementInterceptor, va(maxBindValueSize), ORACLE_SCOPE); InstrumentUtils.findMethod(target, "executeUpdate") - .addScopedInterceptor(preparedStatementInterceptor, va(maxBindValueSize), CUBRID_SCOPE); + .addScopedInterceptor(preparedStatementInterceptor, va(maxBindValueSize), ORACLE_SCOPE); if (config.isTraceSqlBindValue()) { - target.addScopedInterceptor("com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.PreparedStatementBindVariableInterceptor", ORACLE_SCOPE); + MethodFilter filter = new PreparedStatementBindingMethodFilter(); + List declaredMethods = target.getDeclaredMethods(filter); + for (InstrumentMethod method : declaredMethods) { + method.addScopedInterceptor("com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.PreparedStatementBindVariableInterceptor", ORACLE_SCOPE); + } } return target.toBytecode(); @@ -205,7 +212,13 @@ public byte[] doInTransform(Instrumentor instrumentor, ClassLoader loader, Strin target.addField("com.navercorp.pinpoint.bootstrap.plugin.jdbc.ParsingResultAccessor"); target.addField("com.navercorp.pinpoint.bootstrap.plugin.jdbc.BindValueAccessor"); - target.addScopedInterceptor("com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.CallableStatementRegisterOutParameterInterceptor", ORACLE_SCOPE); + final String callableStatementInterceptor = "com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.CallableStatementRegisterOutParameterInterceptor"; + InstrumentUtils.findMethod(target, "registerOutParameter", "int", "int") + .addScopedInterceptor(callableStatementInterceptor, ORACLE_SCOPE); + InstrumentUtils.findMethod(target, "registerOutParameter", "int", "int", "int") + .addScopedInterceptor(callableStatementInterceptor, ORACLE_SCOPE); + InstrumentUtils.findMethod(target, "registerOutParameter", "int", "int", "java.lang.String") + .addScopedInterceptor(callableStatementInterceptor, ORACLE_SCOPE); return target.toBytecode(); } @@ -230,8 +243,19 @@ public byte[] doInTransform(Instrumentor instrumentor, ClassLoader loader, Strin target.addField("com.navercorp.pinpoint.bootstrap.plugin.jdbc.DatabaseInfoAccessor"); - target.addScopedInterceptor("com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.StatementExecuteQueryInterceptor", ORACLE_SCOPE); - target.addScopedInterceptor("com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.StatementExecuteUpdateInterceptor", ORACLE_SCOPE); + final String executeQueryInterceptor = "com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.StatementExecuteQueryInterceptor"; + InstrumentUtils.findMethod(target, "executeQuery", "java.lang.String") + .addScopedInterceptor(executeQueryInterceptor, ORACLE_SCOPE); + + final String executeUpdateInterceptor = "com.navercorp.pinpoint.bootstrap.plugin.jdbc.interceptor.StatementExecuteUpdateInterceptor"; + InstrumentUtils.findMethod(target, "executeUpdate", "java.lang.String") + .addScopedInterceptor(executeUpdateInterceptor, ORACLE_SCOPE); + InstrumentUtils.findMethod(target, "executeUpdate", "java.lang.String", "int") + .addScopedInterceptor(executeUpdateInterceptor, ORACLE_SCOPE); + InstrumentUtils.findMethod(target, "execute", "java.lang.String") + .addScopedInterceptor(executeUpdateInterceptor, ORACLE_SCOPE); + InstrumentUtils.findMethod(target, "execute", "java.lang.String", "int") + .addScopedInterceptor(executeUpdateInterceptor, ORACLE_SCOPE); return target.toBytecode(); }