From 2b4086981edda7140023386295876ca966b930e6 Mon Sep 17 00:00:00 2001 From: sand Date: Wed, 8 Aug 2012 17:50:34 +0800 Subject: [PATCH] refactor StatViewServlet support for jndi: unfinished --- .../druid/stat/DruidStatManagerFacade.java | 33 +++++++++++++------ .../alibaba/druid/util/ReflectionUtils.java | 9 ++--- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java index 90391cf09e..01f71dfe6e 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java +++ b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java @@ -17,6 +17,13 @@ import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.util.ReflectionUtils; /** + * 监控相关的对外数据暴露 + * + *
+ * 1. 为了支持jndi数据源本类内部调用druid相关对象均需要反射调用,返回值也应该是Object,List,Map等无关于druid的类型
+ * 2. 对外暴露的public方法都应该先调用init(),应该有更好的方式,暂时没想到
+ * 
+ * 
  * @author sandzhang
  */
 public class DruidStatManagerFacade {
@@ -27,9 +34,10 @@ public class DruidStatManagerFacade {
 
     protected final ReentrantLock               lock     = new ReentrantLock(true);
 
-    private DruidDataSourceStatManager          druidDataSourceStatManager;
-    private JdbcStatManager                     jdbcStatManager;
+    private Object                              druidDataSourceStatManager;
+    private Object                              jdbcStatManager;
 
+    // TODO shoud be Object
     private Set                datasourceInstances;
 
     private DruidStatManagerFacade() {
@@ -72,19 +80,19 @@ public class DruidStatManagerFacade {
 
     }
 
-    public Set getDruidDataSourceInstances() {
+    private Set getDruidDataSourceInstances() {
         init();
         return datasourceInstances;
     }
 
     public void resetDataSourceStat() {
         init();
-        druidDataSourceStatManager.reset();
+        ReflectionUtils.callObjectMethod(druidDataSourceStatManager, "reset");
     }
 
     public void resetSqlStat() {
         init();
-        jdbcStatManager.reset();
+        ReflectionUtils.callObjectMethod(jdbcStatManager, "reset");
     }
 
     public void resetAll() {
@@ -93,8 +101,7 @@ public class DruidStatManagerFacade {
         resetDataSourceStat();
     }
 
-    public JdbcSqlStat getSqlStatById(Integer id) {
-        init();
+    private JdbcSqlStat getSqlStatById(Integer id) {
 
         for (DruidDataSource ds : getDruidDataSourceInstances()) {
             JdbcSqlStat sqlStat = ds.getDataSourceStat().getSqlStat(id);
@@ -104,6 +111,7 @@ public class DruidStatManagerFacade {
     }
 
     public Map getDataSourceStatData(Integer id) {
+        init();
         if (id == null) {
             return null;
         }
@@ -111,8 +119,7 @@ public class DruidStatManagerFacade {
         return datasource == null ? null : dataSourceToMapData(datasource);
     }
 
-    public DruidDataSource getDruidDataSourceById(Integer identity) {
-        init();
+    private DruidDataSource getDruidDataSourceById(Integer identity) {
 
         if (identity == null) {
             return null;
@@ -127,6 +134,7 @@ public class DruidStatManagerFacade {
     }
 
     public List> getSqlStatDataList() {
+        init();
         List> result = new ArrayList>();
         for (DruidDataSource datasource : getDruidDataSourceInstances()) {
             for (JdbcSqlStat sqlStat : datasource.getDataSourceStat().getSqlStatMap().values()) {
@@ -141,6 +149,7 @@ public class DruidStatManagerFacade {
     }
 
     public Map getSqlStatData(Integer id) {
+        init();
         if (id == null) {
             return null;
         }
@@ -148,7 +157,7 @@ public class DruidStatManagerFacade {
         return sqlStat == null ? null : getSqlStatData(sqlStat);
     }
 
-    public Map getSqlStatData(JdbcSqlStat sqlStat) {
+    private Map getSqlStatData(JdbcSqlStat sqlStat) {
         try {
             return sqlStat.getData();
         } catch (JMException e) {
@@ -157,6 +166,7 @@ public class DruidStatManagerFacade {
     }
 
     public List getDataSourceStatList() {
+        init();
         List datasourceList = new ArrayList();
         for (DruidDataSource dataSource : getDruidDataSourceInstances()) {
             datasourceList.add(dataSourceToMapData(dataSource));
@@ -165,6 +175,7 @@ public class DruidStatManagerFacade {
     }
 
     public Map returnJSONBasicStat() {
+        init();
         Map dataMap = new LinkedHashMap();
         dataMap.put("Version", VERSION.getVersionNumber());
         dataMap.put("Drivers", getDriversData());
@@ -181,12 +192,14 @@ public class DruidStatManagerFacade {
     }
 
     public List> getPoolingConnectionInfoByDataSourceId(Integer id) {
+        init();
         DruidDataSource datasource = getDruidDataSourceById(id);
         if (datasource == null) return null;
         return datasource.getPoolingConnectionInfo();
     }
 
     public List getActiveConnectionStackTraceByDataSourceId(Integer id) {
+        init();
         DruidDataSource datasource = getDruidDataSourceById(id);
         if (datasource == null || !datasource.isRemoveAbandoned()) return null;
 
diff --git a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java
index 098dbe0c21..73c8f154a1 100644
--- a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java
+++ b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java
@@ -33,8 +33,9 @@ public class ReflectionUtils {
             return null;
         }
     }
-    public static Object callPublicMethod(Object obj, String methodName) {
-        
+
+    public static Object callObjectMethod(Object obj, String methodName) {
+
         try {
             Method m = obj.getClass().getMethod(methodName);
             return m.invoke(obj);
@@ -45,11 +46,11 @@ public class ReflectionUtils {
 
     public void getTest() {
         System.out.println("dd");
-//        return "test";
+        // return "test";
     }
 
     public static void main(String args[]) {
-//        System.out.println(callStaticMethod(new ReflectionUtils(), "getTest"));
+        System.out.println(callObjectMethod(new ReflectionUtils(), "getTest"));
 
     }
 }