mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-23 03:36:31 +10:00
[강운덕] [LUCYSUS-1744] interceptor load 코드 수정.
git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@533 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
@@ -4,6 +4,7 @@ import java.lang.instrument.ClassFileTransformer;
|
||||
import java.lang.instrument.IllegalClassFormatException;
|
||||
import java.lang.instrument.Instrumentation;
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
@@ -38,6 +39,7 @@ public class TomcatProfiler implements ClassFileTransformer {
|
||||
// this.classPool = createClassPool();
|
||||
this.modifierRepository = createModifierRegistry(byteCodeInstrumentor, tomcatProfilerConfig);
|
||||
this.tomcatProfilerConfig = tomcatProfilerConfig;
|
||||
|
||||
}
|
||||
|
||||
private ModifierRegistry createModifierRegistry(ByteCodeInstrumentor byteCodeInstrumentor, TomcatProfilerConfig tomcatProfilerConfig) {
|
||||
@@ -51,12 +53,16 @@ public class TomcatProfiler implements ClassFileTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(ClassLoader classLoader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classFileBuffer) throws IllegalClassFormatException {
|
||||
if (logger.isLoggable(Level.FINE)) {
|
||||
logger.fine("[transform] cl" + classLoader + " className:" + className);
|
||||
}
|
||||
Modifier findModifier = this.modifierRepository.findModifier(className);
|
||||
if (findModifier == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String javassistClassName = className.replace('/', '.');
|
||||
|
||||
return findModifier.modify(classLoader, javassistClassName, classFileBuffer);
|
||||
return findModifier.modify(classLoader, javassistClassName, protectionDomain, classFileBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,25 @@
|
||||
package com.profiler.interceptor;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class InterceptorRegistry {
|
||||
|
||||
private static final ConcurrentMap<Integer, Interceptor> INTERCEPTOR_MAP = new ConcurrentHashMap<Integer, Interceptor>(256);
|
||||
private static final AtomicInteger ID = new AtomicInteger(0);
|
||||
|
||||
public static void addInterceptor(Integer key, Interceptor interceptor) {
|
||||
INTERCEPTOR_MAP.put(key, interceptor);
|
||||
private static int MAX = 1024;
|
||||
private static final Interceptor[] INDEX = new Interceptor[MAX];
|
||||
|
||||
public static int addInterceptor(Interceptor interceptor) {
|
||||
int id = ID.getAndIncrement();
|
||||
if (id > MAX) {
|
||||
throw new IllegalArgumentException("id" + id);
|
||||
}
|
||||
INDEX[id] = interceptor;
|
||||
return id;
|
||||
}
|
||||
|
||||
public static Interceptor getInterceptor(int key) {
|
||||
return INTERCEPTOR_MAP.get(key);
|
||||
return INDEX[key];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.profiler.interceptor.bci;
|
||||
|
||||
import javassist.ClassPool;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
|
||||
|
||||
public interface ByteCodeInstrumentor {
|
||||
|
||||
@@ -11,4 +13,6 @@ public interface ByteCodeInstrumentor {
|
||||
void checkLibrary(ClassLoader classLoader, String javassistClassName);
|
||||
|
||||
InstrumentClass getClass(String javassistClassName);
|
||||
|
||||
Class defineClass(ClassLoader classLoader, String defineClass, ProtectionDomain protectedDomain);
|
||||
}
|
||||
|
||||
@@ -6,4 +6,6 @@ public interface InstrumentClass {
|
||||
void addInterceptor(String methodName, String[] args, Interceptor interceptor);
|
||||
|
||||
byte[] toBytecode();
|
||||
|
||||
Class toClass();
|
||||
}
|
||||
|
||||
@@ -2,12 +2,14 @@ package com.profiler.interceptor.bci;
|
||||
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
import com.profiler.interceptor.StaticBeforeInterceptor;
|
||||
import javassist.CannotCompileException;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.NotFoundException;
|
||||
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -71,6 +73,23 @@ public class JavaAssistByteCodeInstrumentor implements ByteCodeInstrumentor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class defineClass(ClassLoader classLoader, String defineClass, ProtectionDomain protectedDomain) {
|
||||
try {
|
||||
CtClass clazz = classPool.get(defineClass);
|
||||
return clazz.toClass(classLoader, protectedDomain);
|
||||
} catch (NotFoundException e) {
|
||||
if(logger.isLoggable(Level.WARNING)) {
|
||||
logger.log(Level.WARNING, e.getMessage(), e);
|
||||
}
|
||||
} catch (CannotCompileException e) {
|
||||
if(logger.isLoggable(Level.WARNING)) {
|
||||
logger.log(Level.WARNING, e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean findClass(String javassistClassName) {
|
||||
// TODO 원래는 get인데. find는 ctclas를 생성하지 않아 변경. 어차피 아래서 생성하기는 함. 유효성 여부 확인
|
||||
// 필요
|
||||
@@ -94,8 +113,9 @@ public class JavaAssistByteCodeInstrumentor implements ByteCodeInstrumentor {
|
||||
// TODO 여기서 로그로 class로더를 찍어보면 어떤 clasdLoader에서 로딩되는지 알수 있을거
|
||||
// 것같음.
|
||||
// 만약 한개만 로딩해도 된다면. return true 할것
|
||||
// log("Loaded "+filePath+" library.");
|
||||
|
||||
if(logger.isLoggable(Level.FINE)) {
|
||||
logger.info("Loaded "+filePath+" library.");
|
||||
}
|
||||
} catch (NotFoundException e) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,62 +5,140 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.profiler.interceptor.*;
|
||||
import javassist.CannotCompileException;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
import javassist.NotFoundException;
|
||||
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
import com.profiler.interceptor.InterceptorRegistry;
|
||||
import com.profiler.interceptor.StaticAroundInterceptor;
|
||||
|
||||
public class JavaAssistClass implements InstrumentClass {
|
||||
|
||||
private final Logger logger = Logger.getLogger(this.getClass().getName());
|
||||
private final Logger logger = Logger.getLogger(this.getClass().getName());
|
||||
|
||||
private JavaAssistByteCodeInstrumentor instrumentor;
|
||||
private CtClass ctClass;
|
||||
private JavaAssistByteCodeInstrumentor instrumentor;
|
||||
private CtClass ctClass;
|
||||
|
||||
private final AtomicInteger interceptorNo = new AtomicInteger(1);
|
||||
public JavaAssistClass(JavaAssistByteCodeInstrumentor instrumentor, CtClass ctClass) {
|
||||
this.instrumentor = instrumentor;
|
||||
this.ctClass = ctClass;
|
||||
}
|
||||
|
||||
public JavaAssistClass(JavaAssistByteCodeInstrumentor instrumentor, CtClass ctClass) {
|
||||
this.instrumentor = instrumentor;
|
||||
this.ctClass = ctClass;
|
||||
}
|
||||
@Override
|
||||
public void addInterceptor(String methodName, String[] args, Interceptor interceptor) {
|
||||
int id = InterceptorRegistry.addInterceptor(interceptor);
|
||||
try {
|
||||
CtMethod method = getMethod(methodName, args);
|
||||
if (interceptor instanceof StaticAroundInterceptor) {
|
||||
addAroundInterceptor(methodName, id, method);
|
||||
} else if (interceptor instanceof StaticBeforeInterceptor) {
|
||||
addStaticBeforeInterceptor(methodName, id, method);
|
||||
} else if (interceptor instanceof StaticAfterInterceptor) {
|
||||
addStaticAfterInterceptor(methodName, id, method);
|
||||
}
|
||||
} catch (NotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (CannotCompileException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInterceptor(String methodName, String[] args, Interceptor interceptor) {
|
||||
int num = interceptorNo.getAndIncrement();
|
||||
InterceptorRegistry.addInterceptor(num, interceptor);
|
||||
private void addAroundInterceptor(String methodName, int id, CtMethod method) throws NotFoundException, CannotCompileException {
|
||||
addStaticBeforeInterceptor(methodName, id, method);
|
||||
addStaticAfterInterceptor(methodName, id, method);
|
||||
}
|
||||
|
||||
try {
|
||||
CtClass[] params = new CtClass[args.length];
|
||||
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
params[i] = instrumentor.getClassPool().getCtClass(args[i]);
|
||||
}
|
||||
CtMethod method = ctClass.getDeclaredMethod(methodName, params);
|
||||
|
||||
// if (interceptor instanceof StaticAroundInterceptor) {
|
||||
method.insertBefore("System.out.println(\"request=\" + this.getClass().getClassLoader()); ((com.profiler.interceptor.StaticAroundInterceptor) com.profiler.interceptor.InterceptorRegistry.getInterceptor(" + num + ")).before(this, \"" + ctClass.getName() + "\", \"" + methodName + "\", $args);");
|
||||
// }
|
||||
private void addStaticAfterInterceptor(String methodName, int id, CtMethod method) throws CannotCompileException, NotFoundException {
|
||||
StringBuilder after = new StringBuilder(1024);
|
||||
after.append("{");
|
||||
addGetStaticAfterInterceptor(after, id);
|
||||
after.append(" interceptor.after(this, \"" + ctClass.getName() + "\", \"" + methodName + "\", $args, $_);");
|
||||
after.append("}");
|
||||
String buildAfter = after.toString();
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("addStaticAfterInterceptor after method:" + method.getLongName() + " code:" + buildAfter);
|
||||
}
|
||||
method.insertAfter(buildAfter);
|
||||
|
||||
} catch (NotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (CannotCompileException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
StringBuilder catchCode = new StringBuilder(1024);
|
||||
catchCode.append("{");
|
||||
addGetStaticAfterInterceptor(catchCode, id);
|
||||
catchCode.append(" interceptor.after(this, \"" + ctClass.getName() + "\", \"" + methodName + "\", $args, $e);");
|
||||
catchCode.append(" throw $e;");
|
||||
catchCode.append("}");
|
||||
String buildCatch = catchCode.toString();
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("addStaticAfterInterceptor catch method:" + method.getLongName() + " code:" + buildCatch);
|
||||
}
|
||||
CtClass th = instrumentor.getClassPool().get("java.lang.Throwable");
|
||||
method.addCatch(buildCatch, th);
|
||||
|
||||
}
|
||||
|
||||
private void addGetStaticAfterInterceptor(StringBuilder after, int id) {
|
||||
after.append(" com.profiler.interceptor.StaticAfterInterceptor interceptor = "
|
||||
+ "(com.profiler.interceptor.StaticAfterInterceptor) com.profiler.interceptor.InterceptorRegistry.getInterceptor(");
|
||||
after.append(id);
|
||||
after.append(");");
|
||||
}
|
||||
|
||||
private void addStaticBeforeInterceptor(String methodName, int id, CtMethod method) throws CannotCompileException {
|
||||
StringBuilder code = new StringBuilder(1024);
|
||||
code.append("{");
|
||||
addGetBeforeInterceptor(id, code);
|
||||
code.append(" interceptor.before(this, \"" + ctClass.getName() + "\", \"" + methodName + "\", $args);");
|
||||
code.append("}");
|
||||
String buildBefore = code.toString();
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("addStaticBeforeInterceptor catch method:" + method.getLongName() + " code:" + buildBefore);
|
||||
}
|
||||
method.insertBefore(buildBefore);
|
||||
}
|
||||
|
||||
private void addGetBeforeInterceptor(int id, StringBuilder code) {
|
||||
code.append(" com.profiler.interceptor.StaticBeforeInterceptor interceptor = "
|
||||
+ "(com.profiler.interceptor.StaticBeforeInterceptor)com.profiler.interceptor.InterceptorRegistry.getInterceptor(");
|
||||
code.append(id);
|
||||
code.append(");");
|
||||
}
|
||||
|
||||
|
||||
private CtMethod getMethod(String methodName, String[] args) throws NotFoundException {
|
||||
CtClass[] params = getCtParameter(args);
|
||||
return ctClass.getDeclaredMethod(methodName, params);
|
||||
}
|
||||
|
||||
private CtClass[] getCtParameter(String[] args) throws NotFoundException {
|
||||
if(args == null) {
|
||||
return null;
|
||||
}
|
||||
CtClass[] params = new CtClass[args.length];
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
params[i] = instrumentor.getClassPool().getCtClass(args[i]);
|
||||
}
|
||||
return params;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] toBytecode() {
|
||||
try {
|
||||
return ctClass.toBytecode();
|
||||
} catch (IOException e) {
|
||||
logger.log(Level.INFO, "IoException class:" + ctClass.getName() + " " + e.getMessage(), e);
|
||||
} catch (CannotCompileException e) {
|
||||
logger.log(Level.INFO, "CannotCompileException class:" + ctClass.getName() + " " + e.getMessage(), e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Class toClass() {
|
||||
try {
|
||||
return ctClass.toClass();
|
||||
} catch (CannotCompileException e) {
|
||||
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] toBytecode() {
|
||||
try {
|
||||
return ctClass.toBytecode();
|
||||
} catch (IOException e) {
|
||||
logger.log(Level.INFO, "IoException class:" + ctClass.getName() + " " + e.getMessage(), e);
|
||||
} catch (CannotCompileException e) {
|
||||
logger.log(Level.INFO, "CannotCompileException class:" + ctClass.getName() + " " + e.getMessage(), e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.profiler.modifier;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
|
||||
public interface Modifier {
|
||||
byte[] modify(ClassLoader classLoader, String className, byte[] classFileBuffer);
|
||||
byte[] modify(ClassLoader classLoader, String className, ProtectionDomain protectedDomain, byte[] classFileBuffer);
|
||||
String getTargetClass();
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.cubrid;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
import javassist.CtMethod;
|
||||
@@ -10,6 +9,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -25,7 +25,7 @@ public class CubridPreparedStatementModifier extends AbstractModifier {
|
||||
return "cubrid/jdbc/driver/CUBRIDPreparedStatement";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.profiler.modifier.db.cubrid;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -23,7 +23,7 @@ public class CubridResultSetModifier extends AbstractModifier {
|
||||
return "cubrid/jdbc/driver/CUBRIDResultSet";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.profiler.modifier.db.cubrid;
|
||||
import com.profiler.interceptor.StaticAroundInterceptor;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import com.profiler.interceptor.bci.InstrumentClass;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -11,6 +10,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -26,7 +26,7 @@ public class CubridStatementModifier extends AbstractModifier {
|
||||
return "cubrid/jdbc/driver/CUBRIDStatement";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.profiler.modifier.db.cubrid;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -23,7 +23,7 @@ public class CubridUStatementModifier extends AbstractModifier {
|
||||
return "cubrid/jdbc/jci/UStatement";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.dbcp;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -9,6 +8,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class DBCPBasicDataSourceModifier extends AbstractModifier {
|
||||
return "org/apache/commons/dbcp/BasicDataSource";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.dbcp;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -9,6 +8,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class DBCPPoolModifier extends AbstractModifier {
|
||||
return "org/apache/commons/dbcp/PoolingDataSource$PoolGuardConnectionWrapper";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -9,6 +8,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class MSSQLConnectionModifier extends AbstractModifier {
|
||||
return "net/sourceforge/jtds/jdbc/ConnectionJDBC2";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
import javassist.CtMethod;
|
||||
@@ -10,6 +9,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -25,7 +25,7 @@ public class MSSQLPreparedStatementModifier extends AbstractModifier {
|
||||
return "net/sourceforge/jtds/jdbc/JtdsPreparedStatement";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -9,6 +8,7 @@ import javassist.CtMethod;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class MSSQLResultSetModifier extends AbstractModifier {
|
||||
return "net/sourceforge/jtds/jdbc/JtdsResultSet";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -9,6 +8,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -23,7 +23,7 @@ public class MSSQLStatementModifier extends AbstractModifier {
|
||||
return "net/sourceforge/jtds/jdbc/JtdsStatement";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.mysql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -9,6 +8,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class MySQLConnectionImplModifier extends AbstractModifier {
|
||||
return "com/mysql/jdbc/ConnectionImpl";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.mysql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
import javassist.CtMethod;
|
||||
@@ -10,6 +9,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class MySQLPreparedStatementModifier extends AbstractModifier {
|
||||
return "com/mysql/jdbc/PreparedStatement";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.profiler.modifier.db.mysql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -23,7 +23,7 @@ public class MySQLResultSetModifier extends AbstractModifier {
|
||||
return "com/mysql/jdbc/ResultSetImpl";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.mysql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -9,6 +8,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class MySQLStatementModifier extends AbstractModifier {
|
||||
return "com/mysql/jdbc/StatementImpl";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.oracle;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
import javassist.CtMethod;
|
||||
@@ -11,6 +10,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -26,7 +26,7 @@ public class OraclePreparedStatementModifier extends AbstractModifier {
|
||||
return "oracle/jdbc/driver/OraclePreparedStatement";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.profiler.modifier.db.oracle;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -23,7 +23,7 @@ public class OracleResultSetModifier extends AbstractModifier {
|
||||
return "oracle/jdbc/driver/OracleResultSetImpl";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.profiler.modifier.db.oracle;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -9,6 +8,7 @@ import com.profiler.config.TomcatProfilerConstant;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
import com.profiler.trace.DatabaseRequestTracer;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -23,7 +23,7 @@ public class OracleStatementModifier extends AbstractModifier {
|
||||
return "oracle/jdbc/driver/OracleStatement";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)){
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.profiler.modifier.tomcat;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.Agent;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -29,7 +29,7 @@ public class CatalinaModifier extends AbstractModifier {
|
||||
return "org/apache/catalina/startup/Catalina";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
+26
-33
@@ -2,10 +2,11 @@ package com.profiler.modifier.tomcat;
|
||||
|
||||
import static com.profiler.config.TomcatProfilerConstant.CLASS_NAME_REQUEST_THRIFT_DTO;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javassist.ByteArrayClassPath;
|
||||
import javassist.*;
|
||||
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
@@ -31,60 +32,52 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier {
|
||||
return "org/apache/catalina/core/StandardHostValve";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
addRequestTracerToCurrentClassLoader(classLoader);
|
||||
|
||||
System.out.println("\n\n\n\n\n\n");
|
||||
System.out.println("EntryPointStandardHostValveModifier=" + classLoader);
|
||||
System.out.println("EntryPointStandardHostValveModifier parent=" + classLoader.getParent());
|
||||
|
||||
try {
|
||||
// Class.forName("com.profiler.modifier.tomcat.InvokeMethodInterceptor", false, classLoader);
|
||||
|
||||
System.out.println(org.apache.catalina.Manager.class.getClassLoader().loadClass("com.profiler.modifier.tomcat.InvokeMethodInterceptor").newInstance().getClass().getClassLoader());
|
||||
|
||||
System.out.println(classLoader.loadClass("com.profiler.modifier.tomcat.InvokeMethodInterceptor").newInstance().getClass().getClassLoader());
|
||||
} catch (InstantiationException e1) {
|
||||
// TODO Auto-generated catch block
|
||||
e1.printStackTrace();
|
||||
} catch (IllegalAccessException e1) {
|
||||
// TODO Auto-generated catch block
|
||||
e1.printStackTrace();
|
||||
} catch (ClassNotFoundException e1) {
|
||||
// TODO Auto-generated catch block
|
||||
e1.printStackTrace();
|
||||
}
|
||||
System.out.println("\n\n\n\n\n\n");
|
||||
Interceptor interceptor = newInterceptor(classLoader, protectedDomain);
|
||||
if(interceptor == null) {
|
||||
return null;
|
||||
}
|
||||
System.out.println("\n\n\n\n\n\n");
|
||||
|
||||
this.byteCodeInstrumentor.checkLibrary(classLoader, javassistClassName);
|
||||
|
||||
classPool.insertClassPath(new ByteArrayClassPath(javassistClassName, classFileBuffer));
|
||||
|
||||
InstrumentClass aClass = this.byteCodeInstrumentor.getClass(javassistClassName);
|
||||
|
||||
try {
|
||||
aClass.addInterceptor("invoke", new String[] { "org.apache.catalina.connector.Request", "org.apache.catalina.connector.Response" }, (Interceptor) org.apache.catalina.Manager.class.getClassLoader().loadClass("com.profiler.modifier.tomcat.InvokeMethodInterceptor").newInstance());
|
||||
} catch (InstantiationException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
aClass.addInterceptor("invoke", new String[] { "org.apache.catalina.connector.Request", "org.apache.catalina.connector.Response" }, interceptor);
|
||||
|
||||
return aClass.toBytecode();
|
||||
}
|
||||
|
||||
private void addRequestTracerToCurrentClassLoader(ClassLoader classLoader) {
|
||||
private Interceptor newInterceptor(ClassLoader classLoader, ProtectionDomain protectedDomain) {
|
||||
Class aClass = this.byteCodeInstrumentor.defineClass(classLoader, "com.profiler.modifier.tomcat.InvokeMethodInterceptor", protectedDomain);
|
||||
try {
|
||||
return (Interceptor)aClass.newInstance();
|
||||
} catch (InstantiationException e) {
|
||||
if (logger.isLoggable(Level.WARNING)) {
|
||||
logger.log(Level.WARNING, e.getMessage(), e);
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
if (logger.isLoggable(Level.WARNING)) {
|
||||
logger.log(Level.WARNING, e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void addRequestTracerToCurrentClassLoader(ClassLoader classLoader) {
|
||||
try {
|
||||
classLoader.loadClass(RequestTracer.FQCN);
|
||||
classLoader.loadClass(CLASS_NAME_REQUEST_THRIFT_DTO);
|
||||
classLoader.loadClass("org.apache.thrift.TBase");
|
||||
// classLoader.loadClass("com.profiler.modifier.tomcat.InvokeMethodInterceptor");
|
||||
} catch (Exception e) {
|
||||
if (logger.isLoggable(Level.WARNING)) {
|
||||
logger.log(Level.WARNING, e.getMessage(), e);
|
||||
|
||||
@@ -21,26 +21,30 @@ public class InvokeMethodInterceptor implements StaticAroundInterceptor {
|
||||
System.out.println("\n\n\n\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
||||
|
||||
System.out.println("interceptor=" + InvokeMethodInterceptor.class.getClassLoader());
|
||||
|
||||
javax.servlet.http.HttpServletRequest request = (javax.servlet.http.HttpServletRequest) args[0];
|
||||
String requestURL = request.getRequestURI();
|
||||
String clientIP = request.getRemoteAddr();
|
||||
String traceID = request.getHeader(Header.HTTP_TRACE_ID.toString());
|
||||
String parentSpanID = request.getHeader(Header.HTTP_TRACE_PARENT_SPAN_ID.toString());
|
||||
Boolean debug = Boolean.valueOf(request.getHeader(Header.HTTP_TRACE_DEBUG.toString()));
|
||||
String parameters = getParameter(request);
|
||||
|
||||
if (traceID == null)
|
||||
traceID = TraceID.newTraceID();
|
||||
try {
|
||||
HttpServletRequest request = (HttpServletRequest) args[0];
|
||||
String requestURL = request.getRequestURI();
|
||||
String clientIP = request.getRemoteAddr();
|
||||
String traceID = request.getHeader(Header.HTTP_TRACE_ID.toString());
|
||||
String parentSpanID = request.getHeader(Header.HTTP_TRACE_PARENT_SPAN_ID.toString());
|
||||
Boolean debug = Boolean.valueOf(request.getHeader(Header.HTTP_TRACE_DEBUG.toString()));
|
||||
String parameters = getParameter(request);
|
||||
|
||||
Trace trace = RequestContext.getTrace(traceID, parentSpanID, "StandardHostValveInterceptor", debug);
|
||||
if (traceID == null)
|
||||
traceID = TraceID.newTraceID();
|
||||
|
||||
Annotation a = new Annotation();
|
||||
a.setTimestamp(System.currentTimeMillis());
|
||||
Trace trace = RequestContext.getTrace(traceID, parentSpanID, "StandardHostValveInterceptor", debug);
|
||||
|
||||
RequestTracer.startTransaction(requestURL, clientIP, System.currentTimeMillis(), parameters);
|
||||
Annotation a = new Annotation();
|
||||
a.setTimestamp(System.currentTimeMillis());
|
||||
|
||||
}
|
||||
RequestTracer.startTransaction(requestURL, clientIP, System.currentTimeMillis(), parameters);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
|
||||
}
|
||||
System.out.println("end--------------");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void after(Object target, String className, String methodName, Object[] args, Object result) {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.profiler.modifier.tomcat;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
import com.profiler.Agent;
|
||||
import com.profiler.modifier.AbstractModifier;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -29,7 +29,7 @@ public class TomcatConnectorModifier extends AbstractModifier {
|
||||
return "org/apache/catalina/connector/Connector";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.profiler.modifier.tomcat;
|
||||
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
|
||||
@@ -31,7 +31,7 @@ public class TomcatStandardServiceModifier extends AbstractModifier {
|
||||
return "org/apache/catalina/core/StandardService";
|
||||
}
|
||||
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) {
|
||||
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("Modifing. " + javassistClassName);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user