diff --git a/src/main/java/com/profiler/TomcatProfiler.java b/src/main/java/com/profiler/TomcatProfiler.java index 9bbe400e6..ff152d06f 100644 --- a/src/main/java/com/profiler/TomcatProfiler.java +++ b/src/main/java/com/profiler/TomcatProfiler.java @@ -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); } } diff --git a/src/main/java/com/profiler/interceptor/bci/ByteCodeInstrumentor.java b/src/main/java/com/profiler/interceptor/bci/ByteCodeInstrumentor.java new file mode 100644 index 000000000..bbb1ca980 --- /dev/null +++ b/src/main/java/com/profiler/interceptor/bci/ByteCodeInstrumentor.java @@ -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); +} diff --git a/src/main/java/com/profiler/interceptor/bci/ByteCodeManipulator.java b/src/main/java/com/profiler/interceptor/bci/ByteCodeManipulator.java deleted file mode 100644 index 4295e3aae..000000000 --- a/src/main/java/com/profiler/interceptor/bci/ByteCodeManipulator.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.profiler.interceptor.bci; - -import com.profiler.interceptor.Interceptor; - -public interface ByteCodeManipulator { - void addInterceptor(Interceptor interceptor); -} diff --git a/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java b/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java new file mode 100644 index 000000000..aeb00a9b0 --- /dev/null +++ b/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeInstrumentor.java @@ -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) { + } + } + } + } +} diff --git a/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeManipulator.java b/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeManipulator.java deleted file mode 100644 index 458fe5b76..000000000 --- a/src/main/java/com/profiler/interceptor/bci/JavaAssistByteCodeManipulator.java +++ /dev/null @@ -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) { - - } -} diff --git a/src/main/java/com/profiler/modifier/AbstractModifier.java b/src/main/java/com/profiler/modifier/AbstractModifier.java index e2de7905e..a2099c0cf 100644 --- a/src/main/java/com/profiler/modifier/AbstractModifier.java +++ b/src/main/java/com/profiler/modifier/AbstractModifier.java @@ -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) { - } - } - } - } } diff --git a/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java b/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java index c34823cbe..db814d7a0 100644 --- a/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java +++ b/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java @@ -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 registry = new HashMap(); - 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 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 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 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 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 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); } } diff --git a/src/main/java/com/profiler/modifier/Modifier.java b/src/main/java/com/profiler/modifier/Modifier.java index b4ef07116..23dec3b6d 100644 --- a/src/main/java/com/profiler/modifier/Modifier.java +++ b/src/main/java/com/profiler/modifier/Modifier.java @@ -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(); } diff --git a/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java b/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java index ef7631303..3c2f593a5 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java b/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java index 773001c94..57ad78c12 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java b/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java index 71edf7f87..48f84bcd7 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java b/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java index fc2d0711c..d555ac1c1 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java b/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java index 9cd25aee0..2eabe379c 100644 --- a/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java +++ b/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java b/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java index 3075cd70f..99760abe3 100644 --- a/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java +++ b/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java b/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java index c53a1173d..8be4efb73 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java b/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java index 60de06f2f..c95f6ca4a 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java b/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java index 646f1a721..d07533013 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java b/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java index be3b23965..8c4619bd1 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java @@ -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() { 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 59d0b3ba1..aa730c532 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java b/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java index 7b49e6903..b9e9cb822 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java b/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java index ca76f4c38..f4467110f 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java b/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java index e1ba2129b..2d86d387f 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java b/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java index 8cb8a5c72..933994ce1 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java b/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java index 535d3aeeb..1571fa320 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java b/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java index 230645c34..ff4e5756b 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/tomcat/CatalinaModifier.java b/src/main/java/com/profiler/modifier/tomcat/CatalinaModifier.java index 84a24ed84..7c8654c21 100644 --- a/src/main/java/com/profiler/modifier/tomcat/CatalinaModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/CatalinaModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java b/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java index 9e0eab144..83d30cf31 100644 --- a/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java b/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java index e0803a933..e349582e0 100644 --- a/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java @@ -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() { diff --git a/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java b/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java index 5c874e2c3..064e49843 100644 --- a/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java @@ -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();" + "}");