From 47d4667b03e6d5f1d8280bd34826406f79eddfe3 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 28 May 2013 21:38:11 +0800 Subject: [PATCH] bug fixed for DruidStatService if wall filter not config --- .../java/com/alibaba/druid/Constants.java | 4 ++- .../alibaba/druid/pool/DruidDataSource.java | 12 ++++---- .../druid/pool/DruidDataSourceStatValue.java | 24 +++++++++++++++ .../alibaba/druid/stat/DruidStatService.java | 29 ++++++++++++------- 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/alibaba/druid/Constants.java b/src/main/java/com/alibaba/druid/Constants.java index ec62aff2a2..66193c9edc 100644 --- a/src/main/java/com/alibaba/druid/Constants.java +++ b/src/main/java/com/alibaba/druid/Constants.java @@ -17,5 +17,7 @@ package com.alibaba.druid; public interface Constants { - public final static String DRUID_STAT_SQL_MAX_SIZE = "druid.stat.sql.MaxSize"; + public final static String DRUID_STAT_SQL_MAX_SIZE = "druid.stat.sql.MaxSize"; + + public final static String DRUID_TIME_BETWEEN_LOG_STATS_MILLIS = "druid.timeBetweenLogStatsMillis"; } diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 6dd6563ce8..f750d03d15 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -191,13 +191,13 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } { - String property = properties.getProperty("druid.timeBetweenLogStatsMillis"); + String property = properties.getProperty(Constants.DRUID_TIME_BETWEEN_LOG_STATS_MILLIS); if (property != null && property.length() > 0) { try { long value = Long.parseLong(property); this.setTimeBetweenLogStatsMillis(value); } catch (NumberFormatException e) { - LOG.error("illegal property 'timeBetweenLogStatsMillis'", e); + LOG.error("illegal property '" + Constants.DRUID_TIME_BETWEEN_LOG_STATS_MILLIS + "'", e); } } } @@ -419,21 +419,21 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (inited && LOG.isInfoEnabled()) { LOG.info("connectProperties changed : " + this.connectProperties + " -> " + properties); } - + configFromPropety(properties); for (Filter filter : this.filters) { filter.configFromProperties(properties); } - + if (exceptionSorter != null) { exceptionSorter.configFromProperties(properties); } - + if (validConnectionChecker != null) { validConnectionChecker.configFromProperties(properties); } - + if (statLogger != null) { statLogger.configFromProperties(properties); } diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatValue.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatValue.java index 80e1be264c..e0e1107d1b 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatValue.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatValue.java @@ -17,8 +17,10 @@ package com.alibaba.druid.pool; import java.util.Date; import java.util.List; +import java.util.Map; import com.alibaba.druid.stat.JdbcSqlStatValue; +import com.alibaba.druid.support.json.JSONUtils; public class DruidDataSourceStatValue { @@ -78,6 +80,27 @@ public class DruidDataSourceStatValue { protected long sqlSkipCount; protected List sqlList; + + @SuppressWarnings("unchecked") + public void fromJSON(String json) { +// protected String dbType; +// protected String driverClassName; +// protected String url; +// protected String userName; +// protected List filterClassNames; +// protected boolean removeAbandoned; +// + Map map = (Map) JSONUtils.parse(json); + fromJSON(map); + } + + public void fromJSON(Map map) { + this.name = (String) map.get("name"); + this.dbType = (String) map.get("dbType"); + this.driverClassName = (String) map.get("driverClassName"); + this.url = (String) map.get("url"); + this.userName = (String) map.get("userName"); + } public Date getPoolingPeakTime() { if (poolingPeakTime <= 0) { @@ -482,5 +505,6 @@ public class DruidDataSourceStatValue { public void setPoolingPeakTime(long poolingPeakTime) { this.poolingPeakTime = poolingPeakTime; } + } diff --git a/src/main/java/com/alibaba/druid/stat/DruidStatService.java b/src/main/java/com/alibaba/druid/stat/DruidStatService.java index 6dbf9ad4ba..de9401a84e 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidStatService.java +++ b/src/main/java/com/alibaba/druid/stat/DruidStatService.java @@ -120,11 +120,11 @@ public final class DruidStatService implements DruidStatServiceMBean { if (url.startsWith("/sql.json")) { return returnJSONResult(RESULT_CODE_SUCCESS, getSqlStatDataList(parameters)); } - + if (url.startsWith("/wall.json")) { - return returnJSONResult(RESULT_CODE_SUCCESS, getWallStatMap(parameters)); + return returnJSONResult(RESULT_CODE_SUCCESS, getWallStatMap(parameters)); } - + if (url.startsWith("/wall-") && url.indexOf(".json") > 0) { Integer dataSourceId = StringUtils.subStringToInteger(url, "wall-", ".json"); Object result = statManagerFacade.getWallStatMap(dataSourceId); @@ -266,7 +266,7 @@ public final class DruidStatService implements DruidStatServiceMBean { List> sortedArray = comparatorOrderBy(array, parameters); return sortedArray; } - + @SuppressWarnings("unchecked") public Map getWallStatMap(Map parameters) { Integer dataSourceId = null; @@ -275,14 +275,21 @@ public final class DruidStatService implements DruidStatServiceMBean { if (dataSourceIdParam != null && dataSourceIdParam.length() > 0) { dataSourceId = Integer.parseInt(dataSourceIdParam); } - + Map result = statManagerFacade.getWallStatMap(dataSourceId); - List> sortedArray = comparatorOrderBy((List>)result.get("tables"), parameters); - result.put("tables", sortedArray); - - sortedArray = comparatorOrderBy((List>)result.get("functions"), parameters); - result.put("functions", sortedArray); - + + if (result != null) { + List> tables = (List>) result.get("tables"); + if (tables != null) { + List> sortedArray = comparatorOrderBy(tables, parameters); + result.put("tables", sortedArray); + sortedArray = comparatorOrderBy((List>) result.get("functions"), parameters); + result.put("functions", sortedArray); + } + } else { + result = Collections.emptyMap(); + } + return result; }