diff --git a/src/main/java/com/profiler/TomcatProfiler.java b/src/main/java/com/profiler/TomcatProfiler.java index 135d3539c..6dee102cc 100644 --- a/src/main/java/com/profiler/TomcatProfiler.java +++ b/src/main/java/com/profiler/TomcatProfiler.java @@ -94,195 +94,12 @@ public class TomcatProfiler implements ClassFileTransformer { @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) { - String javassistClassName = className.replace('/', '.'); - return findModifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); + if(findModifier == null) { + return null; + } - - if (className.startsWith("org/apache/catalina")) { - String javassistClassName = className.replace('/', '.'); - if (javassistClassName.equals("org.apache.catalina.core.StandardHostValve")) { - // Add code to monitor Request and Response - Modifier modifier = new EntryPointStandardHostValveModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("org.apache.catalina.core.StandardService")) { - // Add code to monitor Tomcat start and stop - Modifier modifier = new TomcatStandardServiceModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("org.apache.catalina.connector.Connector")) { - // Add code to set Tomcat's port numbers - TomcatConnectorModifier modifier = new TomcatConnectorModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } - } - // #### If JDBC_PROFILE is true, SQL data will be collected - if (tomcatProfilerConfig.enableJdbcProfile()) { - if (className.startsWith("com/mysql/jdbc")) { - // MySQL !!!!!!!!!! - String javassistClassName = className.replace('/', '.'); - if (javassistClassName.equals("com.mysql.jdbc.ConnectionImpl")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new MySQLConnectionImplModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("com.mysql.jdbc.StatementImpl")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new MySQLStatementModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("com.mysql.jdbc.PreparedStatement")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new MySQLPreparedStatementModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("com.mysql.jdbc.ResultSetImpl")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new MySQLResultSetModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } - } else if (className.startsWith("net/sourceforge/jtds/jdbc")) { - // MSSQL !!!!!!!!!! - String javassistClassName = className.replace('/', '.'); - if (javassistClassName.equals("net.sourceforge.jtds.jdbc.ConnectionJDBC2")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new MSSQLConnectionModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("net.sourceforge.jtds.jdbc.JtdsStatement")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new MSSQLStatementModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("net.sourceforge.jtds.jdbc.JtdsPreparedStatement")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new MSSQLPreparedStatementModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("net.sourceforge.jtds.jdbc.JtdsResultSet")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new MSSQLResultSetModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } - } else if (className.startsWith("org/apache/commons/dbcp")) { - // DBCP !!!!!!!!!! - String javassistClassName = className.replace('/', '.'); - if (javassistClassName.equals("org.apache.commons.dbcp.BasicDataSource")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new DBCPBasicDataSourceModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new DBCPPoolModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } - } else if (className.startsWith("cubrid/jdbc")) { - // CUBRID !!!!!!!!!! - String javassistClassName = className.replace('/', '.'); - /* - * if(!javassistClassName.equals( - * "cubrid.jdbc.driver.CUBRIDResultSet") && - * !javassistClassName.startsWith - * ("cubrid.jdbc.driver.ConnectionProperties")) { byte[] - * result=AbstractModifier.addBeforeAfterLogics(classPool, - * javassistClassName); if(result!=null) return result; } - */ - - if (javassistClassName.equals("cubrid.jdbc.driver.CUBRIDStatement")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new CubridStatementModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("cubrid.jdbc.driver.CUBRIDPreparedStatement")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new CubridPreparedStatementModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("cubrid.jdbc.driver.CUBRIDResultSet")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new CubridResultSetModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("cubrid.jdbc.jci.UStatement")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new CubridUStatementModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } - } else if (className.startsWith("oracle/jdbc")) { - String javassistClassName = className.replace('/', '.'); - if (javassistClassName.equals("oracle.jdbc.driver.OraclePreparedStatement")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new OraclePreparedStatementModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("oracle.jdbc.driver.OracleStatement")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new OracleStatementModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } else if (javassistClassName.equals("oracle.jdbc.driver.OracleResultSetImpl")) { - checkLibrary(javassistClassName, classLoader); - Modifier modifier = new OracleResultSetModifier(); - byte[] result = modifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); - if (result != null) - return result; - } - } - } - - return null; + String javassistClassName = className.replace('/', '.'); + return findModifier.modify(classPool, classLoader, javassistClassName, classFileBuffer); } - private void checkLibrary(String javassistClassName, ClassLoader classLoader) { - try { - classPool.get(javassistClassName); - } catch (NotFoundException nfe) { - // cnfe.printStackTrace(); - loadClassLoaderLibraries(classLoader); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void loadClassLoaderLibraries(ClassLoader classLoader) { - if (classLoader instanceof URLClassLoader) { - URLClassLoader urlClassLoader = (URLClassLoader) classLoader; - URL[] urlList = urlClassLoader.getURLs(); - for (URL tempURL : urlList) { - String filePath = tempURL.getFile(); - try { - classPool.appendClassPath(filePath); - // log("Loaded "+filePath+" library."); - } catch (NotFoundException e) { - - } - } - } - } } diff --git a/src/main/java/com/profiler/modifier/AbstractModifier.java b/src/main/java/com/profiler/modifier/AbstractModifier.java index ad315123f..1b3257a31 100644 --- a/src/main/java/com/profiler/modifier/AbstractModifier.java +++ b/src/main/java/com/profiler/modifier/AbstractModifier.java @@ -2,72 +2,110 @@ package com.profiler.modifier; import com.profiler.logging.Logger; -import javassist.ClassPool; -import javassist.CtClass; -import javassist.CtConstructor; -import javassist.CtMethod; +import javassist.*; + +import java.net.URL; +import java.net.URLClassLoader; public abstract class AbstractModifier implements Modifier { - private static final Logger logger = Logger.getLogger(AbstractModifier.class); + private static final Logger logger = Logger.getLogger(AbstractModifier.class); - public byte[] addBeforeAfterLogics(ClassPool classPool, String javassistClassName) { - try { - CtClass cc = classPool.get(javassistClassName); - CtMethod[] methods = cc.getDeclaredMethods(); + public byte[] addBeforeAfterLogics(ClassPool classPool, String javassistClassName) { + try { + CtClass cc = classPool.get(javassistClassName); + CtMethod[] methods = cc.getDeclaredMethods(); - for (CtMethod method : methods) { - if (!method.isEmpty()) { - String methodName = method.getName(); - CtClass[] params = method.getParameterTypes(); - StringBuilder sb = new StringBuilder(); + for (CtMethod method : methods) { + if (!method.isEmpty()) { + String methodName = method.getName(); + CtClass[] params = method.getParameterTypes(); + StringBuilder sb = new StringBuilder(); - if (params.length != 0) { - int paramsLength = params.length; + if (params.length != 0) { + int paramsLength = params.length; - for (int loop = paramsLength - 1; loop > 0; loop--) { - sb.append(params[loop].getName()).append(","); - } - // sb.substring(0, sb.length()-2); - } - method.insertBefore("{System.out.println(\"*****" + javassistClassName + "." + methodName + "(" + sb + ") is started.\");}"); - method.insertAfter("{System.out.println(\"*****" + javassistClassName + "." + methodName + "(" + sb + ") is finished.\");}"); - } else { - logger.warn(method.getLongName() + " is empty !!!!!"); - } - } + for (int loop = paramsLength - 1; loop > 0; loop--) { + sb.append(params[loop].getName()).append(","); + } + // sb.substring(0, sb.length()-2); + } + method.insertBefore("{System.out.println(\"*****" + javassistClassName + "." + methodName + "(" + sb + ") is started.\");}"); + method.insertAfter("{System.out.println(\"*****" + javassistClassName + "." + methodName + "(" + sb + ") is finished.\");}"); + } else { + logger.warn(method.getLongName() + " is empty !!!!!"); + } + } - CtConstructor[] constructors = cc.getConstructors(); + CtConstructor[] constructors = cc.getConstructors(); - for (CtConstructor constructor : constructors) { + for (CtConstructor constructor : constructors) { - if (!constructor.isEmpty()) { - CtClass[] params = constructor.getParameterTypes(); - StringBuilder sb = new StringBuilder(); + if (!constructor.isEmpty()) { + CtClass[] params = constructor.getParameterTypes(); + StringBuilder sb = new StringBuilder(); - if (params.length != 0) { - int paramsLength = params.length; - for (int loop = paramsLength - 1; loop > 0; loop--) { - sb.append(params[loop].getName()).append(","); - } - // sb.substring(0, sb.length()-2); - } + if (params.length != 0) { + int paramsLength = params.length; + for (int loop = paramsLength - 1; loop > 0; loop--) { + sb.append(params[loop].getName()).append(","); + } + // sb.substring(0, sb.length()-2); + } - constructor.insertBefore("{System.out.println(\"*****" + javassistClassName + " Constructor:Param=(" + sb + ") is started.\");}"); - constructor.insertAfter("{System.out.println(\"*****" + javassistClassName + " Constructor:Param=(" + sb + ") is finished.\");}"); - } else { - logger.warn(constructor.getLongName() + " is empty !!!!!"); - } - } - return cc.toBytecode(); - } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); - return null; - } - } + constructor.insertBefore("{System.out.println(\"*****" + javassistClassName + " Constructor:Param=(" + sb + ") is started.\");}"); + constructor.insertAfter("{System.out.println(\"*****" + javassistClassName + " Constructor:Param=(" + sb + ") is finished.\");}"); + } else { + logger.warn(constructor.getLongName() + " is empty !!!!!"); + } + } + return cc.toBytecode(); + } catch (Exception e) { + logger.error(e.getMessage()); + e.printStackTrace(); + return null; + } + } - public void printClassConvertComplete(String javassistClassName) { - logger.info("%s class is converted.", javassistClassName); - } + public void printClassConvertComplete(String javassistClassName) { + logger.info("%s class is converted.", javassistClassName); + } + + protected void checkLibrary(ClassPool classPool, String javassistClassName, ClassLoader classLoader) { + // TODO Util로 뽑을까? + boolean findClass = findClass(classPool, javassistClassName); + if(findClass) { + return; + } + loadClassLoaderLibraries(classPool, classLoader); + + } + + public boolean findClass(ClassPool classPool, String javassistClassName) { + // TODO 원래는 get인데. find는 ctclas를 생성하지 않아 변경. 어차피 아래서 생성하기는 함. 유효성 여부 확인 필요 + URL url = classPool.find(javassistClassName); + if (url == null) { + return false; + } + return true; + } + + private void loadClassLoaderLibraries(ClassPool classPool, 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 c82901e10..5c9e50a5e 100644 --- a/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java +++ b/src/main/java/com/profiler/modifier/DefaultModifierRegistry.java @@ -1,5 +1,22 @@ package com.profiler.modifier; +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; @@ -48,7 +65,100 @@ public class DefaultModifierRegistry implements ModifierRegistry { } public void addJdbcModifier() { + // TODO 드라이버 존재 체크 로직을 앞단으로 이동 시킬수 없는지 검토 + addMySqlDriver(); + addMsSqlDriver(); + + addOracleDriver(); + + addCubridDriver(); + + addDbcpDriver(); + } + + private void addMySqlDriver() { + packageIncludeFilters.add("com/mysql/jdbc"); + // TODO MySqlDriver는 버전별로 Connection이 interface인지 class인지가 다름. 문제 없는지 확인필요. + Modifier mysqlConnectionImplModifier = new MySQLConnectionImplModifier(); + registry.put("com/mysql/jdbc/ConnectionImpl", mysqlConnectionImplModifier); + + Modifier mysqlStatementModifier = new MySQLStatementModifier(); + registry.put("com/mysql/jdbc/StatementImpl", mysqlStatementModifier); + + Modifier mysqlPreparedStatementModifier = new MySQLPreparedStatementModifier(); + registry.put("com/mysql/jdbc/PreparedStatement", mysqlPreparedStatementModifier); + + Modifier mysqlResultSetModifier = new MySQLResultSetModifier(); + registry.put("com/mysql/jdbc/ResultSetImpl", mysqlResultSetModifier); + } + + private void addMsSqlDriver() { + packageIncludeFilters.add("net/sourceforge/jtds/jdbc"); + + Map registry = this.registry; + Modifier mssqlConnectionModifier = new MSSQLConnectionModifier(); + registry.put("net/sourceforge/jtds/jdbc/ConnectionJDBC2", mssqlConnectionModifier); + + Modifier mssqlStatementModifier = new MSSQLStatementModifier(); + registry.put("net/sourceforge/jtds/jdbc/JtdsStatement", mssqlStatementModifier); + + + Modifier mssqlPreparedStatementModifier = new MSSQLPreparedStatementModifier(); + registry.put("net/sourceforge/jtds/jdbc/JtdsPreparedStatement", mssqlPreparedStatementModifier); + + Modifier mssqlResultSetModifier = new MSSQLResultSetModifier(); + registry.put("net/sourceforge/jtds/jdbc/JtdsResultSet", mssqlResultSetModifier); } + + private void addOracleDriver() { + // 좀더 많이 필터링 가능하다. oracle/jdbc/driver + packageIncludeFilters.add("oracle/jdbc"); + + Map registry = this.registry; + // TODO oracle의 경우 connection에 대한 impl이 없음. 확인필요. + Modifier oraclePreparedStatementModifier = new OraclePreparedStatementModifier(); + registry.put("oracle/jdbc/driver/OraclePreparedStatement", oraclePreparedStatementModifier); + + Modifier oracleStatement = new OracleStatementModifier(); + registry.put("oracle/jdbc/driver/OracleStatement", oracleStatement); + + Modifier oracleResultSetModifier = new OracleResultSetModifier(); + registry.put("oracle/jdbc/driver/OracleResultSetImpl", oracleResultSetModifier); + } + + private void addCubridDriver() { + // 좀더 많이 필터링 가능하다. cubrid/jdbc/driver, cubrid/jdbc/jci + packageIncludeFilters.add("cubrid/jdbc"); + + Map registry = this.registry; + // TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요. + Modifier cubridStatementModifier = new CubridStatementModifier(); + registry.put("cubrid/jdbc/driver/CUBRIDStatement", cubridStatementModifier); + + Modifier cubridPreparedStatementModifier = new CubridPreparedStatementModifier(); + registry.put("cubrid/jdbc/driver/CUBRIDPreparedStatement", cubridPreparedStatementModifier); + + Modifier cubridResultSetModifier = new CubridResultSetModifier(); + registry.put("cubrid/jdbc/driver/CUBRIDResultSet", cubridResultSetModifier); + + Modifier cubridUStatementModifier = new CubridUStatementModifier(); + registry.put("cubrid/jdbc/jci/UStatement", cubridUStatementModifier); + + } + + private void addDbcpDriver() { + packageIncludeFilters.add("org/apache/commons/dbcp"); + + Map registry = this.registry; + // TODO cubrid의 경우도 connection에 대한 impl이 없음. 확인필요. + Modifier dbcpBasicDataSourceModifier = new DBCPBasicDataSourceModifier(); + registry.put("org/apache/commons/dbcp/BasicDataSource", dbcpBasicDataSourceModifier ); + + Modifier dbcpPoolModifier = new DBCPPoolModifier(); + registry.put("org/apache/commons/dbcp/PoolingDataSource$PoolGuardConnectionWrapper", dbcpPoolModifier); + + } + } 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 320f9b37d..e18b54295 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java @@ -15,6 +15,7 @@ public class CubridPreparedStatementModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("CubridPreparedStatementModifier modifing"); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 793a2f1cf..5f451e738 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java @@ -14,6 +14,7 @@ public class CubridResultSetModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("CubridResultSetModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 571cc3a39..f1a10161a 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java @@ -14,6 +14,7 @@ public class CubridStatementModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("CubridStatementModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 6df436d2a..933c0d57a 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java @@ -14,6 +14,7 @@ public class CubridUStatementModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("CubridUStatementModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 b8bb8ff14..2b1961951 100644 --- a/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java +++ b/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java @@ -14,6 +14,7 @@ public class DBCPBasicDataSourceModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("DBCPBasicDataSourceModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 007a52922..e8bade754 100644 --- a/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java +++ b/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java @@ -14,6 +14,7 @@ public class DBCPPoolModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("DBCPPoolModifier(PoolingDataSource$PoolGuardConnectionWrapper) modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 e05c8cd35..28c268a0e 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java @@ -14,7 +14,8 @@ public class MSSQLConnectionModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("MSSQLConnectionModifier modifing. %s", javassistClassName); - return changeMethods(classPool, classLoader, javassistClassName, classFileBuffer); + checkLibrary(classPool, javassistClassName, classLoader); + return changeMethods(classPool, classLoader, javassistClassName, classFileBuffer); } private byte[] changeMethods(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { 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 6612d1f26..358e7d5f2 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java @@ -15,6 +15,7 @@ public class MSSQLPreparedStatementModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("MSSQLPreparedStatementModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 2a9e1db3d..67b0817ec 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java @@ -14,6 +14,7 @@ public class MSSQLResultSetModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("MSSQLResultSetModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 febc5e0bf..d12d0784c 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java @@ -13,6 +13,7 @@ public class MSSQLStatementModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("MSSQLStatementModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 964bab855..2f49f7e31 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java @@ -14,7 +14,8 @@ public class MySQLConnectionImplModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("MySQLConnectionImplModifier modifing. %s", javassistClassName); - return changeMethods(classPool, classLoader, javassistClassName, classFileBuffer); + checkLibrary(classPool, javassistClassName, classLoader); + return changeMethods(classPool, classLoader, javassistClassName, classFileBuffer); } private byte[] changeMethods(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { 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 f08b4c276..18ef85f87 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java @@ -14,10 +14,12 @@ public class MySQLPreparedStatementModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("MySQLPreparedStatementModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { + try { CtClass cc = classPool.get(javassistClassName); updateSetInternalMethod(classPool, cc); 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 a3c2c7790..bac3a3fd9 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java @@ -14,6 +14,7 @@ public class MySQLResultSetModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("ResultSetImpl modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 280e552b0..c12810256 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java @@ -14,7 +14,8 @@ public class MySQLStatementModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("MySQLStatementModifier modifing. %s", javassistClassName); - return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); + checkLibrary(classPool, javassistClassName, classLoader); + return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } private byte[] changeMethod(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classfileBuffer) { 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 8b31e216c..126c3d5c2 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java @@ -15,6 +15,7 @@ public class OraclePreparedStatementModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("OraclePreparedStatementModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); // printClassInfo(javassistClassName); // return addBeforeAfterLogics(classPool,javassistClassName); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); 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 e0ca80b6c..07476910e 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java @@ -14,6 +14,7 @@ public class OracleResultSetModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("OracleResultSetImpl modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer); } 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 24b21c95f..d7ad311ea 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java @@ -13,6 +13,7 @@ public class OracleStatementModifier extends AbstractModifier { public byte[] modify(ClassPool classPool, ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { logger.info("OracleStatementModifier modifing. %s", javassistClassName); + checkLibrary(classPool, javassistClassName, classLoader); // printClassInfo(javassistClassName); // return addBeforeAfterLogics(classPool,javassistClassName); return changeMethod(classPool, classLoader, javassistClassName, classFileBuffer);