From e08cb56e4adc2b2d7014cdf52a6b106d21b43308 Mon Sep 17 00:00:00 2001 From: septer Date: Sun, 12 Aug 2012 11:02:41 +0800 Subject: [PATCH] relector DruidDataSourceStatJNDIStatStrategy.java. --- .../DruidDataSourceStatJNDIStatStrategy.java | 178 ------------------ .../druid/stat/DruidStatManagerFacade.java | 2 +- 2 files changed, 1 insertion(+), 179 deletions(-) delete mode 100644 src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java deleted file mode 100644 index f815aa9b97..0000000000 --- a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java +++ /dev/null @@ -1,178 +0,0 @@ -package com.alibaba.druid.stat; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -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 final static List strategyList = new ArrayList(); - - private final static HashMap> classMethodHM = new HashMap>(); - - public DruidDataSourceStatJNDIStatStrategy(){ - init(); - } - - private void init() { - try { - // cache the class - String className = "com.alibaba.druid.stat.DruidDataSourceStatDefaultStrategy"; - Class clazzFromWebContainer = ReflectionUtils.getClassFromWebContainer(className); - Class clazzFromCurClassLoader = ReflectionUtils.getClassFromCurrentClassLoader(className); - if (clazzFromCurClassLoader != null) { - Object clazzFromCurClassLoaderInstance = clazzFromCurClassLoader.newInstance(); - if (!strategyList.contains(clazzFromCurClassLoaderInstance)) { - strategyList.add(clazzFromCurClassLoaderInstance); - } - } - if (clazzFromWebContainer != null) { - Object clazzFromWebContainerInstance = clazzFromWebContainer.newInstance(); - if (!strategyList.contains(clazzFromWebContainerInstance)) { - if (clazzFromCurClassLoader != null && clazzFromWebContainer != clazzFromCurClassLoader) { - strategyList.add(clazzFromWebContainerInstance); - } - } - } - } catch (Exception e) { - LOG.error(e.getMessage(), e); - } - } - - private Object invoke(String methodName, Integer id) { - Object result = null; - try { - HashMap hm = null; - Object invokeRes = null; - Object obj = null; - Method method = null; - for (int i = 0; i < strategyList.size(); i++) { - obj = strategyList.get(i); - hm = classMethodHM.get(obj); - if (hm != null) { - if (hm.containsKey(methodName)) { - method = hm.get(methodName); - if (id == null) { - invokeRes = ReflectionUtils.callObjectMethod(obj, method); - } else { - invokeRes = ReflectionUtils.callObjectMethod(obj, method, id); - } - result = invokeMapResHandler(result, invokeRes); - } else { - result = cacheMethodAndRtnInvodeRes(hm, obj, methodName, id); - } - } else { - hm = new HashMap(); - result = cacheMethodAndRtnInvodeRes(hm, obj, methodName, id); - } - } - } catch (Exception e) { - LOG.error(e.getMessage(), e); - } - return result; - } - - private Object cacheMethodAndRtnInvodeRes(HashMap methodHM, Object obj, String methodName, - Integer id) throws Exception { - Method method = null; - Object invokeRes = null; - if (id == null) { - method = ReflectionUtils.getObjectMethod(obj, methodName); - invokeRes = ReflectionUtils.callObjectMethod(obj, method); - } else { - method = ReflectionUtils.getObjectMethod(obj, methodName, id); - invokeRes = ReflectionUtils.callObjectMethod(obj, method, id); - } - methodHM.put(methodName, method); - classMethodHM.put(obj, methodHM); - return invokeRes; - } - - @SuppressWarnings("unchecked") - private Object invokeMapResHandler(Object finalRs, Object invokeRes) { - Object res = null; - if (finalRs == null) { - if (invokeRes instanceof Map) { - res = (Map) invokeRes; - } else if (invokeRes instanceof List) { - res = (List>) invokeRes; - } else { - res = invokeRes; - } - } else { - if (invokeRes instanceof Map) { - Map finalRs_ = (Map) finalRs; - Map invokeRes_ = (Map) invokeRes; - if (invokeRes != null) finalRs_.putAll(invokeRes_); - res = finalRs_; - } else if (invokeRes instanceof List) { - List> finalRs_ = (List>) finalRs; - List> invokeRes_ = (List>) invokeRes; - if (invokeRes != null) finalRs_.addAll(invokeRes_); - res = finalRs_; - } else { - final List list = new ArrayList(); - list.add(finalRs); - list.add(invokeRes); - res = list;// merge the others class type,but in this - } - } - return res; - } - - @SuppressWarnings("unchecked") - public Map getSqlStatData(Integer id) { - return (Map) invoke("getSqlStatData", id); - } - - @SuppressWarnings("unchecked") - public Map getDataSourceStatData(Integer id) { - return (Map) invoke("getDataSourceStatData", id); - } - - @SuppressWarnings("unchecked") - public Map returnJSONBasicStat() { - return (Map) invoke("returnJSONBasicStat", null); - } - - @SuppressWarnings("unchecked") - public List> getSqlStatDataList() { - return (List>) invoke("getSqlStatDataList", null); - } - - @SuppressWarnings("unchecked") - public List getActiveConnectionStackTraceByDataSourceId(Integer id) { - return (List) invoke("getActiveConnectionStackTraceByDataSourceId", id); - } - - @SuppressWarnings("unchecked") - public List getDataSourceStatList() { - return (List) invoke("getDataSourceStatList", null); - } - - @SuppressWarnings("unchecked") - public List> getPoolingConnectionInfoByDataSourceId(Integer id) { - return (List>) invoke("getPoolingConnectionInfoByDataSourceId", id); - } - - public Object getDruidDataSourceById(Integer id) { - return invoke("getDruidDataSourceById", id); - } - - public Object getSqlStatById(Integer id) { - return invoke("getSqlStatById", id); - } - - public void resetAll() { - invoke("resetAll", null); - } - -} diff --git a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java index efa89be2a2..864e6d8a09 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java +++ b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java @@ -22,7 +22,7 @@ public class DruidStatManagerFacade { private static DruidDataSourceStatStrategy strategy = null; static { - strategy = new DruidDataSourceStatJNDIStatStrategy(); + strategy = new DruidDataSourceStatReflectStatStrategy(); ctx = new DruidDataSourceStatStrategyContext(strategy); }