mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-17 08:46:22 +10:00
[강운덕] [LUCYSUS-1744] 바이트 코드 조작 클래스 별도 분리.
git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@530 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
@@ -4,14 +4,14 @@ 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;
|
||||
import com.profiler.interceptor.bci.JavaAssistByteCodeInstrumentor;
|
||||
import com.profiler.modifier.DefaultModifierRegistry;
|
||||
import com.profiler.modifier.Modifier;
|
||||
import com.profiler.modifier.ModifierRegistry;
|
||||
import javassist.ClassPool;
|
||||
import javassist.NotFoundException;
|
||||
|
||||
|
||||
import com.profiler.config.TomcatProfilerConfig;
|
||||
|
||||
@@ -21,7 +21,7 @@ public class TomcatProfiler implements ClassFileTransformer {
|
||||
|
||||
private String agentArgString = "";
|
||||
private Instrumentation instrumentation;
|
||||
private ClassPool classPool;
|
||||
private ByteCodeInstrumentor byteCodeInstrumentor;
|
||||
|
||||
private final ModifierRegistry modifierRepository;
|
||||
private TomcatProfilerConfig tomcatProfilerConfig;
|
||||
@@ -35,13 +35,14 @@ public class TomcatProfiler implements ClassFileTransformer {
|
||||
this.agentArgString = agentArgs;
|
||||
this.instrumentation = inst;
|
||||
this.instrumentation.addTransformer(this);
|
||||
this.classPool = createClassPool();
|
||||
this.modifierRepository = createModifierRegistry(this.classPool, tomcatProfilerConfig);
|
||||
this.byteCodeInstrumentor = new JavaAssistByteCodeInstrumentor();
|
||||
// this.classPool = createClassPool();
|
||||
this.modifierRepository = createModifierRegistry(byteCodeInstrumentor, tomcatProfilerConfig);
|
||||
this.tomcatProfilerConfig = tomcatProfilerConfig;
|
||||
}
|
||||
|
||||
private ModifierRegistry createModifierRegistry(ClassPool classPool, TomcatProfilerConfig tomcatProfilerConfig) {
|
||||
DefaultModifierRegistry modifierRepository = new DefaultModifierRegistry(classPool);
|
||||
private ModifierRegistry createModifierRegistry(ByteCodeInstrumentor byteCodeInstrumentor, TomcatProfilerConfig tomcatProfilerConfig) {
|
||||
DefaultModifierRegistry modifierRepository = new DefaultModifierRegistry(byteCodeInstrumentor);
|
||||
modifierRepository.addTomcatModifier();
|
||||
if (tomcatProfilerConfig.enableJdbcProfile()) {
|
||||
modifierRepository.addJdbcModifier();
|
||||
@@ -49,41 +50,18 @@ public class TomcatProfiler implements ClassFileTransformer {
|
||||
return modifierRepository;
|
||||
}
|
||||
|
||||
private ClassPool createClassPool() {
|
||||
ClassPool classPool = new ClassPool(null);
|
||||
classPool.appendSystemPath();
|
||||
|
||||
String catalinaHome = System.getProperty("catalina.home");
|
||||
if (catalinaHome != null) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("CATALINA_HOME=" + catalinaHome);
|
||||
}
|
||||
|
||||
appendClassPath(classPool, catalinaHome + "/lib/servlet-api.jar");
|
||||
appendClassPath(classPool, catalinaHome + "/lib/catalina.jar");
|
||||
}
|
||||
return classPool;
|
||||
}
|
||||
|
||||
private void appendClassPath(ClassPool classPool, String pathName) {
|
||||
try {
|
||||
classPool.appendClassPath(pathName);
|
||||
} catch (NotFoundException e) {
|
||||
if (logger.isLoggable(Level.WARNING)) {
|
||||
logger.warning("lib not found. " + e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] transform(ClassLoader classLoader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classFileBuffer) throws IllegalClassFormatException {
|
||||
Modifier findModifier = this.modifierRepository.findModifier(className);
|
||||
if (findModifier == null) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
String javassistClassName = className.replace('/', '.');
|
||||
|
||||
|
||||
return findModifier.modify(classLoader, javassistClassName, classFileBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.profiler.interceptor.bci;
|
||||
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
import javassist.ClassPool;
|
||||
|
||||
public interface ByteCodeInstrumentor {
|
||||
|
||||
void addInterceptor(String className, String methodName, String[] args, Interceptor interceptor);
|
||||
|
||||
// 임시로 만들자.
|
||||
ClassPool getClassPool();
|
||||
|
||||
void checkLibrary(ClassLoader classLoader, String javassistClassName);
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package com.profiler.interceptor.bci;
|
||||
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
|
||||
public interface ByteCodeManipulator {
|
||||
void addInterceptor(Interceptor interceptor);
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package com.profiler.interceptor.bci;
|
||||
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
import com.profiler.interceptor.StaticBeforeInterceptor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.NotFoundException;
|
||||
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class JavaAssistByteCodeInstrumentor implements ByteCodeInstrumentor {
|
||||
|
||||
private final Logger logger = Logger.getLogger(JavaAssistByteCodeInstrumentor.class.getName());
|
||||
|
||||
private ClassPool classPool;
|
||||
|
||||
public JavaAssistByteCodeInstrumentor() {
|
||||
this.classPool = createClassPool();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInterceptor(String className, String methodName, String[] args, Interceptor interceptor) {
|
||||
if(interceptor instanceof StaticBeforeInterceptor) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public ClassPool getClassPool() {
|
||||
return this.classPool;
|
||||
}
|
||||
|
||||
private ClassPool createClassPool() {
|
||||
ClassPool classPool = new ClassPool(null);
|
||||
classPool.appendSystemPath();
|
||||
|
||||
String catalinaHome = System.getProperty("catalina.home");
|
||||
if (catalinaHome != null) {
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
logger.info("CATALINA_HOME=" + catalinaHome);
|
||||
}
|
||||
|
||||
appendClassPath(classPool, catalinaHome + "/lib/servlet-api.jar");
|
||||
appendClassPath(classPool, catalinaHome + "/lib/catalina.jar");
|
||||
}
|
||||
return classPool;
|
||||
}
|
||||
|
||||
private void appendClassPath(ClassPool classPool, String pathName) {
|
||||
try {
|
||||
classPool.appendClassPath(pathName);
|
||||
} catch (NotFoundException e) {
|
||||
if (logger.isLoggable(Level.WARNING)) {
|
||||
logger.warning("lib not found. " + e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void checkLibrary(ClassLoader classLoader, String javassistClassName) {
|
||||
// TODO Util로 뽑을까?
|
||||
boolean findClass = findClass(javassistClassName);
|
||||
if (findClass) {
|
||||
return;
|
||||
}
|
||||
loadClassLoaderLibraries(classLoader);
|
||||
}
|
||||
|
||||
public boolean findClass(String javassistClassName) {
|
||||
// TODO 원래는 get인데. find는 ctclas를 생성하지 않아 변경. 어차피 아래서 생성하기는 함. 유효성 여부 확인
|
||||
// 필요
|
||||
URL url = classPool.find(javassistClassName);
|
||||
if (url == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void loadClassLoaderLibraries(ClassLoader classLoader) {
|
||||
if (classLoader instanceof URLClassLoader) {
|
||||
URLClassLoader urlClassLoader = (URLClassLoader) classLoader;
|
||||
// TODO classLoader가 가지고 있는 전체 리소스를 모두 로드해야 되는것인지? 테스트 케이스 만들어서
|
||||
// 확인해봐야 할듯.
|
||||
URL[] urlList = urlClassLoader.getURLs();
|
||||
for (URL tempURL : urlList) {
|
||||
String filePath = tempURL.getFile();
|
||||
try {
|
||||
classPool.appendClassPath(filePath);
|
||||
// TODO 여기서 로그로 class로더를 찍어보면 어떤 clasdLoader에서 로딩되는지 알수 있을거
|
||||
// 것같음.
|
||||
// 만약 한개만 로딩해도 된다면. return true 할것
|
||||
// log("Loaded "+filePath+" library.");
|
||||
|
||||
} catch (NotFoundException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
package com.profiler.interceptor.bci;
|
||||
|
||||
import com.profiler.interceptor.Interceptor;
|
||||
|
||||
public class JavaAssistByteCodeManipulator implements ByteCodeManipulator{
|
||||
@Override
|
||||
public void addInterceptor(Interceptor interceptor) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.profiler.modifier;
|
||||
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.*;
|
||||
|
||||
import java.net.URL;
|
||||
@@ -13,9 +14,11 @@ public abstract class AbstractModifier implements Modifier {
|
||||
private final Logger logger = Logger.getLogger(AbstractModifier.class.getName());
|
||||
|
||||
protected final ClassPool classPool;
|
||||
protected ByteCodeInstrumentor byteCodeInstrumentor;
|
||||
|
||||
public AbstractModifier(ClassPool classPool) {
|
||||
this.classPool = classPool;
|
||||
public AbstractModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
this.byteCodeInstrumentor = byteCodeInstrumentor;
|
||||
this.classPool = byteCodeInstrumentor.getClassPool();
|
||||
}
|
||||
|
||||
public byte[] addBeforeAfterLogics(String javassistClassName) {
|
||||
@@ -88,43 +91,8 @@ public abstract class AbstractModifier implements Modifier {
|
||||
|
||||
}
|
||||
|
||||
protected void checkLibrary(ClassLoader classLoader, String javassistClassName) {
|
||||
// TODO Util로 뽑을까?
|
||||
boolean findClass = findClass(javassistClassName);
|
||||
if (findClass) {
|
||||
return;
|
||||
}
|
||||
loadClassLoaderLibraries(classLoader);
|
||||
}
|
||||
public void checkLibrary(ClassLoader classLoader, String javassistClassName) {
|
||||
this.byteCodeInstrumentor.checkLibrary(classLoader, javassistClassName);
|
||||
}
|
||||
|
||||
public boolean findClass(String javassistClassName) {
|
||||
// TODO 원래는 get인데. find는 ctclas를 생성하지 않아 변경. 어차피 아래서 생성하기는 함. 유효성 여부 확인
|
||||
// 필요
|
||||
URL url = classPool.find(javassistClassName);
|
||||
if (url == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void loadClassLoaderLibraries(ClassLoader classLoader) {
|
||||
if (classLoader instanceof URLClassLoader) {
|
||||
URLClassLoader urlClassLoader = (URLClassLoader) classLoader;
|
||||
// TODO classLoader가 가지고 있는 전체 리소스를 모두 로드해야 되는것인지? 테스트 케이스 만들어서
|
||||
// 확인해봐야 할듯.
|
||||
URL[] urlList = urlClassLoader.getURLs();
|
||||
for (URL tempURL : urlList) {
|
||||
String filePath = tempURL.getFile();
|
||||
try {
|
||||
classPool.appendClassPath(filePath);
|
||||
// TODO 여기서 로그로 class로더를 찍어보면 어떤 clasdLoader에서 로딩되는지 알수 있을거
|
||||
// 것같음.
|
||||
// 만약 한개만 로딩해도 된다면. return true 할것
|
||||
// log("Loaded "+filePath+" library.");
|
||||
|
||||
} catch (NotFoundException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.profiler.modifier;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javassist.ClassPool;
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
|
||||
import com.profiler.modifier.db.cubrid.CubridPreparedStatementModifier;
|
||||
import com.profiler.modifier.db.cubrid.CubridResultSetModifier;
|
||||
@@ -31,10 +31,10 @@ public class DefaultModifierRegistry implements ModifierRegistry {
|
||||
// TODO 혹시 동시성을 고려 해야 되는지 검토.
|
||||
private Map<String, Modifier> registry = new HashMap<String, Modifier>();
|
||||
|
||||
private final ClassPool classPool;
|
||||
private final ByteCodeInstrumentor byteCodeInstrumentor;
|
||||
|
||||
public DefaultModifierRegistry(ClassPool classPool) {
|
||||
this.classPool = classPool;
|
||||
public DefaultModifierRegistry(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
this.byteCodeInstrumentor = byteCodeInstrumentor;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -44,16 +44,16 @@ public class DefaultModifierRegistry implements ModifierRegistry {
|
||||
|
||||
public void addTomcatModifier() {
|
||||
Map<String, Modifier> registry = this.registry;
|
||||
Modifier entryPointStandardHostValveModifier = new EntryPointStandardHostValveModifier(classPool);
|
||||
Modifier entryPointStandardHostValveModifier = new EntryPointStandardHostValveModifier(byteCodeInstrumentor);
|
||||
registry.put(entryPointStandardHostValveModifier.getTargetClass(), entryPointStandardHostValveModifier);
|
||||
|
||||
Modifier tomcatStandardServiceModifier = new TomcatStandardServiceModifier(classPool);
|
||||
Modifier tomcatStandardServiceModifier = new TomcatStandardServiceModifier(byteCodeInstrumentor);
|
||||
registry.put(tomcatStandardServiceModifier.getTargetClass(), tomcatStandardServiceModifier);
|
||||
|
||||
Modifier tomcatConnectorModifier = new TomcatConnectorModifier(classPool);
|
||||
Modifier tomcatConnectorModifier = new TomcatConnectorModifier(byteCodeInstrumentor);
|
||||
registry.put(tomcatConnectorModifier.getTargetClass(), tomcatConnectorModifier);
|
||||
|
||||
Modifier tomcatCatalinaModifier = new CatalinaModifier(classPool);
|
||||
Modifier tomcatCatalinaModifier = new CatalinaModifier(byteCodeInstrumentor);
|
||||
registry.put(tomcatCatalinaModifier.getTargetClass(), tomcatCatalinaModifier);
|
||||
}
|
||||
|
||||
@@ -73,31 +73,31 @@ public class DefaultModifierRegistry implements ModifierRegistry {
|
||||
private void addMySqlDriver() {
|
||||
// TODO MySqlDriver는 버전별로 Connection이 interface인지 class인지가 다름. 문제 없는지
|
||||
// 확인필요.
|
||||
Modifier mysqlConnectionImplModifier = new MySQLConnectionImplModifier(classPool);
|
||||
Modifier mysqlConnectionImplModifier = new MySQLConnectionImplModifier(byteCodeInstrumentor);
|
||||
registry.put(mysqlConnectionImplModifier.getTargetClass(), mysqlConnectionImplModifier);
|
||||
|
||||
Modifier mysqlStatementModifier = new MySQLStatementModifier(classPool);
|
||||
Modifier mysqlStatementModifier = new MySQLStatementModifier(byteCodeInstrumentor);
|
||||
registry.put(mysqlStatementModifier.getTargetClass(), mysqlStatementModifier);
|
||||
|
||||
Modifier mysqlPreparedStatementModifier = new MySQLPreparedStatementModifier(classPool);
|
||||
Modifier mysqlPreparedStatementModifier = new MySQLPreparedStatementModifier(byteCodeInstrumentor);
|
||||
registry.put(mysqlPreparedStatementModifier.getTargetClass(), mysqlPreparedStatementModifier);
|
||||
|
||||
Modifier mysqlResultSetModifier = new MySQLResultSetModifier(classPool);
|
||||
Modifier mysqlResultSetModifier = new MySQLResultSetModifier(byteCodeInstrumentor);
|
||||
registry.put(mysqlResultSetModifier.getTargetClass(), mysqlResultSetModifier);
|
||||
}
|
||||
|
||||
private void addMsSqlDriver() {
|
||||
Map<String, Modifier> registry = this.registry;
|
||||
Modifier mssqlConnectionModifier = new MSSQLConnectionModifier(classPool);
|
||||
Modifier mssqlConnectionModifier = new MSSQLConnectionModifier(byteCodeInstrumentor);
|
||||
registry.put(mssqlConnectionModifier.getTargetClass(), mssqlConnectionModifier);
|
||||
|
||||
Modifier mssqlStatementModifier = new MSSQLStatementModifier(classPool);
|
||||
Modifier mssqlStatementModifier = new MSSQLStatementModifier(byteCodeInstrumentor);
|
||||
registry.put(mssqlStatementModifier.getTargetClass(), mssqlStatementModifier);
|
||||
|
||||
Modifier mssqlPreparedStatementModifier = new MSSQLPreparedStatementModifier(classPool);
|
||||
Modifier mssqlPreparedStatementModifier = new MSSQLPreparedStatementModifier(byteCodeInstrumentor);
|
||||
registry.put(mssqlPreparedStatementModifier.getTargetClass(), mssqlPreparedStatementModifier);
|
||||
|
||||
Modifier mssqlResultSetModifier = new MSSQLResultSetModifier(classPool);
|
||||
Modifier mssqlResultSetModifier = new MSSQLResultSetModifier(byteCodeInstrumentor);
|
||||
registry.put(mssqlResultSetModifier.getTargetClass(), mssqlResultSetModifier);
|
||||
|
||||
}
|
||||
@@ -105,39 +105,39 @@ public class DefaultModifierRegistry implements ModifierRegistry {
|
||||
private void addOracleDriver() {
|
||||
Map<String, Modifier> registry = this.registry;
|
||||
// TODO oracle의 경우 connection에 대한 impl이 없음. 확인필요.
|
||||
Modifier oraclePreparedStatementModifier = new OraclePreparedStatementModifier(classPool);
|
||||
Modifier oraclePreparedStatementModifier = new OraclePreparedStatementModifier(byteCodeInstrumentor);
|
||||
registry.put(oraclePreparedStatementModifier.getTargetClass(), oraclePreparedStatementModifier);
|
||||
|
||||
Modifier oracleStatement = new OracleStatementModifier(classPool);
|
||||
Modifier oracleStatement = new OracleStatementModifier(byteCodeInstrumentor);
|
||||
registry.put(oracleStatement.getTargetClass(), oracleStatement);
|
||||
|
||||
Modifier oracleResultSetModifier = new OracleResultSetModifier(classPool);
|
||||
Modifier oracleResultSetModifier = new OracleResultSetModifier(byteCodeInstrumentor);
|
||||
registry.put(oracleResultSetModifier.getTargetClass(), oracleResultSetModifier);
|
||||
}
|
||||
|
||||
private void addCubridDriver() {
|
||||
Map<String, Modifier> registry = this.registry;
|
||||
// TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요.
|
||||
Modifier cubridStatementModifier = new CubridStatementModifier(classPool);
|
||||
Modifier cubridStatementModifier = new CubridStatementModifier(byteCodeInstrumentor);
|
||||
registry.put(cubridStatementModifier.getTargetClass(), cubridStatementModifier);
|
||||
|
||||
Modifier cubridPreparedStatementModifier = new CubridPreparedStatementModifier(classPool);
|
||||
Modifier cubridPreparedStatementModifier = new CubridPreparedStatementModifier(byteCodeInstrumentor);
|
||||
registry.put(cubridPreparedStatementModifier.getTargetClass(), cubridPreparedStatementModifier);
|
||||
|
||||
Modifier cubridResultSetModifier = new CubridResultSetModifier(classPool);
|
||||
Modifier cubridResultSetModifier = new CubridResultSetModifier(byteCodeInstrumentor);
|
||||
registry.put(cubridResultSetModifier.getTargetClass(), cubridResultSetModifier);
|
||||
|
||||
Modifier cubridUStatementModifier = new CubridUStatementModifier(classPool);
|
||||
Modifier cubridUStatementModifier = new CubridUStatementModifier(byteCodeInstrumentor);
|
||||
registry.put(cubridStatementModifier.getTargetClass(), cubridUStatementModifier);
|
||||
}
|
||||
|
||||
private void addDbcpDriver() {
|
||||
Map<String, Modifier> registry = this.registry;
|
||||
// TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요.
|
||||
Modifier dbcpBasicDataSourceModifier = new DBCPBasicDataSourceModifier(classPool);
|
||||
Modifier dbcpBasicDataSourceModifier = new DBCPBasicDataSourceModifier(byteCodeInstrumentor);
|
||||
registry.put(dbcpBasicDataSourceModifier.getTargetClass(), dbcpBasicDataSourceModifier);
|
||||
|
||||
Modifier dbcpPoolModifier = new DBCPPoolModifier(classPool);
|
||||
Modifier dbcpPoolModifier = new DBCPPoolModifier(byteCodeInstrumentor);
|
||||
registry.put(dbcpPoolModifier.getTargetClass(), dbcpPoolModifier);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.profiler.modifier;
|
||||
|
||||
public interface Modifier {
|
||||
byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer);
|
||||
byte[] modify(ClassLoader classLoader, String className, byte[] classFileBuffer);
|
||||
String getTargetClass();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.cubrid;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
@@ -16,8 +17,8 @@ public class CubridPreparedStatementModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(CubridPreparedStatementModifier.class.getName());
|
||||
|
||||
public CubridPreparedStatementModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public CubridPreparedStatementModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.cubrid;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -14,8 +15,8 @@ public class CubridResultSetModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(CubridResultSetModifier.class.getName());
|
||||
|
||||
public CubridResultSetModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public CubridResultSetModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.cubrid;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -15,8 +16,8 @@ public class CubridStatementModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(CubridStatementModifier.class.getName());
|
||||
|
||||
public CubridStatementModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public CubridStatementModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.cubrid;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -14,8 +15,8 @@ public class CubridUStatementModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(CubridUStatementModifier.class.getName());
|
||||
|
||||
public CubridUStatementModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public CubridUStatementModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.dbcp;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -15,8 +16,8 @@ public class DBCPBasicDataSourceModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(DBCPBasicDataSourceModifier.class.getName());
|
||||
|
||||
public DBCPBasicDataSourceModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public DBCPBasicDataSourceModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.dbcp;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -15,8 +16,8 @@ public class DBCPPoolModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(DBCPPoolModifier.class.getName());
|
||||
|
||||
public DBCPPoolModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public DBCPPoolModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -15,8 +16,8 @@ public class MSSQLConnectionModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(MSSQLConnectionModifier.class.getName());
|
||||
|
||||
public MSSQLConnectionModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public MSSQLConnectionModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
@@ -16,8 +17,8 @@ public class MSSQLPreparedStatementModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(MSSQLPreparedStatementModifier.class.getName());
|
||||
|
||||
public MSSQLPreparedStatementModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public MSSQLPreparedStatementModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -15,8 +16,8 @@ public class MSSQLResultSetModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(MSSQLResultSetModifier.class.getName());
|
||||
|
||||
public MSSQLResultSetModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public MSSQLResultSetModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.mssql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -14,8 +15,8 @@ import java.util.logging.Logger;
|
||||
public class MSSQLStatementModifier extends AbstractModifier {
|
||||
private static final Logger logger = Logger.getLogger(MSSQLStatementModifier.class.getName());
|
||||
|
||||
public MSSQLStatementModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public MSSQLStatementModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.mysql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -15,8 +16,8 @@ public class MySQLConnectionImplModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(MySQLConnectionImplModifier.class.getName());
|
||||
|
||||
public MySQLConnectionImplModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public MySQLConnectionImplModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.mysql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
@@ -15,8 +16,8 @@ import java.util.logging.Logger;
|
||||
public class MySQLPreparedStatementModifier extends AbstractModifier {
|
||||
private final Logger logger = Logger.getLogger(MySQLPreparedStatementModifier.class.getName());
|
||||
|
||||
public MySQLPreparedStatementModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public MySQLPreparedStatementModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.mysql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -14,8 +15,8 @@ public class MySQLResultSetModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(MySQLResultSetModifier.class.getName());
|
||||
|
||||
public MySQLResultSetModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public MySQLResultSetModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.mysql;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -15,8 +16,8 @@ public class MySQLStatementModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(MySQLStatementModifier.class.getName());
|
||||
|
||||
public MySQLStatementModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public MySQLStatementModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.oracle;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtConstructor;
|
||||
@@ -17,8 +18,8 @@ public class OraclePreparedStatementModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(OraclePreparedStatementModifier.class.getName());
|
||||
|
||||
public OraclePreparedStatementModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public OraclePreparedStatementModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.oracle;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -14,8 +15,8 @@ public class OracleResultSetModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(OracleResultSetModifier.class.getName());
|
||||
|
||||
public OracleResultSetModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public OracleResultSetModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.db.oracle;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -14,8 +15,8 @@ import java.util.logging.Logger;
|
||||
public class OracleStatementModifier extends AbstractModifier {
|
||||
private final Logger logger = Logger.getLogger(OracleStatementModifier.class.getName());
|
||||
|
||||
public OracleStatementModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public OracleStatementModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.tomcat;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -20,8 +21,8 @@ public class CatalinaModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(CatalinaModifier.class.getName());
|
||||
|
||||
public CatalinaModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public CatalinaModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.profiler.modifier.tomcat;
|
||||
|
||||
import static com.profiler.config.TomcatProfilerConstant.CLASS_NAME_REQUEST_THRIFT_DTO;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ByteArrayClassPath;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
@@ -22,8 +24,8 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(EntryPointStandardHostValveModifier.class.getName());
|
||||
|
||||
public EntryPointStandardHostValveModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public EntryPointStandardHostValveModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.profiler.modifier.tomcat;
|
||||
|
||||
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.CtMethod;
|
||||
@@ -20,8 +21,8 @@ public class TomcatConnectorModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(TomcatConnectorModifier.class.getName());
|
||||
|
||||
public TomcatConnectorModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
public TomcatConnectorModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.profiler.modifier.tomcat;
|
||||
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;
|
||||
@@ -21,8 +22,9 @@ public class TomcatStandardServiceModifier extends AbstractModifier {
|
||||
|
||||
private final Logger logger = Logger.getLogger(TomcatStandardServiceModifier.class.getName());
|
||||
|
||||
public TomcatStandardServiceModifier(ClassPool classPool) {
|
||||
super(classPool);
|
||||
|
||||
public TomcatStandardServiceModifier(ByteCodeInstrumentor byteCodeInstrumentor) {
|
||||
super(byteCodeInstrumentor);
|
||||
}
|
||||
|
||||
public String getTargetClass() {
|
||||
@@ -39,7 +41,7 @@ public class TomcatStandardServiceModifier extends AbstractModifier {
|
||||
public byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) {
|
||||
try {
|
||||
CtClass cc = classPool.get(javassistClassName);
|
||||
|
||||
// byteCodeInstrumentor.addInterceptor(, "startAgent", null);
|
||||
CtMethod startMethod = cc.getDeclaredMethod("start", null);
|
||||
startMethod.insertBefore("{" + Agent.FQCN + ".startAgent();" + "}");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user