From ddc5f6b0831e63a97d143400a5201dfb862c75fe Mon Sep 17 00:00:00 2001 From: Chisu Yu Date: Tue, 31 Jul 2012 04:52:37 +0000 Subject: [PATCH] =?UTF-8?q?[=EC=9C=A0=EC=B9=98=EC=88=98]=20[NOBTS]=20refac?= =?UTF-8?q?toring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@473 84d0f5b1-2673-498c-a247-62c4ff18d310 --- .../java/com/profiler/TomcatProfiler.java | 37 +++----------- .../profiler/modifier/AbstractModifier.java | 19 +++++--- .../modifier/DefaultModifierRegistry.java | 48 +++++++++++-------- .../java/com/profiler/modifier/Modifier.java | 5 +- .../CubridPreparedStatementModifier.java | 26 +++++----- .../db/cubrid/CubridResultSetModifier.java | 22 +++++---- .../db/cubrid/CubridStatementModifier.java | 18 ++++--- .../db/cubrid/CubridUStatementModifier.java | 18 ++++--- .../db/dbcp/DBCPBasicDataSourceModifier.java | 18 ++++--- .../modifier/db/dbcp/DBCPPoolModifier.java | 18 ++++--- .../db/mssql/MSSQLConnectionModifier.java | 22 +++++---- .../mssql/MSSQLPreparedStatementModifier.java | 28 ++++++----- .../db/mssql/MSSQLResultSetModifier.java | 22 +++++---- .../db/mssql/MSSQLStatementModifier.java | 19 +++++--- .../db/mysql/MySQLConnectionImplModifier.java | 26 +++++----- .../mysql/MySQLPreparedStatementModifier.java | 26 +++++----- .../db/mysql/MySQLResultSetModifier.java | 22 +++++---- .../db/mysql/MySQLStatementModifier.java | 18 ++++--- .../OraclePreparedStatementModifier.java | 24 ++++++---- .../db/oracle/OracleResultSetModifier.java | 22 +++++---- .../db/oracle/OracleStatementModifier.java | 18 ++++--- .../EntryPointStandardHostValveModifier.java | 12 +++-- .../tomcat/TomcatConnectorModifier.java | 10 ++-- .../tomcat/TomcatStandardServiceModifier.java | 10 ++-- 24 files changed, 288 insertions(+), 220 deletions(-) diff --git a/src/main/java/com/profiler/TomcatProfiler.java b/src/main/java/com/profiler/TomcatProfiler.java index 72f92a159..4ff287459 100644 --- a/src/main/java/com/profiler/TomcatProfiler.java +++ b/src/main/java/com/profiler/TomcatProfiler.java @@ -3,38 +3,16 @@ package com.profiler; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.lang.instrument.Instrumentation; -import java.net.URL; -import java.net.URLClassLoader; import java.security.ProtectionDomain; -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; import com.profiler.logging.Logger; -import com.profiler.modifier.db.cubrid.CubridPreparedStatementModifier; -import com.profiler.modifier.db.cubrid.CubridResultSetModifier; -import com.profiler.modifier.db.cubrid.CubridStatementModifier; -import com.profiler.modifier.db.cubrid.CubridUStatementModifier; -import com.profiler.modifier.db.dbcp.DBCPBasicDataSourceModifier; -import com.profiler.modifier.db.dbcp.DBCPPoolModifier; -import com.profiler.modifier.db.mssql.MSSQLConnectionModifier; -import com.profiler.modifier.db.mssql.MSSQLPreparedStatementModifier; -import com.profiler.modifier.db.mssql.MSSQLResultSetModifier; -import com.profiler.modifier.db.mssql.MSSQLStatementModifier; -import com.profiler.modifier.db.mysql.MySQLConnectionImplModifier; -import com.profiler.modifier.db.mysql.MySQLPreparedStatementModifier; -import com.profiler.modifier.db.mysql.MySQLResultSetModifier; -import com.profiler.modifier.db.mysql.MySQLStatementModifier; -import com.profiler.modifier.db.oracle.OraclePreparedStatementModifier; -import com.profiler.modifier.db.oracle.OracleResultSetModifier; -import com.profiler.modifier.db.oracle.OracleStatementModifier; -import com.profiler.modifier.tomcat.EntryPointStandardHostValveModifier; -import com.profiler.modifier.tomcat.TomcatConnectorModifier; -import com.profiler.modifier.tomcat.TomcatStandardServiceModifier; +import com.profiler.modifier.DefaultModifierRegistry; +import com.profiler.modifier.Modifier; +import com.profiler.modifier.ModifierRegistry; public class TomcatProfiler implements ClassFileTransformer { @@ -57,12 +35,12 @@ public class TomcatProfiler implements ClassFileTransformer { this.instrumentation = inst; this.instrumentation.addTransformer(this); this.classPool = createClassPool(); - this.modifierRepository = createModifierRegistry(tomcatProfilerConfig); + this.modifierRepository = createModifierRegistry(this.classPool, tomcatProfilerConfig); this.tomcatProfilerConfig = tomcatProfilerConfig; } - private ModifierRegistry createModifierRegistry(TomcatProfilerConfig tomcatProfilerConfig) { - DefaultModifierRegistry modifierRepository = new DefaultModifierRegistry(); + private ModifierRegistry createModifierRegistry(ClassPool classPool, TomcatProfilerConfig tomcatProfilerConfig) { + DefaultModifierRegistry modifierRepository = new DefaultModifierRegistry(classPool); modifierRepository.addTomcatModifier(); if (tomcatProfilerConfig.enableJdbcProfile()) { modifierRepository.addJdbcModifier(); @@ -99,7 +77,6 @@ public class TomcatProfiler implements ClassFileTransformer { } String javassistClassName = className.replace('/', '.'); - return findModifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); + return findModifier.modify(classLoader, javassistClassName, classFileBuffer); } - } diff --git a/src/main/java/com/profiler/modifier/AbstractModifier.java b/src/main/java/com/profiler/modifier/AbstractModifier.java index 206165f77..0694a0afd 100644 --- a/src/main/java/com/profiler/modifier/AbstractModifier.java +++ b/src/main/java/com/profiler/modifier/AbstractModifier.java @@ -11,7 +11,13 @@ public abstract class AbstractModifier implements Modifier { private static final Logger logger = Logger.getLogger(AbstractModifier.class); - public byte[] addBeforeAfterLogics(ClassPool classPool, String javassistClassName) { + protected final ClassPool classPool; + + public AbstractModifier(ClassPool classPool) { + this.classPool = classPool; + } + + public byte[] addBeforeAfterLogics(String javassistClassName) { try { CtClass cc = classPool.get(javassistClassName); CtMethod[] methods = cc.getDeclaredMethods(); @@ -71,17 +77,16 @@ public abstract class AbstractModifier implements Modifier { logger.info("%s class is converted.", javassistClassName); } - protected void checkLibrary(ClassPool classPool, String javassistClassName, ClassLoader classLoader) { + protected void checkLibrary(ClassLoader classLoader, String javassistClassName) { // TODO Util로 뽑을까? - boolean findClass = findClass(classPool, javassistClassName); + boolean findClass = findClass(javassistClassName); if (findClass) { return; } - loadClassLoaderLibraries(classPool, classLoader); - + loadClassLoaderLibraries(classLoader); } - public boolean findClass(ClassPool classPool, String javassistClassName) { + public boolean findClass(String javassistClassName) { // TODO 원래는 get인데. find는 ctclas를 생성하지 않아 변경. 어차피 아래서 생성하기는 함. 유효성 여부 확인 // 필요 URL url = classPool.find(javassistClassName); @@ -91,7 +96,7 @@ public abstract class AbstractModifier implements Modifier { return true; } - private void loadClassLoaderLibraries(ClassPool classPool, ClassLoader classLoader) { + private void loadClassLoaderLibraries(ClassLoader classLoader) { if (classLoader instanceof URLClassLoader) { URLClassLoader urlClassLoader = (URLClassLoader) classLoader; // TODO classLoader가 가지고 있는 전체 리소스를 모두 로드해야 되는것인지? 테스트 케이스 만들어서 diff --git a/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java b/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java index 9bb84ad83..5d4c0cfa8 100644 --- a/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java +++ b/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java @@ -3,6 +3,8 @@ package com.profiler.modifier; import java.util.HashMap; import java.util.Map; +import javassist.ClassPool; + import com.profiler.modifier.db.cubrid.CubridPreparedStatementModifier; import com.profiler.modifier.db.cubrid.CubridResultSetModifier; import com.profiler.modifier.db.cubrid.CubridStatementModifier; @@ -28,6 +30,12 @@ public class DefaultModifierRegistry implements ModifierRegistry { // TODO 혹시 동시성을 고려 해야 되는지 검토. private Map registry = new HashMap(); + private final ClassPool classPool; + + public DefaultModifierRegistry(ClassPool classPool) { + this.classPool = classPool; + } + @Override public Modifier findModifier(String className) { return registry.get(className); @@ -35,13 +43,13 @@ public class DefaultModifierRegistry implements ModifierRegistry { public void addTomcatModifier() { Map registry = this.registry; - Modifier entryPointStandardHostValveModifier = new EntryPointStandardHostValveModifier(); + Modifier entryPointStandardHostValveModifier = new EntryPointStandardHostValveModifier(classPool); registry.put("org/apache/catalina/core/StandardHostValve", entryPointStandardHostValveModifier); - Modifier tomcatStandardServiceModifier = new TomcatStandardServiceModifier(); + Modifier tomcatStandardServiceModifier = new TomcatStandardServiceModifier(classPool); registry.put("org/apache/catalina/core/StandardService", tomcatStandardServiceModifier); - Modifier tomcatConnectorModifier = new TomcatConnectorModifier(); + Modifier tomcatConnectorModifier = new TomcatConnectorModifier(classPool); registry.put("org/apache/catalina/connector/Connector", tomcatConnectorModifier); } @@ -61,31 +69,31 @@ public class DefaultModifierRegistry implements ModifierRegistry { private void addMySqlDriver() { // TODO MySqlDriver는 버전별로 Connection이 interface인지 class인지가 다름. 문제 없는지 // 확인필요. - Modifier mysqlConnectionImplModifier = new MySQLConnectionImplModifier(); + Modifier mysqlConnectionImplModifier = new MySQLConnectionImplModifier(classPool); registry.put("com/mysql/jdbc/ConnectionImpl", mysqlConnectionImplModifier); - Modifier mysqlStatementModifier = new MySQLStatementModifier(); + Modifier mysqlStatementModifier = new MySQLStatementModifier(classPool); registry.put("com/mysql/jdbc/StatementImpl", mysqlStatementModifier); - Modifier mysqlPreparedStatementModifier = new MySQLPreparedStatementModifier(); + Modifier mysqlPreparedStatementModifier = new MySQLPreparedStatementModifier(classPool); registry.put("com/mysql/jdbc/PreparedStatement", mysqlPreparedStatementModifier); - Modifier mysqlResultSetModifier = new MySQLResultSetModifier(); + Modifier mysqlResultSetModifier = new MySQLResultSetModifier(classPool); registry.put("com/mysql/jdbc/ResultSetImpl", mysqlResultSetModifier); } private void addMsSqlDriver() { Map registry = this.registry; - Modifier mssqlConnectionModifier = new MSSQLConnectionModifier(); + Modifier mssqlConnectionModifier = new MSSQLConnectionModifier(classPool); registry.put("net/sourceforge/jtds/jdbc/ConnectionJDBC2", mssqlConnectionModifier); - Modifier mssqlStatementModifier = new MSSQLStatementModifier(); + Modifier mssqlStatementModifier = new MSSQLStatementModifier(classPool); registry.put("net/sourceforge/jtds/jdbc/JtdsStatement", mssqlStatementModifier); - Modifier mssqlPreparedStatementModifier = new MSSQLPreparedStatementModifier(); + Modifier mssqlPreparedStatementModifier = new MSSQLPreparedStatementModifier(classPool); registry.put("net/sourceforge/jtds/jdbc/JtdsPreparedStatement", mssqlPreparedStatementModifier); - Modifier mssqlResultSetModifier = new MSSQLResultSetModifier(); + Modifier mssqlResultSetModifier = new MSSQLResultSetModifier(classPool); registry.put("net/sourceforge/jtds/jdbc/JtdsResultSet", mssqlResultSetModifier); } @@ -93,39 +101,39 @@ public class DefaultModifierRegistry implements ModifierRegistry { private void addOracleDriver() { Map registry = this.registry; // TODO oracle의 경우 connection에 대한 impl이 없음. 확인필요. - Modifier oraclePreparedStatementModifier = new OraclePreparedStatementModifier(); + Modifier oraclePreparedStatementModifier = new OraclePreparedStatementModifier(classPool); registry.put("oracle/jdbc/driver/OraclePreparedStatement", oraclePreparedStatementModifier); - Modifier oracleStatement = new OracleStatementModifier(); + Modifier oracleStatement = new OracleStatementModifier(classPool); registry.put("oracle/jdbc/driver/OracleStatement", oracleStatement); - Modifier oracleResultSetModifier = new OracleResultSetModifier(); + Modifier oracleResultSetModifier = new OracleResultSetModifier(classPool); registry.put("oracle/jdbc/driver/OracleResultSetImpl", oracleResultSetModifier); } private void addCubridDriver() { Map registry = this.registry; // TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요. - Modifier cubridStatementModifier = new CubridStatementModifier(); + Modifier cubridStatementModifier = new CubridStatementModifier(classPool); registry.put("cubrid/jdbc/driver/CUBRIDStatement", cubridStatementModifier); - Modifier cubridPreparedStatementModifier = new CubridPreparedStatementModifier(); + Modifier cubridPreparedStatementModifier = new CubridPreparedStatementModifier(classPool); registry.put("cubrid/jdbc/driver/CUBRIDPreparedStatement", cubridPreparedStatementModifier); - Modifier cubridResultSetModifier = new CubridResultSetModifier(); + Modifier cubridResultSetModifier = new CubridResultSetModifier(classPool); registry.put("cubrid/jdbc/driver/CUBRIDResultSet", cubridResultSetModifier); - Modifier cubridUStatementModifier = new CubridUStatementModifier(); + Modifier cubridUStatementModifier = new CubridUStatementModifier(classPool); registry.put("cubrid/jdbc/jci/UStatement", cubridUStatementModifier); } private void addDbcpDriver() { Map registry = this.registry; // TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요. - Modifier dbcpBasicDataSourceModifier = new DBCPBasicDataSourceModifier(); + Modifier dbcpBasicDataSourceModifier = new DBCPBasicDataSourceModifier(classPool); registry.put("org/apache/commons/dbcp/BasicDataSource", dbcpBasicDataSourceModifier); - Modifier dbcpPoolModifier = new DBCPPoolModifier(); + Modifier dbcpPoolModifier = new DBCPPoolModifier(classPool); registry.put("org/apache/commons/dbcp/PoolingDataSource$PoolGuardConnectionWrapper", dbcpPoolModifier); } } diff --git a/src/main/java/com/profiler/modifier/Modifier.java b/src/main/java/com/profiler/modifier/Modifier.java index 0f32b118b..1c0cf5e16 100644 --- a/src/main/java/com/profiler/modifier/Modifier.java +++ b/src/main/java/com/profiler/modifier/Modifier.java @@ -1,8 +1,5 @@ package com.profiler.modifier; - -import javassist.ClassPool; - public interface Modifier { - byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer); + byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer); } 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 32710f627..524f01944 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java @@ -13,18 +13,22 @@ public class CubridPreparedStatementModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(CubridPreparedStatementModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public CubridPreparedStatementModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateExecuteQueryMethod(classPool, cc); - updateConstructor(classPool, cc); + updateExecuteQueryMethod(cc); + updateConstructor(cc); printClassConvertComplete(javassistClassName); @@ -36,12 +40,12 @@ public class CubridPreparedStatementModifier extends AbstractModifier { return null; } - private static void updateConstructor(ClassPool classPool, CtClass cc) throws Exception { + private static void updateConstructor(CtClass cc) throws Exception { CtConstructor[] constructorList = cc.getConstructors(); - + for (CtConstructor constructor : constructorList) { CtClass params[] = constructor.getParameterTypes(); - + if (params.length > 2) { StringBuilder sb = new StringBuilder(); sb.append("{"); @@ -54,7 +58,7 @@ public class CubridPreparedStatementModifier extends AbstractModifier { } } - private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception { + private static void updateExecuteQueryMethod(CtClass cc) throws Exception { CtMethod serviceMethod = cc.getDeclaredMethod("execute", null); serviceMethod.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }"); } 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 be87c7a4c..d835cc645 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java @@ -12,18 +12,22 @@ public class CubridResultSetModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(CubridResultSetModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public CubridResultSetModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateNextMethod(classPool, cc); - updateCloseMethod(classPool, cc); + updateNextMethod(cc); + updateCloseMethod(cc); printClassConvertComplete(javassistClassName); @@ -35,12 +39,12 @@ public class CubridResultSetModifier extends AbstractModifier { return null; } - private static void updateNextMethod(ClassPool classPool, CtClass cc) throws Exception { + private static void updateNextMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("next", null); method.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".updateFetchCount(); }"); } - private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception { + private static void updateCloseMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("close", null); method.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".addResultSetData(); } "); } 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 f66b663c5..a934c6d12 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java @@ -12,17 +12,21 @@ public class CubridStatementModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(CubridStatementModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public CubridStatementModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateExecuteQueryMethod(classPool, cc); + updateExecuteQueryMethod(cc); printClassConvertComplete(javassistClassName); @@ -34,7 +38,7 @@ public class CubridStatementModifier extends AbstractModifier { return null; } - private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateExecuteQueryMethod(CtClass cc) throws Exception { CtClass[] params = new CtClass[1]; params[0] = classPool.getCtClass("java.lang.String"); CtMethod method = cc.getDeclaredMethod("executeQuery", params); 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 820057e07..17d4fdf04 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java @@ -12,17 +12,21 @@ public class CubridUStatementModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(CubridUStatementModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public CubridUStatementModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateBindValueMethod(classPool, cc); + updateBindValueMethod(cc); printClassConvertComplete(javassistClassName); @@ -34,7 +38,7 @@ public class CubridUStatementModifier extends AbstractModifier { return null; } - private static void updateBindValueMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateBindValueMethod(CtClass cc) throws Exception { CtClass[] params1 = new CtClass[3]; params1[0] = classPool.getCtClass("int"); params1[1] = classPool.getCtClass("byte"); 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 785adacc3..e38ee54b5 100644 --- a/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java +++ b/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java @@ -12,17 +12,21 @@ public class DBCPBasicDataSourceModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(DBCPBasicDataSourceModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public DBCPBasicDataSourceModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateGetConnectionMethod(classPool, cc); + updateGetConnectionMethod(cc); printClassConvertComplete(javassistClassName); @@ -34,7 +38,7 @@ public class DBCPBasicDataSourceModifier extends AbstractModifier { return null; } - private static void updateGetConnectionMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateGetConnectionMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("getConnection", null); method.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putConnection(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_GET_CONNECTION + ",$0.getUrl()); }"); } 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 684ec1d90..d20c548ff 100644 --- a/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java +++ b/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java @@ -12,17 +12,21 @@ public class DBCPPoolModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(DBCPPoolModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public DBCPPoolModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateCloseMethod(classPool, cc); + updateCloseMethod(cc); printClassConvertComplete(javassistClassName); @@ -34,7 +38,7 @@ public class DBCPPoolModifier extends AbstractModifier { return null; } - private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateCloseMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("close", null); method.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + "); }"); } 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 6675e9f0f..4772ea90b 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java @@ -12,18 +12,22 @@ public class MSSQLConnectionModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(MSSQLConnectionModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethods(classPool, classLoader, javassistClassName, classFileBuffer); + public MSSQLConnectionModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethods(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethods(javassistClassName, classFileBuffer); + } + + private byte[] changeMethods(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateCreateStatementMethod(classPool, cc); - updateCloseMethod(classPool, cc); + updateCreateStatementMethod(cc); + updateCloseMethod(cc); printClassConvertComplete(javassistClassName); @@ -35,7 +39,7 @@ public class MSSQLConnectionModifier extends AbstractModifier { return null; } - private static void updateCreateStatementMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateCreateStatementMethod(CtClass cc) throws Exception { CtClass[] params = new CtClass[2]; params[0] = classPool.getCtClass("int"); params[1] = classPool.getCtClass("int"); @@ -44,7 +48,7 @@ public class MSSQLConnectionModifier extends AbstractModifier { method.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CREATE_STATEMENT + "); }"); } - private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateCloseMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("close", null); method.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + "); }"); } 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 5e1624bf5..0551620e7 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java @@ -13,19 +13,23 @@ public class MSSQLPreparedStatementModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(MSSQLPreparedStatementModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public MSSQLPreparedStatementModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateSetParameterMethod(classPool, cc); - updateExecuteQueryMethod(classPool, cc); - updateConstructor(classPool, cc); + updateSetParameterMethod(cc); + updateExecuteQueryMethod(cc); + updateConstructor(cc); printClassConvertComplete(javassistClassName); @@ -37,7 +41,7 @@ public class MSSQLPreparedStatementModifier extends AbstractModifier { return null; } - private static void updateSetParameterMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateSetParameterMethod(CtClass cc) throws Exception { CtClass[] params1 = new CtClass[5]; params1[0] = classPool.getCtClass("int"); params1[1] = classPool.getCtClass("java.lang.Object"); @@ -49,16 +53,16 @@ public class MSSQLPreparedStatementModifier extends AbstractModifier { method.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlParam($1,$2);} "); } - private static void updateConstructor(ClassPool classPool, CtClass cc) throws Exception { + private void updateConstructor(CtClass cc) throws Exception { CtConstructor[] constructorList = cc.getConstructors(); - + if (constructorList.length == 1) { CtConstructor constructor = constructorList[0]; constructor.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2); }"); } } - private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateExecuteQueryMethod(CtClass cc) throws Exception { CtMethod serviceMethod = cc.getDeclaredMethod("execute", null); serviceMethod.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }"); } 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 6ebfeaa97..496c1f96b 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java @@ -12,18 +12,22 @@ public class MSSQLResultSetModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(MSSQLResultSetModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public MSSQLResultSetModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateNextMethod(classPool, cc); - updateCloseMethod(classPool, cc); + updateNextMethod(cc); + updateCloseMethod(cc); printClassConvertComplete(javassistClassName); @@ -35,12 +39,12 @@ public class MSSQLResultSetModifier extends AbstractModifier { return null; } - private static void updateNextMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateNextMethod(CtClass cc) throws Exception { CtMethod serviceMethod1 = cc.getDeclaredMethod("next", null); serviceMethod1.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".updateFetchCount(); }"); } - private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateCloseMethod(CtClass cc) throws Exception { CtMethod serviceMethod1 = cc.getDeclaredMethod("close", null); serviceMethod1.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".addResultSetData(); }"); } 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 efe64fad8..24727a942 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java @@ -9,19 +9,24 @@ import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; public class MSSQLStatementModifier extends AbstractModifier { + private static final Logger logger = Logger.getLogger(MSSQLStatementModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public MSSQLStatementModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateExecuteQueryMethod(classPool, cc); + updateExecuteQueryMethod(cc); printClassConvertComplete(javassistClassName); @@ -33,7 +38,7 @@ public class MSSQLStatementModifier extends AbstractModifier { return null; } - private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateExecuteQueryMethod(CtClass cc) throws Exception { CtClass[] params = new CtClass[1]; params[0] = classPool.getCtClass("java.lang.String"); CtMethod serviceMethod = cc.getDeclaredMethod("executeQuery", params); 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 7d1894ec5..93e527dba 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java @@ -12,19 +12,23 @@ public class MySQLConnectionImplModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(MySQLConnectionImplModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethods(classPool, classLoader, javassistClassName, classFileBuffer); + public MySQLConnectionImplModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethods(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethods(javassistClassName, classFileBuffer); + } + + private byte[] changeMethods(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateGetInstanceMethod(classPool, cc); - updateCreateStatementMethod(classPool, cc); - updateCloseMethod(classPool, cc); + updateGetInstanceMethod(cc); + updateCreateStatementMethod(cc); + updateCloseMethod(cc); printClassConvertComplete(javassistClassName); @@ -36,12 +40,12 @@ public class MySQLConnectionImplModifier extends AbstractModifier { return null; } - private static void updateCreateStatementMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateCreateStatementMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("createStatement", null); method.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CREATE_STATEMENT + "); }"); } - private static void updateGetInstanceMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateGetInstanceMethod(CtClass cc) throws Exception { CtClass[] params = new CtClass[5]; params[0] = classPool.getCtClass("java.lang.String"); params[1] = classPool.getCtClass("int"); @@ -53,7 +57,7 @@ public class MySQLConnectionImplModifier extends AbstractModifier { method.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putConnection(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_GET_CONNECTION + ",$5); }"); } - private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateCloseMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("close", null); method.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_CLOSE_CONNECTION + "); }"); } 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 1948e5a63..869b75d82 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java @@ -10,22 +10,26 @@ import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; public class MySQLPreparedStatementModifier extends AbstractModifier { + private static final Logger logger = Logger.getLogger(MySQLPreparedStatementModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public MySQLPreparedStatementModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateSetInternalMethod(classPool, cc); - updateExecuteQueryMethod(classPool, cc); - updateConstructor(classPool, cc); + updateSetInternalMethod(cc); + updateExecuteQueryMethod(cc); + updateConstructor(cc); printClassConvertComplete(javassistClassName); @@ -37,7 +41,7 @@ public class MySQLPreparedStatementModifier extends AbstractModifier { return null; } - private static void updateSetInternalMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateSetInternalMethod(CtClass cc) throws Exception { CtClass[] params1 = new CtClass[2]; params1[0] = classPool.getCtClass("int"); params1[1] = classPool.getCtClass("java.lang.String"); @@ -53,7 +57,7 @@ public class MySQLPreparedStatementModifier extends AbstractModifier { method2.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlParam($1,$2); }"); } - private static void updateConstructor(ClassPool classPool, CtClass cc) throws Exception { + private void updateConstructor(CtClass cc) throws Exception { CtConstructor[] constructorList = cc.getConstructors(); if (constructorList.length == 3) { for (CtConstructor constructor : constructorList) { @@ -65,7 +69,7 @@ public class MySQLPreparedStatementModifier extends AbstractModifier { } } - private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateExecuteQueryMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("executeQuery", null); method.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }"); } 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 9aa8447db..771999b73 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java @@ -12,18 +12,22 @@ public class MySQLResultSetModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(MySQLResultSetModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public MySQLResultSetModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateNextMethod(classPool, cc); - updateCloseMethod(classPool, cc); + updateNextMethod(cc); + updateCloseMethod(cc); printClassConvertComplete(javassistClassName); @@ -35,12 +39,12 @@ public class MySQLResultSetModifier extends AbstractModifier { return null; } - private static void updateNextMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateNextMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("next", null); method.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".updateFetchCount(); }"); } - private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateCloseMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("close", null); method.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".addResultSetData(); }"); } 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 2fa7d10c0..901b129a3 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java @@ -12,17 +12,21 @@ public class MySQLStatementModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(MySQLStatementModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public MySQLStatementModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateExecuteQueryMethod(classPool, cc); + updateExecuteQueryMethod(cc); printClassConvertComplete(javassistClassName); @@ -34,7 +38,7 @@ public class MySQLStatementModifier extends AbstractModifier { return null; } - private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateExecuteQueryMethod(CtClass cc) throws Exception { CtClass[] params = new CtClass[1]; params[0] = classPool.getCtClass("java.lang.String"); CtMethod method = cc.getDeclaredMethod("executeQuery", params); 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 72ad70500..f675158c0 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java @@ -13,19 +13,23 @@ public class OraclePreparedStatementModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(OraclePreparedStatementModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + public OraclePreparedStatementModifier(ClassPool classPool) { + super(classPool); + } + + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateSetInternalMethod(classPool, cc); - updateExecuteMethod(classPool, cc); - updateConstructor(classPool, cc); + updateSetInternalMethod(cc); + updateExecuteMethod(cc); + updateConstructor(cc); printClassConvertComplete(javassistClassName); @@ -37,7 +41,7 @@ public class OraclePreparedStatementModifier extends AbstractModifier { return null; } - private static void updateSetInternalMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateSetInternalMethod(CtClass cc) throws Exception { CtClass[] params1 = new CtClass[2]; params1[0] = classPool.getCtClass("int"); params1[1] = classPool.getCtClass("java.lang.String"); @@ -56,7 +60,7 @@ public class OraclePreparedStatementModifier extends AbstractModifier { // ".putSqlParam($1,$2); {"); } - private static void updateConstructor(ClassPool classPool, CtClass cc) throws Exception { + private void updateConstructor(CtClass cc) throws Exception { CtConstructor[] constructorList = cc.getConstructors(); for (CtConstructor constructor : constructorList) { @@ -67,7 +71,7 @@ public class OraclePreparedStatementModifier extends AbstractModifier { } } - private static void updateExecuteMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateExecuteMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("execute", null); method.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".put(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_EXECUTE_QUERY + "); }"); } 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 5674639ff..04b5025f9 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java @@ -12,18 +12,22 @@ public class OracleResultSetModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(OracleResultSetModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public OracleResultSetModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateNextMethod(classPool, cc); - updateCloseMethod(classPool, cc); + updateNextMethod(cc); + updateCloseMethod(cc); printClassConvertComplete(javassistClassName); @@ -35,12 +39,12 @@ public class OracleResultSetModifier extends AbstractModifier { return null; } - private static void updateNextMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateNextMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("next", null); method.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".updateFetchCount(); }"); } - private static void updateCloseMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateCloseMethod(CtClass cc) throws Exception { CtMethod method = cc.getDeclaredMethod("close", null); method.insertBefore("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".addResultSetData(); }"); } 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 7f0a66c8f..774d81ffe 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java @@ -11,17 +11,21 @@ import com.profiler.modifier.AbstractModifier; public class OracleStatementModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(OracleStatementModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - checkLibrary(classPool, javassistClassName, classLoader); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public OracleStatementModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + checkLibrary(classLoader, javassistClassName); + return changeMethod(javassistClassName, classFileBuffer); + } + + private byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); - updateExecuteQueryMethod(classPool, cc); + updateExecuteQueryMethod(cc); printClassConvertComplete(javassistClassName); @@ -32,7 +36,7 @@ public class OracleStatementModifier extends AbstractModifier { return null; } - private static void updateExecuteQueryMethod(ClassPool classPool, CtClass cc) throws Exception { + private void updateExecuteQueryMethod(CtClass cc) throws Exception { CtClass[] params = new CtClass[1]; params[0] = classPool.getCtClass("java.lang.String"); // CtMethod serviceMethod=cc.getDeclaredMethod("executeQuery", params); diff --git a/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java b/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java index f0b456542..993bdd88e 100644 --- a/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java @@ -20,12 +20,16 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(EntryPointStandardHostValveModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); - return changeServiceMethod(classPool, classLoader, javassistClassName, classFileBuffer); + public EntryPointStandardHostValveModifier(ClassPool classPool) { + super(classPool); } - private byte[] changeServiceMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + logger.info("Modifing. %s", javassistClassName); + return changeServiceMethod(classLoader, javassistClassName, classFileBuffer); + } + + private byte[] changeServiceMethod(ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { classPool.insertClassPath(new ByteArrayClassPath(javassistClassName, classfileBuffer)); try { addRequestTracerToCurrentClassLoader(classLoader); diff --git a/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java b/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java index fda7453fe..863717acc 100644 --- a/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java @@ -18,12 +18,16 @@ public class TomcatConnectorModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(TomcatConnectorModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + public TomcatConnectorModifier(ClassPool classPool) { + super(classPool); + } + + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("Modifing. %s", javassistClassName); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + return changeMethod(javassistClassName, classFileBuffer); } - public byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName); CtClass param[] = new CtClass[1]; diff --git a/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java b/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java index fd619bf7a..f6c436c0a 100644 --- a/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java @@ -19,12 +19,16 @@ public class TomcatStandardServiceModifier extends AbstractModifier { private static final Logger logger = Logger.getLogger(TomcatStandardServiceModifier.class); - public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { + public TomcatStandardServiceModifier(ClassPool classPool) { + super(classPool); + } + + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("Modifing. %s", javassistClassName); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + return changeMethod(javassistClassName, classFileBuffer); } - public byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + public byte[] changeMethod(String javassistClassName, byte[] classfileBuffer) { try { CtClass cc = classPool.get(javassistClassName);