diff --git a/src/main/java/com/profiler/interceptor/bci/InstrumentClass.java b/src/main/java/com/profiler/interceptor/bci/InstrumentClass.java index 1ae8ffc01..624e624b9 100644 --- a/src/main/java/com/profiler/interceptor/bci/InstrumentClass.java +++ b/src/main/java/com/profiler/interceptor/bci/InstrumentClass.java @@ -12,14 +12,20 @@ public interface InstrumentClass { int addConstructorInterceptor(String[] args, Interceptor interceptor) throws InstrumentException, NotFoundInstrumentException; + int addConstructorInterceptor(String[] args, Interceptor interceptor, Type type) throws InstrumentException, NotFoundInstrumentException; + int reuseInterceptor(String methodName, String[] args, int interceptorId) throws InstrumentException, NotFoundInstrumentException; + int reuseInterceptor(String methodName, String[] args, int interceptorId, Type type) throws InstrumentException, NotFoundInstrumentException; + int addInterceptor(String methodName, String[] args, Interceptor interceptor) throws InstrumentException, NotFoundInstrumentException; + int addInterceptor(String methodName, String[] args, Interceptor interceptor, Type type) throws InstrumentException, NotFoundInstrumentException; + int addInterceptorCallByContextClassLoader(String methodName, String[] args, Interceptor interceptor) throws InstrumentException, NotFoundInstrumentException; - int addInterceptor(String methodName, String[] args, Interceptor interceptor, Type type) throws InstrumentException, NotFoundInstrumentException; + int addInterceptorCallByContextClassLoader(String methodName, String[] args, Interceptor interceptor, Type type) throws InstrumentException, NotFoundInstrumentException; boolean addDebugLogBeforeAfterMethod(); diff --git a/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java b/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java index e850ac599..b5bd449cf 100644 --- a/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java +++ b/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java @@ -88,7 +88,7 @@ public class JavaAssistByteCodeInstrumentor implements ByteCodeInstrumentor { @Override public Class defineClass(ClassLoader classLoader, String defineClass, ProtectionDomain protectedDomain) throws InstrumentException { if (logger.isInfoEnabled()) { - logger.warn("defineClass class:" + defineClass + " cl:" + classLoader); + logger.info("defineClass class:{}, cl:{}", defineClass, classLoader); } try { // 아래 classLoaderChecker가 생겼으니 classLoader 를 같이 락으로 잡아야 되지 않는가? diff --git a/src/main/java/com/profiler/interceptor/bci/JavaAssistClass.java b/src/main/java/com/profiler/interceptor/bci/JavaAssistClass.java index 2a6b15b08..573792f3a 100644 --- a/src/main/java/com/profiler/interceptor/bci/JavaAssistClass.java +++ b/src/main/java/com/profiler/interceptor/bci/JavaAssistClass.java @@ -120,6 +120,13 @@ public class JavaAssistClass implements InstrumentClass { return addInterceptor0(null, args, interceptor, -1, Type.auto, false); } + public int addConstructorInterceptor(String[] args, Interceptor interceptor, Type type) throws InstrumentException, NotFoundInstrumentException { + if (interceptor == null) { + throw new IllegalArgumentException("interceptor is null"); + } + return addInterceptor0(null, args, interceptor, -1, type, false); + } + @Override public int addInterceptorCallByContextClassLoader(String methodName, String[] args, Interceptor interceptor) throws InstrumentException, NotFoundInstrumentException { @@ -129,6 +136,14 @@ public class JavaAssistClass implements InstrumentClass { return addInterceptor0(methodName, args, interceptor, -1, Type.auto, true); } + @Override + public int addInterceptorCallByContextClassLoader(String methodName, String[] args, Interceptor interceptor, Type type) throws InstrumentException, NotFoundInstrumentException { + if (interceptor == null) { + throw new IllegalArgumentException("interceptor is null"); + } + return addInterceptor0(methodName, args, interceptor, -1, type, true); + } + @Override public int addInterceptor(String methodName, String[] args, Interceptor interceptor) throws InstrumentException, NotFoundInstrumentException { if (interceptor == null) { @@ -142,6 +157,11 @@ public class JavaAssistClass implements InstrumentClass { return addInterceptor0(methodName, args, null, interceptorId, Type.auto, false); } + @Override + public int reuseInterceptor(String methodName, String[] args, int interceptorId, Type type) throws InstrumentException, NotFoundInstrumentException { + return addInterceptor0(methodName, args, null, interceptorId, type, false); + } + @Override public int addInterceptor(String methodName, String[] args, Interceptor interceptor, Type type) throws InstrumentException, NotFoundInstrumentException { if (interceptor == null) { @@ -171,7 +191,15 @@ public class JavaAssistClass implements InstrumentClass { } try { if (interceptor != null) { - interceptorId = InterceptorRegistry.addInterceptor(interceptor); + if(interceptor instanceof StaticAroundInterceptor) { + StaticAroundInterceptor staticAroundInterceptor = (StaticAroundInterceptor) interceptor; + interceptorId = InterceptorRegistry.addInterceptor(staticAroundInterceptor); + } else if(interceptor instanceof SimpleAroundInterceptor) { + SimpleAroundInterceptor simpleAroundInterceptor = (SimpleAroundInterceptor) interceptor; + interceptorId = InterceptorRegistry.addSimpleInterceptor(simpleAroundInterceptor); + } else { + throw new InstrumentException("unsupported Interceptor Type:" + interceptor); + } // traceContext는 가장먼제 inject되어야 한다. if (interceptor instanceof TraceContextSupport) { ((TraceContextSupport)interceptor).setTraceContext(instrumentor.getAgent().getTraceContext()); @@ -183,31 +211,43 @@ public class JavaAssistClass implements InstrumentClass { setApiId(behavior, (ApiIdSupport) interceptor); } } else { - interceptor = InterceptorRegistry.getInterceptor(interceptorId); + interceptor = InterceptorRegistry.findInterceptor(interceptorId); } - - if (type == Type.auto) { - if (interceptor instanceof StaticAroundInterceptor) { - addStaticAroundInterceptor(methodName, interceptorId, behavior, useContextClassLoader); - } else if (interceptor instanceof StaticBeforeInterceptor) { - addStaticBeforeInterceptor(methodName, interceptorId, behavior, useContextClassLoader); - } else if (interceptor instanceof StaticAfterInterceptor) { - addStaticAfterInterceptor(methodName, interceptorId, behavior, useContextClassLoader); - } else if(interceptor instanceof SimpleAroundInterceptor) { - addSimpleAroundInterceptor(methodName, interceptorId, behavior, useContextClassLoader); - } else if(interceptor instanceof SimpleBeforeInterceptor) { - addSimpleBeforeInterceptor(methodName, interceptorId, behavior, useContextClassLoader); - } else if(interceptor instanceof SimpleAfterInterceptor) { - addSimpleAfterInterceptor(methodName, interceptorId, behavior, useContextClassLoader); - } else { - throw new IllegalArgumentException("unsupported"); + // 이제는 aroundType 인터셉터만 받고 코드 인젝션을 별도 type으로 받아야 함. + if (interceptor instanceof StaticAroundInterceptor) { + switch (type) { + case around: + addStaticAroundInterceptor(methodName, interceptorId, behavior, useContextClassLoader); + break; + case before: + addStaticBeforeInterceptor(methodName, interceptorId, behavior, useContextClassLoader); + break; + case after: + addStaticAfterInterceptor(methodName, interceptorId, behavior, useContextClassLoader); + break; + case auto: + addStaticAroundInterceptor(methodName, interceptorId, behavior, useContextClassLoader); + break; + default: + throw new UnsupportedOperationException("unsupport type"); + } + } else if(interceptor instanceof SimpleAroundInterceptor) { + switch (type) { + case around: + addSimpleAroundInterceptor(methodName, interceptorId, behavior, useContextClassLoader); + break; + case before: + addSimpleBeforeInterceptor(methodName, interceptorId, behavior, useContextClassLoader); + break; + case after: + addSimpleAfterInterceptor(methodName, interceptorId, behavior, useContextClassLoader); + break; + case auto: + addSimpleAroundInterceptor(methodName, interceptorId, behavior, useContextClassLoader); + break; + default: + throw new UnsupportedOperationException("unsupport type"); } - } else if (type == Type.around && interceptor instanceof StaticAroundInterceptor) { - addStaticAroundInterceptor(methodName, interceptorId, behavior, useContextClassLoader); - } else if (type == Type.before && interceptor instanceof StaticBeforeInterceptor) { - addStaticBeforeInterceptor(methodName, interceptorId, behavior, useContextClassLoader); - } else if (type == Type.after && interceptor instanceof StaticAfterInterceptor) { - addStaticAfterInterceptor(methodName, interceptorId, behavior, useContextClassLoader); } else { throw new IllegalArgumentException("unsupported"); } @@ -295,7 +335,7 @@ public class JavaAssistClass implements InstrumentClass { CodeBuilder after = new CodeBuilder(); if (useContextClassLoader) { after.begin(); - beginAddFindInterceptorCode(id, after); + beginAddFindInterceptorCode(id, after, interceptorType); if (interceptorType == STATIC_INTERCEPTOR) { after.format(" java.lang.Class[] methodArgsClassParams = new Class[]{java.lang.Object.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Object[].class, java.lang.Object.class};"); } else { @@ -314,10 +354,10 @@ public class JavaAssistClass implements InstrumentClass { after.begin(); if (interceptorType == STATIC_INTERCEPTOR) { - after.format(" %1$s interceptor = (%1$s) com.profiler.interceptor.InterceptorRegistry.getInterceptor(%2$d);", StaticAfterInterceptor.class.getName(), id); + after.format(" %1$s interceptor = com.profiler.interceptor.InterceptorRegistry.getInterceptor(%2$d);", StaticAroundInterceptor.class.getName(), id); after.format(" interceptor.after(%1$s, \"%2$s\", \"%3$s\", \"%4$s\", %5$s, %6$s);", target, ctClass.getName(), methodName, parameterTypeString, parameter, returnType); } else { - after.format(" %1$s interceptor = (%1$s) com.profiler.interceptor.InterceptorRegistry.getInterceptor(%2$d);", SimpleAfterInterceptor.class.getName(), id); + after.format(" %1$s interceptor = com.profiler.interceptor.InterceptorRegistry.getSimpleInterceptor(%2$d);", SimpleAroundInterceptor.class.getName(), id); after.format(" interceptor.after(%1$s, %2$s, %3$s);", target, parameter, returnType); } after.end(); @@ -332,7 +372,7 @@ public class JavaAssistClass implements InstrumentClass { CodeBuilder catchCode = new CodeBuilder(); if (useContextClassLoader) { catchCode.begin(); - beginAddFindInterceptorCode(id, catchCode); + beginAddFindInterceptorCode(id, catchCode, interceptorType); if(interceptorType == STATIC_INTERCEPTOR) { catchCode.format(" java.lang.Class[] methodArgsClassParams = new Class[]{java.lang.Object.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Object[].class, java.lang.Object.class};"); } else { @@ -351,10 +391,10 @@ public class JavaAssistClass implements InstrumentClass { } else { catchCode.begin(); if (interceptorType == STATIC_INTERCEPTOR) { - catchCode.format(" %1$s interceptor = (%1$s) com.profiler.interceptor.InterceptorRegistry.getInterceptor(%2$d);", StaticAfterInterceptor.class.getName(), id); + catchCode.format(" %1$s interceptor = com.profiler.interceptor.InterceptorRegistry.getInterceptor(%2$d);", StaticAroundInterceptor.class.getName(), id); catchCode.format(" interceptor.after(%1$s, \"%2$s\", \"%3$s\", \"%4$s\", %5$s, $e);", target, ctClass.getName(), methodName, parameterTypeString, parameter); } else { - catchCode.format(" %1$s interceptor = (%1$s) com.profiler.interceptor.InterceptorRegistry.getInterceptor(%2$d);", SimpleAfterInterceptor.class.getName(), id); + catchCode.format(" %1$s interceptor = com.profiler.interceptor.InterceptorRegistry.getSimpleInterceptor(%2$d);", SimpleAroundInterceptor.class.getName(), id); catchCode.format(" interceptor.after(%1$s, %2$s, $e);", target, parameter); } catchCode.append(" throw $e;"); @@ -373,11 +413,15 @@ public class JavaAssistClass implements InstrumentClass { catchCode.format("}"); } - private void beginAddFindInterceptorCode(int id, CodeBuilder after) { + private void beginAddFindInterceptorCode(int id, CodeBuilder after, int interceptorType) { after.format("java.lang.ClassLoader contextClassLoader = java.lang.Thread.currentThread().getContextClassLoader();"); after.format("if (contextClassLoader != null) {"); after.format(" java.lang.Class interceptorRegistryClass = contextClassLoader.loadClass(\"com.profiler.interceptor.InterceptorRegistry\");"); - after.format(" java.lang.reflect.Method getInterceptorMethod = interceptorRegistryClass.getMethod(\"getInterceptor\", new java.lang.Class[]{ int.class });"); + if(interceptorType == STATIC_INTERCEPTOR) { + after.format(" java.lang.reflect.Method getInterceptorMethod = interceptorRegistryClass.getMethod(\"getInterceptor\", new java.lang.Class[]{ int.class });"); + } else { + after.format(" java.lang.reflect.Method getInterceptorMethod = interceptorRegistryClass.getMethod(\"getSimpleInterceptor\", new java.lang.Class[]{ int.class });"); + } after.format(" java.lang.Object[] interceptorParams = new java.lang.Object[] { java.lang.Integer.valueOf(%1$d) };", id); after.format(" java.lang.Object interceptor = getInterceptorMethod.invoke(interceptorRegistryClass, interceptorParams);"); } @@ -421,7 +465,7 @@ public class JavaAssistClass implements InstrumentClass { // java.lang.reflect.Method beforeMethod = interceptor.getClass().getMethod("before", java.lang.Object.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Object[].class); // beforeMethod.invoke(interceptor, null, null, null, null, null); // - beginAddFindInterceptorCode(id, code); + beginAddFindInterceptorCode(id, code, interceptorType); if(interceptorType == STATIC_INTERCEPTOR) { code.format(" java.lang.Class[] beforeMethodParams = new Class[]{java.lang.Object.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Object[].class};"); } else { @@ -439,17 +483,18 @@ public class JavaAssistClass implements InstrumentClass { } else { code.begin(); if (interceptorType == STATIC_INTERCEPTOR) { - code.format(" %1$s interceptor = (%1$s) com.profiler.interceptor.InterceptorRegistry.getInterceptor(%2$d);", StaticBeforeInterceptor.class.getName(), id); + code.format(" %1$s interceptor = com.profiler.interceptor.InterceptorRegistry.getInterceptor(%2$d);", StaticAroundInterceptor.class.getName(), id); code.format(" interceptor.before(%1$s, \"%2$s\", \"%3$s\", \"%4$s\", %5$s);", target, ctClass.getName(), methodName, parameterDescription, parameter); } else { - code.format(" %1$s interceptor = (%1$s) com.profiler.interceptor.InterceptorRegistry.getInterceptor(%2$d);", SimpleBeforeInterceptor.class.getName(), id); + // simpleInterceptor인덱스에서 검색하여 typecasting을 제거한다. + code.format(" %1$s interceptor = com.profiler.interceptor.InterceptorRegistry.getSimpleInterceptor(%2$d);", SimpleAroundInterceptor.class.getName(), id); code.format(" interceptor.before(%1$s, %2$s);", target, parameter); } code.end(); } String buildBefore = code.toString(); - if (logger.isInfoEnabled()) { - logger.info("addStaticBeforeInterceptor catch behavior:{} code:{}", behavior.getLongName(), buildBefore); + if (logger.isDebugEnabled()) { + logger.debug("addStaticBeforeInterceptor catch behavior:{} code:{}", behavior.getLongName(), buildBefore); } if (behavior instanceof CtConstructor) { diff --git a/src/main/java/com/profiler/interceptor/bci/Type.java b/src/main/java/com/profiler/interceptor/bci/Type.java index bc922fe19..52f4db1ad 100644 --- a/src/main/java/com/profiler/interceptor/bci/Type.java +++ b/src/main/java/com/profiler/interceptor/bci/Type.java @@ -1,5 +1,9 @@ package com.profiler.interceptor.bci; public enum Type { - around, before, after, auto + around(0), before(1), after(2), auto(3); + private int a; + private Type(int a) { + this.a = a; + } } diff --git a/src/main/java/com/profiler/modifier/arcus/ArcusClientModifier.java b/src/main/java/com/profiler/modifier/arcus/ArcusClientModifier.java index 952e4c20b..ed8e2ae0e 100644 --- a/src/main/java/com/profiler/modifier/arcus/ArcusClientModifier.java +++ b/src/main/java/com/profiler/modifier/arcus/ArcusClientModifier.java @@ -1,6 +1,8 @@ package com.profiler.modifier.arcus; import java.security.ProtectionDomain; + +import com.profiler.interceptor.bci.Type; import com.profiler.logging.Logger; import com.profiler.Agent; @@ -34,7 +36,7 @@ public class ArcusClientModifier extends AbstractModifier { InstrumentClass aClass = byteCodeInstrumentor.getClass(javassistClassName); Interceptor setCacheManagerInterceptor = byteCodeInstrumentor.newInterceptor(classLoader, protectedDomain, "com.profiler.modifier.arcus.interceptors.SetCacheManagerInterceptor"); - aClass.addInterceptor("setCacheManager", new String[]{"net.spy.memcached.CacheManager"}, setCacheManagerInterceptor); + aClass.addInterceptor("setCacheManager", new String[]{"net.spy.memcached.CacheManager"}, setCacheManagerInterceptor, Type.before); return aClass.toBytecode(); } catch (Exception e) { diff --git a/src/main/java/com/profiler/modifier/arcus/BaseOperationModifier.java b/src/main/java/com/profiler/modifier/arcus/BaseOperationModifier.java index fa7f00f66..00da9abba 100644 --- a/src/main/java/com/profiler/modifier/arcus/BaseOperationModifier.java +++ b/src/main/java/com/profiler/modifier/arcus/BaseOperationModifier.java @@ -1,6 +1,8 @@ package com.profiler.modifier.arcus; import java.security.ProtectionDomain; + +import com.profiler.interceptor.bci.Type; import com.profiler.logging.Logger; import com.profiler.Agent; @@ -41,10 +43,10 @@ public class BaseOperationModifier extends AbstractModifier { aClass.addConstructorInterceptor(null, new BaseOperationConstructInterceptor()); Interceptor transitionStateInterceptor = byteCodeInstrumentor.newInterceptor(classLoader, protectedDomain, "com.profiler.modifier.arcus.interceptors.BaseOperationTransitionStateInterceptor"); - aClass.addInterceptor("transitionState", new String[]{"net.spy.memcached.ops.OperationState"}, transitionStateInterceptor); + aClass.addInterceptor("transitionState", new String[]{"net.spy.memcached.ops.OperationState"}, transitionStateInterceptor, Type.before); Interceptor cancelInterceptor = byteCodeInstrumentor.newInterceptor(classLoader, protectedDomain, "com.profiler.modifier.arcus.interceptors.BaseOperationCancelInterceptor"); - aClass.addInterceptor("cancel", null, cancelInterceptor); + aClass.addInterceptor("cancel", null, cancelInterceptor, Type.after); return aClass.toBytecode(); } catch (Exception e) { diff --git a/src/main/java/com/profiler/modifier/arcus/MemcachedClientModifier.java b/src/main/java/com/profiler/modifier/arcus/MemcachedClientModifier.java index 9ea85bced..d7ce47cd0 100644 --- a/src/main/java/com/profiler/modifier/arcus/MemcachedClientModifier.java +++ b/src/main/java/com/profiler/modifier/arcus/MemcachedClientModifier.java @@ -1,6 +1,8 @@ package com.profiler.modifier.arcus; import java.security.ProtectionDomain; + +import com.profiler.interceptor.bci.Type; import com.profiler.logging.Logger; import com.profiler.Agent; @@ -36,7 +38,7 @@ public class MemcachedClientModifier extends AbstractModifier { aClass.addTraceVariable("__serviceCode", "__setServiceCode", "__getServiceCode", "java.lang.String"); Interceptor addOpInterceptor = byteCodeInstrumentor.newInterceptor(classLoader, protectedDomain, "com.profiler.modifier.arcus.interceptors.AddOpInterceptor"); - aClass.addInterceptor("addOp", new String[]{"java.lang.String", "net.spy.memcached.ops.Operation"}, addOpInterceptor); + aClass.addInterceptor("addOp", new String[]{"java.lang.String", "net.spy.memcached.ops.Operation"}, addOpInterceptor, Type.before); return aClass.toBytecode(); } catch (Exception e) { diff --git a/src/main/java/com/profiler/modifier/arcus/interceptors/AddOpInterceptor.java b/src/main/java/com/profiler/modifier/arcus/interceptors/AddOpInterceptor.java index df974ad9f..d2186f167 100644 --- a/src/main/java/com/profiler/modifier/arcus/interceptors/AddOpInterceptor.java +++ b/src/main/java/com/profiler/modifier/arcus/interceptors/AddOpInterceptor.java @@ -1,14 +1,12 @@ package com.profiler.modifier.arcus.interceptors; -import com.profiler.interceptor.SimpleBeforeInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.logging.Logger; import com.profiler.logging.LoggerFactory; import net.spy.memcached.MemcachedClient; import net.spy.memcached.ops.Operation; -import com.profiler.interceptor.StaticBeforeInterceptor; -import com.profiler.logging.LoggingUtils; import com.profiler.util.MetaObject; /** @@ -16,7 +14,7 @@ import com.profiler.util.MetaObject; * @author netspider * */ -public class AddOpInterceptor implements SimpleBeforeInterceptor { +public class AddOpInterceptor implements SimpleAroundInterceptor { private final Logger logger = LoggerFactory.getLogger(AddOpInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -42,4 +40,8 @@ public class AddOpInterceptor implements SimpleBeforeInterceptor { setServiceCode.invoke(op, serviceCode); } + + @Override + public void after(Object target, Object[] args, Object result) { + } } diff --git a/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationCancelInterceptor.java b/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationCancelInterceptor.java index bb7caab86..3c77bfc70 100644 --- a/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationCancelInterceptor.java +++ b/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationCancelInterceptor.java @@ -1,7 +1,7 @@ package com.profiler.modifier.arcus.interceptors; import com.profiler.context.AsyncTrace; -import com.profiler.interceptor.SimpleBeforeInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.logging.Logger; import com.profiler.context.DefaultAsyncTrace; @@ -9,14 +9,12 @@ import com.profiler.logging.LoggerFactory; import com.profiler.util.TimeObject; import net.spy.memcached.protocol.BaseOperationImpl; -import com.profiler.interceptor.StaticBeforeInterceptor; -import com.profiler.logging.LoggingUtils; import com.profiler.util.MetaObject; /** * */ -public class BaseOperationCancelInterceptor implements SimpleBeforeInterceptor { +public class BaseOperationCancelInterceptor implements SimpleAroundInterceptor { private final Logger logger = LoggerFactory.getLogger(BaseOperationCancelInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -47,4 +45,8 @@ public class BaseOperationCancelInterceptor implements SimpleBeforeInterceptor { } } + @Override + public void after(Object target, Object[] args, Object result) { + + } } diff --git a/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationConstructInterceptor.java b/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationConstructInterceptor.java index e52306d32..091cb623c 100644 --- a/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationConstructInterceptor.java +++ b/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationConstructInterceptor.java @@ -1,22 +1,20 @@ package com.profiler.modifier.arcus.interceptors; -import com.profiler.interceptor.SimpleAfterInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.logging.Logger; import com.profiler.context.AsyncTrace; import com.profiler.context.Trace; import com.profiler.context.TraceContext; -import com.profiler.interceptor.StaticAfterInterceptor; import com.profiler.interceptor.TraceContextSupport; import com.profiler.logging.LoggerFactory; -import com.profiler.logging.LoggingUtils; import com.profiler.util.MetaObject; import com.profiler.util.TimeObject; /** * */ -public class BaseOperationConstructInterceptor implements SimpleAfterInterceptor, TraceContextSupport { +public class BaseOperationConstructInterceptor implements SimpleAroundInterceptor, TraceContextSupport { private final Logger logger = LoggerFactory.getLogger(BaseOperationConstructInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -24,18 +22,22 @@ public class BaseOperationConstructInterceptor implements SimpleAfterInterceptor private MetaObject setAsyncTrace = new MetaObject("__setAsyncTrace", Object.class); private TraceContext traceContext; + @Override + public void before(Object target, Object[] args) { + } + @Override public void after(Object target, Object[] args, Object result) { if (isDebug) { logger.afterInterceptor(target, args, result); } - + Trace trace = traceContext.currentTraceObject(); - + if (trace == null) { return; } - + // 일단 이벤트가 세지 않는다는 가정하에 별도 timeout처리가 없음. AsyncTrace asyncTrace = trace.createAsyncTrace(); asyncTrace.markBeforeTime(); @@ -47,6 +49,7 @@ public class BaseOperationConstructInterceptor implements SimpleAfterInterceptor @Override public void setTraceContext(TraceContext traceContext) { + this.traceContext = traceContext; } } diff --git a/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationTransitionStateInterceptor.java b/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationTransitionStateInterceptor.java index d0238b3a7..9e60e4592 100644 --- a/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationTransitionStateInterceptor.java +++ b/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationTransitionStateInterceptor.java @@ -24,7 +24,7 @@ import com.profiler.util.MetaObject; /** * */ -public class BaseOperationTransitionStateInterceptor implements SimpleBeforeInterceptor, ByteCodeMethodDescriptorSupport, TraceContextSupport { +public class BaseOperationTransitionStateInterceptor implements SimpleAroundInterceptor, ByteCodeMethodDescriptorSupport, TraceContextSupport { private final Logger logger = LoggerFactory.getLogger(BaseOperationTransitionStateInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -143,4 +143,8 @@ public class BaseOperationTransitionStateInterceptor implements SimpleBeforeInte public void setTraceContext(TraceContext traceContext) { this.traceContext = traceContext; } + + @Override + public void after(Object target, Object[] args, Object result) { + } } diff --git a/src/main/java/com/profiler/modifier/arcus/interceptors/CacheManagerConstructInterceptor.java b/src/main/java/com/profiler/modifier/arcus/interceptors/CacheManagerConstructInterceptor.java index fb107c954..198da1f80 100644 --- a/src/main/java/com/profiler/modifier/arcus/interceptors/CacheManagerConstructInterceptor.java +++ b/src/main/java/com/profiler/modifier/arcus/interceptors/CacheManagerConstructInterceptor.java @@ -1,11 +1,9 @@ package com.profiler.modifier.arcus.interceptors; -import com.profiler.interceptor.SimpleAfterInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.logging.Logger; -import com.profiler.interceptor.StaticAfterInterceptor; import com.profiler.logging.LoggerFactory; -import com.profiler.logging.LoggingUtils; import com.profiler.util.MetaObject; /** @@ -13,13 +11,18 @@ import com.profiler.util.MetaObject; * @author netspider * */ -public class CacheManagerConstructInterceptor implements SimpleAfterInterceptor { +public class CacheManagerConstructInterceptor implements SimpleAroundInterceptor { private final Logger logger = LoggerFactory.getLogger(CacheManagerConstructInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); private MetaObject setServiceCode = new MetaObject("__setServiceCode", String.class); + @Override + public void before(Object target, Object[] args) { + + } + @Override public void after(Object target, Object[] args, Object result) { if (isDebug) { diff --git a/src/main/java/com/profiler/modifier/arcus/interceptors/SetCacheManagerInterceptor.java b/src/main/java/com/profiler/modifier/arcus/interceptors/SetCacheManagerInterceptor.java index 3fb60535a..3bfd562e8 100644 --- a/src/main/java/com/profiler/modifier/arcus/interceptors/SetCacheManagerInterceptor.java +++ b/src/main/java/com/profiler/modifier/arcus/interceptors/SetCacheManagerInterceptor.java @@ -1,14 +1,13 @@ package com.profiler.modifier.arcus.interceptors; -import com.profiler.interceptor.SimpleBeforeInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.logging.Logger; import com.profiler.logging.LoggerFactory; import net.spy.memcached.CacheManager; import net.spy.memcached.MemcachedClient; -import com.profiler.interceptor.StaticBeforeInterceptor; -import com.profiler.logging.LoggingUtils; + import com.profiler.util.MetaObject; /** @@ -16,7 +15,7 @@ import com.profiler.util.MetaObject; * @author netspider * */ -public class SetCacheManagerInterceptor implements SimpleBeforeInterceptor { +public class SetCacheManagerInterceptor implements SimpleAroundInterceptor { private final Logger logger = LoggerFactory.getLogger(SetCacheManagerInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -35,4 +34,9 @@ public class SetCacheManagerInterceptor implements SimpleBeforeInterceptor { setServiceCode.invoke((MemcachedClient) target, serviceCode); } + + @Override + public void after(Object target, Object[] args, Object result) { + + } } diff --git a/src/main/java/com/profiler/modifier/db/interceptor/ConnectionCloseInterceptor.java b/src/main/java/com/profiler/modifier/db/interceptor/ConnectionCloseInterceptor.java index 6553fc5cc..a557592c6 100644 --- a/src/main/java/com/profiler/modifier/db/interceptor/ConnectionCloseInterceptor.java +++ b/src/main/java/com/profiler/modifier/db/interceptor/ConnectionCloseInterceptor.java @@ -1,16 +1,14 @@ package com.profiler.modifier.db.interceptor; -import com.profiler.interceptor.SimpleBeforeInterceptor; -import com.profiler.interceptor.StaticBeforeInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.interceptor.util.JDBCScope; import com.profiler.logging.LoggerFactory; -import com.profiler.logging.LoggingUtils; import com.profiler.util.MetaObject; import java.sql.Connection; import com.profiler.logging.Logger; -public class ConnectionCloseInterceptor implements SimpleBeforeInterceptor { +public class ConnectionCloseInterceptor implements SimpleAroundInterceptor { private final Logger logger = LoggerFactory.getLogger(ConnectionCloseInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -33,4 +31,8 @@ public class ConnectionCloseInterceptor implements SimpleBeforeInterceptor { this.setUrl.invoke(target, EMPTY); } } + + @Override + public void after(Object target, Object[] args, Object result) { + } } diff --git a/src/main/java/com/profiler/modifier/db/interceptor/ConnectionCreateInterceptor.java b/src/main/java/com/profiler/modifier/db/interceptor/ConnectionCreateInterceptor.java index e6c1e3965..dc00d6ba3 100644 --- a/src/main/java/com/profiler/modifier/db/interceptor/ConnectionCreateInterceptor.java +++ b/src/main/java/com/profiler/modifier/db/interceptor/ConnectionCreateInterceptor.java @@ -2,16 +2,17 @@ package com.profiler.modifier.db.interceptor; import java.sql.Connection; import java.util.Arrays; + +import com.profiler.interceptor.StaticAroundInterceptor; import com.profiler.logging.Logger; -import com.profiler.interceptor.StaticAfterInterceptor; import com.profiler.logging.LoggerFactory; import com.profiler.util.InterceptorUtils; import com.profiler.util.MetaObject; import com.profiler.util.StringUtils; @Deprecated -public class ConnectionCreateInterceptor implements StaticAfterInterceptor { +public class ConnectionCreateInterceptor implements StaticAroundInterceptor { private final Logger logger = LoggerFactory.getLogger(ConnectionCreateInterceptor.class.getName()); private final MetaObject setUrl = new MetaObject("__setUrl", String.class); @@ -34,4 +35,9 @@ public class ConnectionCreateInterceptor implements StaticAfterInterceptor { } } } + + @Override + public void before(Object target, String className, String methodName, String parameterDescription, Object[] args) { + + } } diff --git a/src/main/java/com/profiler/modifier/db/interceptor/PreparedStatementBindVariableInterceptor.java b/src/main/java/com/profiler/modifier/db/interceptor/PreparedStatementBindVariableInterceptor.java index 89707aa64..d5dbfc569 100644 --- a/src/main/java/com/profiler/modifier/db/interceptor/PreparedStatementBindVariableInterceptor.java +++ b/src/main/java/com/profiler/modifier/db/interceptor/PreparedStatementBindVariableInterceptor.java @@ -2,11 +2,10 @@ package com.profiler.modifier.db.interceptor; import com.profiler.context.Trace; import com.profiler.context.TraceContext; -import com.profiler.interceptor.StaticAfterInterceptor; +import com.profiler.interceptor.StaticAroundInterceptor; import com.profiler.interceptor.TraceContextSupport; import com.profiler.interceptor.util.JDBCScope; import com.profiler.logging.LoggerFactory; -import com.profiler.logging.LoggingUtils; import com.profiler.util.MetaObject; import com.profiler.util.NumberUtils; import com.profiler.util.bindvalue.BindValueConverter; @@ -14,7 +13,7 @@ import com.profiler.util.bindvalue.BindValueConverter; import java.util.Map; import com.profiler.logging.Logger; -public class PreparedStatementBindVariableInterceptor implements StaticAfterInterceptor, TraceContextSupport { +public class PreparedStatementBindVariableInterceptor implements StaticAroundInterceptor, TraceContextSupport { private final Logger logger = LoggerFactory.getLogger(PreparedStatementBindVariableInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -58,4 +57,9 @@ public class PreparedStatementBindVariableInterceptor implements StaticAfterInte public void setTraceContext(TraceContext traceContext) { this.traceContext = traceContext; } + + @Override + public void before(Object target, String className, String methodName, String parameterDescription, Object[] args) { + + } } diff --git a/src/main/java/com/profiler/modifier/db/interceptor/StatementCreateInterceptor.java b/src/main/java/com/profiler/modifier/db/interceptor/StatementCreateInterceptor.java index d0e4cae20..d05cf87ef 100644 --- a/src/main/java/com/profiler/modifier/db/interceptor/StatementCreateInterceptor.java +++ b/src/main/java/com/profiler/modifier/db/interceptor/StatementCreateInterceptor.java @@ -2,12 +2,10 @@ package com.profiler.modifier.db.interceptor; import com.profiler.context.Trace; import com.profiler.context.TraceContext; -import com.profiler.interceptor.SimpleAfterInterceptor; -import com.profiler.interceptor.StaticAfterInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.interceptor.TraceContextSupport; import com.profiler.interceptor.util.JDBCScope; import com.profiler.logging.LoggerFactory; -import com.profiler.logging.LoggingUtils; import com.profiler.modifier.db.DatabaseInfo; import com.profiler.util.InterceptorUtils; import com.profiler.util.MetaObject; @@ -15,7 +13,7 @@ import com.profiler.util.MetaObject; import java.sql.Connection; import com.profiler.logging.Logger; -public class StatementCreateInterceptor implements SimpleAfterInterceptor, TraceContextSupport { +public class StatementCreateInterceptor implements SimpleAroundInterceptor, TraceContextSupport { private final Logger logger = LoggerFactory.getLogger(StatementCreateInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -26,6 +24,10 @@ public class StatementCreateInterceptor implements SimpleAfterInterceptor, Trace private final MetaObject setUrl = new MetaObject("__setUrl", Object.class); private TraceContext traceContext; + @Override + public void before(Object target, Object[] args) { + } + @Override public void after(Object target, Object[] args, Object result) { if (isDebug) { diff --git a/src/main/java/com/profiler/modifier/db/interceptor/TransactionInterceptor.java b/src/main/java/com/profiler/modifier/db/interceptor/TransactionInterceptor.java index 51c72706c..37b728a95 100644 --- a/src/main/java/com/profiler/modifier/db/interceptor/TransactionInterceptor.java +++ b/src/main/java/com/profiler/modifier/db/interceptor/TransactionInterceptor.java @@ -30,7 +30,7 @@ public class TransactionInterceptor implements StaticAroundInterceptor, ByteCode logger.beforeInterceptor(target, className, methodName, parameterDescription, args); } if (JDBCScope.isInternal()) { - logger.info("internal jdbc scope. skip trace"); + logger.debug("internal jdbc scope. skip trace"); return; } Trace trace = traceContext.currentTraceObject(); diff --git a/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java b/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java index 4d345a642..9e4e50ae4 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java @@ -6,6 +6,7 @@ import com.profiler.interceptor.Interceptor; import com.profiler.interceptor.bci.ByteCodeInstrumentor; import com.profiler.interceptor.bci.InstrumentClass; import com.profiler.interceptor.bci.InstrumentException; +import com.profiler.interceptor.bci.Type; import com.profiler.modifier.db.interceptor.*; import com.profiler.modifier.AbstractModifier; @@ -46,10 +47,10 @@ public class MySQLConnectionImplModifier extends AbstractModifier { Interceptor closeConnection = new ConnectionCloseInterceptor(); - mysqlConnection.addInterceptor("close", null, closeConnection); + mysqlConnection.addInterceptor("close", null, closeConnection, Type.before); Interceptor createStatement = new StatementCreateInterceptor(); - mysqlConnection.addInterceptor("createStatement", null, createStatement); + mysqlConnection.addInterceptor("createStatement", null, createStatement, Type.after); Interceptor preparedStatement = new PreparedStatementCreateInterceptor(); diff --git a/src/main/java/com/profiler/modifier/tomcat/interceptors/CatalinaAwaitInterceptor.java b/src/main/java/com/profiler/modifier/tomcat/interceptors/CatalinaAwaitInterceptor.java index 463512d53..0dbfb59d2 100644 --- a/src/main/java/com/profiler/modifier/tomcat/interceptors/CatalinaAwaitInterceptor.java +++ b/src/main/java/com/profiler/modifier/tomcat/interceptors/CatalinaAwaitInterceptor.java @@ -1,6 +1,6 @@ package com.profiler.modifier.tomcat.interceptors; -import com.profiler.interceptor.SimpleBeforeInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.logging.Logger; import com.profiler.logging.LoggerFactory; @@ -10,7 +10,7 @@ import com.profiler.util.Assert; /** * */ -public class CatalinaAwaitInterceptor implements SimpleBeforeInterceptor { +public class CatalinaAwaitInterceptor implements SimpleAroundInterceptor { private Logger logger = LoggerFactory.getLogger(this.getClass().getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -30,4 +30,9 @@ public class CatalinaAwaitInterceptor implements SimpleBeforeInterceptor { agent.started(); // agent.sendStartupInfo(); } + + @Override + public void after(Object target, Object[] args, Object result) { + + } } diff --git a/src/main/java/com/profiler/modifier/tomcat/interceptors/ConnectorInitializeInterceptor.java b/src/main/java/com/profiler/modifier/tomcat/interceptors/ConnectorInitializeInterceptor.java index aff241d52..30d70a2da 100644 --- a/src/main/java/com/profiler/modifier/tomcat/interceptors/ConnectorInitializeInterceptor.java +++ b/src/main/java/com/profiler/modifier/tomcat/interceptors/ConnectorInitializeInterceptor.java @@ -1,7 +1,7 @@ package com.profiler.modifier.tomcat.interceptors; import com.profiler.Agent; -import com.profiler.interceptor.SimpleAfterInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import org.apache.catalina.connector.Connector; import com.profiler.logging.Logger; @@ -10,7 +10,7 @@ import com.profiler.logging.LoggerFactory; /** * */ -public class ConnectorInitializeInterceptor implements SimpleAfterInterceptor { +public class ConnectorInitializeInterceptor implements SimpleAroundInterceptor { private Logger logger = LoggerFactory.getLogger(this.getClass().getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -24,6 +24,11 @@ public class ConnectorInitializeInterceptor implements SimpleAfterInterceptor { this.agent = agent; } + @Override + public void before(Object target, Object[] args) { + + } + @Override public void after(Object target, Object[] args, Object result) { if (isDebug) { diff --git a/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardServiceStartInterceptor.java b/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardServiceStartInterceptor.java index b4e7c8c11..af5a20ac5 100644 --- a/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardServiceStartInterceptor.java +++ b/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardServiceStartInterceptor.java @@ -1,17 +1,15 @@ package com.profiler.modifier.tomcat.interceptors; -import com.profiler.interceptor.SimpleAfterInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.logging.Logger; import com.profiler.logging.LoggerFactory; import com.profiler.LifeCycleEventListener; -import com.profiler.interceptor.StaticAfterInterceptor; -import com.profiler.logging.LoggingUtils; /** * */ -public class StandardServiceStartInterceptor implements SimpleAfterInterceptor { +public class StandardServiceStartInterceptor implements SimpleAroundInterceptor { private final Logger logger = LoggerFactory.getLogger(StandardServiceStartInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -22,6 +20,11 @@ public class StandardServiceStartInterceptor implements SimpleAfterInterceptor { this.lifeCycleEventListener = lifeCycleEventListener; } + @Override + public void before(Object target, Object[] args) { + + } + @Override public void after(Object target, Object[] args, Object result) { if (isDebug) { diff --git a/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardServiceStopInterceptor.java b/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardServiceStopInterceptor.java index 46bc72710..bb1eb5aaa 100644 --- a/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardServiceStopInterceptor.java +++ b/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardServiceStopInterceptor.java @@ -1,17 +1,15 @@ package com.profiler.modifier.tomcat.interceptors; -import com.profiler.interceptor.SimpleAfterInterceptor; +import com.profiler.interceptor.SimpleAroundInterceptor; import com.profiler.logging.Logger; import com.profiler.logging.LoggerFactory; import com.profiler.LifeCycleEventListener; -import com.profiler.interceptor.StaticAfterInterceptor; -import com.profiler.logging.LoggingUtils; /** * */ -public class StandardServiceStopInterceptor implements SimpleAfterInterceptor { +public class StandardServiceStopInterceptor implements SimpleAroundInterceptor { private final Logger logger = LoggerFactory.getLogger(StandardServiceStopInterceptor.class.getName()); private final boolean isDebug = logger.isDebugEnabled(); @@ -22,6 +20,11 @@ public class StandardServiceStopInterceptor implements SimpleAfterInterceptor { this.lifeCycleEventListener = lifeCycleEventListener; } + @Override + public void before(Object target, Object[] args) { + + } + @Override public void after(Object target, Object[] args, Object result) { if (isDebug) { diff --git a/src/main/java/com/profiler/sampler/SamplingRateSampler.java b/src/main/java/com/profiler/sampler/SamplingRateSampler.java index 30bb38887..951132010 100644 --- a/src/main/java/com/profiler/sampler/SamplingRateSampler.java +++ b/src/main/java/com/profiler/sampler/SamplingRateSampler.java @@ -26,4 +26,12 @@ public class SamplingRateSampler implements Sampler{ int isSampling = samplingCount % samplingRate; return isSampling == 0; } + + @Override + public String toString() { + return "SamplingRateSampler{" + + "counter=" + counter + + "samplingRate=" + samplingRate + + '}'; + } } diff --git a/src/main/java/com/profiler/util/JavaAssistUtils.java b/src/main/java/com/profiler/util/JavaAssistUtils.java index 341645da4..b9f8be015 100644 --- a/src/main/java/com/profiler/util/JavaAssistUtils.java +++ b/src/main/java/com/profiler/util/JavaAssistUtils.java @@ -211,7 +211,7 @@ public class JavaAssistUtils { private static void dump(LocalVariableAttribute lva) { Logger logger = LoggerFactory.getLogger(JavaAssistUtils.class.getName()); - if (logger.isInfoEnabled()) { + if (logger.isDebugEnabled()) { StringBuilder buffer = new StringBuilder(1024); for (int i = 0; i < lva.tableLength(); i++) { buffer.append("\n"); @@ -225,7 +225,7 @@ public class JavaAssistUtils { buffer.append(" nameIndex:"); buffer.append(lva.nameIndex(i)); } - logger.info(buffer.toString()); + logger.debug(buffer.toString()); } } diff --git a/src/test/java/com/profiler/interceptor/InterceptorRegistryTest.java b/src/test/java/com/profiler/interceptor/InterceptorRegistryTest.java index 8404c1cfb..717cc8c47 100644 --- a/src/test/java/com/profiler/interceptor/InterceptorRegistryTest.java +++ b/src/test/java/com/profiler/interceptor/InterceptorRegistryTest.java @@ -46,6 +46,7 @@ public class InterceptorRegistryTest { logger.info("ctClass:" + ctClass.getSimpleName()); } + @Deprecated public void interceptor() throws NotFoundException, CannotCompileException, IllegalAccessException, InstantiationException, IOException { AroundInterceptor aroundInterceptor = new AroundInterceptor() { @Override @@ -58,7 +59,7 @@ public class InterceptorRegistryTest { System.out.println("after ctx:" + ctx); } }; - int i = InterceptorRegistry.addInterceptor(aroundInterceptor); +// int i = InterceptorRegistry.addInterceptor(aroundInterceptor); ClassPool p = ClassPool.getDefault(); diff --git a/src/test/java/com/profiler/interceptor/TestAfterInterceptor.java b/src/test/java/com/profiler/interceptor/TestAfterInterceptor.java index 6d899cceb..2cd696870 100644 --- a/src/test/java/com/profiler/interceptor/TestAfterInterceptor.java +++ b/src/test/java/com/profiler/interceptor/TestAfterInterceptor.java @@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory; import java.util.Arrays; -public class TestAfterInterceptor implements StaticAfterInterceptor { +public class TestAfterInterceptor implements StaticAroundInterceptor { private Logger logger = LoggerFactory.getLogger(this.getClass().getName()); public int call = 0; @@ -15,6 +15,11 @@ public class TestAfterInterceptor implements StaticAfterInterceptor { public Object[] args; public Object result; + @Override + public void before(Object target, String className, String methodName, String parameterDescription, Object[] args) { + + } + @Override public void after(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result) { logger.info("after target:" + target + " " + className + "." + methodName + parameterDescription + " args:" + Arrays.toString(args)); diff --git a/src/test/java/com/profiler/interceptor/TestBeforeInterceptor.java b/src/test/java/com/profiler/interceptor/TestBeforeInterceptor.java index 825315ae8..f9b86b58b 100644 --- a/src/test/java/com/profiler/interceptor/TestBeforeInterceptor.java +++ b/src/test/java/com/profiler/interceptor/TestBeforeInterceptor.java @@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory; import java.util.Arrays; -public class TestBeforeInterceptor implements StaticBeforeInterceptor { +public class TestBeforeInterceptor implements StaticAroundInterceptor { private Logger logger = LoggerFactory.getLogger(this.getClass().getName()); public int call = 0; @@ -23,4 +23,9 @@ public class TestBeforeInterceptor implements StaticBeforeInterceptor { this.args = args; call++; } + + @Override + public void after(Object target, String className, String methodName, String parameterDescription, Object[] args, Object result) { + + } } diff --git a/src/test/java/com/profiler/modifier/tomcat/InvokeMethodInterceptorTest.java b/src/test/java/com/profiler/modifier/tomcat/InvokeMethodInterceptorTest.java index 637cf8a84..17ca418d9 100644 --- a/src/test/java/com/profiler/modifier/tomcat/InvokeMethodInterceptorTest.java +++ b/src/test/java/com/profiler/modifier/tomcat/InvokeMethodInterceptorTest.java @@ -46,11 +46,11 @@ public class InvokeMethodInterceptorTest { TraceContext traceContext = new MockTraceContextFactory().create(); interceptor.setTraceContext(traceContext); - interceptor.before("target", "classname", "methodname", null, new Object[]{request, response}); - interceptor.after("target", "classname", "methodname", null, new Object[]{request, response}, new Object()); + interceptor.before("target", new Object[]{request, response}); + interceptor.after("target", new Object[]{request, response}, new Object()); - interceptor.before("target", "classname", "methodname", null, new Object[]{request, response}); - interceptor.after("target", "classname", "methodname", null, new Object[]{request, response}, new Object()); + interceptor.before("target", new Object[]{request, response}); + interceptor.after("target", new Object[]{request, response}, new Object()); } @Test @@ -74,11 +74,11 @@ public class InvokeMethodInterceptorTest { TraceContext traceContext = new MockTraceContextFactory().create(); StandardHostValveInvokeInterceptor interceptor = new StandardHostValveInvokeInterceptor(); interceptor.setTraceContext(traceContext); - interceptor.before("target", "classname", "methodname", null, new Object[]{request, response}); - interceptor.after("target", "classname", "methodname", null, new Object[]{request, response}, new Object()); + interceptor.before("target", new Object[]{request, response}); + interceptor.after("target", new Object[]{request, response}, new Object()); - interceptor.before("target", "classname", "methodname", null, new Object[]{request, response}); - interceptor.after("target", "classname", "methodname", null, new Object[]{request, response}, new Object()); + interceptor.before("target", new Object[]{request, response}); + interceptor.after("target", new Object[]{request, response}, new Object()); } @Test @@ -103,10 +103,10 @@ public class InvokeMethodInterceptorTest { StandardHostValveInvokeInterceptor interceptor = new StandardHostValveInvokeInterceptor(); interceptor.setTraceContext(traceContext); - interceptor.before("target", "classname", "methodname", null, new Object[]{request, response}); - interceptor.after("target", "classname", "methodname", null, new Object[]{request, response}, new Object()); + interceptor.before("target", new Object[]{request, response}); + interceptor.after("target", new Object[]{request, response}, new Object()); - interceptor.before("target", "classname", "methodname", null, new Object[]{request, response}); - interceptor.after("target", "classname", "methodname", null, new Object[]{request, response}, new Object()); + interceptor.before("target", new Object[]{request, response}); + interceptor.after("target", new Object[]{request, response}, new Object()); } } diff --git a/src/test/java/com/profiler/util/TestClassLoader.java b/src/test/java/com/profiler/util/TestClassLoader.java index 803e8f1a2..fc89064d8 100644 --- a/src/test/java/com/profiler/util/TestClassLoader.java +++ b/src/test/java/com/profiler/util/TestClassLoader.java @@ -54,8 +54,7 @@ public class TestClassLoader extends Loader { // 패키지명 필터로 바꾸던지 개선해야 될것으로 보임. this.delegateLoadingOf(Interceptor.class.getName()); this.delegateLoadingOf(StaticAroundInterceptor.class.getName()); - this.delegateLoadingOf(StaticBeforeInterceptor.class.getName()); - this.delegateLoadingOf(StaticAfterInterceptor.class.getName()); + this.delegateLoadingOf(SimpleAroundInterceptor.class.getName()); this.delegateLoadingOf(InterceptorRegistry.class.getName()); this.delegateLoadingOf(Trace.class.getName()); this.delegateLoadingOf(DefaultTrace.class.getName());