From ff91ee541dcddf89998daa88c45c0ba0128c342a Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 8 Aug 2012 21:13:26 +0800 Subject: [PATCH 1/8] add DataSourceClosedException --- .../druid/pool/DataSourceClosedException.java | 21 ++++++++++ .../alibaba/druid/pool/DruidDataSource.java | 40 ++++++++++++------- .../alibaba/druid/bvt/pool/ClosedTest.java | 32 +++++++++++++++ 3 files changed, 78 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/pool/DataSourceClosedException.java create mode 100644 src/test/java/com/alibaba/druid/bvt/pool/ClosedTest.java diff --git a/src/main/java/com/alibaba/druid/pool/DataSourceClosedException.java b/src/main/java/com/alibaba/druid/pool/DataSourceClosedException.java new file mode 100644 index 0000000000..c003909874 --- /dev/null +++ b/src/main/java/com/alibaba/druid/pool/DataSourceClosedException.java @@ -0,0 +1,21 @@ +package com.alibaba.druid.pool; + +import java.sql.SQLException; + +public class DataSourceClosedException extends SQLException { + + private static final long serialVersionUID = 1L; + + public DataSourceClosedException(){ + super(); + } + + public DataSourceClosedException(String reason){ + super(reason); + } + + public DataSourceClosedException(Throwable cause){ + super(cause); + } + +} diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index f29afaa9af..b29009d5f2 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -72,7 +72,7 @@ import com.alibaba.druid.util.JdbcUtils; */ public class DruidDataSource extends DruidAbstractDataSource implements DruidDataSourceMBean, ManagedDataSource, Referenceable, Closeable, Cloneable, ConnectionPoolDataSource { - public final static Log LOG = LogFactory.getLog(DruidDataSource.class); + public final static Log LOG = LogFactory.getLog(DruidDataSource.class); private static final long serialVersionUID = 1L; @@ -117,6 +117,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private String initStackTrace; private boolean closed = false; + private long closeTimeMillis = -1L; private JdbcDataSourceStat dataSourceStat; @@ -274,23 +275,23 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (this.driverClass != null) { this.driverClass = driverClass.trim(); } - + if (isTestOnBorrow() || isTestOnReturn() || isTestWhileIdle()) { if (this.getValidationQuery() == null || this.getValidationQuery().length() == 0) { String errorMessage = ""; - + if (isTestOnBorrow()) { errorMessage += "testOnBorrow is true, "; } - + if (isTestOnReturn()) { errorMessage += "testOnReturn is true, "; } - + if (isTestWhileIdle()) { errorMessage += "testWhileIdle is true, "; } - + LOG.error(errorMessage + "validationQuery not set"); } } @@ -301,9 +302,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (jdbcUrl.startsWith(DruidDriver.DEFAULT_PREFIX)) { DataSourceProxyConfig config = DruidDriver.parseConfig(jdbcUrl, null); this.driverClass = config.getRawDriverClassName(); - + LOG.error("error url : '" + jdbcUrl + "', it should be : '" + config.getRawUrl() + "'"); - + this.jdbcUrl = config.getRawUrl(); if (this.name == null) { this.name = config.getName(); @@ -366,7 +367,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } else if (realDriverClassName.equals("com.alibaba.druid.mock.MockDriver")) { this.exceptionSorter = new MockExceptionSorter(); } - + if (realDriverClassName.equals("com.mysql.jdbc.Driver")) { if (this.isPoolPreparedStatements()) { LOG.error("mysql should not use 'PoolPreparedStatements'"); @@ -554,6 +555,11 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } try { + if (closed) { + connectErrorCount.incrementAndGet(); + throw new DataSourceClosedException("dataSource already closed at " + new Date(closeTimeMillis)); + } + if (!enable) { connectErrorCount.incrementAndGet(); throw new DataSourceDisableException(); @@ -775,6 +781,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat notEmptySignalCount++; this.closed = true; + this.closeTimeMillis = System.currentTimeMillis(); for (Filter filter : filters) { filter.destory(); @@ -782,6 +789,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } finally { lock.unlock(); } + + LOG.warn("dataSource " + this.getID() + " closed"); } void incrementCreateCount() { @@ -879,7 +888,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (createError != null) { throw new GetConnectionTimeoutException(createError); } else { - throw new GetConnectionTimeoutException("loopWaitCount " + i + ", wait millis " + (nanos - estimate)/(1000 * 1000)); + throw new GetConnectionTimeoutException("loopWaitCount " + i + ", wait millis " + + (nanos - estimate) / (1000 * 1000)); } } } @@ -1105,11 +1115,11 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat for (; iter.hasNext();) { Map.Entry entry = iter.next(); DruidPooledConnection pooledConnection = entry.getKey(); - + if (pooledConnection.isRunning()) { continue; } - + ActiveConnectionTraceInfo activeInfo = entry.getValue(); long timeMillis = currentMillis - activeInfo.getConnectTime(); @@ -1447,15 +1457,15 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat PreparedStatementPool stmtPool = connHolder.getStatementPool(); for (PreparedStatementHolder stmtHolder : stmtPool.getMap().values()) { Map stmtInfo = new LinkedHashMap(); - + stmtInfo.put("sql", stmtHolder.getKey().getSql()); stmtInfo.put("defaultRowPretch", stmtHolder.getDefaultRowPretch()); stmtInfo.put("rowPrefetch", stmtHolder.getRowPrefetch()); stmtInfo.put("hitCount", stmtHolder.getHitCount()); - + stmtCache.add(stmtInfo); } - + map.put("pscache", stmtCache); } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ClosedTest.java b/src/test/java/com/alibaba/druid/bvt/pool/ClosedTest.java new file mode 100644 index 0000000000..7dd6f43385 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/ClosedTest.java @@ -0,0 +1,32 @@ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DataSourceClosedException; +import com.alibaba.druid.pool.DruidDataSource; + +public class ClosedTest extends TestCase { + + public void test_close() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mock:xxx"); + + Connection conn = dataSource.getConnection(); + conn.close(); + + dataSource.close(); + + DataSourceClosedException error = null; + + try { + dataSource.getConnection(); + } catch (DataSourceClosedException ex) { + error = ex; + } + + Assert.assertNotNull(error); + } +} From 08aa4fbc03087780d241a4fae7ab512648a7b192 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 10 Aug 2012 08:40:06 +0800 Subject: [PATCH 2/8] add testcase --- .../alibaba/druid/filter/stat/StatFilter.java | 7 +++- .../druid/bvt/pool/SlowSqlMillisTest.java | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest.java diff --git a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java index 2ffd9e4e89..615097cdff 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java @@ -96,6 +96,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { this.dbType = dbType; } + public long getSlowSqlMillis() { + return slowSqlMillis; + } + public boolean isConnectionStackTraceEnable() { return connectionStackTraceEnable; } @@ -406,7 +410,8 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { } } - private final void internalAfterStatementExecute(StatementProxy statement, boolean firstResult, int... updateCountArray) { + private final void internalAfterStatementExecute(StatementProxy statement, boolean firstResult, + int... updateCountArray) { final JdbcStatementStat.Entry entry = getStatementInfo(statement); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest.java b/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest.java new file mode 100644 index 0000000000..e9674784eb --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest.java @@ -0,0 +1,32 @@ +package com.alibaba.druid.bvt.pool; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.filter.stat.StatFilter; +import com.alibaba.druid.pool.DruidDataSource; + + +public class SlowSqlMillisTest extends TestCase { + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:wrap-jdbc:jdbc:mock:xxx"); + dataSource.setTestOnBorrow(false); + dataSource.setTestOnReturn(false); + dataSource.setTestWhileIdle(false); + dataSource.setConnectionProperties("druid.stat.slowSqlMillis=500"); + dataSource.setFilters("stat"); + dataSource.init(); + } + + protected void tearDown() throws Exception { + dataSource.close(); + } + + public void test_connect() throws Exception { + StatFilter filter = (StatFilter) dataSource.getProxyFilters().get(0); + Assert.assertEquals(500, filter.getSlowSqlMillis()); + } +} From b4f9d65840d2bdaf6aae638aa9725c220cb7d0e0 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 10 Aug 2012 08:46:18 +0800 Subject: [PATCH 3/8] add testcase --- .../druid/bvt/pool/SlowSqlMillisTest.java | 2 +- .../druid/bvt/pool/SlowSqlMillisTest2.java | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest2.java diff --git a/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest.java b/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest.java index e9674784eb..227cd17197 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest.java @@ -12,7 +12,7 @@ public class SlowSqlMillisTest extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); - dataSource.setUrl("jdbc:wrap-jdbc:jdbc:mock:xxx"); + dataSource.setUrl("jdbc:mock:xxx"); dataSource.setTestOnBorrow(false); dataSource.setTestOnReturn(false); dataSource.setTestWhileIdle(false); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest2.java b/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest2.java new file mode 100644 index 0000000000..0d3d8fdb18 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/SlowSqlMillisTest2.java @@ -0,0 +1,38 @@ +package com.alibaba.druid.bvt.pool; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.filter.stat.StatFilter; +import com.alibaba.druid.pool.DruidDataSource; + + +public class SlowSqlMillisTest2 extends TestCase { + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setTestOnBorrow(false); + dataSource.setTestOnReturn(false); + dataSource.setTestWhileIdle(false); + System.setProperty("druid.stat.slowSqlMillis", "500"); + dataSource.setFilters("stat"); + + { + StatFilter filter = (StatFilter) dataSource.getProxyFilters().get(0); + Assert.assertEquals(3000, filter.getSlowSqlMillis()); + } + dataSource.init(); + } + + protected void tearDown() throws Exception { + System.clearProperty("druid.stat.slowSqlMillis"); + dataSource.close(); + } + + public void test_connect() throws Exception { + StatFilter filter = (StatFilter) dataSource.getProxyFilters().get(0); + Assert.assertEquals(500, filter.getSlowSqlMillis()); + } +} From 81548b0202c0b8711b345cb08f01999299b12242 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 10 Aug 2012 08:55:22 +0800 Subject: [PATCH 4/8] change DataSource LOG accessible, public -> private --- .../com/alibaba/druid/pool/DruidDataSource.java | 2 +- .../alibaba/druid/bvt/pool/ConfigErrorTest.java | 13 ++++++++++--- .../alibaba/druid/bvt/pool/ConfigErrorTest2.java | 13 ++++++++++--- .../alibaba/druid/bvt/pool/ConfigErrorTest3.java | 14 +++++++++++--- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index b29009d5f2..75735e20a5 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -72,7 +72,7 @@ import com.alibaba.druid.util.JdbcUtils; */ public class DruidDataSource extends DruidAbstractDataSource implements DruidDataSourceMBean, ManagedDataSource, Referenceable, Closeable, Cloneable, ConnectionPoolDataSource { - public final static Log LOG = LogFactory.getLog(DruidDataSource.class); + private final static Log LOG = LogFactory.getLog(DruidDataSource.class); private static final long serialVersionUID = 1L; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest.java b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest.java index f87d99ddfb..f8ccfe8c9f 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest.java @@ -1,11 +1,13 @@ package com.alibaba.druid.bvt.pool; +import java.lang.reflect.Field; import java.sql.Connection; import junit.framework.Assert; import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.support.logging.Log; public class ConfigErrorTest extends TestCase { @@ -22,12 +24,17 @@ public class ConfigErrorTest extends TestCase { } public void test_connect() throws Exception { - DruidDataSource.LOG.resetStat(); - Assert.assertEquals(0, DruidDataSource.LOG.getErrorCount()); + Field field = DruidDataSource.class.getDeclaredField("LOG"); + field.setAccessible(true); + Log LOG = (Log) field.get(null); + + LOG.resetStat(); + + Assert.assertEquals(0, LOG.getErrorCount()); Connection conn = dataSource.getConnection(); conn.close(); - Assert.assertEquals(1, DruidDataSource.LOG.getErrorCount()); + Assert.assertEquals(1, LOG.getErrorCount()); } } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest2.java b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest2.java index 4b7d4470cb..6b735aebeb 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest2.java @@ -1,11 +1,13 @@ package com.alibaba.druid.bvt.pool; +import java.lang.reflect.Field; import java.sql.Connection; import junit.framework.Assert; import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.support.logging.Log; public class ConfigErrorTest2 extends TestCase { @@ -24,12 +26,17 @@ public class ConfigErrorTest2 extends TestCase { } public void test_connect() throws Exception { - DruidDataSource.LOG.resetStat(); - Assert.assertEquals(0, DruidDataSource.LOG.getErrorCount()); + Field field = DruidDataSource.class.getDeclaredField("LOG"); + field.setAccessible(true); + Log LOG = (Log) field.get(null); + + LOG.resetStat(); + + Assert.assertEquals(0, LOG.getErrorCount()); Connection conn = dataSource.getConnection(); conn.close(); - Assert.assertEquals(1, DruidDataSource.LOG.getErrorCount()); + Assert.assertEquals(1, LOG.getErrorCount()); } } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest3.java b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest3.java index 0a6a83a755..0bd5ee63d7 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest3.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest3.java @@ -1,9 +1,12 @@ package com.alibaba.druid.bvt.pool; +import java.lang.reflect.Field; + import junit.framework.Assert; import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.support.logging.Log; public class ConfigErrorTest3 extends TestCase { @@ -24,9 +27,14 @@ public class ConfigErrorTest3 extends TestCase { } public void test_connect() throws Exception { - DruidDataSource.LOG.resetStat(); - Assert.assertEquals(0, DruidDataSource.LOG.getErrorCount()); + Field field = DruidDataSource.class.getDeclaredField("LOG"); + field.setAccessible(true); + Log LOG = (Log) field.get(null); + + LOG.resetStat(); + + Assert.assertEquals(0, LOG.getErrorCount()); dataSource.init(); - Assert.assertEquals(1, DruidDataSource.LOG.getErrorCount()); + Assert.assertEquals(1, LOG.getErrorCount()); } } From d17962d5c97727ee8a3bdf53c94109d80d39ce27 Mon Sep 17 00:00:00 2001 From: sand Date: Fri, 10 Aug 2012 09:23:14 +0800 Subject: [PATCH 5/8] add log --- .../alibaba/druid/util/ReflectionUtils.java | 79 ++++++------------- .../com/alibaba/druid/util/StringUtils.java | 6 ++ 2 files changed, 31 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java index 36e23c2b5f..55494dbff7 100644 --- a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java +++ b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java @@ -4,89 +4,60 @@ import java.lang.reflect.Method; import javax.servlet.http.HttpServletRequest; +import com.alibaba.druid.support.logging.Log; +import com.alibaba.druid.support.logging.LogFactory; + /** * @author sandzhang */ -public class ReflectionUtils -{ +public class ReflectionUtils { - public static Class getClassFromWebContainerOrCurrentClassLoader(String className) - { + private final static Log LOG = LogFactory.getLog(ReflectionUtils.class); + + public static Class getClassFromWebContainerOrCurrentClassLoader(String className) { Class result = null; - try - { + try { result = HttpServletRequest.class.getClassLoader().loadClass(className); + } catch (ClassNotFoundException e) { + LOG.debug("can'r find class in web container classLoader ", e); } - catch (ClassNotFoundException e) - { - } - if (result == null) - { - try - { + if (result == null) { + try { result = Thread.currentThread().getContextClassLoader().loadClass(className); - } - catch (ClassNotFoundException e) - { + } catch (ClassNotFoundException e) { + LOG.error("can'r find class in current thread context classLoader ", e); } } return result; } + public static Object callStaticMethod(Class classObject, String methodName) { - public static Object callStaticMethod(Class classObject, String methodName) - { - - try - { + try { Method m = classObject.getMethod(methodName); return m.invoke(classObject); - } - catch (Exception e) - { + } catch (Exception e) { + LOG.warn("callStaticMethod fail:class=" + classObject.getName() + " method=" + methodName, e); return null; } } - - public static Object callObjectMethod(Object obj, String methodName) - { - - try - { + public static Object callObjectMethod(Object obj, String methodName, Object... methodParams) { + try { Method m = obj.getClass().getMethod(methodName); - return m.invoke(obj); - } - catch (Exception e) - { + return m.invoke(obj, methodParams); + } catch (Exception e) { + LOG.warn("callObjectMethod fail:class=" + obj.getClass().getName() + " method=" + methodName, e); return null; } } - - public static Object callObjectMethod(Object obj, String methodName, Object methodParam) - { - try - { - Method m = obj.getClass().getMethod(methodName); - return m.invoke(obj,methodParam); - } - catch (Exception e) - { - return null; - } - } - - - public void getTest() - { + public void getTest() { System.out.println("dd"); // return "test"; } - - public static void main(String args[]) - { + public static void main(String args[]) { System.out.println(callObjectMethod(new ReflectionUtils(), "getTest")); } diff --git a/src/main/java/com/alibaba/druid/util/StringUtils.java b/src/main/java/com/alibaba/druid/util/StringUtils.java index b1db53e68f..01ce45e10c 100644 --- a/src/main/java/com/alibaba/druid/util/StringUtils.java +++ b/src/main/java/com/alibaba/druid/util/StringUtils.java @@ -3,6 +3,8 @@ package com.alibaba.druid.util; import java.util.LinkedHashMap; import java.util.Map; +import com.alibaba.druid.support.logging.Log; +import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.fastjson.JSON; /** @@ -10,6 +12,8 @@ import com.alibaba.fastjson.JSON; */ public class StringUtils { + private final static Log LOG = LogFactory.getLog(StringUtils.class); + /** * Example: subString("12345","1","4")=23 * @@ -52,6 +56,7 @@ public class StringUtils { try { return Integer.parseInt(in); } catch (NumberFormatException e) { + LOG.warn("stringToInteger fail,string=" + in, e); return null; } } @@ -67,6 +72,7 @@ public class StringUtils { try { return Long.parseLong(in); } catch (NumberFormatException e) { + LOG.warn("stringToLong fail,string=" + in, e); return null; } } From c6ae1783c15010b16d8113d317b8eacb025a9b67 Mon Sep 17 00:00:00 2001 From: sand Date: Fri, 10 Aug 2012 09:40:24 +0800 Subject: [PATCH 6/8] add if for log.debug --- src/main/java/com/alibaba/druid/util/ReflectionUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java index 55494dbff7..045313c4ec 100644 --- a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java +++ b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java @@ -19,7 +19,7 @@ public class ReflectionUtils { try { result = HttpServletRequest.class.getClassLoader().loadClass(className); } catch (ClassNotFoundException e) { - LOG.debug("can'r find class in web container classLoader ", e); + if (LOG.isDebugEnabled()) LOG.debug("can'r find class in web container classLoader ", e); } if (result == null) { try { From ea722bd0e5fe04c17de24a14a794c0f1f7aaebc4 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 10 Aug 2012 09:45:57 +0800 Subject: [PATCH 7/8] format JdbcSqlStat.java --- src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java index f48d4dbbdf..901d495a4b 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java @@ -490,10 +490,14 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { // 25 - 29 "Histogram", // - "LastSlowParameters", "ResultSetHoldTime", "ExecuteAndResultSetHoldTime", "FetchRowCountHistogram", + "LastSlowParameters", // + "ResultSetHoldTime", // + "ExecuteAndResultSetHoldTime", // + "FetchRowCountHistogram", // // 30 - "EffectedRowCountHistogram", "ExecuteAndResultHoldTimeHistogram" + "EffectedRowCountHistogram", // + "ExecuteAndResultHoldTimeHistogram" // }; From 29e3b0158c802759f6f0fd2fa82b4299736362fa Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 10 Aug 2012 12:40:42 +0800 Subject: [PATCH 8/8] bug fixed for reflect --- .../stat/DruidDataSourceStatJNDIStatStrategy.java | 11 ++++++++++- .../com/alibaba/druid/util/ReflectionUtils.java | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java index d8026865f4..769c4ceee6 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java @@ -3,12 +3,21 @@ package com.alibaba.druid.stat; import java.util.List; import java.util.Map; +import com.alibaba.druid.support.logging.Log; +import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.druid.util.ReflectionUtils; public class DruidDataSourceStatJNDIStatStrategy implements DruidDataSourceStatStrategy{ + private final static Log LOG = LogFactory.getLog(DruidDataSourceStatJNDIStatStrategy.class); private Object getStrategyB() { - return ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.DruidDataSourceStatDefaultStrategy"); + try { + Class clazz = ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.DruidDataSourceStatDefaultStrategy"); + return clazz.newInstance(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + return null; + } } @SuppressWarnings("unchecked") diff --git a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java index 045313c4ec..223a861cd6 100644 --- a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java +++ b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java @@ -42,10 +42,20 @@ public class ReflectionUtils { } } - public static Object callObjectMethod(Object obj, String methodName, Object... methodParams) { + public static Object callObjectMethod(Object obj, String methodName) { try { Method m = obj.getClass().getMethod(methodName); - return m.invoke(obj, methodParams); + return m.invoke(obj); + } catch (Exception e) { + LOG.warn("callObjectMethod fail:class=" + obj.getClass().getName() + " method=" + methodName, e); + return null; + } + } + + public static Object callObjectMethod(Object obj, String methodName, Integer id) { + try { + Method m = obj.getClass().getMethod(methodName, Integer.class); + return m.invoke(obj, id); } catch (Exception e) { LOG.warn("callObjectMethod fail:class=" + obj.getClass().getName() + " method=" + methodName, e); return null;