You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2016/02/25 21:26:49 UTC

[01/50] [abbrv] incubator-geode git commit: GEODE-907: remove com.vmware.gemfire.tools.pulse.internal.json

Repository: incubator-geode
Updated Branches:
  refs/heads/feature/GEODE-17 c39f8a5f1 -> 5c01d5f41


GEODE-907: remove com.vmware.gemfire.tools.pulse.internal.json


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/589ced4c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/589ced4c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/589ced4c

Branch: refs/heads/feature/GEODE-17
Commit: 589ced4c8c427f61b5c1164c5ded217773cccb5b
Parents: 6d3f556
Author: Jens Deppe <jd...@pivotal.io>
Authored: Thu Feb 18 16:39:53 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Feb 23 14:04:50 2016 -0800

----------------------------------------------------------------------
 .../internal/controllers/PulseController.java      |  2 +-
 .../tools/pulse/internal/data/DataBrowser.java     | 17 +++++++----------
 .../internal/service/ClusterDetailsService.java    |  2 +-
 .../service/ClusterDiskThroughputService.java      |  2 +-
 .../internal/service/ClusterGCPausesService.java   |  2 +-
 .../service/ClusterKeyStatisticsService.java       |  2 +-
 .../internal/service/ClusterMemberService.java     |  2 +-
 .../service/ClusterMembersRGraphService.java       |  2 +-
 .../service/ClusterMemoryUsageService.java         |  2 +-
 .../internal/service/ClusterRegionService.java     |  2 +-
 .../internal/service/ClusterRegionsService.java    |  2 +-
 .../service/ClusterSelectedRegionService.java      |  2 +-
 .../ClusterSelectedRegionsMemberService.java       |  2 +-
 .../internal/service/ClusterWANInfoService.java    |  2 +-
 .../service/MemberAsynchEventQueuesService.java    |  2 +-
 .../internal/service/MemberClientsService.java     |  2 +-
 .../internal/service/MemberDetailsService.java     |  2 +-
 .../service/MemberDiskThroughputService.java       |  2 +-
 .../internal/service/MemberGCPausesService.java    |  2 +-
 .../internal/service/MemberGatewayHubService.java  |  2 +-
 .../internal/service/MemberHeapUsageService.java   |  2 +-
 .../service/MemberKeyStatisticsService.java        |  2 +-
 .../internal/service/MemberRegionsService.java     |  2 +-
 .../pulse/internal/service/MembersListService.java |  2 +-
 .../tools/pulse/internal/service/PulseService.java |  9 +--------
 .../internal/service/PulseVersionService.java      |  2 +-
 .../internal/service/QueryStatisticsService.java   |  5 +----
 .../internal/service/SystemAlertsService.java      |  2 +-
 28 files changed, 34 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
index e70d3f1..22be468 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
@@ -105,7 +105,7 @@ public class PulseController {
         try {
           PulseService pulseService = pulseServiceFactory
               .getPulseServiceInstance(serviceName);
-          responseMap.put(serviceName, pulseService.tempExecute(request));
+          responseMap.put(serviceName, pulseService.execute(request));
         } catch (Exception serviceException) {
           LOGGER.warning("serviceException [for service "+serviceName+"] = " + serviceException.getMessage());
           responseMap.put(serviceName, EMPTY_JSON);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
index 88d5e32..cb955e4 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
@@ -19,6 +19,13 @@
 
 package com.vmware.gemfire.tools.pulse.internal.data;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
+import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -30,16 +37,6 @@ import java.util.Iterator;
 import java.util.ResourceBundle;
 import java.util.Scanner;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
-import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
-import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
-
 /**
  * Class DataBrowser This class contains Data browser functionalities for
  * managing queries and histories.

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java
index 35f9a81..f150071 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java
@@ -48,7 +48,7 @@ public class ClusterDetailsService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     String userName = request.getUserPrincipal().getName();
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
index 0a45ef6..576f0a3 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
@@ -44,7 +44,7 @@ public class ClusterDiskThroughputService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
index 606fc12..a9c9d03 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
@@ -47,7 +47,7 @@ public class ClusterGCPausesService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java
index ae9e5cf..8955791 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java
@@ -46,7 +46,7 @@ public class ClusterKeyStatisticsService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
index 296a45d..882366d 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
@@ -54,7 +54,7 @@ public class ClusterMemberService implements PulseService {
 
   private final String HEAP_USAGE = "heapUsage";
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
index b6203e5..f560b91 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
@@ -86,7 +86,7 @@ public class ClusterMembersRGraphService implements PulseService {
   private List<String> errorAlertsList;
   private List<String> warningAlertsList;
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // Reference to repository
     Repository repository = Repository.get();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java
index 2301095..aeb48d6 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java
@@ -46,7 +46,7 @@ public class ClusterMemoryUsageService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
index d8bd3a9..3e54c36 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
@@ -72,7 +72,7 @@ public class ClusterRegionService implements PulseService {
   };
 
   @Override
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     String userName = request.getUserPrincipal().getName();
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java
index ff94b20..cfb2714 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java
@@ -71,7 +71,7 @@ public class ClusterRegionsService implements PulseService {
     }
   };
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
index 5c4fa0c..72640d4 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
@@ -74,7 +74,7 @@ public class ClusterSelectedRegionService implements PulseService {
   };
 
   @Override
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     String userName = request.getUserPrincipal().getName();
     String pulseData = request.getParameter("pulseData");

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java
index ecdd14e..00807d9 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java
@@ -67,7 +67,7 @@ public class ClusterSelectedRegionsMemberService implements PulseService {
     };
 
   @Override
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
     PulseLogWriter LOGGER = PulseLogWriter.getLogger();
     String userName = request.getUserPrincipal().getName();
     String pulseData = request.getParameter("pulseData");

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java
index 21d93a7..291d044 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java
@@ -47,7 +47,7 @@ public class ClusterWANInfoService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java
index 190fc6d..378fb4b 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java
@@ -48,7 +48,7 @@ public class MemberAsynchEventQueuesService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java
index a2b5819..04ee3c9 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java
@@ -52,7 +52,7 @@ public class MemberClientsService implements PulseService {
   private final String NAME = "name";
   private final String HOST = "host";
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java
index 9a227a2..0f6876d 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java
@@ -49,7 +49,7 @@ public class MemberDetailsService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     String userName = request.getUserPrincipal().getName();
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
index f75479c..145c0b9 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
@@ -48,7 +48,7 @@ public class MemberDiskThroughputService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception, JSONException {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception, JSONException {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java
index 77792d5..0786918 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java
@@ -48,7 +48,7 @@ public class MemberGCPausesService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java
index 2f7b717..9e3e8cd 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java
@@ -51,7 +51,7 @@ public class MemberGatewayHubService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java
index 914b053..13f7e5f 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java
@@ -47,7 +47,7 @@ public class MemberHeapUsageService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
index 4509918..2c70d84 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
@@ -48,7 +48,7 @@ public class MemberKeyStatisticsService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception, JSONException {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception, JSONException {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
index 05a96ec..b0d1013 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
@@ -57,7 +57,7 @@ public class MemberRegionsService implements PulseService {
   private final String DISC_STORE_NAME = "diskStoreName";
   private final String DISC_SYNCHRONOUS = "diskSynchronous";
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
index 9ea701a..2edce45 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
@@ -45,7 +45,7 @@ public class MembersListService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
index f3a6ee9..21e2d22 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
@@ -22,7 +22,6 @@ package com.vmware.gemfire.tools.pulse.internal.service;
 import javax.servlet.http.HttpServletRequest;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 
 /**
  * Abstract class PulseService
@@ -38,11 +37,5 @@ public interface PulseService {
   String VALUE_ON = "ON";
   String VALUE_OFF = "OFF";
 
-  default JSONObject execute(HttpServletRequest httpServletRequest) throws Exception {
-    return null;
-  }
-
-  default ObjectNode tempExecute(HttpServletRequest httpServletRequest) throws Exception {
-    return null;
-  }
+  ObjectNode execute(HttpServletRequest httpServletRequest) throws Exception;
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
index b2e15c9..cf3a849 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
@@ -46,7 +46,7 @@ public class PulseVersionService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // json object to be sent as response
     ObjectNode responseJSON = mapper.createObjectNode();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
index c3987b2..c3ad0f4 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
@@ -31,9 +31,6 @@ import org.springframework.stereotype.Service;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 
 /**
  * Class QueryStatisticsService
@@ -52,7 +49,7 @@ public class QueryStatisticsService implements PulseService {
   private final ObjectMapper mapper = new ObjectMapper();
 
   @Override
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/589ced4c/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
index 47fd20d..583ed85 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
@@ -49,7 +49,7 @@ public class SystemAlertsService implements PulseService {
 
   private static final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();


[12/50] [abbrv] incubator-geode git commit: GEODE-448: Minor changes due to subproject renaming

Posted by je...@apache.org.
GEODE-448: Minor changes due to subproject renaming


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/9e8543ab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/9e8543ab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/9e8543ab

Branch: refs/heads/feature/GEODE-17
Commit: 9e8543ab2e6e72d0a6aadebe2616128054b5399b
Parents: 177f12c
Author: Jens Deppe <jd...@pivotal.io>
Authored: Tue Feb 23 14:44:05 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Feb 23 14:45:31 2016 -0800

----------------------------------------------------------------------
 .../tools/pulse/tests/PulseAutomatedTest.java     | 18 ++++--------------
 .../gemfire/tools/pulse/tests/PulseBaseTest.java  |  6 +++++-
 .../gemfire/tools/pulse/tests/PulseTest.java      |  4 ++--
 3 files changed, 11 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9e8543ab/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java
index 848cf62..1ecb7d6 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java
@@ -30,25 +30,15 @@
 
 package com.vmware.gemfire.tools.pulse.tests;
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.TimeUnit;
-import java.util.TreeMap;
-
 import junit.framework.Assert;
-
 import org.junit.Ignore;
 import org.junit.Test;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
-import org.openqa.selenium.interactions.Actions;
-import org.openqa.selenium.support.ui.ExpectedConditions;
-import org.openqa.selenium.support.ui.WebDriverWait;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.List;
 
 public class PulseAutomatedTest extends PulseBaseTest {
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9e8543ab/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
index f82b10f..9f5523a 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
@@ -26,7 +26,11 @@ import org.openqa.selenium.interactions.Actions;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.openqa.selenium.support.ui.WebDriverWait;
 
-import java.util.*;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
 import java.util.concurrent.TimeUnit;
 
 public class PulseBaseTest extends PulseTest {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9e8543ab/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
index 3bf7ecc..c5ece20 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
@@ -152,7 +152,7 @@ public class PulseTest {
 
     pulseURL = "http://" + host + ":" + port + context;
 
-    Thread.sleep(5000); // wait till tomcat settles down
+    Thread.sleep(5000); // wait till the container settles down
 
     driver = new FirefoxDriver();
     driver.manage().window().maximize();
@@ -190,7 +190,7 @@ public class PulseTest {
     Properties properties = new Properties();
     properties.load(inputStream);
     String version = properties.getProperty("Product-Version");
-    warPath = "gemfire-pulse-" + version + ".war";
+    warPath = "geode-pulse-" + version + ".war";
     String propFilePath = classLoader.getResource("GemFireVersion.properties").getPath();
     warPath = propFilePath.substring(0, propFilePath.indexOf("generated-resources")) + "libs/" + warPath;
     return warPath;


[07/50] [abbrv] incubator-geode git commit: GEODE-907: Switch all fields from floats to doubles

Posted by je...@apache.org.
GEODE-907: Switch all fields from floats to doubles

- This is because when Jackson serializes a float (to JSON) it does so
  through an implicit cast to a double which alters the precision.
  Practically, a number like 23.99F ends up being 23.98999999234D which
  messes with unit tests and displaying in the UI.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/022733e8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/022733e8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/022733e8

Branch: refs/heads/feature/GEODE-17
Commit: 022733e8837b15b415c466a2e59874e09165e1c1
Parents: e623d8e
Author: Jens Deppe <jd...@pivotal.io>
Authored: Sat Feb 20 12:15:24 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Feb 23 14:04:51 2016 -0800

----------------------------------------------------------------------
 .../tools/pulse/internal/data/Cluster.java      | 232 +++++++++----------
 .../pulse/internal/data/JMXDataUpdater.java     |  62 ++---
 .../service/ClusterDiskThroughputService.java   |   4 +-
 .../service/ClusterGCPausesService.java         |   4 +-
 .../internal/service/ClusterMemberService.java  |  15 +-
 .../service/ClusterMembersRGraphService.java    |  15 +-
 .../internal/service/ClusterRegionService.java  |   1 +
 .../service/ClusterSelectedRegionService.java   |   6 +-
 .../controllers/PulseControllerJUnitTest.java   |  35 +--
 .../pulse/testbed/PropMockDataUpdater.java      |   8 +-
 .../gemfire/tools/pulse/tests/Member.java       |  16 +-
 .../gemfire/tools/pulse/tests/MemberMBean.java  |   8 +-
 .../tools/pulse/tests/PulseBaseTest.java        |  16 +-
 .../gemfire/tools/pulse/tests/PulseTest.java    |   2 -
 .../gemfire/tools/pulse/tests/Region.java       |  20 +-
 .../gemfire/tools/pulse/tests/RegionMBean.java  |  10 +-
 .../tools/pulse/tests/RegionOnMember.java       |  16 +-
 .../tools/pulse/tests/RegionOnMemberMBean.java  |   8 +-
 .../gemfire/tools/pulse/tests/ServerObject.java |  25 +-
 .../tools/pulse/tests/ServerObjectMBean.java    |  10 +-
 20 files changed, 258 insertions(+), 255 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
index 60b353e..7d5cac2 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
@@ -75,7 +75,7 @@ public class Cluster extends Thread {
   private String serverName;
   private String port;
   private int stale = 0;
-  private float loadPerSec;
+  private double loadPerSec;
 
   // start: fields defined in System MBean
   private IClusterUpdater updater = null;
@@ -84,25 +84,25 @@ public class Cluster extends Thread {
   private long clientConnectionCount;
   private int locatorCount;
   private int totalRegionCount;
-  private Long totalHeapSize = 0L;
-  private Long totalRegionEntryCount;
+  private long totalHeapSize = 0L;
+  private long totalRegionEntryCount;
   private int currentQueryCount;
-  private Long totalBytesOnDisk;
-  private float diskReadsRate;
-  private float diskWritesRate;
-  private float writePerSec;
-  private float readPerSec;
-  private float queriesPerSec;
+  private long totalBytesOnDisk;
+  private double diskReadsRate;
+  private double diskWritesRate;
+  private double writePerSec;
+  private double readPerSec;
+  private double queriesPerSec;
   private int avgDiskStorage;
   private int avgDiskWritesRate;
   private int runningFunctionCount;
-  private Long registeredCQCount;
+  private long registeredCQCount;
   private int subscriptionCount;
   private int serverCount;
   private int txnCommittedCount;
   private int txnRollbackCount;
-  private Long usedHeapSize = 0L;
-  private Long garbageCollectionCount = 0L;
+  private long usedHeapSize = 0L;
+  private long garbageCollectionCount = 0L;
   private int clusterId;
   private int notificationPageNumber = 1;
   private boolean connectedFlag;
@@ -135,7 +135,7 @@ public class Cluster extends Thread {
       MAX_SAMPLE_SIZE);
   private CircularFifoBuffer garbageCollectionTrend = new CircularFifoBuffer(
       MAX_SAMPLE_SIZE);
-  private Long previousJVMPauseCount = 0L;
+  private long previousJVMPauseCount = 0L;
 
   private HashMap<String, Boolean> wanInformation = new HashMap<String, Boolean>();
   private Map<String, Cluster.Statement> clusterStatementMap = new ConcurrentHashMap<String, Cluster.Statement>();
@@ -246,22 +246,22 @@ public class Cluster extends Thread {
     private long totalBytesOnDisk;
     private String memberPort;
 
-    private Float cpuUsage = 0.0f;
-    private Float hostCpuUsage = 0.0f;
-    private Long uptime;
+    private double cpuUsage = 0.0d;
+    private double hostCpuUsage = 0.0d;
+    private long uptime;
     private String name;
-    private float getsRate;
-    private float putsRate;
+    private double getsRate;
+    private double putsRate;
     private boolean isCache;
     private boolean isGateway;
     private boolean isLocator;
     private boolean isServer;
-    private Double loadAverage;
+    private double loadAverage;
     private int numThreads;
-    private Long totalFileDescriptorOpen;
-    private Long garbageCollectionCount = 0L;
-    private float throughputWrites;
-    private float throughputReads;
+    private long totalFileDescriptorOpen;
+    private long garbageCollectionCount = 0L;
+    private double throughputWrites;
+    private double throughputReads;
     private long totalDiskUsage;
     private String queueBacklog;
     private String id;
@@ -288,7 +288,7 @@ public class Cluster extends Thread {
         MAX_SAMPLE_SIZE);
     private CircularFifoBuffer garbageCollectionSamples = new CircularFifoBuffer(
         MAX_SAMPLE_SIZE);
-    private Long previousJVMPauseCount = 0L;
+    private long previousJVMPauseCount = 0L;
 
     private Cluster.GatewayReceiver gatewayReceiver = null;
     private List<Cluster.GatewaySender> gatewaySenderList = new ArrayList<Cluster.GatewaySender>();
@@ -407,19 +407,19 @@ public class Cluster extends Thread {
       this.memberPort = memberPort;
     }
 
-    public float getThroughputWrites() {
+    public double getThroughputWrites() {
       return this.throughputWrites;
     }
 
-    public void setThroughputWrites(float throughputWrites) {
+    public void setThroughputWrites(double throughputWrites) {
       this.throughputWrites = throughputWrites;
     }
 
-    public float getThroughputReads() {
+    public double getThroughputReads() {
       return this.throughputReads;
     }
 
-    public void setThroughputReads(float throughputReads) {
+    public void setThroughputReads(double throughputReads) {
       this.throughputReads = throughputReads;
     }
 
@@ -439,7 +439,7 @@ public class Cluster extends Thread {
       return this.name;
     }
 
-    public Double getLoadAverage() {
+    public double getLoadAverage() {
       return this.loadAverage;
     }
 
@@ -459,7 +459,7 @@ public class Cluster extends Thread {
       return null;
     }
 
-    public Long getUptime() {
+    public long getUptime() {
       return this.uptime;
     }
 
@@ -543,7 +543,7 @@ public class Cluster extends Thread {
       this.bindAddress = bindAddress;
     }
 
-    public void setUptime(Long uptime) {
+    public void setUptime(long uptime) {
       this.uptime = uptime;
     }
 
@@ -567,35 +567,35 @@ public class Cluster extends Thread {
       this.totalBytesOnDisk = totalBytesOnDisk;
     }
 
-    public Float getCpuUsage() {
+    public double getCpuUsage() {
       return this.cpuUsage;
     }
 
-    public void setCpuUsage(Float cpuUsage) {
+    public void setCpuUsage(double cpuUsage) {
       this.cpuUsage = cpuUsage;
     }
 
-    public Float getHostCpuUsage() {
+    public double getHostCpuUsage() {
       return this.hostCpuUsage;
     }
 
-    public void setHostCpuUsage(Float hostCpuUsage) {
+    public void setHostCpuUsage(double hostCpuUsage) {
       this.hostCpuUsage = hostCpuUsage;
     }
 
-    public float getGetsRate() {
+    public double getGetsRate() {
       return this.getsRate;
     }
 
-    public void setGetsRate(float getsRate) {
+    public void setGetsRate(double getsRate) {
       this.getsRate = getsRate;
     }
 
-    public float getPutsRate() {
+    public double getPutsRate() {
       return this.putsRate;
     }
 
-    public void setPutsRate(float putsRate) {
+    public void setPutsRate(double putsRate) {
       this.putsRate = putsRate;
     }
 
@@ -632,19 +632,19 @@ public class Cluster extends Thread {
       this.numThreads = numThreads;
     }
 
-    public Long getTotalFileDescriptorOpen() {
+    public long getTotalFileDescriptorOpen() {
       return this.totalFileDescriptorOpen;
     }
 
-    public void setTotalFileDescriptorOpen(Long totalFileDescriptorOpen) {
+    public void setTotalFileDescriptorOpen(long totalFileDescriptorOpen) {
       this.totalFileDescriptorOpen = totalFileDescriptorOpen;
     }
 
-    public Long getGarbageCollectionCount() {
+    public long getGarbageCollectionCount() {
       return this.garbageCollectionCount;
     }
 
-    public void setGarbageCollectionCount(Long garbageCollectionCount) {
+    public void setGarbageCollectionCount(long garbageCollectionCount) {
       this.garbageCollectionCount = garbageCollectionCount;
     }
 
@@ -773,11 +773,11 @@ public class Cluster extends Thread {
       this.garbageCollectionSamples = garbageCollectionSamples;
     }
 
-    public Long getPreviousJVMPauseCount() {
+    public long getPreviousJVMPauseCount() {
       return this.previousJVMPauseCount;
     }
 
-    public void setPreviousJVMPauseCount(Long previousJVMPauseCount) {
+    public void setPreviousJVMPauseCount(long previousJVMPauseCount) {
       this.previousJVMPauseCount = previousJVMPauseCount;
     }
 
@@ -825,10 +825,10 @@ public class Cluster extends Thread {
           long currCPUTime = 0;
           currCPUTime = updatedClient.getProcessCpuTime();
 
-          float newCPUTime = (float) (currCPUTime - lastCPUTime)
+          double newCPUTime = (double) (currCPUTime - lastCPUTime)
               / (elapsedTime * 1000000000);
 
-          float newCPUUsage = 0;
+          double newCPUUsage = 0;
           int availableCpus = updatedClient.getCpus();
           if (availableCpus > 0) {
             newCPUUsage = newCPUTime / availableCpus;
@@ -1261,10 +1261,10 @@ public class Cluster extends Thread {
     private String memberName;
     private long entrySize;
     private long entryCount;
-    private float getsRate;
-    private float putsRate;
-    private float diskGetsRate;
-    private float diskPutsRate;
+    private double getsRate;
+    private double putsRate;
+    private double diskGetsRate;
+    private double diskPutsRate;
     private int localMaxMemory;
 
     private CircularFifoBuffer getsPerSecTrend = new CircularFifoBuffer(
@@ -1307,56 +1307,56 @@ public class Cluster extends Thread {
     /**
      * @return the putsRate
      */
-    public float getPutsRate() {
+    public double getPutsRate() {
       return putsRate;
     }
 
     /**
      * @param putsRate the putsRate to set
      */
-    public void setPutsRate(float putsRate) {
+    public void setPutsRate(double putsRate) {
       this.putsRate = putsRate;
     }
 
     /**
      * @return the getsRate
      */
-    public float getGetsRate() {
+    public double getGetsRate() {
       return getsRate;
     }
 
     /**
      * @param getsRate the getsRate to set
      */
-    public void setGetsRate(float getsRate) {
+    public void setGetsRate(double getsRate) {
       this.getsRate = getsRate;
     }
 
     /**
      * @return the diskGetsRate
      */
-    public float getDiskGetsRate() {
+    public double getDiskGetsRate() {
       return diskGetsRate;
     }
 
     /**
      * @param diskGetsRate the diskGetsRate to set
      */
-    public void setDiskGetsRate(float diskGetsRate) {
+    public void setDiskGetsRate(double diskGetsRate) {
       this.diskGetsRate = diskGetsRate;
     }
 
     /**
      * @return the diskPutsRate
      */
-    public float getDiskPutsRate() {
+    public double getDiskPutsRate() {
       return diskPutsRate;
     }
 
     /**
      * @param diskPutsRate the diskPutsRate to set
      */
-    public void setDiskPutsRate(float diskPutsRate) {
+    public void setDiskPutsRate(double diskPutsRate) {
       this.diskPutsRate = diskPutsRate;
     }
 
@@ -1500,11 +1500,11 @@ public class Cluster extends Thread {
   public static class Region {
     // start: fields defined in MBean
     private String fullPath;
-    private float diskReadsRate;
-    private float diskWritesRate;
-    private float getsRate;
-    private float putsRate;
-    private float lruEvictionRate;
+    private double diskReadsRate;
+    private double diskWritesRate;
+    private double getsRate;
+    private double putsRate;
+    private double lruEvictionRate;
     private String regionType;
     private long systemRegionEntryCount;
     private int memberCount;
@@ -1659,19 +1659,19 @@ public class Cluster extends Thread {
       this.fullPath = fullPath;
     }
 
-    public float getDiskReadsRate() {
+    public double getDiskReadsRate() {
       return this.diskReadsRate;
     }
 
-    public void setDiskReadsRate(float diskReadsRate) {
+    public void setDiskReadsRate(double diskReadsRate) {
       this.diskReadsRate = diskReadsRate;
     }
 
-    public float getDiskWritesRate() {
+    public double getDiskWritesRate() {
       return this.diskWritesRate;
     }
 
-    public void setDiskWritesRate(float diskWritesRate) {
+    public void setDiskWritesRate(double diskWritesRate) {
       this.diskWritesRate = diskWritesRate;
     }
 
@@ -1692,19 +1692,19 @@ public class Cluster extends Thread {
       this.diskWritesPerSecTrend = diskWritesPerSecTrend;
     }
 
-    public float getGetsRate() {
+    public double getGetsRate() {
       return this.getsRate;
     }
 
-    public void setGetsRate(float getsRate) {
+    public void setGetsRate(double getsRate) {
       this.getsRate = getsRate;
     }
 
-    public float getLruEvictionRate() {
+    public double getLruEvictionRate() {
       return this.lruEvictionRate;
     }
 
-    public void setLruEvictionRate(float lruEvictionRate) {
+    public void setLruEvictionRate(double lruEvictionRate) {
       this.lruEvictionRate = lruEvictionRate;
     }
 
@@ -1732,11 +1732,11 @@ public class Cluster extends Thread {
       this.memberCount = memberCount;
     }
 
-    public float getPutsRate() {
+    public double getPutsRate() {
       return this.putsRate;
     }
 
-    public void setPutsRate(float putsRate) {
+    public void setPutsRate(double putsRate) {
       this.putsRate = putsRate;
     }
 
@@ -1907,7 +1907,7 @@ public class Cluster extends Thread {
     private String name;
     private String host;
     private int queueSize;
-    private float cpuUsage;
+    private double cpuUsage;
     private long uptime;
     private int threads;
     private int gets;
@@ -1975,11 +1975,11 @@ public class Cluster extends Thread {
       this.queueSize = queueSize;
     }
 
-    public float getCpuUsage() {
+    public double getCpuUsage() {
       return this.cpuUsage;
     }
 
-    public void setCpuUsage(float cpuUsage) {
+    public void setCpuUsage(double cpuUsage) {
       this.cpuUsage = cpuUsage;
     }
 
@@ -2050,8 +2050,8 @@ public class Cluster extends Thread {
   public static class GatewayReceiver {
 
     private int listeningPort;
-    private Float linkThroughput;
-    private Long avgBatchProcessingTime;
+    private double linkThroughput;
+    private long avgBatchProcessingTime;
     private String id;
     private int queueSize;
     private Boolean status;
@@ -2065,19 +2065,19 @@ public class Cluster extends Thread {
       this.listeningPort = listeningPort;
     }
 
-    public Float getLinkThroughput() {
+    public double getLinkThroughput() {
       return this.linkThroughput;
     }
 
-    public void setLinkThroughput(Float linkThroughput) {
+    public void setLinkThroughput(double linkThroughput) {
       this.linkThroughput = linkThroughput;
     }
 
-    public Long getAvgBatchProcessingTime() {
+    public long getAvgBatchProcessingTime() {
       return this.avgBatchProcessingTime;
     }
 
-    public void setAvgBatchProcessingTime(Long avgBatchProcessingTime) {
+    public void setAvgBatchProcessingTime(long avgBatchProcessingTime) {
       this.avgBatchProcessingTime = avgBatchProcessingTime;
     }
 
@@ -2122,7 +2122,7 @@ public class Cluster extends Thread {
    */
   public static class GatewaySender {
 
-    private Float linkThroughput;
+    private double linkThroughput;
     private String id;
     private int queueSize;
     private Boolean status;
@@ -2133,11 +2133,11 @@ public class Cluster extends Thread {
     private int remoteDSId;
     private int eventsExceedingAlertThreshold;
 
-    public Float getLinkThroughput() {
+    public double getLinkThroughput() {
       return this.linkThroughput;
     }
 
-    public void setLinkThroughput(Float linkThroughput) {
+    public void setLinkThroughput(double linkThroughput) {
       this.linkThroughput = linkThroughput;
     }
 
@@ -2505,35 +2505,35 @@ public class Cluster extends Thread {
     return this.stale;
   }
 
-  public float getWritePerSec() {
+  public double getWritePerSec() {
     return this.writePerSec;
   }
 
-  public void setWritePerSec(float writePerSec) {
+  public void setWritePerSec(double writePerSec) {
     this.writePerSec = writePerSec;
   }
 
-  public float getReadPerSec() {
+  public double getReadPerSec() {
     return this.readPerSec;
   }
 
-  public void setReadPerSec(float readPerSec) {
+  public void setReadPerSec(double readPerSec) {
     this.readPerSec = readPerSec;
   }
 
-  public float getQueriesPerSec() {
+  public double getQueriesPerSec() {
     return this.queriesPerSec;
   }
 
-  public void setQueriesPerSec(float queriesPerSec) {
+  public void setQueriesPerSec(double queriesPerSec) {
     this.queriesPerSec = queriesPerSec;
   }
 
-  public float getLoadPerSec() {
+  public double getLoadPerSec() {
     return this.loadPerSec;
   }
 
-  public void setLoadPerSec(float loadPerSec) {
+  public void setLoadPerSec(double loadPerSec) {
     this.loadPerSec = loadPerSec;
   }
 
@@ -2557,11 +2557,11 @@ public class Cluster extends Thread {
     this.stopUpdates = stopUpdates;
   }
 
-  public Long getUsedHeapSize() {
+  public long getUsedHeapSize() {
     return this.usedHeapSize;
   }
 
-  public void setUsedHeapSize(Long usedHeapSize) {
+  public void setUsedHeapSize(long usedHeapSize) {
     this.usedHeapSize = usedHeapSize;
   }
 
@@ -2593,7 +2593,7 @@ public class Cluster extends Thread {
     return this.runningFunctionCount;
   }
 
-  public Long getRegisteredCQCount() {
+  public long getRegisteredCQCount() {
     return this.registeredCQCount;
   }
 
@@ -2605,7 +2605,7 @@ public class Cluster extends Thread {
     this.subscriptionCount = subscriptionCount;
   }
 
-  public void setRegisteredCQCount(Long registeredCQCount) {
+  public void setRegisteredCQCount(long registeredCQCount) {
     this.registeredCQCount = registeredCQCount;
   }
 
@@ -2725,19 +2725,19 @@ public class Cluster extends Thread {
     this.totalRegionCount = totalRegionCount;
   }
 
-  public Long getTotalHeapSize() {
+  public long getTotalHeapSize() {
     return this.totalHeapSize;
   }
 
-  public void setTotalHeapSize(Long totalHeapSize) {
+  public void setTotalHeapSize(long totalHeapSize) {
     this.totalHeapSize = totalHeapSize;
   }
 
-  public Long getTotalRegionEntryCount() {
+  public long getTotalRegionEntryCount() {
     return this.totalRegionEntryCount;
   }
 
-  public void setTotalRegionEntryCount(Long totalRegionEntryCount) {
+  public void setTotalRegionEntryCount(long totalRegionEntryCount) {
     this.totalRegionEntryCount = totalRegionEntryCount;
   }
 
@@ -2749,27 +2749,27 @@ public class Cluster extends Thread {
     this.currentQueryCount = currentQueryCount;
   }
 
-  public Long getTotalBytesOnDisk() {
+  public long getTotalBytesOnDisk() {
     return this.totalBytesOnDisk;
   }
 
-  public void setTotalBytesOnDisk(Long totalBytesOnDisk) {
+  public void setTotalBytesOnDisk(long totalBytesOnDisk) {
     this.totalBytesOnDisk = totalBytesOnDisk;
   }
 
-  public float getDiskReadsRate() {
+  public double getDiskReadsRate() {
     return this.diskReadsRate;
   }
 
-  public void setDiskReadsRate(float diskReadsRate) {
+  public void setDiskReadsRate(double diskReadsRate) {
     this.diskReadsRate = diskReadsRate;
   }
 
-  public float getDiskWritesRate() {
+  public double getDiskWritesRate() {
     return this.diskWritesRate;
   }
 
-  public void setDiskWritesRate(float diskWritesRate) {
+  public void setDiskWritesRate(double diskWritesRate) {
     this.diskWritesRate = diskWritesRate;
   }
 
@@ -2797,11 +2797,11 @@ public class Cluster extends Thread {
     this.writePerSecTrend = writePerSecTrend;
   }
 
-  public Long getGarbageCollectionCount() {
+  public long getGarbageCollectionCount() {
     return this.garbageCollectionCount;
   }
 
-  public void setGarbageCollectionCount(Long garbageCollectionCount) {
+  public void setGarbageCollectionCount(long garbageCollectionCount) {
     this.garbageCollectionCount = garbageCollectionCount;
   }
 
@@ -2862,11 +2862,11 @@ public class Cluster extends Thread {
     this.garbageCollectionTrend = garbageCollectionSamples;
   }
 
-  public Long getPreviousJVMPauseCount() {
+  public long getPreviousJVMPauseCount() {
     return this.previousJVMPauseCount;
   }
 
-  public void setPreviousJVMPauseCount(Long previousJVMPauseCount) {
+  public void setPreviousJVMPauseCount(long previousJVMPauseCount) {
     this.previousJVMPauseCount = previousJVMPauseCount;
   }
 
@@ -3301,7 +3301,7 @@ public class Cluster extends Thread {
         m.gatewayReceiver = new Cluster.GatewayReceiver();
       }
       m.gatewayReceiver.listeningPort = Integer.parseInt(port);
-      m.gatewayReceiver.linkThroughput = (float) Math.abs(r.nextInt(10));
+      m.gatewayReceiver.linkThroughput = Math.abs(r.nextInt(10));
       m.gatewayReceiver.avgBatchProcessingTime = (long) Math.abs(r.nextInt(10));
       m.gatewayReceiver.id = String.valueOf(Math.abs(r.nextInt(10)));
       m.gatewayReceiver.queueSize = Math.abs(r.nextInt(10));
@@ -3353,7 +3353,7 @@ public class Cluster extends Thread {
 
       gatewaySender.batchSize = Math.abs(r.nextInt(10));
       gatewaySender.id = String.valueOf(Math.abs(r.nextInt(10)));
-      gatewaySender.linkThroughput = (float) Math.abs(r.nextInt(10));
+      gatewaySender.linkThroughput = Math.abs(r.nextInt(10));
       gatewaySender.persistenceEnabled = true;
       gatewaySender.primary = true;
       gatewaySender.queueSize = Math.abs(r.nextInt(10));
@@ -3418,10 +3418,10 @@ public class Cluster extends Thread {
       m.OffHeapUsedSize = Math.abs(r.nextInt(Math.abs((int) m.maxHeapSize)));
       m.totalDiskUsage = Math.abs(r.nextInt(100));
 
-      Float cpuUsage = r.nextFloat() * 100;
+      double cpuUsage = r.nextDouble() * 100;
       m.cpuUsageSamples.add(cpuUsage);
       m.cpuUsage = cpuUsage;
-      m.hostCpuUsage = r.nextFloat() * 200;
+      m.hostCpuUsage = r.nextDouble() * 200;
 
       m.heapUsageSamples.add(m.currentHeapSize);
       m.loadAverage = (double) Math.abs(r.nextInt(100));

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
index adb7532..71dfa61 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
@@ -721,13 +721,13 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
           cluster.getTotalBytesOnDiskTrend().add(cluster.getTotalBytesOnDisk());
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_DISKWRITESRATE:
-          cluster.setDiskWritesRate(getFloatAttribute(attribute.getValue(),
+          cluster.setDiskWritesRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           cluster.getThroughoutWritesTrend().add(cluster.getDiskWritesRate());
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_AVERAGEWRITES:
           try {
-            cluster.setWritePerSec(getFloatAttribute(attribute.getValue(),
+            cluster.setWritePerSec(getDoubleAttribute(attribute.getValue(),
                 attribute.getName()));
           } catch (Exception e) {
             cluster.setWritePerSec(0);
@@ -737,7 +737,7 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_AVERAGEREADS:
           try {
-            cluster.setReadPerSec(getFloatAttribute(attribute.getValue(),
+            cluster.setReadPerSec(getDoubleAttribute(attribute.getValue(),
                 attribute.getName()));
           } catch (Exception e) {
             cluster.setReadPerSec(0);
@@ -746,12 +746,12 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
           cluster.getReadPerSecTrend().add(cluster.getReadPerSec());
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_QUERYREQUESTRATE:
-          cluster.setQueriesPerSec(getFloatAttribute(attribute.getValue(),
+          cluster.setQueriesPerSec(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           cluster.getQueriesPerSecTrend().add(cluster.getQueriesPerSec());
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_DISKREADSRATE:
-          cluster.setDiskReadsRate(getFloatAttribute(attribute.getValue(),
+          cluster.setDiskReadsRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           cluster.getThroughoutReadsTrend().add(cluster.getDiskReadsRate());
           break;
@@ -870,7 +870,7 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
             attribute.getValue(), attribute.getName()));
       } else if (attribute.getName().equals(
           PulseConstants.MBEAN_ATTRIBUTE_EVENTRECEIVEDDATE)) {
-        gatewayReceiver.setLinkThroughput(getFloatAttribute(
+        gatewayReceiver.setLinkThroughput(getDoubleAttribute(
             attribute.getValue(), attribute.getName()));
       } else if (attribute.getName().equals(
           PulseConstants.MBEAN_ATTRIBUTE_AVEARGEBATCHPROCESSINGTIME)) {
@@ -912,7 +912,7 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
       String name = attribute.getName();
       switch (name){
       case PulseConstants.MBEAN_ATTRIBUTE_EVENTRECEIVEDDATE:
-        gatewaySender.setLinkThroughput(getFloatAttribute(attribute.getValue(),
+        gatewaySender.setLinkThroughput(getDoubleAttribute(attribute.getValue(),
             attribute.getName()));
         break;
       case PulseConstants.MBEAN_ATTRIBUTE_BATCHSIZE:
@@ -1292,22 +1292,22 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
                   LOGGER.fine("updateRegionOnMembers : anRom.getEntryCount() = " + anRom.getEntryCount());
                   break;
                 case PulseConstants.MBEAN_ATTRIBUTE_PUTSRATE:
-                  anRom.setPutsRate(getFloatAttribute(attribute.getValue(),
+                  anRom.setPutsRate(getDoubleAttribute(attribute.getValue(),
                       attribute.getName()));
                   LOGGER.fine("updateRegionOnMembers : anRom.getPutsRate() = " + anRom.getPutsRate());
                   break;
                 case PulseConstants.MBEAN_ATTRIBUTE_GETSRATE:
-                  anRom.setGetsRate(getFloatAttribute(attribute.getValue(),
+                  anRom.setGetsRate(getDoubleAttribute(attribute.getValue(),
                       attribute.getName()));
                   LOGGER.fine("updateRegionOnMembers : anRom.getGetsRate() = " + anRom.getGetsRate());
                   break;
                 case PulseConstants.MBEAN_ATTRIBUTE_DISKREADSRATE:
-                  anRom.setDiskGetsRate(getFloatAttribute(attribute.getValue(),
+                  anRom.setDiskGetsRate(getDoubleAttribute(attribute.getValue(),
                       attribute.getName()));
                   LOGGER.fine("updateRegionOnMembers : anRom.getDiskGetsRate() = " + anRom.getDiskGetsRate());
                   break;
                 case PulseConstants.MBEAN_ATTRIBUTE_DISKWRITESRATE:
-                  anRom.setDiskPutsRate(getFloatAttribute(attribute.getValue(),
+                  anRom.setDiskPutsRate(getDoubleAttribute(attribute.getValue(),
                       attribute.getName()));
                   LOGGER.fine("updateRegionOnMembers : anRom.getDiskPutsRate() = " + anRom.getDiskPutsRate());
                   break;
@@ -1358,19 +1358,19 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
                   attribute.getName()));
               break;
             case PulseConstants.MBEAN_ATTRIBUTE_PUTSRATE:
-              regionOnMember.setPutsRate(getFloatAttribute(attribute.getValue(),
+              regionOnMember.setPutsRate(getDoubleAttribute(attribute.getValue(),
                   attribute.getName()));
               break;
             case PulseConstants.MBEAN_ATTRIBUTE_GETSRATE:
-              regionOnMember.setGetsRate(getFloatAttribute(attribute.getValue(),
+              regionOnMember.setGetsRate(getDoubleAttribute(attribute.getValue(),
                   attribute.getName()));
               break;
             case PulseConstants.MBEAN_ATTRIBUTE_DISKREADSRATE:
-              regionOnMember.setDiskGetsRate(getFloatAttribute(attribute.getValue(),
+              regionOnMember.setDiskGetsRate(getDoubleAttribute(attribute.getValue(),
                   attribute.getName()));
               break;
             case PulseConstants.MBEAN_ATTRIBUTE_DISKWRITESRATE:
-              regionOnMember.setDiskPutsRate(getFloatAttribute(attribute.getValue(),
+              regionOnMember.setDiskPutsRate(getDoubleAttribute(attribute.getValue(),
                   attribute.getName()));
               break;
             case PulseConstants.MBEAN_ATTRIBUTE_LOCALMAXMEMORY:
@@ -1454,11 +1454,11 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_DISKREADSRATE:
-          region.setDiskReadsRate(getFloatAttribute(attribute.getValue(),
+          region.setDiskReadsRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_DISKWRITESRATE:
-          region.setDiskWritesRate(getFloatAttribute(attribute.getValue(),
+          region.setDiskWritesRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_EMPTYNODES:
@@ -1466,15 +1466,15 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_GETSRATE:
-          region.setGetsRate(getFloatAttribute(attribute.getValue(),
+          region.setGetsRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_LRUEVICTIONRATE:
-          region.setLruEvictionRate(getFloatAttribute(attribute.getValue(),
+          region.setLruEvictionRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_PUTSRATE:
-          region.setPutsRate(getFloatAttribute(attribute.getValue(),
+          region.setPutsRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_REGIONTYPE:
@@ -1784,12 +1784,12 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
             attribute.getName()));
         break;
       case PulseConstants.MBEAN_ATTRIBUTE_DISKWRITESRATE:
-        member.setThroughputWrites(getFloatAttribute(attribute.getValue(),
+        member.setThroughputWrites(getDoubleAttribute(attribute.getValue(),
             attribute.getName()));
         member.getThroughputWritesTrend().add(member.getThroughputWrites());
         break;
       case PulseConstants.MBEAN_ATTRIBUTE_DISKREADSRATE:
-        member.setThroughputReads(getFloatAttribute(attribute.getValue(),
+        member.setThroughputReads(getDoubleAttribute(attribute.getValue(),
             attribute.getName()));
         member.getThroughputReadsTrend().add(member.getThroughputReads());
         break;
@@ -1837,14 +1837,14 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
         member.getTotalBytesOnDiskSamples().add(member.getTotalBytesOnDisk());
         break;
       case PulseConstants.MBEAN_ATTRIBUTE_CPUUSAGE:
-        member.setCpuUsage(getFloatAttribute(attribute.getValue(),
+        member.setCpuUsage(getDoubleAttribute(attribute.getValue(),
             attribute.getName()));
         member.getCpuUsageSamples().add(member.getCpuUsage());
         break;
       case PulseConstants.MBEAN_ATTRIBUTE_HOSTCPUUSAGE:
         // Float value is expected for host cpu usage.
         // TODO Remove Float.valueOf() when float value is provided in mbean
-        member.setHostCpuUsage(Float.valueOf(getIntegerAttribute(
+        member.setHostCpuUsage(Double.valueOf(getIntegerAttribute(
             attribute.getValue(), attribute.getName())));
         break;
       case PulseConstants.MBEAN_ATTRIBUTE_MEMBER:
@@ -1856,12 +1856,12 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
             attribute.getName()));
         break;
       case PulseConstants.MBEAN_ATTRIBUTE_AVERAGEREADS:
-        member.setGetsRate(getFloatAttribute(attribute.getValue(),
+        member.setGetsRate(getDoubleAttribute(attribute.getValue(),
             attribute.getName()));
         member.getGetsPerSecond().add(member.getGetsRate());
         break;
       case PulseConstants.MBEAN_ATTRIBUTE_AVERAGEWRITES:
-        member.setPutsRate(getFloatAttribute(attribute.getValue(),
+        member.setPutsRate(getDoubleAttribute(attribute.getValue(),
             attribute.getName()));
         member.getPutsPerSecond().add(member.getPutsRate());
         break;
@@ -2225,23 +2225,23 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_DISKREADSRATE:
-          region.setDiskReadsRate(getFloatAttribute(attribute.getValue(),
+          region.setDiskReadsRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_DISKWRITESRATE:
-          region.setDiskWritesRate(getFloatAttribute(attribute.getValue(),
+          region.setDiskWritesRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_GETSRATE:
-          region.setGetsRate(getFloatAttribute(attribute.getValue(),
+          region.setGetsRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_LRUEVICTIONRATE:
-          region.setLruEvictionRate(getFloatAttribute(attribute.getValue(),
+          region.setLruEvictionRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_PUTSRATE:
-          region.setPutsRate(getFloatAttribute(attribute.getValue(),
+          region.setPutsRate(getDoubleAttribute(attribute.getValue(),
               attribute.getName()));
           break;
         case PulseConstants.MBEAN_ATTRIBUTE_REGIONTYPE:

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
index 576f0a3..0b05001 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
@@ -55,8 +55,8 @@ public class ClusterDiskThroughputService implements PulseService {
     // cluster's Throughout Writes trend added to json response object
     // CircularFifoBuffer throughoutWritesTrend =
     // cluster.getThroughoutWritesTrend();
-    Float currentThroughputWrites = cluster.getDiskWritesRate();
-    Float currentThroughputReads = cluster.getDiskReadsRate();
+    double currentThroughputWrites = cluster.getDiskWritesRate();
+    double currentThroughputReads = cluster.getDiskReadsRate();
 
     responseJSON.put("currentThroughputReads", currentThroughputReads);
     responseJSON.put("throughputReads",

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
index a9c9d03..263f229 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
@@ -58,7 +58,9 @@ public class ClusterGCPausesService implements PulseService {
 
     ArrayNode pauses = mapper.createArrayNode();
     for (Object obj : cluster.getStatisticTrend(Cluster.CLUSTER_STAT_GARBAGE_COLLECTION)) {
-      pauses.add(obj.toString());
+      if (obj instanceof Number) {
+        pauses.add(((Number) obj).longValue());
+      }
     }
     responseJSON.put("currentGCPauses", cluster.getGarbageCollectionCount());
     responseJSON.put("gCPausesTrend", pauses);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
index 882366d..4b535cb 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
@@ -89,25 +89,22 @@ public class ClusterMemberService implements PulseService {
       }
       memberJSON.put("redundancyZones", mapper.valueToTree(redundancyZones));
 
-      DecimalFormat df2 = new DecimalFormat(
-          PulseConstants.DECIMAL_FORMAT_PATTERN);
+      DecimalFormat df2 = new DecimalFormat(PulseConstants.DECIMAL_FORMAT_PATTERN);
 
       long usedHeapSize = cluster.getUsedHeapSize();
       long currentHeap = clusterMember.getCurrentHeapSize();
       if (usedHeapSize > 0) {
-        float heapUsage = ((float) currentHeap / (float) usedHeapSize) * 100;
-        memberJSON
-            .put(this.HEAP_USAGE, Double.valueOf(df2.format(heapUsage)));
+        double heapUsage = ((double) currentHeap / (double) usedHeapSize) * 100;
+        memberJSON.put(this.HEAP_USAGE, Double.valueOf(df2.format(heapUsage)));
       } else {
         memberJSON.put(this.HEAP_USAGE, 0);
       }
-      Float currentCPUUsage = clusterMember.getCpuUsage();
+      double currentCPUUsage = clusterMember.getCpuUsage();
 
-      memberJSON.put("cpuUsage", Float.valueOf(df2.format(currentCPUUsage)));
+      memberJSON.put("cpuUsage", df2.format(currentCPUUsage));
       memberJSON.put("currentHeapUsage", clusterMember.getCurrentHeapSize());
       memberJSON.put("isManager", clusterMember.isManager());
-      memberJSON.put("uptime",
-          TimeUtils.convertTimeSecondsToHMS(clusterMember.getUptime()));
+      memberJSON.put("uptime", TimeUtils.convertTimeSecondsToHMS(clusterMember.getUptime()));
       memberJSON.put("loadAvg", clusterMember.getLoadAverage());
       memberJSON.put("sockets", clusterMember.getTotalFileDescriptorOpen());
       memberJSON.put("threads", clusterMember.getNumThreads());

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
index f560b91..44296cb 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
@@ -133,11 +133,11 @@ public class ClusterMembersRGraphService implements PulseService {
 
     for (Map.Entry<String, List<Cluster.Member>> physicalToMem : physicalToMember.entrySet()) {
       String hostName = physicalToMem.getKey();
-      Float hostCpuUsage = 0.0F;
-      Long hostMemoryUsage = (long) 0;
-      Double hostLoadAvg = 0.0;
+      double hostCpuUsage = 0.0;
+      long hostMemoryUsage = 0;
+      double hostLoadAvg = 0.0;
       int hostNumThreads = 0;
-      Long hostSockets = (long) 0;
+      long hostSockets = 0;
       boolean hostSevere = false;
       boolean hostError = false;
       boolean hostWarning = false;
@@ -163,18 +163,17 @@ public class ClusterMembersRGraphService implements PulseService {
         Long usedHeapSize = cluster.getUsedHeapSize();
 
         if (usedHeapSize > 0) {
-          float heapUsage = (currentHeap.floatValue() / usedHeapSize
-              .floatValue()) * 100;
+          double heapUsage = (currentHeap.doubleValue() / usedHeapSize.doubleValue()) * 100;
 
           memberData.put(this.MEMORY_USAGE,
               Double.valueOf(df2.format(heapUsage)));
         } else
           memberData.put(this.MEMORY_USAGE, 0);
 
-        Float currentCPUUsage = member.getCpuUsage();
+        double currentCPUUsage = member.getCpuUsage();
 
         memberData.put(this.CPU_USAGE,
-            Float.valueOf(df2.format(currentCPUUsage)));
+            Double.valueOf(df2.format(currentCPUUsage)));
         memberData.put(this.REGIONS, member.getMemberRegions().size());
         memberData.put(this.HOST, member.getHost());
         if ((member.getMemberPort() == null)

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
index 3e54c36..ca8cd73 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
@@ -86,6 +86,7 @@ public class ClusterRegionService implements PulseService {
     responseJSON.put("clusterName", cluster.getServerName());
     responseJSON.put("userName", userName);
     responseJSON.put("region", getRegionJson(cluster));
+
     // Send json response
     return responseJSON;
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
index 72640d4..4309c40 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
@@ -155,14 +155,14 @@ public class ClusterSelectedRegionService implements PulseService {
           long usedHeapSize = cluster.getUsedHeapSize();
           long currentHeap = member.getCurrentHeapSize();
           if (usedHeapSize > 0) {
-            float heapUsage = ((float) currentHeap / (float) usedHeapSize) * 100;
+            double heapUsage = ((double) currentHeap / (double) usedHeapSize) * 100;
             regionMember.put("heapUsage", Double.valueOf(df2.format(heapUsage)));
           } else {
             regionMember.put("heapUsage", 0);
           }
-          Float currentCPUUsage = member.getCpuUsage();
+          double currentCPUUsage = member.getCpuUsage();
 
-          regionMember.put("cpuUsage", Float.valueOf(df2.format(currentCPUUsage)));
+          regionMember.put("cpuUsage", Double.valueOf(df2.format(currentCPUUsage)));
           regionMember.put("currentHeapUsage", member.getCurrentHeapSize());
           regionMember.put("isManager", member.isManager());
           regionMember.put("uptime", TimeUtils.convertTimeSecondsToHMS(member.getUptime()));

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
index 33e0a1c..664126d 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
@@ -3,13 +3,13 @@ package com.vmware.gemfire.tools.pulse.controllers;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 import com.vmware.gemfire.tools.pulse.internal.PulseAppListener;
+import com.vmware.gemfire.tools.pulse.internal.ServiceConfiguration;
 import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConfig;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
 import org.apache.commons.collections.buffer.CircularFifoBuffer;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -107,6 +107,8 @@ public class PulseControllerJUnitTest {
     region.setMemberName(new ArrayList<String>() {{
       add(MEMBER_NAME);
     }});
+    region.setPutsRate(12.31D);
+    region.setGetsRate(27.99D);
     Cluster.RegionOnMember regionOnMember = new Cluster.RegionOnMember();
     regionOnMember.setRegionFullPath(REGION_PATH);
     regionOnMember.setMemberName(MEMBER_NAME);
@@ -121,6 +123,7 @@ public class PulseControllerJUnitTest {
     member.setUptime(1L);
     member.setHost(PHYSICAL_HOST_NAME);
     member.setGemfireVersion(GEMFIRE_VERSION);
+    member.setCpuUsage(55.77D);
 
     member.setMemberRegions(new HashMap<String, Cluster.Region>() {{
       put(REGION_NAME, region);
@@ -155,9 +158,9 @@ public class PulseControllerJUnitTest {
       add(3);
     }});
     cluster.setWritePerSecTrend(new CircularFifoBuffer() {{
-      add(1);
-      add(2);
-      add(3);
+      add(1.29);
+      add(2.3);
+      add(3.0);
     }});
     cluster.setThroughoutReadsTrend(new CircularFifoBuffer() {{
       add(1);
@@ -238,7 +241,7 @@ public class PulseControllerJUnitTest {
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.ClusterKeyStatistics.readPerSecTrend").isEmpty())
         .andExpect(jsonPath("$.ClusterKeyStatistics.queriesPerSecTrend").isEmpty())
-        .andExpect(jsonPath("$.ClusterKeyStatistics.writePerSecTrend", contains(1, 2, 3)))
+        .andExpect(jsonPath("$.ClusterKeyStatistics.writePerSecTrend", contains(1.29, 2.3, 3.0)))
     ;
   }
 
@@ -250,7 +253,7 @@ public class PulseControllerJUnitTest {
         .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.ClusterMembers.members[0].serverGroups[0]").value("Default"))
-        .andExpect(jsonPath("$.ClusterMembers.members[0].cpuUsage").value(0D))
+        .andExpect(jsonPath("$.ClusterMembers.members[0].cpuUsage").value(55.77D))
         .andExpect(jsonPath("$.ClusterMembers.members[0].clients").value(1))
         .andExpect(jsonPath("$.ClusterMembers.members[0].heapUsage").value(0))
         .andExpect(jsonPath("$.ClusterMembers.members[0].name").value(MEMBER_NAME))
@@ -275,8 +278,8 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.id").value(0))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].id").value(PHYSICAL_HOST_NAME))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].name").value(PHYSICAL_HOST_NAME))
-        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.loadAvg").isEmpty())
-        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.sockets").isEmpty())
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.loadAvg").value(0D))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.sockets").value(0))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.threads").value(0))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.cpuUsage").value(0D))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.memoryUsage").value(0))
@@ -286,7 +289,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].name").value(MEMBER_NAME))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.gemfireVersion").value(GEMFIRE_VERSION))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.memoryUsage").value(0))
-        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.cpuUsage").value(0D))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.cpuUsage").value(55.77D))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.regions").value(1))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.host").value(PHYSICAL_HOST_NAME))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.port").value("-"))
@@ -325,7 +328,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterRegion.region[0].regionPath").value(REGION_PATH))
         .andExpect(jsonPath("$.ClusterRegion.region[0].diskReadsTrend").isEmpty())
         .andExpect(jsonPath("$.ClusterRegion.region[0].memoryUsage").value("0.0000"))
-        .andExpect(jsonPath("$.ClusterRegion.region[0].getsRate").value(0D))
+        .andExpect(jsonPath("$.ClusterRegion.region[0].getsRate").value(27.99D))
         .andExpect(jsonPath("$.ClusterRegion.region[0].wanEnabled").value(false))
         .andExpect(jsonPath("$.ClusterRegion.region[0].memberCount").value(1))
         .andExpect(jsonPath("$.ClusterRegion.region[0].isHDFSWriteOnly").value("NA"))
@@ -334,7 +337,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterRegion.region[0].emptyNodes").value(0))
         .andExpect(jsonPath("$.ClusterRegion.region[0].type").value(REGION_TYPE))
         .andExpect(jsonPath("$.ClusterRegion.region[0].isEnableOffHeapMemory").value("OFF"))
-        .andExpect(jsonPath("$.ClusterRegion.region[0].putsRate").value(0D))
+        .andExpect(jsonPath("$.ClusterRegion.region[0].putsRate").value(12.31D))
         .andExpect(jsonPath("$.ClusterRegion.region[0].totalMemory").value(0))
         .andExpect(jsonPath("$.ClusterRegion.region[0].entryCount").value(0))
         .andExpect(jsonPath("$.ClusterRegion.region[0].compressionCodec").value("NA"))
@@ -359,7 +362,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterRegions.regions[0].regionPath").value(REGION_PATH))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].diskReadsTrend").isEmpty())
         .andExpect(jsonPath("$.ClusterRegions.regions[0].memoryUsage").value("0.0000"))
-        .andExpect(jsonPath("$.ClusterRegions.regions[0].getsRate").value(0D))
+        .andExpect(jsonPath("$.ClusterRegions.regions[0].getsRate").value(27.99D))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].wanEnabled").value(false))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].memberCount").value(1))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].isHDFSWriteOnly").value("NA"))
@@ -368,7 +371,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterRegions.regions[0].emptyNodes").value(0))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].type").value(REGION_TYPE))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].isEnableOffHeapMemory").value("OFF"))
-        .andExpect(jsonPath("$.ClusterRegions.regions[0].putsRate").value(0D))
+        .andExpect(jsonPath("$.ClusterRegions.regions[0].putsRate").value(12.31D))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].totalMemory").value(0))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].entryCount").value(0))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].compressionCodec").value("NA"))
@@ -391,12 +394,12 @@ public class PulseControllerJUnitTest {
         .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.lruEvictionRate").value(0D))
-        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.getsRate").value(0D))
+        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.getsRate").value(27.99D))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.emptyNodes").value(0))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.type").value(REGION_TYPE))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.isEnableOffHeapMemory").value("OFF"))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.path").value(REGION_PATH))
-        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].cpuUsage").value(0D))
+        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].cpuUsage").value(55.77D))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].clients").value(1))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].heapUsage").value(0))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].name").value(MEMBER_NAME))
@@ -414,7 +417,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.wanEnabled").value(false))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.memberCount").value(1))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.isHDFSWriteOnly").value("NA"))
-        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.putsRate").value(0D))
+        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.putsRate").value(12.31D))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.totalMemory").value(0))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.entryCount").value(0))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.compressionCodec").value("NA"))

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java
index 51cc279..ee530d2 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java
@@ -89,7 +89,7 @@ public class PropMockDataUpdater implements IClusterUpdater {
     cluster.setTotalHeapSize(totalHeapSize);
     long usedHeapSize  = Math.abs(r.nextInt(2048));
     cluster.setUsedHeapSize(usedHeapSize);
-    float writePerSec = Math.abs(r.nextInt(100));
+    double writePerSec = Math.abs(r.nextInt(100));
     cluster.setWritePerSec(writePerSec);
 
     //propfile
@@ -342,7 +342,7 @@ public class PropMockDataUpdater implements IClusterUpdater {
     if(port==null || "".equals(port))
       port = "1099";
     gatewayReceiver.setListeningPort(Integer.parseInt(port));
-    gatewayReceiver.setLinkThroughput((float) Math.abs(r.nextInt(10)));
+    gatewayReceiver.setLinkThroughput(Math.abs(r.nextInt(10)));
     gatewayReceiver.setAvgBatchProcessingTime((long) Math.abs(r.nextInt(10)));
     gatewayReceiver.setId(String.valueOf(Math.abs(r.nextInt(10))));
     gatewayReceiver.setQueueSize(Math.abs(r.nextInt(10)));
@@ -378,7 +378,7 @@ public class PropMockDataUpdater implements IClusterUpdater {
 
     gatewaySender.setBatchSize(Math.abs(r.nextInt(10)));
     gatewaySender.setId(String.valueOf(Math.abs(r.nextInt(10))));
-    gatewaySender.setLinkThroughput((float) Math.abs(r.nextInt(10)));
+    gatewaySender.setLinkThroughput(Math.abs(r.nextInt(10)));
     gatewaySender.setPersistenceEnabled(true);
     gatewaySender.setPrimary(true);
     gatewaySender.setQueueSize(Math.abs(r.nextInt(10)));
@@ -427,7 +427,7 @@ public class PropMockDataUpdater implements IClusterUpdater {
     m.setCurrentHeapSize(Math.abs(r.nextInt(Math.abs((int) m.getMaxHeapSize()))));
     m.setTotalDiskUsage(Math.abs(r.nextInt(100)));
 
-    Float cpuUsage = r.nextFloat() * 100;
+    double cpuUsage = r.nextDouble() * 100;
     m.getCpuUsageSamples().add(cpuUsage);
     m.setCpuUsage(cpuUsage);
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Member.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Member.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Member.java
index 1649543..98e015e 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Member.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Member.java
@@ -80,8 +80,8 @@ public class Member extends JMXBaseBean implements MemberMBean {
   }
 
   @Override
-  public float getDiskWritesRate() {
-    return getFloat("diskWritesRate");
+  public double getDiskWritesRate() {
+    return getDouble("diskWritesRate");
   }
 
   @Override
@@ -132,8 +132,8 @@ public class Member extends JMXBaseBean implements MemberMBean {
   }
 
   @Override
-  public float getCpuUsage() {
-    return getFloat("cpuUsage");
+  public double getCpuUsage() {
+    return getDouble("cpuUsage");
   }
 
   @Override
@@ -147,13 +147,13 @@ public class Member extends JMXBaseBean implements MemberMBean {
   }
 
   @Override
-  public float getAverageReads() {
-    return getFloat("averageReads");
+  public double getAverageReads() {
+    return getDouble("averageReads");
   }
 
   @Override
-  public float getAverageWrites() {
-    return getFloat("averageWrites");
+  public double getAverageWrites() {
+    return getDouble("averageWrites");
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/MemberMBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/MemberMBean.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/MemberMBean.java
index d96fb3b..f57d80f 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/MemberMBean.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/MemberMBean.java
@@ -40,7 +40,7 @@ public interface MemberMBean {
 
   double getLoadAverage();
 
-  float getDiskWritesRate();
+  double getDiskWritesRate();
 
   long getJVMPauses();
 
@@ -60,15 +60,15 @@ public interface MemberMBean {
 
   long getTotalBytesOnDisk();
 
-  float getCpuUsage();
+  double getCpuUsage();
 
   String getMember();
 
   String getId();
 
-  float getAverageReads();
+  double getAverageReads();
 
-  float getAverageWrites();
+  double getAverageWrites();
 
   int getPort();
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
index f239bb6..f82b10f 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
@@ -468,13 +468,13 @@ public class PulseBaseTest extends PulseTest {
 	}
 
 	public void assertMemberSortingByCpuUsage(){
-		Map<Float, String> memberMap = new TreeMap<Float,String>(Collections.reverseOrder());
+		Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
 		String [] membersNames = splitString(JMXProperties.getInstance().getProperty("members"), " ");
 		for (String member : membersNames) {
 			Member thisMember = new Member(member);
 			memberMap.put(thisMember.getCpuUsage(), thisMember.getMember());
 		}
-		for(Map.Entry<Float,String> entry : memberMap.entrySet()) {
+		for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
 			//here matching painting style to validation that the members are painted according to their cpu usage
 			String refMemberCPUUsage = null;
 			if(entry.getValue().equalsIgnoreCase("M1")){
@@ -510,13 +510,13 @@ public class PulseBaseTest extends PulseTest {
 	}
 
 	public void assertMemberSortingBySGCpuUsage(){
-		Map<Float, String> memberMap = new TreeMap<Float,String>(Collections.reverseOrder());
+		Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
 		String [] membersNames = splitString(JMXProperties.getInstance().getProperty("members"), " ");
 		for (String member : membersNames) {
 			Member thisMember = new Member(member);
 			memberMap.put(thisMember.getCpuUsage(), thisMember.getMember());
 		}
-		for(Map.Entry<Float,String> entry : memberMap.entrySet()) {
+		for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
 			//here matching painting style to validation that the members are painted according to their cpu usage
 			String refMemberCPUUsage = null;
 			if(entry.getValue().equalsIgnoreCase("M1")){
@@ -588,7 +588,7 @@ public class PulseBaseTest extends PulseTest {
 				sgMembers.put(thisMember.getMember(), thisMember);
 			}
 		}
-		Map<Float, String> memberMap = new TreeMap<Float,String>(Collections.reverseOrder());
+		Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
 		//SG3(!)M3
 		for(int sgId=1; sgId<=3; sgId++){
 			String sgName = "SG1";
@@ -597,7 +597,7 @@ public class PulseBaseTest extends PulseTest {
 			memberMap.put(m.getCpuUsage(), m.getMember());
 		}
 
-		for(Map.Entry<Float,String> entry : memberMap.entrySet()) {
+		for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
 			//here matching painting style to validation that the members are painted according to their cpu usage
 			String refMemberCPUUsage = null;
 			if(entry.getValue().equalsIgnoreCase("M1")){
@@ -661,13 +661,13 @@ public class PulseBaseTest extends PulseTest {
 
 				rzMembers.put(thisMember.getMember(), thisMember);
 		}
-		Map<Float, String> memberMap = new TreeMap<Float,String>(Collections.reverseOrder());
+		Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
 		String rzName = "RZ1 RZ2";
 		String memName = "M1" ;
 		Member m = rzMap.get(rzName).get(memName);
 		memberMap.put(m.getCpuUsage(), m.getMember());
 
-		for(Map.Entry<Float,String> entry : memberMap.entrySet()) {
+		for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
 			//here matching painting style to validation that the members are painted according to their cpu usage
 			String refMemberCPUUsage = null;
 			if(entry.getValue().equalsIgnoreCase("M1")){

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
index 00a6096..e945156 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
@@ -131,8 +131,6 @@ public class PulseTest {
   private static final String MEMBER_DROPDOWN_ID = "Members";
   private static final String DATA_DROPDOWN_ID = "Data";
 
-  private static WebDriver initdriver = null;
-
   @BeforeClass
   public static void setUpBeforeClass() throws Exception {
       ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java
index a38e572..70476f9 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java
@@ -72,13 +72,13 @@ public class Region extends JMXBaseBean implements RegionMBean {
   }
 
   @Override
-  public float getDiskReadsRate() {
-    return getFloat("diskReadsRate");
+  public double getDiskReadsRate() {
+    return getDouble("diskReadsRate");
   }
 
   @Override
-  public float getDiskWritesRate() {
-    return getFloat("diskWritesRate");
+  public double getDiskWritesRate() {
+    return getDouble("diskWritesRate");
   }
 
   @Override
@@ -87,18 +87,18 @@ public class Region extends JMXBaseBean implements RegionMBean {
   }
 
   @Override
-  public float getGetsRate() {
-    return getFloat("getsRate");
+  public double getGetsRate() {
+    return getDouble("getsRate");
   }
 
   @Override
-  public float getLruEvictionRate() {
-    return getFloat("lruEvictionRate");
+  public double getLruEvictionRate() {
+    return getDouble("lruEvictionRate");
   }
 
   @Override
-  public float getPutsRate() {
-    return getFloat("putsRate");
+  public double getPutsRate() {
+    return getDouble("putsRate");
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionMBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionMBean.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionMBean.java
index b127b32..a408b94 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionMBean.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionMBean.java
@@ -27,17 +27,17 @@ public interface RegionMBean {
 
   String getFullPath();
 
-  float getDiskReadsRate();
+  double getDiskReadsRate();
 
-  float getDiskWritesRate();
+  double getDiskWritesRate();
 
   int getEmptyNodes();
 
-  float getGetsRate();
+  double getGetsRate();
 
-  float getLruEvictionRate();
+  double getLruEvictionRate();
 
-  float getPutsRate();
+  double getPutsRate();
 
   String getRegionType();
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMember.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMember.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMember.java
index 1b7d4c3..3f7051b 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMember.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMember.java
@@ -70,23 +70,23 @@ public class RegionOnMember extends JMXBaseBean implements RegionOnMemberMBean {
   }
 
   @Override
-  public float getGetsRate(){
-    return getFloat("getsRate");
+  public double getGetsRate(){
+    return getDouble("getsRate");
   }
 
   @Override
-  public float getPutsRate(){
-    return getFloat("putsRate");
+  public double getPutsRate(){
+    return getDouble("putsRate");
   }
 
   @Override
-  public float getDiskReadsRate(){
-    return getFloat("diskGetsRate");
+  public double getDiskReadsRate(){
+    return getDouble("diskGetsRate");
   }
 
   @Override
-  public float getDiskWritesRate(){
-    return getFloat("diskPutsRate");
+  public double getDiskWritesRate(){
+    return getDouble("diskPutsRate");
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMemberMBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMemberMBean.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMemberMBean.java
index e67da24..a247c5d 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMemberMBean.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMemberMBean.java
@@ -38,13 +38,13 @@ public interface RegionOnMemberMBean {
 
   long getEntryCount();
 
-  float getGetsRate();
+  double getGetsRate();
 
-  float getPutsRate();
+  double getPutsRate();
 
-  float getDiskReadsRate();
+  double getDiskReadsRate();
 
-  float getDiskWritesRate();
+  double getDiskWritesRate();
 
   int getLocalMaxMemory();
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObject.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObject.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObject.java
index 01eda38..e663d4f 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObject.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObject.java
@@ -202,32 +202,35 @@ public class ServerObject extends NotificationBroadcasterSupport implements
   }
 
   @Override
-  public float getDiskWritesRate() {
-    return Float.parseFloat(JMXProperties.getInstance().getProperty(
+  public double getDiskWritesRate() {
+    return Double.parseDouble(JMXProperties.getInstance().getProperty(
         getKey("diskWritesRate")));
   }
 
   @Override
-  public float getAverageWrites() {
-    return Float.parseFloat(JMXProperties.getInstance().getProperty(
-        getKey("averageWrites"), ""));
+  public double getAverageWrites() {
+    String val = JMXProperties.getInstance().getProperty(getKey("averageWrites"), "");
+    double ret = Double.parseDouble(val);
+    return ret;
+//    return Double.parseDouble(JMXProperties.getInstance().getProperty(
+//        getKey("averageWrites"), ""));
   }
 
   @Override
-  public float getAverageReads() {
-    return Float.parseFloat(JMXProperties.getInstance().getProperty(
+  public double getAverageReads() {
+    return Double.parseDouble(JMXProperties.getInstance().getProperty(
         getKey("averageReads"), ""));
   }
 
   @Override
-  public float getQueryRequestRate() {
-    return Float.parseFloat(JMXProperties.getInstance().getProperty(
+  public double getQueryRequestRate() {
+    return Double.parseDouble(JMXProperties.getInstance().getProperty(
         getKey("queryRequestRate"), ""));
   }
 
   @Override
-  public float getDiskReadsRate() {
-    return Float.parseFloat(JMXProperties.getInstance().getProperty(
+  public double getDiskReadsRate() {
+    return Double.parseDouble(JMXProperties.getInstance().getProperty(
         getKey("diskReadsRate"), ""));
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/022733e8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObjectMBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObjectMBean.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObjectMBean.java
index 19f618e..f5048eb 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObjectMBean.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/ServerObjectMBean.java
@@ -59,15 +59,15 @@ public interface ServerObjectMBean {
 
   long getTotalDiskUsage();
 
-  float getDiskWritesRate();
+  double getDiskWritesRate();
 
-  float getAverageWrites();
+  double getAverageWrites();
 
-  float getAverageReads();
+  double getAverageReads();
 
-  float getQueryRequestRate();
+  double getQueryRequestRate();
 
-  float getDiskReadsRate();
+  double getDiskReadsRate();
 
   long getJVMPauses();
 


[05/50] [abbrv] incubator-geode git commit: GEODE-907: Converted core functionality to use jackson

Posted by je...@apache.org.
GEODE-907: Converted core functionality to use jackson


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/6d3f5560
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/6d3f5560
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/6d3f5560

Branch: refs/heads/feature/GEODE-17
Commit: 6d3f55605bd97a3e1172bf05906a9f612c18f1e2
Parents: 0f272db
Author: Jens Deppe <jd...@pivotal.io>
Authored: Thu Feb 18 16:31:15 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Feb 23 14:04:50 2016 -0800

----------------------------------------------------------------------
 geode-pulse/build.gradle                        |   7 +-
 .../internal/controllers/PulseController.java   | 196 +++++++-----------
 .../tools/pulse/internal/data/Cluster.java      |  29 +--
 .../tools/pulse/internal/data/DataBrowser.java  | 100 ++++-----
 .../pulse/internal/data/IClusterUpdater.java    |   5 +-
 .../pulse/internal/data/JMXDataUpdater.java     |  15 +-
 .../internal/service/ClusterDetailsService.java |  78 ++++---
 .../service/ClusterDiskThroughputService.java   |  45 ++---
 .../service/ClusterGCPausesService.java         |  39 ++--
 .../service/ClusterKeyStatisticsService.java    |  47 ++---
 .../internal/service/ClusterMemberService.java  | 135 +++++++------
 .../service/ClusterMembersRGraphService.java    |  95 ++++-----
 .../service/ClusterMemoryUsageService.java      |  38 ++--
 .../internal/service/ClusterRegionService.java  | 115 +++++------
 .../internal/service/ClusterRegionsService.java | 121 +++++------
 .../service/ClusterSelectedRegionService.java   | 159 ++++++---------
 .../ClusterSelectedRegionsMemberService.java    | 116 ++++++-----
 .../internal/service/ClusterWANInfoService.java |  52 +++--
 .../service/MemberAsynchEventQueuesService.java | 107 +++++-----
 .../internal/service/MemberClientsService.java  | 121 +++++------
 .../internal/service/MemberDetailsService.java  | 120 ++++++-----
 .../service/MemberDiskThroughputService.java    |  67 +++----
 .../internal/service/MemberGCPausesService.java |  55 ++---
 .../service/MemberGatewayHubService.java        | 201 +++++++++----------
 .../service/MemberHeapUsageService.java         |  55 ++---
 .../service/MemberKeyStatisticsService.java     |  76 +++----
 .../internal/service/MemberRegionsService.java  | 146 +++++++-------
 .../internal/service/MembersListService.java    |  43 ++--
 .../pulse/internal/service/PulseService.java    |  10 +-
 .../internal/service/PulseVersionService.java   |  40 ++--
 .../service/QueryStatisticsService.java         | 149 ++++++--------
 .../internal/service/SystemAlertsService.java   |  80 ++++----
 .../controllers/PulseControllerJUnitTest.java   | 128 +++++++++---
 .../pulse/testbed/PropMockDataUpdater.java      |  34 ++--
 .../pulse/tests/junit/BaseServiceTest.java      |  87 ++++----
 35 files changed, 1310 insertions(+), 1601 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/build.gradle
----------------------------------------------------------------------
diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle
index cd3a744..cf07751 100755
--- a/geode-pulse/build.gradle
+++ b/geode-pulse/build.gradle
@@ -67,6 +67,12 @@ sourceSets {
   main {
     output.dir(generatedResources, builtBy: 'copyGemFireVersionFile')
   }
+
+  test {
+    resources {
+      srcDir 'src/main/webapp/WEB-INF'
+    }
+  }
 }
 
 task copyGemFireVersionFile(type: Copy) {
@@ -89,7 +95,6 @@ idea.module.iml {
   }
 }
 
-
 artifacts {
   archives war
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
index 6abb2de..e70d3f1 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
@@ -19,35 +19,32 @@
 
 package com.vmware.gemfire.tools.pulse.internal.controllers;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.lang.StringEscapeUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseVersion;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
 import com.vmware.gemfire.tools.pulse.internal.service.PulseService;
 import com.vmware.gemfire.tools.pulse.internal.service.PulseServiceFactory;
 import com.vmware.gemfire.tools.pulse.internal.service.SystemAlertsService;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
 
 /**
  * Class PulseController
@@ -61,6 +58,8 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Controller
 public class PulseController {
 
+  private static final PulseLogWriter LOGGER = PulseLogWriter.getLogger();
+
   // CONSTANTS
   private final String DEFAULT_EXPORT_FILENAME = "DataBrowserQueryResult.json";
   private final String QUERYSTRING_PARAM_ACTION = "action";
@@ -74,29 +73,31 @@ public class PulseController {
   private String ERROR_REPSONSE_QUERYNOTFOUND = "No queries found";
   private String ERROR_REPSONSE_QUERYIDMISSING = "Query id is missing";
 
-  private final JSONObject NoDataJSON = new JSONObject();
+  private static final String EMPTY_JSON = "{}";
 
   // Shared object to hold pulse version details
   public static PulseVersion pulseVersion = new PulseVersion();
+
   //default is gemfire
   private static String pulseProductSupport = PulseConstants.PRODUCT_NAME_GEMFIRE;
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   @Autowired
   PulseServiceFactory pulseServiceFactory;
 
   @RequestMapping(value = "/pulseUpdate", method = RequestMethod.POST)
   public void getPulseUpdate(HttpServletRequest request,
       HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
     String pulseData = request.getParameter("pulseData");
 
-    JSONObject responseMap = new JSONObject();
+    ObjectNode responseMap = mapper.createObjectNode();
 
-    JSONObject requestMap = null;
+    JsonNode requestMap = null;
 
     try {
-      requestMap = new JSONObject(pulseData);
-      Iterator<?> keys = requestMap.keys();
+      requestMap = mapper.readTree(pulseData);
+      Iterator<?> keys = requestMap.fieldNames();
 
       // Execute Services
       while (keys.hasNext()) {
@@ -104,17 +105,12 @@ public class PulseController {
         try {
           PulseService pulseService = pulseServiceFactory
               .getPulseServiceInstance(serviceName);
-          responseMap.put(serviceName, pulseService.execute(request));
+          responseMap.put(serviceName, pulseService.tempExecute(request));
         } catch (Exception serviceException) {
           LOGGER.warning("serviceException [for service "+serviceName+"] = " + serviceException.getMessage());
-          responseMap.put(serviceName, NoDataJSON);
+          responseMap.put(serviceName, EMPTY_JSON);
         }
       }
-
-    } catch (JSONException eJSON) {
-      LOGGER.logJSONError(new JSONException(eJSON),
-          new String[] { "requestMap:"
-              + ((requestMap == null) ? "" : requestMap) });
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine("Exception Occurred : " + e.getMessage());
@@ -128,16 +124,13 @@ public class PulseController {
   @RequestMapping(value = "/authenticateUser", method = RequestMethod.GET)
   public void authenticateUser(HttpServletRequest request,
       HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     try {
       responseJSON.put("isUserLoggedIn", this.isUserLoggedIn(request));
       // Send json response
       response.getOutputStream().write(responseJSON.toString().getBytes());
-    } catch (JSONException eJSON) {
-      LOGGER.logJSONError(eJSON, null);
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine("Exception Occurred : " + e.getMessage());
@@ -152,7 +145,6 @@ public class PulseController {
    * @return boolean
    */
   protected boolean isUserLoggedIn(HttpServletRequest request) {
-
     return null != request.getUserPrincipal();
   }
 
@@ -171,9 +163,9 @@ public class PulseController {
   @RequestMapping(value = "/pulseVersion", method = RequestMethod.GET)
   public void pulseVersion(HttpServletRequest request,
       HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
+
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     try {
       // Reference to repository
@@ -186,23 +178,13 @@ public class PulseController {
       repository.setPulseWebAppUrl(pulseWebAppUrl);
 
       // Response
-      responseJSON.put("pulseVersion",
-          PulseController.pulseVersion.getPulseVersion());
-      responseJSON.put("buildId",
-          PulseController.pulseVersion.getPulseBuildId());
-      responseJSON.put("buildDate",
-          PulseController.pulseVersion.getPulseBuildDate());
-      responseJSON.put("sourceDate",
-          PulseController.pulseVersion.getPulseSourceDate());
-      responseJSON.put("sourceRevision",
-          PulseController.pulseVersion.getPulseSourceRevision());
-      responseJSON.put("sourceRepository",
-          PulseController.pulseVersion.getPulseSourceRepository());
-
-    } catch (JSONException eJSON) {
-      LOGGER
-          .logJSONError(eJSON, new String[] { "pulseVersionData :"
-              + PulseController.pulseVersion });
+      responseJSON.put("pulseVersion", PulseController.pulseVersion.getPulseVersion());
+      responseJSON.put("buildId", PulseController.pulseVersion.getPulseBuildId());
+      responseJSON.put("buildDate", PulseController.pulseVersion.getPulseBuildDate());
+      responseJSON.put("sourceDate", PulseController.pulseVersion.getPulseSourceDate());
+      responseJSON.put("sourceRevision", PulseController.pulseVersion.getPulseSourceRevision());
+      responseJSON.put("sourceRepository", PulseController.pulseVersion.getPulseSourceRepository());
+
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine("Exception Occured : " + e.getMessage());
@@ -214,11 +196,10 @@ public class PulseController {
   }
 
   @RequestMapping(value = "/clearAlerts", method = RequestMethod.GET)
-  public void clearAlerts(HttpServletRequest request,
-      HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
+  public void clearAlerts(HttpServletRequest request, HttpServletResponse response) throws IOException {
     int alertType;
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
+
     try {
       alertType = Integer.valueOf(request.getParameter("alertType"));
     } catch (NumberFormatException e) {
@@ -248,9 +229,6 @@ public class PulseController {
         responseJSON.put("connectedFlag", isGFConnected);
         responseJSON.put("connectedErrorMsg", cluster.getConnectionErrorMsg());
       }
-
-    } catch (JSONException eJSON) {
-      LOGGER.logJSONError(eJSON, null);
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine("Exception Occurred : " + e.getMessage());
@@ -264,9 +242,8 @@ public class PulseController {
   @RequestMapping(value = "/acknowledgeAlert", method = RequestMethod.GET)
   public void acknowledgeAlert(HttpServletRequest request,
       HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
     int alertId;
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     try {
       alertId = Integer.valueOf(request.getParameter("alertId"));
@@ -286,8 +263,6 @@ public class PulseController {
       // set alert is acknowledged
       cluster.acknowledgeAlert(alertId);
       responseJSON.put("status", "deleted");
-    } catch (JSONException eJSON) {
-      LOGGER.logJSONError(eJSON, null);
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine("Exception Occured : " + e.getMessage());
@@ -301,13 +276,12 @@ public class PulseController {
   @RequestMapping(value = "/dataBrowserRegions", method = RequestMethod.GET)
   public void dataBrowserRegions(HttpServletRequest request,
       HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-    List<JSONObject> regionsData = Collections.emptyList();
+    ObjectNode responseJSON = mapper.createObjectNode();
+    ArrayNode regionsData = mapper.createArrayNode();
 
     try {
       // getting cluster's Regions
@@ -316,14 +290,6 @@ public class PulseController {
       responseJSON.put("clusterRegions", regionsData);
       responseJSON.put("connectedFlag", cluster.isConnectedFlag());
       responseJSON.put("connectedErrorMsg", cluster.getConnectionErrorMsg());
-
-    } catch (JSONException eJSON) {
-      LOGGER.logJSONError(
-          eJSON,
-          new String[] { "clusterName:" + cluster.getServerName(),
-              "clusterRegions:" + regionsData,
-              "connectedFlag:" + cluster.isConnectedFlag(),
-              "connectedErrorMsg:" + cluster.getConnectionErrorMsg() });
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine("Exception Occured : " + e.getMessage());
@@ -338,38 +304,39 @@ public class PulseController {
    * This method creates json for list of cluster regions
    * 
    * @param cluster
-   * @return JSONObject Array List
+   * @return ArrayNode JSON array
    */
-  private List<JSONObject> getRegionsJson(Cluster cluster) throws JSONException {
+  private ArrayNode getRegionsJson(Cluster cluster) {
 
-    Collection<Cluster.Region> clusterRegions = cluster.getClusterRegions()
-        .values();
-    List<JSONObject> regionsListJson = new ArrayList<JSONObject>();
+    Collection<Cluster.Region> clusterRegions = cluster.getClusterRegions().values();
+    ArrayNode regionsListJson = mapper.createArrayNode();
 
     if (!clusterRegions.isEmpty()) {
       for (Cluster.Region region : clusterRegions) {
-        JSONObject regionJSON = new JSONObject();
-
+        ObjectNode regionJSON = mapper.createObjectNode();
         regionJSON.put("name", region.getName());
         regionJSON.put("fullPath", region.getFullPath());
         regionJSON.put("regionType", region.getRegionType());
-        if(region.getRegionType().contains("PARTITION")){
+
+        if (region.getRegionType().contains("PARTITION")) {
           regionJSON.put("isPartition", true);
-        }else{
+        } else {
           regionJSON.put("isPartition", false);
         }
+
         regionJSON.put("memberCount", region.getMemberCount());
         List<String> regionsMembers = region.getMemberName();
-        JSONArray jsonRegionMembers = new JSONArray();
+        ArrayNode jsonRegionMembers = mapper.createArrayNode();
+
         for (int i = 0; i < regionsMembers.size(); i++) {
           Cluster.Member member = cluster.getMembersHMap().get(
               regionsMembers.get(i));
-          JSONObject jsonMember = new JSONObject();
+          ObjectNode jsonMember = mapper.createObjectNode();
           jsonMember.put("key", regionsMembers.get(i));
           jsonMember.put("id", member.getId());
           jsonMember.put("name", member.getName());
 
-          jsonRegionMembers.put(jsonMember);
+          jsonRegionMembers.add(jsonMember);
         }
 
         regionJSON.put("members", jsonRegionMembers);
@@ -382,7 +349,6 @@ public class PulseController {
   @RequestMapping(value = "/dataBrowserQuery", method = RequestMethod.GET)
   public void dataBrowserQuery(HttpServletRequest request,
       HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
     // get query string
     String query = request.getParameter("query");
     String members = request.getParameter("members");
@@ -397,7 +363,7 @@ public class PulseController {
       }
     }
 
-    JSONObject queryResult = new JSONObject();
+    ObjectNode queryResult = mapper.createObjectNode();
     try {
 
       if (StringUtils.isNotNullNotEmptyNotWhiteSpace(query)) {
@@ -415,8 +381,6 @@ public class PulseController {
           cluster.addQueryInHistory(escapedQuery, userName);
         }
       }
-    } catch (JSONException eJSON) {
-      LOGGER.logJSONError(eJSON, new String[] { "queryResult:" + queryResult });
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine("Exception Occured : " + e.getMessage());
@@ -429,12 +393,11 @@ public class PulseController {
   @RequestMapping(value = "/dataBrowserQueryHistory", method = RequestMethod.GET)
   public void dataBrowserQueryHistory(HttpServletRequest request,
       HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
-    JSONObject responseJSON = new JSONObject();
-    JSONArray queryResult = null;
+    ObjectNode responseJSON = mapper.createObjectNode();
+    ArrayNode queryResult = null;
     String action = "";
-    try {
 
+    try {
       // get cluster object
       Cluster cluster = Repository.get().getCluster();
       String userName = request.getUserPrincipal().getName();
@@ -465,10 +428,6 @@ public class PulseController {
       // Get list of past executed queries
       queryResult = cluster.getQueryHistoryByUserId(userName);
       responseJSON.put("queryHistory", queryResult);
-
-    } catch (JSONException eJSON) {
-      LOGGER.logJSONError(eJSON, new String[] { "action:" + action,
-          "queryResult:" + queryResult });
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine("Exception Occured : " + e.getMessage());
@@ -488,11 +447,9 @@ public class PulseController {
     response.setHeader("Cache-Control", "");
     response.setHeader("Content-type", "text/plain");
     if (StringUtils.isNotNullNotEmptyNotWhiteSpace(filename)) {
-      response.setHeader("Content-Disposition", "attachment; filename="
-          + filename);
+      response.setHeader("Content-Disposition", "attachment; filename=" + filename);
     } else {
-      response.setHeader("Content-Disposition", "attachment; filename="
-          + DEFAULT_EXPORT_FILENAME);
+      response.setHeader("Content-Disposition", "attachment; filename=" + DEFAULT_EXPORT_FILENAME);
     }
 
     if (!StringUtils.isNotNullNotEmptyNotWhiteSpace(resultContent)) {
@@ -505,19 +462,16 @@ public class PulseController {
   @RequestMapping(value = "/pulseProductSupport", method = RequestMethod.GET)
   public void getConfiguredPulseProduct(HttpServletRequest request,
       HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
-    JSONObject responseJSON = new JSONObject();
+      ObjectNode responseJSON = mapper.createObjectNode();
 
     try {
       responseJSON.put("product", pulseProductSupport);
 
       // Send json response
       response.getOutputStream().write(responseJSON.toString().getBytes());
-    } catch (JSONException eJSON) {
-      LOGGER.logJSONError(eJSON, null);
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
-        LOGGER.fine("Exception Occured : " + e.getMessage());
+        LOGGER.fine("Exception Occurred : " + e.getMessage());
       }
     }
   }
@@ -525,8 +479,8 @@ public class PulseController {
   @RequestMapping(value = "/getQueryStatisticsGridModel", method = RequestMethod.GET)
   public void getQueryStatisticsGridModel(HttpServletRequest request,
       HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();
-    JSONObject responseJSON = new JSONObject();
+
+    ObjectNode responseJSON = mapper.createObjectNode();
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
     String userName = request.getUserPrincipal().getName();
@@ -536,21 +490,20 @@ public class PulseController {
       String[] arrColAttribs = Cluster.Statement.getGridColumnAttributes();
       int[] arrColWidths = Cluster.Statement.getGridColumnWidths();
 
-      JSONArray colNamesList = new JSONArray();
+      ArrayNode colNamesList = mapper.createArrayNode();
       for (int i = 0; i < arrColNames.length; ++i) {
-        colNamesList.put(arrColNames[i]);
+        colNamesList.add(arrColNames[i]);
       }
 
-      JSONArray colModelList = new JSONArray();
-      JSONObject columnJSON = null;
+      ArrayNode colModelList = mapper.createArrayNode();
       for (int i = 0; i < arrColAttribs.length; ++i) {
-        columnJSON = new JSONObject();
+        ObjectNode columnJSON = mapper.createObjectNode();
         columnJSON.put("name", arrColAttribs[i]);
         columnJSON.put("index", arrColAttribs[i]);
         columnJSON.put("width", arrColWidths[i]);
         columnJSON.put("sortable", "true");
         columnJSON.put("sorttype", ((i == 0) ? "String" : "integer"));
-        colModelList.put(columnJSON);
+        colModelList.add(columnJSON);
       }
 
       responseJSON.put("columnNames", colNamesList);
@@ -560,8 +513,6 @@ public class PulseController {
 
       // Send json response
       response.getOutputStream().write(responseJSON.toString().getBytes());
-    } catch (JSONException eJSON) {
-      LOGGER.logJSONError(eJSON, null);
     } catch (Exception e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine("Exception Occured : " + e.getMessage());
@@ -583,5 +534,4 @@ public class PulseController {
   public static void setPulseProductSupport(String pulseProductSupport) {
     PulseController.pulseProductSupport = pulseProductSupport;
   }
-
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
index 309fdf7..5c6bb40 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
@@ -54,6 +54,11 @@ import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.commons.collections.buffer.CircularFifoBuffer;
+
 /**
  * Class Cluster This class is the Data Model for the data used for the Pulse
  * Web UI.
@@ -162,8 +167,11 @@ public class Cluster extends Thread {
   private boolean stopUpdates = false;
 
   private static final int MAX_HOSTS = 40;
+
   private final List<String> hostNames = new ArrayList<String>();
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   public Object[] getStatisticTrend(int trendId) {
 
     Object[] returnArray = null;
@@ -216,7 +224,6 @@ public class Cluster extends Thread {
         returnArray = this.garbageCollectionTrend.toArray();
       }
       break;
-
     }
 
     return returnArray;
@@ -2881,13 +2888,12 @@ public class Cluster extends Thread {
     this.dataBrowser = dataBrowser;
   }
 
-  public JSONObject executeQuery(String queryText, String members, int limit)
-      throws JSONException {
+  public ObjectNode executeQuery(String queryText, String members, int limit) {
     // Execute data browser query
     return this.updater.executeQuery(queryText, members, limit);
   }
 
-  public JSONArray getQueryHistoryByUserId(String userId) throws JSONException {
+  public ArrayNode getQueryHistoryByUserId(String userId) {
     return this.getDataBrowser().getQueryHistoryByUserId(userId);
   }
 
@@ -3513,11 +3519,10 @@ public class Cluster extends Thread {
     private int queryCounter = 0;
 
     @Override
-    public JSONObject executeQuery(String queryText, String members, int limit)
-        throws JSONException {
+    public ObjectNode executeQuery(String queryText, String members, int limit) {
 
       BufferedReader streamReader = null;
-      JSONObject jsonObject = new JSONObject();
+      ObjectNode jsonObject = mapper.createObjectNode();
       Random rand = new Random();
       int min = 1, max = 5;
       int randomNum = rand.nextInt(max - min + 1) + min;
@@ -3530,8 +3535,7 @@ public class Cluster extends Thread {
       }
 
       try {
-        ClassLoader classLoader = Thread.currentThread()
-            .getContextClassLoader();
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
 
         switch (queryCounter++) {
         case 1:
@@ -3643,14 +3647,11 @@ public class Cluster extends Thread {
           testQueryResultClusterSmallresponseStrBuilder.append(inputStr);
         }
 
-        jsonObject = new JSONObject(
-            testQueryResultClusterSmallresponseStrBuilder.toString());
+//        jsonObject = new JSONObject(
+//            testQueryResultClusterSmallresponseStrBuilder.toString());
 
         // close stream reader
         streamReader.close();
-
-      } catch (JSONException ex) {
-        LOGGER.severe(ex.getMessage());
       } catch (IOException ex) {
         LOGGER.severe(ex.getMessage());
       }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
index f3b4493..88d5e32 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
@@ -30,6 +30,10 @@ import java.util.Iterator;
 import java.util.ResourceBundle;
 import java.util.Scanner;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
 import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
 import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
@@ -52,6 +56,8 @@ public class DataBrowser {
   private SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
       PulseConstants.PULSE_QUERY_HISTORY_DATE_PATTERN);
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   /**
    * addQueryInHistory method adds user's query into query history file
    * 
@@ -61,35 +67,25 @@ public class DataBrowser {
    *          Query text to execute
    */
   public boolean addQueryInHistory(String queryText, String userId) {
-
     boolean operationStatus = false;
     if (StringUtils.isNotNullNotEmptyNotWhiteSpace(queryText)
         && StringUtils.isNotNullNotEmptyNotWhiteSpace(userId)) {
 
       // Fetch all queries from query log file
-      JSONObject queries = fetchAllQueriesFromFile();
+      ObjectNode queries = fetchAllQueriesFromFile();
 
       // Get user's query history list
-      JSONObject userQueries = null;
-      try {
-        userQueries = queries.getJSONObject(userId);
-      } catch (JSONException e) {
-        userQueries = new JSONObject();
+      ObjectNode userQueries = (ObjectNode) queries.get(userId);
+      if (userQueries == null) {
+        userQueries = mapper.createObjectNode();
       }
 
       // Add query in user's query history list
-      try {
-        userQueries.put(Long.toString(System.currentTimeMillis()), queryText);
-        queries.put(userId, userQueries);
-      } catch (JSONException e) {
-        if (LOGGER.fineEnabled()) {
-          LOGGER.fine("JSONException Occured while adding user's query : " + e.getMessage());
-        }
-      }
+      userQueries.put(Long.toString(System.currentTimeMillis()), queryText);
+      queries.put(userId, userQueries);
 
       // Store queries in file back
       operationStatus = storeQueriesInFile(queries);
-
     }
 
     return operationStatus;
@@ -111,29 +107,17 @@ public class DataBrowser {
         && StringUtils.isNotNullNotEmptyNotWhiteSpace(userId)) {
 
       // Fetch all queries from query log file
-      JSONObject queries = fetchAllQueriesFromFile();
+      ObjectNode queries = fetchAllQueriesFromFile();
 
       // Get user's query history list
-      JSONObject userQueries = null;
-      try {
-        userQueries = queries.getJSONObject(userId);
-      } catch (JSONException e) {
-        userQueries = new JSONObject();
-      }
+      ObjectNode userQueries = (ObjectNode) queries.get(userId);
 
       // Remove user's query
-      try {
-        userQueries.remove(queryId);
-        queries.put(userId, userQueries);
-      } catch (JSONException e) {
-        if (LOGGER.fineEnabled()) {
-          LOGGER.fine("JSONException Occured while deleting user's query : " + e.getMessage());
-        }
-      }
+      userQueries.remove(queryId);
+      queries.put(userId, userQueries);
 
       // Store queries in file back
       operationStatus = storeQueriesInFile(queries);
-
     }
     
     return operationStatus;
@@ -146,38 +130,27 @@ public class DataBrowser {
    * @param userId
    *          Logged in User's Id
    */
-  public JSONArray getQueryHistoryByUserId(String userId) {
+  public ArrayNode getQueryHistoryByUserId(String userId) {
 
-    JSONArray queryList = new JSONArray();
+    ArrayNode queryList = mapper.createArrayNode();
 
     if (StringUtils.isNotNullNotEmptyNotWhiteSpace(userId)) {
 
       // Fetch all queries from query log file
-      JSONObject queries = fetchAllQueriesFromFile();
+      ObjectNode queries = fetchAllQueriesFromFile();
       
       // Get user's query history list
-      JSONObject userQueries = null;
-      try {
-        userQueries = queries.getJSONObject(userId);
-      } catch (JSONException e) {
-        userQueries = new JSONObject();
-      }
-
-      try {
-        Iterator<?> it = userQueries.keys();
-        while (it.hasNext()) {
-          String key = (String) it.next();
-          JSONObject queryItem = new JSONObject();
-          queryItem.put("queryId", key);
-          queryItem.put("queryText", userQueries.get(key).toString());
-          queryItem.put("queryDateTime",
-              simpleDateFormat.format(Long.valueOf(key)));
-          queryList.put(queryItem);
-        }
-      } catch (JSONException e) {
-        if (LOGGER.fineEnabled()) {
-          LOGGER.fine("JSONException Occured: " + e.getMessage());
-        }
+      ObjectNode userQueries = (ObjectNode) queries.get(userId);
+
+      Iterator<String> it = userQueries.fieldNames();
+      while (it.hasNext()) {
+        String key = it.next();
+        ObjectNode queryItem = mapper.createObjectNode();
+        queryItem.put("queryId", key);
+        queryItem.put("queryText", userQueries.get(key).toString());
+        queryItem.put("queryDateTime",
+            simpleDateFormat.format(Long.valueOf(key)));
+        queryList.add(queryItem);
       }
     }
 
@@ -189,15 +162,14 @@ public class DataBrowser {
    * 
    * @return Properties A collection queries in form of key and values
    */
-  private JSONObject fetchAllQueriesFromFile() {
+  private ObjectNode fetchAllQueriesFromFile() {
     InputStream inputStream = null;
-    JSONObject queriesJSON = new JSONObject();
+    JsonNode queriesJSON = mapper.createObjectNode();
 
     try {
       inputStream = new FileInputStream(Repository.get().getPulseConfig().getQueryHistoryFileName());
-      String inputStreamString = new Scanner(inputStream, "UTF-8")
-          .useDelimiter("\\A").next();
-      queriesJSON = new JSONObject(inputStreamString);
+      String inputStreamString = new Scanner(inputStream, "UTF-8").useDelimiter("\\A").next();
+      queriesJSON = mapper.readTree(inputStreamString);
     } catch (FileNotFoundException e) {
       if (LOGGER.fineEnabled()) {
         LOGGER.fine(resourceBundle
@@ -221,7 +193,7 @@ public class DataBrowser {
       }
     }
 
-    return queriesJSON;
+    return (ObjectNode) queriesJSON;
   }
 
   /**
@@ -229,7 +201,7 @@ public class DataBrowser {
    * 
    * @return Boolean true is operation is successful, false otherwise
    */
-  private boolean storeQueriesInFile(JSONObject queries) {
+  private boolean storeQueriesInFile(ObjectNode queries) {
     boolean operationStatus = false;
     FileOutputStream fileOut = null;
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/IClusterUpdater.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/IClusterUpdater.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/IClusterUpdater.java
index 2b7e1a4..27abc21 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/IClusterUpdater.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/IClusterUpdater.java
@@ -19,8 +19,7 @@
 
 package com.vmware.gemfire.tools.pulse.internal.data;
 
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 
 /**
  * Interface having updateData() function which is getting Override by both
@@ -33,5 +32,5 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 public interface IClusterUpdater {
   boolean updateData();
 
-  JSONObject executeQuery(String queryText, String members, int limit) throws JSONException;
+  ObjectNode executeQuery(String queryText, String members, int limit);
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
index 8e4557a..adb7532 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
@@ -19,10 +19,10 @@
 
 package com.vmware.gemfire.tools.pulse.internal.data;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import com.vmware.gemfire.tools.pulse.internal.data.JmxManagerFinder.JmxManagerInfo;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 
@@ -101,6 +101,8 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
   private final String opSignature[] = { String.class.getName(),
       String.class.getName(), int.class.getName() };
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   /**
    * constructor used for creating JMX connection
    */
@@ -2377,15 +2379,12 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
   }
 
   @Override
-  public JSONObject executeQuery(String queryText, String members, int limit)
-      throws JSONException {
+  public ObjectNode executeQuery(String queryText, String members, int limit) {
 
-    JSONObject queryResult = new JSONObject();
+    ObjectNode queryResult = mapper.createObjectNode();
 
     if (this.mbs != null && this.systemMBeans != null) {
-
       Object opParams[] = { queryText, members, limit };
-
       for (ObjectName sysMBean : this.systemMBeans) {
         try {
           String resultString = (String) (this.mbs.invoke(sysMBean,
@@ -2393,7 +2392,7 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
               this.opSignature));
 
           // Convert result into JSON
-          queryResult = new JSONObject(resultString);
+          queryResult = (ObjectNode) mapper.readTree(resultString);
 
         } catch (Exception e) {
           // Send error into result

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java
index 2efb6aa..35f9a81 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java
@@ -19,19 +19,17 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import java.text.DecimalFormat;
-
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import javax.servlet.http.HttpServletRequest;
+import java.text.DecimalFormat;
 
 /**
  * Class ClusterDetailsService
@@ -48,7 +46,9 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 @Scope("singleton")
 public class ClusterDetailsService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     String userName = request.getUserPrincipal().getName();
 
@@ -56,7 +56,7 @@ public class ClusterDetailsService implements PulseService {
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     Cluster.Alert[] alertsList = cluster.getAlertsList();
     int severeAlertCount = 0;
@@ -75,35 +75,31 @@ public class ClusterDetailsService implements PulseService {
         infoAlertCount++;
       }
     }
-    try {
-      // getting basic details of Cluster
-      responseJSON.put("clusterName", cluster.getServerName());
-      responseJSON.put("severeAlertCount", severeAlertCount);
-      responseJSON.put("errorAlertCount", errorAlertCount);
-      responseJSON.put("warningAlertCount", warningAlertCount);
-      responseJSON.put("infoAlertCount", infoAlertCount);
-
-      responseJSON.put("totalMembers", cluster.getMemberCount());
-      responseJSON.put("servers", cluster.getServerCount());
-      responseJSON.put("clients", cluster.getClientConnectionCount());
-      responseJSON.put("locators", cluster.getLocatorCount());
-      responseJSON.put("totalRegions", cluster.getTotalRegionCount());
-      Long heapSize = cluster.getTotalHeapSize();
-
-      DecimalFormat df2 = new DecimalFormat(
-          PulseConstants.DECIMAL_FORMAT_PATTERN);
-      Double heapS = heapSize.doubleValue() / 1024;
-      responseJSON.put("totalHeap", Double.valueOf(df2.format(heapS)));
-      responseJSON.put("functions", cluster.getRunningFunctionCount());
-      responseJSON.put("uniqueCQs", cluster.getRegisteredCQCount());
-      responseJSON.put("subscriptions", cluster.getSubscriptionCount());
-      responseJSON.put("txnCommitted", cluster.getTxnCommittedCount());
-      responseJSON.put("txnRollback", cluster.getTxnRollbackCount());
-      responseJSON.put("userName", userName);
-
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
+    // getting basic details of Cluster
+    responseJSON.put("clusterName", cluster.getServerName());
+    responseJSON.put("severeAlertCount", severeAlertCount);
+    responseJSON.put("errorAlertCount", errorAlertCount);
+    responseJSON.put("warningAlertCount", warningAlertCount);
+    responseJSON.put("infoAlertCount", infoAlertCount);
+
+    responseJSON.put("totalMembers", cluster.getMemberCount());
+    responseJSON.put("servers", cluster.getServerCount());
+    responseJSON.put("clients", cluster.getClientConnectionCount());
+    responseJSON.put("locators", cluster.getLocatorCount());
+    responseJSON.put("totalRegions", cluster.getTotalRegionCount());
+    Long heapSize = cluster.getTotalHeapSize();
+
+    DecimalFormat df2 = new DecimalFormat(
+        PulseConstants.DECIMAL_FORMAT_PATTERN);
+    Double heapS = heapSize.doubleValue() / 1024;
+    responseJSON.put("totalHeap", Double.valueOf(df2.format(heapS)));
+    responseJSON.put("functions", cluster.getRunningFunctionCount());
+    responseJSON.put("uniqueCQs", cluster.getRegisteredCQCount());
+    responseJSON.put("subscriptions", cluster.getSubscriptionCount());
+    responseJSON.put("txnCommitted", cluster.getTxnCommittedCount());
+    responseJSON.put("txnRollback", cluster.getTxnRollbackCount());
+    responseJSON.put("userName", userName);
+
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
index 0c1b56a..0a45ef6 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java
@@ -19,17 +19,15 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class ClusterDiskThroughput This class contains implementations for getting
@@ -44,36 +42,31 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 @Scope("singleton")
 public class ClusterDiskThroughputService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-    // clucter's Throughout Writes trend added to json response object
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    // cluster's Throughout Writes trend added to json response object
     // CircularFifoBuffer throughoutWritesTrend =
     // cluster.getThroughoutWritesTrend();
     Float currentThroughputWrites = cluster.getDiskWritesRate();
     Float currentThroughputReads = cluster.getDiskReadsRate();
 
-    try {
-      responseJSON.put("currentThroughputReads", currentThroughputReads);
-      responseJSON.put(
-          "throughputReads",
-          new JSONArray(cluster
-              .getStatisticTrend(Cluster.CLUSTER_STAT_THROUGHPUT_READS)));
+    responseJSON.put("currentThroughputReads", currentThroughputReads);
+    responseJSON.put("throughputReads",
+        mapper.valueToTree(cluster.getStatisticTrend(Cluster.CLUSTER_STAT_THROUGHPUT_READS)));
 
-      responseJSON.put("currentThroughputWrites", currentThroughputWrites);
-      responseJSON.put(
-          "throughputWrites",
-          new JSONArray(cluster
-              .getStatisticTrend(Cluster.CLUSTER_STAT_THROUGHPUT_WRITES)));
+    responseJSON.put("currentThroughputWrites", currentThroughputWrites);
+    responseJSON.put("throughputWrites",
+        mapper.valueToTree( cluster.getStatisticTrend(Cluster.CLUSTER_STAT_THROUGHPUT_WRITES)));
 
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
index 7c44234..606fc12 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java
@@ -19,17 +19,16 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class ClusterGCPausesService
@@ -46,26 +45,24 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 @Scope("singleton")
 public class ClusterGCPausesService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-    // clucter's GC Pauses trend added to json response object
+    ObjectNode responseJSON = mapper.createObjectNode();
+    // cluster's GC Pauses trend added to json response object
 
-    try {
-      responseJSON.put("currentGCPauses", cluster.getGarbageCollectionCount());
-      responseJSON.put(
-          "gCPausesTrend",
-          new JSONArray(cluster
-              .getStatisticTrend(Cluster.CLUSTER_STAT_GARBAGE_COLLECTION))); // new
-                                                                             // JSONArray(array)
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+    ArrayNode pauses = mapper.createArrayNode();
+    for (Object obj : cluster.getStatisticTrend(Cluster.CLUSTER_STAT_GARBAGE_COLLECTION)) {
+      pauses.add(obj.toString());
     }
+    responseJSON.put("currentGCPauses", cluster.getGarbageCollectionCount());
+    responseJSON.put("gCPausesTrend", pauses);
+    // Send json response
+    return responseJSON;
   }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java
index 8ca4c03..ae9e5cf 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java
@@ -19,17 +19,15 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class ClusterKeyStatisticsService
@@ -46,34 +44,27 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 @Scope("singleton")
 public class ClusterKeyStatisticsService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    responseJSON.put("writePerSecTrend",
+        mapper.valueToTree(cluster.getStatisticTrend(Cluster.CLUSTER_STAT_WRITES_PER_SECOND)));
+
+    responseJSON.put("readPerSecTrend",
+        mapper.valueToTree(cluster.getStatisticTrend(Cluster.CLUSTER_STAT_READ_PER_SECOND)));
 
-    try {
-      // clucter's Read write information
-      responseJSON.put(
-          "writePerSecTrend",
-          new JSONArray(cluster
-              .getStatisticTrend(Cluster.CLUSTER_STAT_WRITES_PER_SECOND)));
-      responseJSON.put(
-          "readPerSecTrend",
-          new JSONArray(cluster
-              .getStatisticTrend(Cluster.CLUSTER_STAT_READ_PER_SECOND)));
-      responseJSON.put(
-          "queriesPerSecTrend",
-          new JSONArray(cluster
-              .getStatisticTrend(Cluster.CLUSTER_STAT_QUERIES_PER_SECOND)));
+    responseJSON.put("queriesPerSecTrend",
+        mapper.valueToTree(cluster.getStatisticTrend(Cluster.CLUSTER_STAT_QUERIES_PER_SECOND)));
 
-      // Send json response
-      return responseJSON;
+    // Send json response
+    return responseJSON;
 
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
index 80e0b2e..296a45d 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
@@ -19,12 +19,13 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.util.TimeUtils;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
@@ -49,84 +50,82 @@ import java.util.List;
 @Scope("singleton")
 public class ClusterMemberService implements PulseService {
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   private final String HEAP_USAGE = "heapUsage";
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     Cluster.Member[] clusterMembersList = cluster.getMembers();
 
     // create members json
-    List<JSONObject> memberListJson = new ArrayList<JSONObject>();
-    try {
-      for (Cluster.Member clusterMember : clusterMembersList) {
-        JSONObject memberJSON = new JSONObject();
-        // getting members detail
-        memberJSON.put("gemfireVersion", clusterMember.getGemfireVersion());
-        memberJSON.put("memberId", clusterMember.getId());
-        memberJSON.put("name", clusterMember.getName());
-        memberJSON.put("host", clusterMember.getHost());
-        memberJSON.put("hostnameForClients", clusterMember.getHostnameForClients());
-
-        List<String> serverGroups = clusterMember.getServerGroups();
-        if(serverGroups.size() == 0){
-          serverGroups = new ArrayList<String>();
-          serverGroups.add(PulseConstants.DEFAULT_SERVER_GROUP);
-        }
-        memberJSON.put("serverGroups", serverGroups);
-        
-        List<String> redundancyZones = clusterMember.getRedundancyZones();
-        if(redundancyZones.size() == 0){
-          redundancyZones = new ArrayList<String>();
-          redundancyZones.add(PulseConstants.DEFAULT_REDUNDANCY_ZONE);
-        }
-        memberJSON.put("redundancyZones", redundancyZones);
-
-        DecimalFormat df2 = new DecimalFormat(
-            PulseConstants.DECIMAL_FORMAT_PATTERN);
-
-        long usedHeapSize = cluster.getUsedHeapSize();
-        long currentHeap = clusterMember.getCurrentHeapSize();
-        if (usedHeapSize > 0) {
-          float heapUsage = ((float) currentHeap / (float) usedHeapSize) * 100;
-          memberJSON
-              .put(this.HEAP_USAGE, Double.valueOf(df2.format(heapUsage)));
-        } else {
-          memberJSON.put(this.HEAP_USAGE, 0);
-        }
-        Float currentCPUUsage = clusterMember.getCpuUsage();
-
-        memberJSON.put("cpuUsage", Float.valueOf(df2.format(currentCPUUsage)));
-        memberJSON.put("currentHeapUsage", clusterMember.getCurrentHeapSize());
-        memberJSON.put("isManager", clusterMember.isManager());
-        memberJSON.put("uptime",
-            TimeUtils.convertTimeSecondsToHMS(clusterMember.getUptime()));
-        memberJSON.put("loadAvg", clusterMember.getLoadAverage());
-        memberJSON.put("sockets", clusterMember.getTotalFileDescriptorOpen());
-        memberJSON.put("threads", clusterMember.getNumThreads());
-
-        // Number of member clients
-        if (PulseController.getPulseProductSupport().equalsIgnoreCase(
-            PulseConstants.PRODUCT_NAME_SQLFIRE)){
-          memberJSON.put("clients", clusterMember.getNumSqlfireClients());
-        }else{
-          memberJSON.put("clients", clusterMember.getMemberClientsHMap().size());
-        }
-        memberJSON.put("queues", clusterMember.getQueueBacklog());
-
-        memberListJson.add(memberJSON);
+    ArrayNode memberListJson = mapper.createArrayNode();
+    for (Cluster.Member clusterMember : clusterMembersList) {
+      ObjectNode memberJSON = mapper.createObjectNode();
+      // getting members detail
+      memberJSON.put("gemfireVersion", clusterMember.getGemfireVersion());
+      memberJSON.put("memberId", clusterMember.getId());
+      memberJSON.put("name", clusterMember.getName());
+      memberJSON.put("host", clusterMember.getHost());
+
+      List<String> serverGroups = clusterMember.getServerGroups();
+      if(serverGroups.size() == 0){
+        serverGroups = new ArrayList<>();
+        serverGroups.add(PulseConstants.DEFAULT_SERVER_GROUP);
+      }
+
+      memberJSON.put("serverGroups", mapper.valueToTree(serverGroups));
+
+      List<String> redundancyZones = clusterMember.getRedundancyZones();
+      if(redundancyZones.size() == 0){
+        redundancyZones = new ArrayList<String>();
+        redundancyZones.add(PulseConstants.DEFAULT_REDUNDANCY_ZONE);
       }
-      // clucter's Members
-      responseJSON.put("members", memberListJson);
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+      memberJSON.put("redundancyZones", mapper.valueToTree(redundancyZones));
+
+      DecimalFormat df2 = new DecimalFormat(
+          PulseConstants.DECIMAL_FORMAT_PATTERN);
+
+      long usedHeapSize = cluster.getUsedHeapSize();
+      long currentHeap = clusterMember.getCurrentHeapSize();
+      if (usedHeapSize > 0) {
+        float heapUsage = ((float) currentHeap / (float) usedHeapSize) * 100;
+        memberJSON
+            .put(this.HEAP_USAGE, Double.valueOf(df2.format(heapUsage)));
+      } else {
+        memberJSON.put(this.HEAP_USAGE, 0);
+      }
+      Float currentCPUUsage = clusterMember.getCpuUsage();
+
+      memberJSON.put("cpuUsage", Float.valueOf(df2.format(currentCPUUsage)));
+      memberJSON.put("currentHeapUsage", clusterMember.getCurrentHeapSize());
+      memberJSON.put("isManager", clusterMember.isManager());
+      memberJSON.put("uptime",
+          TimeUtils.convertTimeSecondsToHMS(clusterMember.getUptime()));
+      memberJSON.put("loadAvg", clusterMember.getLoadAverage());
+      memberJSON.put("sockets", clusterMember.getTotalFileDescriptorOpen());
+      memberJSON.put("threads", clusterMember.getNumThreads());
+
+      // Number of member clients
+      if (PulseController.getPulseProductSupport().equalsIgnoreCase(
+          PulseConstants.PRODUCT_NAME_SQLFIRE)){
+        memberJSON.put("clients", clusterMember.getNumSqlfireClients());
+      }else{
+        memberJSON.put("clients", clusterMember.getMemberClientsHMap().size());
+      }
+      memberJSON.put("queues", clusterMember.getQueueBacklog());
+
+      memberListJson.add(memberJSON);
     }
+    // cluster's Members
+    responseJSON.put("members", memberListJson);
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
index f9ca137..b6203e5 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java
@@ -26,6 +26,9 @@ import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
@@ -33,9 +36,6 @@ import org.springframework.stereotype.Service;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 
 /**
  * Class ClusterMembersRGraphService
@@ -48,10 +48,11 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
  */
 @Component
 @Service("ClusterMembersRGraph")
-// @Service("ClusterMembers")
 @Scope("singleton")
 public class ClusterMembersRGraphService implements PulseService {
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   // String constants used for forming a json response
   private final String CLUSTER = "clustor";
   private final String MEMBER_COUNT = "memberCount";
@@ -85,7 +86,7 @@ public class ClusterMembersRGraphService implements PulseService {
   private List<String> errorAlertsList;
   private List<String> warningAlertsList;
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // Reference to repository
     Repository repository = Repository.get();
@@ -94,20 +95,15 @@ public class ClusterMembersRGraphService implements PulseService {
     Cluster cluster = repository.getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-      // clucter's Members
-      responseJSON.put(
-          this.CLUSTER,
-          getPhysicalServerJson(cluster, repository.getJmxHost(),
-              repository.getJmxPort()));
-      responseJSON.put(this.MEMBER_COUNT, cluster.getMemberCount());
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    // cluster's Members
+    responseJSON.put(this.CLUSTER,
+        getPhysicalServerJson(cluster, repository.getJmxHost(), repository.getJmxPort()));
+    responseJSON.put(this.MEMBER_COUNT, cluster.getMemberCount());
+
+    // Send json response
+    return responseJSON;
   }
 
   /**
@@ -121,24 +117,21 @@ public class ClusterMembersRGraphService implements PulseService {
    * @return Array list of JSON objects for required fields of members in
    *         cluster
    */
-  private JSONObject getPhysicalServerJson(Cluster cluster, String host,
-      String port) throws JSONException {
-    Map<String, List<Cluster.Member>> physicalToMember = cluster
-        .getPhysicalToMember();
+  private ObjectNode getPhysicalServerJson(Cluster cluster, String host, String port) {
+    Map<String, List<Cluster.Member>> physicalToMember = cluster.getPhysicalToMember();
 
-    JSONObject clusterTopologyJSON = new JSONObject();
+    ObjectNode clusterTopologyJSON = mapper.createObjectNode();
 
     clusterTopologyJSON.put(this.ID, cluster.getClusterId());
     clusterTopologyJSON.put(this.NAME, cluster.getClusterId());
-    JSONObject data1 = new JSONObject();
+    ObjectNode data1 = mapper.createObjectNode();
     clusterTopologyJSON.put(this.DATA, data1);
-    JSONArray childHostArray = new JSONArray();
+    ArrayNode childHostArray = mapper.createArrayNode();
     DecimalFormat df2 = new DecimalFormat(PulseConstants.DECIMAL_FORMAT_PATTERN);
 
     updateAlertLists(cluster);
 
-    for (Map.Entry<String, List<Cluster.Member>> physicalToMem : physicalToMember
-        .entrySet()) {
+    for (Map.Entry<String, List<Cluster.Member>> physicalToMem : physicalToMember.entrySet()) {
       String hostName = physicalToMem.getKey();
       Float hostCpuUsage = 0.0F;
       Long hostMemoryUsage = (long) 0;
@@ -149,20 +142,20 @@ public class ClusterMembersRGraphService implements PulseService {
       boolean hostError = false;
       boolean hostWarning = false;
       String hostStatus;
-      JSONObject childHostObject = new JSONObject();
+      ObjectNode childHostObject = mapper.createObjectNode();
       childHostObject.put(this.ID, hostName);
       childHostObject.put(this.NAME, hostName);
 
-      JSONArray membersArray = new JSONArray();
+      ArrayNode membersArray = mapper.createArrayNode();
 
       List<Cluster.Member> memberList = physicalToMem.getValue();
       for (Cluster.Member member : memberList) {
-        JSONObject memberJSONObj = new JSONObject();
+        ObjectNode memberJSONObj = mapper.createObjectNode();
 
         memberJSONObj.put(this.ID, member.getId());
         memberJSONObj.put(this.NAME, member.getName());
 
-        JSONObject memberData = new JSONObject();
+        ObjectNode memberData = mapper.createObjectNode();
 
         memberData.put("gemfireVersion", member.getGemfireVersion());
 
@@ -185,10 +178,11 @@ public class ClusterMembersRGraphService implements PulseService {
         memberData.put(this.REGIONS, member.getMemberRegions().size());
         memberData.put(this.HOST, member.getHost());
         if ((member.getMemberPort() == null)
-            || (member.getMemberPort().equals("")))
+            || (member.getMemberPort().equals(""))) {
           memberData.put(this.PORT, "-");
-        else
+        } else {
           memberData.put(this.PORT, member.getMemberPort());
+        }
         memberData.put(this.CLIENTS, member.getMemberClientsHMap().size());
         memberData.put(this.GC_PAUSES, member.getGarbageCollectionCount());
         memberData.put(this.NUM_THREADS, member.getNumThreads());
@@ -206,14 +200,12 @@ public class ClusterMembersRGraphService implements PulseService {
         String memberNodeType = "";
         // for severe alert
         if (severeAlertList.contains(member.getName())) {
-          memberNodeType = getMemberNodeType(member,
-              this.MEMBER_NODE_TYPE_SEVERE);
+          memberNodeType = getMemberNodeType(member, this.MEMBER_NODE_TYPE_SEVERE);
           if (!hostSevere) {
             hostSevere = true;
           }
-        }
-        // for error alerts
-        else if (errorAlertsList.contains(member.getName())) {
+        } else if (errorAlertsList.contains(member.getName())) {
+          // for error alerts
           memberNodeType = getMemberNodeType(member,
               this.MEMBER_NODE_TYPE_ERROR);
           if (!hostError) {
@@ -222,29 +214,27 @@ public class ClusterMembersRGraphService implements PulseService {
         }
         // for warning alerts
         else if (warningAlertsList.contains(member.getName())) {
-          memberNodeType = getMemberNodeType(member,
-              this.MEMBER_NODE_TYPE_WARNING);
-          if (!hostWarning)
+          memberNodeType = getMemberNodeType(member, this.MEMBER_NODE_TYPE_WARNING);
+          if (!hostWarning) {
             hostWarning = true;
+          }
         } else {
-          memberNodeType = getMemberNodeType(member,
-              this.MEMBER_NODE_TYPE_NORMAL);
+          memberNodeType = getMemberNodeType(member, this.MEMBER_NODE_TYPE_NORMAL);
         }
 
         memberData.put("nodeType", memberNodeType);
         memberData.put("$type", memberNodeType);
-        memberData.put(this.GATEWAY_SENDER, member.getGatewaySenderList()
-            .size());
+        memberData.put(this.GATEWAY_SENDER, member.getGatewaySenderList().size());
         if (member.getGatewayReceiver() != null) {
-          memberData.put(this.GATEWAY_RECEIVER, "1");
+          memberData.put(this.GATEWAY_RECEIVER, 1);
         } else {
-          memberData.put(this.GATEWAY_RECEIVER, "0");
+          memberData.put(this.GATEWAY_RECEIVER, 0);
         }
         memberJSONObj.put(this.DATA, memberData);
-        memberJSONObj.put(this.CHILDREN, new JSONArray());
-        membersArray.put(memberJSONObj);
+        memberJSONObj.put(this.CHILDREN, mapper.createArrayNode());
+        membersArray.add(memberJSONObj);
       }
-      JSONObject data = new JSONObject();
+      ObjectNode data = mapper.createObjectNode();
 
       data.put(this.LOAD_AVG, hostLoadAvg);
       data.put(this.SOCKETS, hostSockets);
@@ -273,7 +263,7 @@ public class ClusterMembersRGraphService implements PulseService {
       childHostObject.put(this.DATA, data);
 
       childHostObject.put(this.CHILDREN, membersArray);
-      childHostArray.put(childHostObject);
+      childHostArray.add(childHostObject);
     }
     clusterTopologyJSON.put(this.CHILDREN, childHostArray);
 
@@ -367,6 +357,5 @@ public class ClusterMembersRGraphService implements PulseService {
         }
       }
     }
-
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java
index 830a44b..2301095 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java
@@ -19,17 +19,15 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class ClusterMemoryUsageService
@@ -46,25 +44,23 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 @Scope("singleton")
 public class ClusterMemoryUsageService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-    // clucter's Memory Usage trend added to json response object
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    // cluster's Memory Usage trend added to json response object
+
+    responseJSON.put("currentMemoryUsage", cluster.getUsedHeapSize());
+    responseJSON.put("memoryUsageTrend",
+        mapper.valueToTree(cluster.getStatisticTrend(Cluster.CLUSTER_STAT_MEMORY_USAGE)));
 
-    try {
-      responseJSON.put("currentMemoryUsage", cluster.getUsedHeapSize());
-      responseJSON.put(
-          "memoryUsageTrend",
-          new JSONArray(cluster
-              .getStatisticTrend(Cluster.CLUSTER_STAT_MEMORY_USAGE)));
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
index bb8950b..d8bd3a9 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java
@@ -19,6 +19,19 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
+import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -26,21 +39,6 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-
-import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
-import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
-
 /**
  * Class ClusterRegionService
  *
@@ -55,27 +53,26 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class ClusterRegionService implements PulseService {
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   // String constants used for forming a json response
   private final String ENTRY_SIZE = "entrySize";
 
   // Comparator based upon regions entry count
-  private static Comparator<Cluster.Region> regionEntryCountComparator = new Comparator<Cluster.Region>() {
-    @Override
-    public int compare(Cluster.Region r1, Cluster.Region r2) {
-      long r1Cnt = r1.getSystemRegionEntryCount();
-      long r2Cnt = r2.getSystemRegionEntryCount();
-      if (r1Cnt < r2Cnt) {
-        return -1;
-      } else if (r1Cnt > r2Cnt) {
-        return 1;
-      } else {
-        return 0;
-      }
+  private static Comparator<Cluster.Region> regionEntryCountComparator = (r1, r2) -> {
+    long r1Cnt = r1.getSystemRegionEntryCount();
+    long r2Cnt = r2.getSystemRegionEntryCount();
+    if (r1Cnt < r2Cnt) {
+      return -1;
+    } else if (r1Cnt > r2Cnt) {
+      return 1;
+    } else {
+      return 0;
     }
   };
 
   @Override
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     String userName = request.getUserPrincipal().getName();
 
@@ -83,18 +80,14 @@ public class ClusterRegionService implements PulseService {
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-      // getting cluster's Regions
-      responseJSON.put("clusterName", cluster.getServerName());
-      responseJSON.put("userName", userName);
-      responseJSON.put("region", getRegionJson(cluster));
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    // getting cluster's Regions
+    responseJSON.put("clusterName", cluster.getServerName());
+    responseJSON.put("userName", userName);
+    responseJSON.put("region", getRegionJson(cluster));
+    // Send json response
+    return responseJSON;
   }
 
   /**
@@ -103,9 +96,9 @@ public class ClusterRegionService implements PulseService {
    * all the regions associated with given cluster
    *
    * @param cluster
-   * @return JSONObject Array List
+   * @return ArrayNode Array List
    */
-  private List<JSONObject> getRegionJson(Cluster cluster) throws JSONException {
+  private ArrayNode getRegionJson(Cluster cluster) {
 
     Long totalHeapSize = cluster.getTotalHeapSize();
     Long totalDiskUsage = cluster.getTotalBytesOnDisk();
@@ -117,10 +110,10 @@ public class ClusterRegionService implements PulseService {
 
     Collections.sort(clusterRegionsList, regionEntryCountComparator);
 
-    List<JSONObject> regionListJson = new ArrayList<JSONObject>();
+    ArrayNode regionListJson = mapper.createArrayNode();
     for (int count = 0; count < clusterRegionsList.size(); count++) {
       Cluster.Region reg = clusterRegionsList.get(count);
-      JSONObject regionJSON = new JSONObject();
+      ObjectNode regionJSON = mapper.createObjectNode();
 
       regionJSON.put("name", reg.getName());
       regionJSON.put("totalMemory", totalHeapSize);
@@ -134,7 +127,7 @@ public class ClusterRegionService implements PulseService {
 
       Cluster.Member[] clusterMembersList = cluster.getMembers();
 
-      JSONArray memberNameArray = new JSONArray();
+      ArrayNode memberNameArray = mapper.createArrayNode();
       for (String memberName : reg.getMemberName()) {
         for (Cluster.Member member : clusterMembersList) {
           String name = member.getName();
@@ -143,10 +136,10 @@ public class ClusterRegionService implements PulseService {
           id = id.replace(":", "-");
 
           if ((memberName.equals(id)) || (memberName.equals(name))) {
-            JSONObject regionMember = new JSONObject();
+            ObjectNode regionMember = mapper.createObjectNode();
             regionMember.put("id", member.getId());
             regionMember.put("name", member.getName());
-            memberNameArray.put(regionMember);
+            memberNameArray.add(regionMember);
             break;
           }
         }
@@ -196,26 +189,14 @@ public class ClusterRegionService implements PulseService {
         regionJSON.put("regionPath", reg.getFullPath());
       }
 
-      regionJSON
-          .put(
-              "memoryReadsTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_GETS_PER_SEC_TREND)));
-      regionJSON
-          .put(
-              "memoryWritesTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_PUTS_PER_SEC_TREND)));
-      regionJSON
-          .put(
-              "diskReadsTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_READS_PER_SEC_TREND)));
-      regionJSON
-          .put(
-              "diskWritesTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_WRITES_PER_SEC_TREND)));
+      regionJSON.put("memoryReadsTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_GETS_PER_SEC_TREND)));
+      regionJSON.put("memoryWritesTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_PUTS_PER_SEC_TREND)));
+      regionJSON.put("diskReadsTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_READS_PER_SEC_TREND)));
+      regionJSON.put("diskWritesTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_WRITES_PER_SEC_TREND)));
       regionJSON.put("emptyNodes", reg.getEmptyNode());
       Long entrySize = reg.getEntrySize();
       DecimalFormat form = new DecimalFormat(


[16/50] [abbrv] incubator-geode git commit: GEODE-906: Clean up source header / modification text

Posted by je...@apache.org.
GEODE-906: Clean up source header / modification text

* HashIndexSet to use the standard Apache source header with a separate modification statement
* IdentityArrayList to use the original license header with a separate modificaiton statement
* Added fastutil copyright to the NOTICE

this closes #101


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/8f31850d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/8f31850d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/8f31850d

Branch: refs/heads/feature/GEODE-17
Commit: 8f31850d719a2ebcff89bf900b96cdc80752542d
Parents: 18ad0ad
Author: Sai Boorlagadda <sb...@pivotal.io>
Authored: Mon Feb 22 12:16:37 2016 -0800
Committer: Sai Boorlagadda <sb...@pivotal.io>
Committed: Tue Feb 23 16:08:01 2016 -0800

----------------------------------------------------------------------
 NOTICE                                                 |  3 +++
 .../cache/query/internal/index/HashIndexSet.java       | 13 -------------
 .../gemfire/internal/cache/IdentityArrayList.java      | 10 +++++-----
 3 files changed, 8 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8f31850d/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
index dfc5390..f247b7a 100644
--- a/NOTICE
+++ b/NOTICE
@@ -19,3 +19,6 @@ This product also includes code adapted from:
 
 Apache Solr (http://lucene.apache.org/solr/)
 Copyright 2014 The Apache Software Foundation
+
+fastutil
+Copyright (C) 2002-2014 Sebastiano Vigna 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8f31850d/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/HashIndexSet.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/HashIndexSet.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/HashIndexSet.java
index 2fa72d1..5ed724b 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/HashIndexSet.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/HashIndexSet.java
@@ -19,19 +19,6 @@
  * insertionIndex(), index(), trimToSize() are based on code provided by fastutil
  * They are based from add(), contains() and other methods from ObjectOpenHashSet
  * We have used the traversing mechanism and the HashCommon.mix()
- * Copyright (C) 2002-2014 Sebastiano Vigna 
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. 
  */
 package com.gemstone.gemfire.cache.query.internal.index;
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8f31850d/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/IdentityArrayList.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/IdentityArrayList.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/IdentityArrayList.java
index 3b54687..736f6bf 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/IdentityArrayList.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/IdentityArrayList.java
@@ -1,9 +1,4 @@
 /*
- * This is a modified version of the fastutil ObjectArrayList.  It is modified
- * to use identity checks rather than equality checks for higher performance.
- * 
- * The original file had this Apache 2.0 copyright:
- * 
  * Copyright (C) 2002-2014 Sebastiano Vigna 
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,6 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License. 
  */
+
+/*
+ * This is a modified version of the fastutil ObjectArrayList.  It is modified
+ * to use identity checks rather than equality checks for higher performance.
+ */
 package com.gemstone.gemfire.internal.cache;
 import java.util.Arrays;
 import java.util.Collection;


[25/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfsh.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfsh.java
index 0000000,f8b3fd4..03dcd7d
mode 000000,100644..100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfsh.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfsh.java
@@@ -1,0 -1,374 +1,374 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli;
+ 
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.cli.shell.GfshConfig;
+ import com.gemstone.gemfire.management.internal.cli.shell.jline.GfshUnsupportedTerminal;
+ import jline.console.ConsoleReader;
+ import org.springframework.shell.core.ExitShellRequest;
+ import org.springframework.shell.event.ShellStatus.Status;
+ 
+ import java.io.BufferedWriter;
+ import java.io.ByteArrayOutputStream;
+ import java.io.File;
+ import java.io.FileDescriptor;
+ import java.io.FileInputStream;
+ import java.io.IOException;
+ import java.io.OutputStreamWriter;
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.io.Writer;
+ import java.util.Properties;
+ import java.util.concurrent.CountDownLatch;
+ import java.util.concurrent.LinkedBlockingQueue;
+ import java.util.concurrent.TimeUnit;
+ import java.util.concurrent.locks.Condition;
+ import java.util.concurrent.locks.Lock;
+ import java.util.concurrent.locks.ReentrantLock;
+ import java.util.logging.Level;
+ 
+ 
+ /**
+  * This is headless shell which can be used to submit random commands and get command-result It is used for commands
+  * testing but can be used as for anything like programmatically sending commands to operate on GemFire Distributed
+  * systems. TODO : Merge HeadlessGfsh and HeadlessGfshShell TODO : Provide constructor for optionally specifying
+  * GfshConfig to provide logDirectory and logLevel
+  *
+  * @author tushark
+  */
+ @SuppressWarnings("rawtypes")
+ public class HeadlessGfsh implements ResultHandler {
+ 
+   public static final String ERROR_RESULT = "_$_ERROR_RESULT";
+ 
+   private HeadlessGfshShell shell = null;
+   private LinkedBlockingQueue queue = new LinkedBlockingQueue<>();
+   private long timeout = 20;
+   public String outputString = null;
+ 
+   public HeadlessGfsh(String name, int timeout) throws ClassNotFoundException, IOException {
+     this(name, timeout, null);
+   }
+ 
+   public HeadlessGfsh(String name, int timeout, Properties envProps) throws ClassNotFoundException, IOException {
+     this.timeout = timeout;
+     System.setProperty("jline.terminal", GfshUnsupportedTerminal.class.getName());
+     this.shell = new HeadlessGfshShell(name, this);
+     this.shell.setEnvProperty(Gfsh.ENV_APP_RESULT_VIEWER, "non-basic");
+ 
+     if (envProps != null) {
+       for (String key : envProps.stringPropertyNames()) {
+         this.shell.setEnvProperty(key, envProps.getProperty(key));
+       }
+     }
+ 
+     // This allows us to avoid race conditions during startup - in particular a NPE on the ConsoleReader which is
+     // created in a separate thread during start()
+     CountDownLatch shellStarted = new CountDownLatch(1);
+     this.shell.addShellStatusListener((oldStatus, newStatus) -> {
+       if (newStatus.getStatus() == Status.STARTED) {
+         shellStarted.countDown();
+       }
+     });
+ 
+     this.shell.start();
+     this.setThreadLocalInstance();
+ 
+     try {
+       shellStarted.await();
+     } catch (InterruptedException e) {
+       e.printStackTrace(System.out);
+     }
+   }
+ 
+   public void setThreadLocalInstance() {
+     shell.setThreadLocalInstance();
+   }
+ 
+   //TODO : Have non-blocking method also where we move executeCommand call to separate thread-pool
+   public boolean executeCommand(String command) {
+     boolean status = false;
+     try {
+       outputString = null;
+       status = shell.executeScriptLine(command);
+     } catch (Exception e) {
+       outputString = e.getMessage();
+     }
+     return status;
+   }
+ 
 -  int getCommandExecutionStatus() {
++  public int getCommandExecutionStatus() {
+     return shell.getCommandExecutionStatus();
+   }
+ 
+   @SuppressWarnings("unchecked")
+   @Override
+   public void handleExecutionResult(Object result, String sysout) {
+     queue.add(result);
+     outputString = sysout;
+   }
+ 
+   public Object getResult() throws InterruptedException {
+     //Dont wait for when some command calls gfsh.stop();
+     if (shell.stopCalledThroughAPI) return null;
+     try {
+       Object result = queue.poll(timeout, TimeUnit.SECONDS);
+       queue.clear();
+       return result;
+     } catch (InterruptedException e) {
+       e.printStackTrace();
+       throw e;
+     }
+   }
+ 
+   public void clear() {
+     queue.clear();
+     outputString = null;
+   }
+ 
+   public void clearEvents() {
+     queue.clear();
+     outputString = null;
+   }
+ 
+   public void terminate() {
+     shell.terminate();
+   }
+ 
+   public boolean isConnectedAndReady() {
+     return shell.isConnectedAndReady();
+   }
+ 
+   public String getErrorString() {
+     return shell.errorString;
+   }
+ 
+   public boolean hasError() {
+     return shell.hasError();
+   }
+ 
+   public String getError() {
+     return shell.errorString;
+   }
+ 
+   public static class HeadlessGfshShell extends Gfsh {
+ 
+     private ResultHandler handler = null;
+     private final Lock lock = new ReentrantLock();
+     private final Condition endOfShell = lock.newCondition();
+     private ByteArrayOutputStream output = null;
+     private String errorString = null;
+     private boolean hasError = false;
+     boolean stopCalledThroughAPI = false;
+ 
+     protected HeadlessGfshShell(String testName, ResultHandler handler) throws ClassNotFoundException, IOException {
+       super(false, new String[]{}, new HeadlessGfshConfig(testName));
+       this.handler = handler;
+     }
+ 
+     public void setThreadLocalInstance() {
+       gfshThreadLocal.set(this);
+     }
+ 
+     protected void handleExecutionResult(Object result) {
+       if (!result.equals(ERROR_RESULT)) {
+         super.handleExecutionResult(result);
+         handler.handleExecutionResult(result, output.toString());
+         output.reset();
+       } else {
+         //signal waiting queue with error condition with empty output
+         output.reset();
+         handler.handleExecutionResult(result, output.toString());
+       }
+     }
+ 
+     int getCommandExecutionStatus() {
+       return getLastExecutionStatus();
+     }
+ 
+     public void terminate() {
+       closeShell();
+       stopPromptLoop();
+       stop();
+     }
+ 
+     public void stop() {
+       stopCalledThroughAPI = true;
+     }
+ 
+     private void stopPromptLoop() {
+       lock.lock();
+       try {
+         endOfShell.signalAll();
+       } finally {
+         lock.unlock();
+       }
+     }
+ 
+     public String getErrorString() {
+       return errorString;
+     }
+ 
+     public boolean hasError() {
+       return hasError;
+     }
+ 
+     /**
+      * We override this method just to fool runner thread in reading from nothing. It waits for Condition endOfShell
+      * which is signalled when terminate is called. This achieves clean shutdown of runner thread.
+      */
+     @Override
+     public void promptLoop() {
+       lock.lock();
+       try {
+         while (true) {
+           try {
+             endOfShell.await();
+           } catch (InterruptedException e) {
+             //e.printStackTrace();
+           }
+           this.exitShellRequest = ExitShellRequest.NORMAL_EXIT;
+           setShellStatus(Status.SHUTTING_DOWN);
+           break;
+         }
+       } finally {
+         lock.unlock();
+       }
+     }
+ 
+     private static void setGfshOutErr(PrintStream outToUse) {
+       Gfsh.gfshout = outToUse;
+       Gfsh.gfsherr = outToUse;
+     }
+ 
+     /**
+      * This prints out error messages when Exceptions occur in shell. Capture it and set error flag=true and send
+      * ERROR_RESULT on the queue to signal thread waiting for CommandResult
+      */
+     @Override
+     public void logWarning(String message, Throwable t) {
+       super.logWarning(message, t);
+       errorString = message;
+       hasError = true;
+       //signal waiting queue with error condition
+       handleExecutionResult(ERROR_RESULT);
+     }
+ 
+     /**
+      * This prints out error messages when Exceptions occur in shell. Capture it and set error flag=true and send
+      * ERROR_RESULT on the queue to signal thread waiting for CommandResult
+      */
+     @Override
+     public void logSevere(String message, Throwable t) {
+       super.logSevere(message, t);
+       errorString = message;
+       hasError = true;
+       //signal waiting queue with error condition
+       handleExecutionResult(ERROR_RESULT);
+     }
+ 
+     /**
+      * Setup console-reader to capture Shell output
+      */
+     @Override
+     protected ConsoleReader createConsoleReader() {
+       try {
+         output = new ByteArrayOutputStream(1024 * 10);
+         PrintStream sysout = new PrintStream(output);
+         setGfshOutErr(sysout);
+         return new ConsoleReader(new FileInputStream(FileDescriptor.in), sysout);
+       } catch (IOException e) {
+         throw new RuntimeException(e);
+       }
+     }
+   }
+ 
+ 
+   /**
+    * HeadlessGfshConfig for tests. Taken from TestableGfsh
+    */
+   static class HeadlessGfshConfig extends GfshConfig {
+     {
+       // set vm as a gfsh vm
+       CliUtil.isGfshVM = true;
+     }
+ 
+     private File parentDir;
+     private String fileNamePrefix;
+     private String name;
+     private String generatedHistoryFileName = null;
+ 
+     public HeadlessGfshConfig(String name) {
+       this.name = name;
+ 
+       if (isDUnitTest(this.name)) {
+         fileNamePrefix = this.name;
+       } else {
+         fileNamePrefix = "non-hydra-client";
+       }
+ 
+       parentDir = new File("gfsh_files");
+       parentDir.mkdirs();
+     }
+ 
+     private static boolean isDUnitTest(String name) {
+       boolean isDUnitTest = false;
+       if (name != null) {
+         String[] split = name.split("_");
+         if (split.length != 0 && split[0].endsWith("DUnitTest")) {
+           isDUnitTest = true;
+         }
+       }
+       return isDUnitTest;
+     }
+ 
+     @Override
+     public String getLogFilePath() {
+       return new File(parentDir, getFileNamePrefix() + "-gfsh.log").getAbsolutePath();
+     }
+ 
+     private String getFileNamePrefix() {
+       String timeStamp = new java.sql.Time(System.currentTimeMillis()).toString();
+       timeStamp = timeStamp.replace(':', '_');
+       return fileNamePrefix + "-" + timeStamp;
+     }
+ 
+     @Override
+     public String getHistoryFileName() {
+       if (generatedHistoryFileName == null) {
+         String fileName = new File(parentDir, (getFileNamePrefix() + "-gfsh.history")).getAbsolutePath();
+         generatedHistoryFileName = fileName;
+         return fileName;
+       } else {
+         return generatedHistoryFileName;
+       }
+     }
+ 
+     @Override
+     public boolean isTestConfig() {
+       return true;
+     }
+ 
+     @Override
+     public Level getLogLevel() {
+       // Keep log level fine for tests
+       return Level.FINE;
+     }
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategyJUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategyJUnitTest.java
index 0000000,e0f6915..b941b28
mode 000000,100644..100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategyJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategyJUnitTest.java
@@@ -1,0 -1,137 +1,144 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.shell;
+ 
+ import static org.junit.Assert.*;
+ 
+ import java.util.List;
+ 
+ import org.junit.After;
+ import org.junit.Test;
+ import org.junit.experimental.categories.Category;
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ import org.springframework.shell.event.ParseResult;
+ 
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.CommandManager;
+ import com.gemstone.gemfire.management.internal.cli.GfshParser;
+ import com.gemstone.gemfire.management.internal.cli.annotation.CliArgument;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.cli.shell.GfshConfig;
+ import com.gemstone.gemfire.management.internal.cli.shell.GfshExecutionStrategy;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ import com.gemstone.gemfire.test.junit.categories.UnitTest;
+ 
+ /**
+  * GfshExecutionStrategyTest - Includes tests to for GfshExecutionStrategyTest
+  * 
+  * @author apande
+  */
+ @Category(UnitTest.class)
+ public class GfshExecutionStrategyJUnitTest {
+   private static final String COMMAND1_NAME = "command1";
+   private static final String COMMAND1_NAME_ALIAS = "command1_alias";
+   private static final String COMMAND2_NAME = "command2";
+   private static final String COMMAND1_SUCESS = "Command1 Executed successfully";
+   private static final String COMMAND2_SUCESS = "Command2 Executed successfully";
+   private static final String COMMAND1_HELP = "help for " + COMMAND1_NAME;
+ 
+   @After
+   public void tearDown() {
+     CommandManager.clearInstance();
+   }
+   
+   //tests execute method by executing dummy method command1
+   @Test
+   public void testGfshExecutionStartegyExecute() throws Exception {
+     CommandManager commandManager = CommandManager.getInstance();
+     assertNotNull("CommandManager should not be null.", commandManager);      
+     commandManager.add(Commands.class.newInstance());
+     GfshParser parser = new GfshParser(commandManager);
+     String[] command1Names = ((CliCommand) Commands.class.getMethod(
+         COMMAND1_NAME).getAnnotation(CliCommand.class)).value();
+     String input =command1Names[0];
+     ParseResult parseResult = null;   
+     parseResult = parser.parse(input);  
+     String[] args = new String[] {command1Names[0]  };
+     Gfsh gfsh = Gfsh.getInstance(false, args, new GfshConfig());      
+     GfshExecutionStrategy gfshExecutionStrategy = new GfshExecutionStrategy(gfsh);
+     Result resultObject = (Result)gfshExecutionStrategy.execute(parseResult);     
+     String str  = resultObject.nextLine();      
+     assertTrue(str.trim().equals(COMMAND1_SUCESS));      
+   }
+   
+   //tests isReadyForCommnads method by executing dummy method command1.
+   //TODO: this method is hard coded in source which may change in future. So this 
+   //test should also be accordingly changed
+   @Test
+   public void testGfshExecutionStartegyIsReadyForCommands() throws Exception {
+     CommandManager commandManager = CommandManager.getInstance();
+     assertNotNull("CommandManager should not be null.", commandManager);
+     commandManager.add(Commands.class.newInstance());      
+     String[] command1Names = ((CliCommand) Commands.class.getMethod(
+         COMMAND1_NAME).getAnnotation(CliCommand.class)).value();       
+     String[] args = new String[] {command1Names[0]  };
+     Gfsh gfsh = Gfsh.getInstance(false, args, new GfshConfig());      
+     GfshExecutionStrategy gfshExecutionStrategy = new GfshExecutionStrategy(gfsh);
+     boolean ready = gfshExecutionStrategy.isReadyForCommands();      
+     assertTrue(ready);      
+   }
+ 
+   //represents class for dummy methods
+   public static class Commands implements CommandMarker {
+ 
+     @CliCommand(value = { COMMAND1_NAME, COMMAND1_NAME_ALIAS }, help = COMMAND1_HELP)
+     @CliMetaData(shellOnly = true )
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static Result command1() {     
+       return ResultBuilder.createInfoResult(COMMAND1_SUCESS);      
+     }
+ 
+     @CliCommand(value = { COMMAND2_NAME })
+     @CliMetaData(shellOnly = false )
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static Result command2() {
+       return ResultBuilder.createInfoResult(COMMAND2_SUCESS);      
+     }
+ 
+     @CliCommand(value = { "testParamConcat" })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static Result testParamConcat(
+         @CliOption(key = { "string" })
+         String string,
+         @CliOption(key = { "stringArray" })
+         @CliMetaData(valueSeparator = ",")
+         String[] stringArray,
+         @CliOption(key = { "stringList" }, optionContext = ConverterHint.STRING_LIST)
+         @CliMetaData(valueSeparator = ",")
+         List<String> stringList, @CliOption(key = { "integer" })
+         Integer integer, @CliOption(key = { "colonArray" })
+         @CliMetaData(valueSeparator = ":")
+         String[] colonArray) {
+       return null;
+     }
+ 
+     @CliCommand(value = { "testMultiWordArg" })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static Result testMultiWordArg(@CliArgument(name = "arg1")
+     String arg1, @CliArgument(name = "arg2")
+     String arg2) {
+       return null;
+     }
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AuthorizeOperationForMBeansIntegrationTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AuthorizeOperationForMBeansIntegrationTest.java
index 0000000,d63947b..c3f1658
mode 000000,100644..100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AuthorizeOperationForMBeansIntegrationTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AuthorizeOperationForMBeansIntegrationTest.java
@@@ -1,0 -1,323 +1,325 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
+ import static org.junit.Assert.*;
+ import static org.assertj.core.api.Assertions.assertThat;
+ 
+ import java.io.Serializable;
+ import java.security.Principal;
+ import java.util.HashMap;
+ import java.util.Map;
+ import java.util.Properties;
+ 
+ import javax.management.JMX;
+ import javax.management.MBeanServerConnection;
+ import javax.management.ObjectName;
+ import javax.management.remote.JMXConnector;
+ import javax.management.remote.JMXConnectorFactory;
+ import javax.management.remote.JMXServiceURL;
+ 
+ import org.junit.After;
+ import org.junit.Before;
+ import org.junit.Rule;
+ import org.junit.Test;
+ import org.junit.contrib.java.lang.system.RestoreSystemProperties;
+ import org.junit.experimental.categories.Category;
+ import org.junit.rules.TestName;
+ 
+ import com.gemstone.gemfire.LogWriter;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.operations.OperationContext;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.distributed.DistributedSystem;
+ import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+ import com.gemstone.gemfire.internal.AvailablePort;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
+ import com.gemstone.gemfire.management.MemberMXBean;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.security.ResourceOperationContext.ResourceOperationCode;
+ import com.gemstone.gemfire.security.AccessControl;
+ import com.gemstone.gemfire.security.AuthenticationFailedException;
+ import com.gemstone.gemfire.security.Authenticator;
+ import com.gemstone.gemfire.security.NotAuthorizedException;
+ import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+ 
+ /**
+  * Tests <code>JSONAuthorization.authorizeOperation(...)</code> with GemFire MBeans.
+  */
+ @Category(IntegrationTest.class)
+ @SuppressWarnings("deprecation")
+ public class AuthorizeOperationForMBeansIntegrationTest {
+ 
+   private GemFireCacheImpl cache;
+   private DistributedSystem ds;
+   private int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
+   private JMXConnector jmxConnector;
+   private MBeanServerConnection mbeanServer;
+ 
+   @Rule
+   public TestName testName = new TestName();
+   
+   @Rule
+   public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties();
+ 
+   @Before
+   public void setUp() throws Exception {
+     System.setProperty("resource-auth-accessor", TestAccessControl.class.getName());
+     System.setProperty("resource-authenticator", TestAuthenticator.class.getName());
+     
+     Properties properties = new Properties();
+     properties.put("name", this.testName.getMethodName());
+     properties.put(DistributionConfig.LOCATORS_NAME, "");
+     properties.put(DistributionConfig.MCAST_PORT_NAME, "0");
+     properties.put(DistributionConfig.JMX_MANAGER_NAME, "true");
+     properties.put(DistributionConfig.JMX_MANAGER_START_NAME, "true");
+     properties.put(DistributionConfig.JMX_MANAGER_PORT_NAME, String.valueOf(this.jmxManagerPort));
+     properties.put(DistributionConfig.HTTP_SERVICE_PORT_NAME, "0");
+     
+     this.ds = DistributedSystem.connect(properties);
+     this.cache = (GemFireCacheImpl) CacheFactory.create(ds);
+ 
+     this.jmxConnector = getGemfireMBeanServer(this.jmxManagerPort, "tushark", "tushark");
+     this.mbeanServer = this.jmxConnector.getMBeanServerConnection();
+   }
+ 
+   @After
+   public void tearDown() throws Exception {
+     if (this.jmxConnector != null) {
+       this.jmxConnector.close();
+       this.jmxConnector = null;
+     }
+     if (this.cache != null) {
+       this.cache.close();
+       this.cache = null;
+     }
+     if (this.ds != null) {
+       this.ds.disconnect();
+       this.ds = null;
+     }
+   }
+ 
+   /**
+    * This is testing a sampling of operations for DistributedSystemMXBean and AccessControlMXBean
+    */
+   @Test
+   public void operationsShouldBeCoveredByAuthorization() throws Exception {
+     ObjectName objectName = MBeanJMXAdapter.getDistributedSystemName();
+     
+     checkListCacheServerObjectNames(objectName);
+     checkAlertLevel(objectName);
+     checkAccessControlMXBean();
+     checkBackUpMembers(objectName);
+     checkShutDownAllMembers(objectName);
+     checkCLIContext(this.mbeanServer);
+   }
+   
+   private void checkListCacheServerObjectNames(final ObjectName objectName) throws Exception {
+     Object cacheServerObjectNames = this.mbeanServer.invoke(objectName, "listCacheServerObjectNames", null, null);
+     assertThat(cacheServerObjectNames).isNotNull().isInstanceOf(ObjectName[].class);
+     assertThat((ObjectName[])cacheServerObjectNames).hasSize(0); // this isn't really testing much since there are no CacheServers
+   }
+   
+   private void checkAlertLevel(final ObjectName objectName) throws Exception {
+     // attribute AlertLevel
+     String oldLevel = (String) this.mbeanServer.getAttribute(objectName, "AlertLevel");
+     assertThat(oldLevel).isEqualTo("severe");
+     
+     // operation changeAlertLevel
+     this.mbeanServer.invoke(
+         objectName, 
+         "changeAlertLevel", 
+         new Object[] { "warning" },
+         new String[] { String.class.getName() }
+     );
+     String newLevel = (String) this.mbeanServer.getAttribute(objectName, "AlertLevel");
+     assertThat(newLevel).isEqualTo("warning");
+   }
+   
+   private void checkAccessControlMXBean() throws Exception {
+     final ResourceOperationCode resourceOperationCodes[] = { 
 -        ResourceOperationCode.LIST_DS, 
 -        ResourceOperationCode.READ_DS, 
 -        ResourceOperationCode.CHANGE_ALERT_LEVEL_DS,
 -        ResourceOperationCode.LOCATE_ENTRY_REGION 
++        ResourceOperationCode.LIST_DS,
++// FIXME: what should this be?
++//        ResourceOperationCode.READ_DS,
++        ResourceOperationCode.CHANGE_ALERT_LEVEL,
++        ResourceOperationCode.LOCATE_ENTRY
+     };
+     
+     ObjectName objectName = new ObjectName(ManagementInterceptor.OBJECT_NAME_ACCESSCONTROL);
+     for (ResourceOperationCode resourceOperationCode : resourceOperationCodes) {
+       boolean isAuthorizedForOperation = (Boolean) this.mbeanServer.invoke(
+           objectName, 
+           "authorize", 
+           new Object[] { resourceOperationCode.toString() },
+           new String[] { String.class.getName() }
+       );
+       assertThat(isAuthorizedForOperation).isTrue();
+     }
+ 
+     boolean isAuthorizedForAllOperations = (Boolean) mbeanServer.invoke(
+         objectName, 
+         "authorize", 
 -        new Object[] { ResourceOperationCode.ADMIN_DS.toString() },
++        new Object[] { ResourceOperationCode.ADMIN.toString() },
+         new String[] { String.class.getName() }
+     );
+     assertThat(isAuthorizedForAllOperations).isFalse();
+   }
+ 
+   private void checkBackUpMembers(final ObjectName objectName) throws Exception {
+     try {
+       this.mbeanServer.invoke(
+           objectName, 
+           "backupAllMembers", 
+           new Object[] { "targetPath", "baseLinePath" },
+           new String[] { String.class.getCanonicalName(), String.class.getCanonicalName() });
+       fail("Should not be authorized for backupAllMembers");
+     } catch (SecurityException expected) {
+       // expected
+     }
+   }
+   
+   private void checkShutDownAllMembers(final ObjectName objectName) throws Exception {
+     try {
+       this.mbeanServer.invoke(
+           objectName, 
+           "shutDownAllMembers", 
+           null, 
+           null
+       );
+       fail("Should not be authorized for shutDownAllMembers");
+     } catch (SecurityException expected) {
+       // expected
+     }
+   }
+   
+   private void checkCLIContext(MBeanServerConnection mbeanServer) {
+     ObjectName objectName = MBeanJMXAdapter.getDistributedSystemName();
+     DistributedSystemMXBean proxy = JMX.newMXBeanProxy(mbeanServer, objectName, DistributedSystemMXBean.class);
+     ObjectName managerMemberObjectName = proxy.getMemberObjectName();
+     MemberMXBean memberMXBeanProxy = JMX.newMXBeanProxy(mbeanServer, managerMemberObjectName, MemberMXBean.class);
+ 
+     Map<String, String> map = new HashMap<String, String>();
+     map.put("APP", "GFSH");
+     String result = memberMXBeanProxy.processCommand("locate entry --key=k1 --region=/region1", map);
+     
+     assertThat(result).isNotNull().doesNotContain(SecurityException.class.getSimpleName());
+   }
+ 
+   private JMXConnector getGemfireMBeanServer(final int port, final String user, final String pwd) throws Exception {
+     JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://:" + port + "/jmxrmi");
+     if (user != null) { // TODO: why isn't this deterministic? need to create 2nd test without a user?
+       Map<String, String[]> env = new HashMap<String, String[]>();
+       String[] creds = { user, pwd };
+       env.put(JMXConnector.CREDENTIALS, creds);
+       JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
+       return jmxc;
+     } else {
+       JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
+       return jmxc;
+     }
+   }
+ 
+   /**
+    * Fake Principal for testing.
+    */
+   @SuppressWarnings("serial")
+   public static class TestUsernamePrincipal implements Principal, Serializable {
+ 
+     private final String userName;
+ 
+     public TestUsernamePrincipal(final String userName) {
+       this.userName = userName;
+     }
+ 
+     @Override
+     public String getName() {
+       return this.userName;
+     }
+ 
+     @Override
+     public String toString() {
+       return this.userName;
+     }
+   }
+ 
+   /**
+    * Fake Authenticator for testing.
+    */
+   public static class TestAuthenticator implements Authenticator {
+ 
+     @Override
+     public void close() {
+     }
+ 
+     @Override
+     public void init(final Properties securityProps, final LogWriter systemLogger, final LogWriter securityLogger) throws AuthenticationFailedException {
+     }
+ 
+     @Override
+     public Principal authenticate(final Properties props, final DistributedMember member) throws AuthenticationFailedException {
+       String user = props.getProperty(ManagementInterceptor.USER_NAME);
+       String pwd = props.getProperty(ManagementInterceptor.PASSWORD);
+       if (user != null && !user.equals(pwd) && !"".equals(user)) {
+         throw new AuthenticationFailedException("Wrong username/password");
+       }
+       return new TestUsernamePrincipal(user);
+     }
+   }
+ 
+   /**
+    * Fake AccessControl for testing.
+    */
+   public static class TestAccessControl implements AccessControl {
+ 
+     private Principal principal;
+ 
+     @Override
+     public void close() {
+     }
+ 
+     @Override
+     public void init(final Principal principal, final DistributedMember remoteMember, final Cache cache) throws NotAuthorizedException {
+       this.principal = principal;
+     }
+ 
+     @Override
+     public boolean authorizeOperation(String regionName, OperationContext context) {
+       if (principal.getName().equals("tushark")) {
+         ResourceOperationCode authorizedOps[] = { 
+             ResourceOperationCode.LIST_DS, 
 -            ResourceOperationCode.READ_DS, 
 -            ResourceOperationCode.CHANGE_ALERT_LEVEL_DS,
 -            ResourceOperationCode.LOCATE_ENTRY_REGION 
++// FOXME: Is this necessary?
++//            ResourceOperationCode.READ_DS,
++            ResourceOperationCode.CHANGE_ALERT_LEVEL,
++            ResourceOperationCode.LOCATE_ENTRY
+         };
+ 
+         ResourceOperationContext ctx = (ResourceOperationContext) context;
+         boolean found = false;
+         for (ResourceOperationCode code : authorizedOps) {
+           if (ctx.getResourceOperationCode().equals(code)) {
+             found = true;
+             break;
+           }
+         }
+         return found;
+       }
+       return false;
+     }
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/OperationCodesForDataCommandsIntegrationTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/OperationCodesForDataCommandsIntegrationTest.java
index 0000000,b8c1c9d..bda4642
mode 000000,100755..100755
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/OperationCodesForDataCommandsIntegrationTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/OperationCodesForDataCommandsIntegrationTest.java
@@@ -1,0 -1,101 +1,101 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
+ import static org.assertj.core.api.Assertions.assertThat;
+ 
+ import java.io.IOException;
+ import java.util.HashMap;
+ import java.util.Map;
+ import java.util.Properties;
+ 
+ import org.junit.After;
+ import org.junit.Before;
+ import org.junit.Rule;
+ import org.junit.Test;
+ import org.junit.contrib.java.lang.system.RestoreSystemProperties;
+ import org.junit.experimental.categories.Category;
+ import org.junit.rules.TestName;
+ 
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.distributed.DistributedSystem;
+ import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.management.internal.security.ResourceOperationContext.ResourceOperationCode;
+ import com.gemstone.gemfire.management.internal.security.AuthorizeOperationForMBeansIntegrationTest.TestAccessControl;
+ import com.gemstone.gemfire.management.internal.security.AuthorizeOperationForMBeansIntegrationTest.TestAuthenticator;
+ import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+ 
+ /**
+  * Tests operation codes for data commands.
+  */
+ @Category(IntegrationTest.class)
+ @SuppressWarnings("deprecation")
+ public class OperationCodesForDataCommandsIntegrationTest {
+ 
+   private GemFireCacheImpl cache;
+   private DistributedSystem ds;
+   private Map<String, ResourceOperationCode> commands = new HashMap<String, ResourceOperationCode>();
+   
+   @Rule
+   public TestName testName = new TestName();
+   
+   @Rule
+   public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties();
+ 
+   @Before
+   public void setUp() {
+     System.setProperty("resource-auth-accessor", TestAccessControl.class.getName());
+     System.setProperty("resource-authenticator", TestAuthenticator.class.getName());
+     
+     Properties properties = new Properties();
+     properties.put("name", testName.getMethodName());
+     properties.put(DistributionConfig.LOCATORS_NAME, "");
+     properties.put(DistributionConfig.MCAST_PORT_NAME, "0");
+     properties.put(DistributionConfig.HTTP_SERVICE_PORT_NAME, "0");
+     
+     this.ds = DistributedSystem.connect(properties);
+     this.cache = (GemFireCacheImpl) CacheFactory.create(ds);
+ 
 -    this.commands.put("put --key=k1 --value=v1 --region=/region1", ResourceOperationCode.PUT_REGION);    
 -    this.commands.put("locate entry --key=k1 --region=/region1", ResourceOperationCode.LOCATE_ENTRY_REGION);
 -    this.commands.put("query --query=\"select * from /region1\"", ResourceOperationCode.QUERYDATA_DS);
 -    this.commands.put("export data --region=value --file=value --member=value", ResourceOperationCode.EXPORT_DATA_REGION);
 -    this.commands.put("import data --region=value --file=value --member=value", ResourceOperationCode.IMPORT_DATA_REGION);
 -    this.commands.put("rebalance", ResourceOperationCode.REBALANCE_DS);
++    this.commands.put("put --key=k1 --value=v1 --region=/region1", ResourceOperationCode.PUT);
++    this.commands.put("locate entry --key=k1 --region=/region1", ResourceOperationCode.LOCATE_ENTRY);
++    this.commands.put("query --query=\"select * from /region1\"", ResourceOperationCode.QUERY);
++    this.commands.put("export data --region=value --file=value --member=value", ResourceOperationCode.EXPORT_DATA);
++    this.commands.put("import data --region=value --file=value --member=value", ResourceOperationCode.IMPORT_DATA);
++    this.commands.put("rebalance", ResourceOperationCode.REBALANCE);
+   }
+ 
+   @After
+   public void tearDown() throws IOException {
+     if (this.cache != null) {
+       this.cache.close();
+       this.cache = null;
+     }
+     if (this.ds != null) {
+       this.ds.disconnect();
+       this.ds = null;
+     }
+   }
+   
+   @Test
+   public void commandsShouldMapToCorrectResourceCodes() throws Exception {
+     for (String command : this.commands.keySet()) {
+       CLIOperationContext ctx = new CLIOperationContext(command);
+       assertThat(ctx.getResourceOperationCode()).isEqualTo(this.commands.get(command));
+     }
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/OperationCodesForDistributedSystemMXBeanTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/OperationCodesForDistributedSystemMXBeanTest.java
index 0000000,8b7edbf..65fcf56
mode 000000,100755..100755
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/OperationCodesForDistributedSystemMXBeanTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/OperationCodesForDistributedSystemMXBeanTest.java
@@@ -1,0 -1,76 +1,76 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
+ import static org.assertj.core.api.Assertions.assertThat;
+ 
+ import javax.management.ObjectName;
+ 
+ import org.junit.Test;
+ import org.junit.experimental.categories.Category;
+ 
+ import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.security.ResourceOperationContext.ResourceOperationCode;
+ import com.gemstone.gemfire.test.junit.categories.UnitTest;
+ 
+ /**
+  * Tests operation codes for DistributedSystemMXBean operations.
+  */
+ @Category(UnitTest.class)
+ public class OperationCodesForDistributedSystemMXBeanTest {
+ 
+   private final String[] distributedSystemMXBeanOperations = {
+       "listCacheServerObjectNames", 
+       "viewRemoteClusterStatus", 
+       "getTotalHeapSize", 
+       "setQueryCollectionsDepth", 
+       "getQueryCollectionsDepth",
+       "changeAlertLevel", 
+       "backupAllMembers", 
+       "revokeMissingDiskStores", 
+       "shutDownAllMembers", 
+       "queryData", 
+       "queryDataForCompressedResult",
+       "setQueryResultSetLimit"
+   };
+ 
+   private final ResourceOperationCode[] distributedSystemResourceOperationCodes = {
+       ResourceOperationCode.LIST_DS, 
+       ResourceOperationCode.LIST_DS, 
 -      ResourceOperationCode.READ_DS,
 -      ResourceOperationCode.QUERYDATA_DS, 
 -      ResourceOperationCode.READ_DS, 
 -      ResourceOperationCode.CHANGE_ALERT_LEVEL_DS, 
 -      ResourceOperationCode.BACKUP_DS,
 -      ResourceOperationCode.REMOVE_DISKSTORE_DS, 
 -      ResourceOperationCode.SHUTDOWN_DS, 
 -      ResourceOperationCode.QUERYDATA_DS, 
 -      ResourceOperationCode.QUERYDATA_DS,
 -      ResourceOperationCode.QUERYDATA_DS 
++      ResourceOperationCode.GET,
++      ResourceOperationCode.QUERY,
++      ResourceOperationCode.GET,
++      ResourceOperationCode.CHANGE_ALERT_LEVEL,
++      ResourceOperationCode.BACKUP_MEMBERS,
++      ResourceOperationCode.REVOKE_MISSING_DISKSTORE,
++      ResourceOperationCode.SHUTDOWN,
++      ResourceOperationCode.QUERY,
++      ResourceOperationCode.QUERY,
++      ResourceOperationCode.QUERY
+   };
+   
+   @Test
+   public void operationsShouldMapToCodes() {
+     ObjectName objectName = MBeanJMXAdapter.getDistributedSystemName();
+     for (int i = 0; i < distributedSystemMXBeanOperations.length; i++) {
+       JMXOperationContext context = new JMXOperationContext(objectName, distributedSystemMXBeanOperations[i]);
+       assertThat(context.getResourceOperationCode()).isEqualTo(distributedSystemResourceOperationCodes[i]);
+       assertThat(context.getOperationCode()).isEqualTo(OperationCode.RESOURCE);
+     }
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/RestTestUtils.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/RestTestUtils.java
index 0000000,0406831..2145445
mode 000000,100644..100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/RestTestUtils.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/RestTestUtils.java
@@@ -1,0 -1,110 +1,120 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.rest.internal.web.controllers;
+ 
+ import java.net.URI;
+ import java.text.SimpleDateFormat;
+ import java.util.ArrayList;
+ import java.util.List;
++
+ import org.springframework.http.converter.ByteArrayHttpMessageConverter;
+ import org.springframework.http.converter.HttpMessageConverter;
+ import org.springframework.http.converter.ResourceHttpMessageConverter;
+ import org.springframework.http.converter.StringHttpMessageConverter;
+ import org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean;
+ import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
++import org.springframework.util.StringUtils;
+ import org.springframework.web.client.RestTemplate;
+ import org.springframework.web.util.UriComponentsBuilder;
+ 
+ 
+ /**
+  * The RestTestUtils class contains core functionality for Spring REST Template
+  * <p/>
+  * 
+  * @author Nilkanth Patel
+  * @see org.springframework.context.ApplicationContext
+  * @see org.springframework.data.gemfire.GemfireTemplate
+  * @since 8.0
+  */
+ public class RestTestUtils  {
+ 
+   public static final String BASE_URL = "http://localhost:8080";
+   public static final String GEMFIRE_REST_API_CONTEXT = "/gemfire-api";
+   public static final String GEMFIRE_REST_API_VERSION = "/v1";
+ 
+   public static final URI GEMFIRE_REST_API_WEB_SERVICE_URL = URI
+       .create(BASE_URL + GEMFIRE_REST_API_CONTEXT + GEMFIRE_REST_API_VERSION);
+ 
+   private static RestTemplate restTemplate;
+ 
+   public static RestTemplate getRestTemplate() {
+     if (restTemplate == null) {
+       restTemplate = new RestTemplate();
+ 
+       final List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
+ 
+       messageConverters.add(new ByteArrayHttpMessageConverter());
+       messageConverters.add(new ResourceHttpMessageConverter());
+       messageConverters.add(new StringHttpMessageConverter());
+       messageConverters.add(createMappingJackson2HttpMessageConverter());
+       
+       restTemplate.setMessageConverters(messageConverters);
+     }
+     return restTemplate;
+   }
+ 
+   public static HttpMessageConverter<Object> createMappingJackson2HttpMessageConverter() {
+     final Jackson2ObjectMapperFactoryBean objectMapperFactoryBean = new Jackson2ObjectMapperFactoryBean();
+ 
+     objectMapperFactoryBean.setFailOnEmptyBeans(true);
+     objectMapperFactoryBean.setIndentOutput(true);
+     objectMapperFactoryBean.setDateFormat(new SimpleDateFormat("MM/dd/yyyy"));
+     objectMapperFactoryBean
+         .setFeaturesToDisable(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+     objectMapperFactoryBean
+         .setFeaturesToEnable(
+             com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_COMMENTS,
+             com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES,
+             com.fasterxml.jackson.databind.DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
+     objectMapperFactoryBean.afterPropertiesSet();
+ 
+     final MappingJackson2HttpMessageConverter httpMessageConverter = new MappingJackson2HttpMessageConverter();
+     httpMessageConverter.setObjectMapper(objectMapperFactoryBean.getObject());
+     return httpMessageConverter;
+   }
+   
+   /*
+   protected static HttpMessageConverter<Object> createMarshallingHttpMessageConverter() {
+     final Jaxb2Marshaller jaxbMarshaller = new Jaxb2Marshaller();
+ 
+     jaxbMarshaller.setContextPaths("com.gemstone.gemfire.web.rest.domain",
+         "com.gemstone.gemfire.web.controllers.support");
+     jaxbMarshaller.setMarshallerProperties(Collections.singletonMap(
+         "jaxb.formatted.output", Boolean.TRUE));
+ 
+     return new MarshallingHttpMessageConverter(jaxbMarshaller);
+   }
+   */
+   
+   public static URI toUri(final String... pathSegments) {
+     return toUri(GEMFIRE_REST_API_WEB_SERVICE_URL, pathSegments);
+   }
+ 
+   public static URI toUri(final URI baseUrl, final String... pathSegments) {
+     return UriComponentsBuilder.fromUri(baseUrl).pathSegment(pathSegments)
+         .build().toUri();
+   }
++  
++  public static String createRestURL(String baseURL, Object requestPart) {
++    if(StringUtils.isEmpty(requestPart)) {
++      return baseURL + RestTestUtils.GEMFIRE_REST_API_CONTEXT + RestTestUtils.GEMFIRE_REST_API_VERSION;
++    }else {
++      return baseURL + RestTestUtils.GEMFIRE_REST_API_CONTEXT + RestTestUtils.GEMFIRE_REST_API_VERSION + requestPart;
++    }
++  }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientCQPostAuthorizationDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-cq/src/test/java/com/gemstone/gemfire/security/ClientCQPostAuthorizationDUnitTest.java
index 0000000,0cb125f..bdb12cc
mode 000000,100644..100644
--- a/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientCQPostAuthorizationDUnitTest.java
+++ b/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientCQPostAuthorizationDUnitTest.java
@@@ -1,0 -1,511 +1,514 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.security;
+ 
+ import java.util.Collection;
+ import java.util.HashMap;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.Random;
+ 
+ import security.AuthzCredentialGenerator;
+ import security.CredentialGenerator;
+ 
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
+ import com.gemstone.gemfire.cache.query.CqAttributes;
+ import com.gemstone.gemfire.cache.query.CqAttributesFactory;
+ import com.gemstone.gemfire.cache.query.CqException;
+ import com.gemstone.gemfire.cache.query.CqListener;
+ import com.gemstone.gemfire.cache.query.CqQuery;
+ import com.gemstone.gemfire.cache.query.QueryService;
+ import com.gemstone.gemfire.cache.query.SelectResults;
+ import com.gemstone.gemfire.cache.query.cq.dunit.CqQueryTestListener;
+ import com.gemstone.gemfire.cache.query.internal.cq.ClientCQImpl;
+ import com.gemstone.gemfire.cache.query.internal.cq.CqService;
+ import com.gemstone.gemfire.cache.query.internal.cq.InternalCqQuery;
+ import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
+ import com.gemstone.gemfire.internal.AvailablePort;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.logging.InternalLogWriter;
+ import com.gemstone.gemfire.test.dunit.Host;
+ import com.gemstone.gemfire.test.dunit.Invoke;
+ import com.gemstone.gemfire.test.dunit.LogWriterUtils;
+ import com.gemstone.gemfire.test.dunit.SerializableRunnable;
+ import com.gemstone.gemfire.test.dunit.Wait;
+ import com.gemstone.gemfire.test.dunit.WaitCriterion;
++
++import static java.rmi.activation.ActivationGroup.getSystem;
++
+ /**
+  * This is for multiuser-authentication
+  * 
+  * @author ashetkar
+  *
+  */
+ public class ClientCQPostAuthorizationDUnitTest extends
+     ClientAuthorizationTestBase {
+ 
+ //  public static final String regionName = "ClientCQPostAuthorizationDUnitTest_region";
+ 
+   public static final Map<String, String> cqNameToQueryStrings = new HashMap<String, String>();
+ 
+   static {
+     cqNameToQueryStrings.put("CQ_0", "SELECT * FROM ");
+     cqNameToQueryStrings.put("CQ_1", "SELECT * FROM ");
+   }
+ 
+   public ClientCQPostAuthorizationDUnitTest(String name) {
+     super(name);
+   }
+ 
+   public void setUp() throws Exception {
+ 
+     super.setUp();
+     getSystem();
+     Invoke.invokeInEveryVM(new SerializableRunnable("getSystem") {
+       public void run() {
+         getSystem();
+       }
+     });
+ 
+     final Host host = Host.getHost(0);
+     server1 = host.getVM(0);
+     server2 = host.getVM(1);
+     client1 = host.getVM(2);
+     client2 = host.getVM(3);
+ 
+     server1.invoke(() -> SecurityTestUtil.registerExpectedExceptions( serverExpectedExceptions ));
+     server2.invoke(() -> SecurityTestUtil.registerExpectedExceptions( serverExpectedExceptions ));
+     client2.invoke(() -> SecurityTestUtil.registerExpectedExceptions( clientExpectedExceptions ));
+     SecurityTestUtil.registerExpectedExceptions(clientExpectedExceptions);
+   }
+ 
+   @Override
+   protected final void preTearDown() throws Exception {
+     client1.invoke(() -> SecurityTestUtil.closeCache());
+     client2.invoke(() -> SecurityTestUtil.closeCache());
+     server1.invoke(() -> SecurityTestUtil.closeCache());
+     server2.invoke(() -> SecurityTestUtil.closeCache());
+   }
+ 
+   public void testAllowCQForAllMultiusers() throws Exception {
+     /*
+      * Start a server
+      * Start a client1 with two users with valid credentials and post-authz'ed for CQ
+      * Each user registers a unique CQ
+      * Client2 does some operations on the region which satisfies both the CQs
+      * Validate that listeners for both the CQs are invoked.
+      */
+     doStartUp(Integer.valueOf(2), Integer.valueOf(5), new Boolean[] {true,
+       true});
+   }
+ 
+   public void testDisallowCQForAllMultiusers() throws Exception {
+     /*
+      * Start a server
+      * Start a client1 with two users with valid credentials but not post-authz'ed for CQ
+      * Each user registers a unique CQ
+      * Client2 does some operations on the region which satisfies both the CQs
+      * Validate that listeners for none of the CQs are invoked.
+      */
+     doStartUp(Integer.valueOf(2), Integer.valueOf(5), new Boolean[] {false,
+       false});
+   }
+ 
+   public void testDisallowCQForSomeMultiusers() throws Exception {
+     /*
+      * Start a server
+      * Start a client1 with two users with valid credentials
+      * User1 is post-authz'ed for CQ but user2 is not.
+      * Each user registers a unique CQ
+      * Client2 does some operations on the region which satisfies both the CQs
+      * Validate that listener for User1's CQ is invoked but that for User2's CQ is not invoked.
+      */
+     doStartUp(Integer.valueOf(2), Integer.valueOf(5), new Boolean[] {true,
+         false});
+   }
+ 
+   public void testAllowCQForAllMultiusersWithFailover() throws Exception {
+     /*
+      * Start a server1
+      * Start a client1 with two users with valid credentials and post-authz'ed for CQ
+      * Each user registers a unique CQ
+      * Client2 does some operations on the region which satisfies both the CQs
+      * Validate that listeners for both the CQs are invoked.
+      * Start server2 and shutdown server1
+      * Client2 does some operations on the region which satisfies both the CQs
+      * Validate that listeners for both the CQs are get updates.
+      */
+     doStartUp(Integer.valueOf(2), Integer.valueOf(5), new Boolean[] {true,
+       true}, Boolean.TRUE);
+   }
+ 
+   public void doStartUp(Integer numOfUsers, Integer numOfPuts,
+       Boolean[] postAuthzAllowed) throws Exception {
+     doStartUp(numOfUsers, numOfPuts, postAuthzAllowed, Boolean.FALSE /* failover */);
+   }
+ 
+   public void doStartUp(Integer numOfUsers, Integer numOfPuts,
+       Boolean[] postAuthzAllowed, Boolean failover) throws Exception {
+       AuthzCredentialGenerator gen = this.getXmlAuthzGenerator();
+       CredentialGenerator cGen = gen.getCredentialGenerator();
+       Properties extraAuthProps = cGen.getSystemProperties();
+       Properties javaProps = cGen.getJavaProperties();
+       Properties extraAuthzProps = gen.getSystemProperties();
+       String authenticator = cGen.getAuthenticator();
+       String accessor = gen.getAuthorizationCallback();
+       String authInit = cGen.getAuthInit();
+       TestAuthzCredentialGenerator tgen = new TestAuthzCredentialGenerator(gen);
+ 
+       Properties serverProps = buildProperties(authenticator, accessor, true,
+           extraAuthProps, extraAuthzProps);
+ 
+       Properties opCredentials;
+       cGen = tgen.getCredentialGenerator();
+       Properties javaProps2 = null;
+       if (cGen != null) {
+         javaProps2 = cGen.getJavaProperties();
+       }
+ 
+       int[] indices = new int[numOfPuts];
+       for (int index = 0; index < numOfPuts; ++index) {
+         indices[index] = index;
+       }
+ 
+       Random rnd = new Random();
+       Properties[] authProps = new Properties[numOfUsers];
+       for (int i = 0; i < numOfUsers; i++) {
+         int rand = rnd.nextInt(100) + 1;
+         if (postAuthzAllowed[i]) {
+           opCredentials = tgen.getAllowedCredentials(new OperationCode[] {
+               OperationCode.EXECUTE_CQ, OperationCode.GET}, // For callback, GET should be allowed
+               new String[] {regionName}, indices, rand);
+ //          authProps[i] = gen.getAllowedCredentials(
+ //              new OperationCode[] {OperationCode.EXECUTE_CQ},
+ //              new String[] {regionName}, rnd.nextInt(100) + 1);
+         } else {
+           opCredentials = tgen.getDisallowedCredentials(new OperationCode[] {
+               OperationCode.GET}, // For callback, GET should be disallowed
+               new String[] {regionName}, indices, rand);
+ //          authProps[i] = gen.getDisallowedCredentials(
+ //              new OperationCode[] {OperationCode.EXECUTE_CQ},
+ //              new String[] {regionName}, rnd.nextInt(100) + 1);
+         }
+         authProps[i] = SecurityTestUtil.concatProperties(new Properties[] {
+             opCredentials, extraAuthProps, extraAuthzProps});
+       }
+ 
+       // Get ports for the servers
+       Integer port1 = Integer.valueOf(AvailablePort
+           .getRandomAvailablePort(AvailablePort.SOCKET));
+       Integer port2 = Integer.valueOf(AvailablePort
+           .getRandomAvailablePort(AvailablePort.SOCKET));
+       Integer locatorPort = Integer.valueOf(AvailablePort
+           .getRandomAvailablePort(AvailablePort.SOCKET));
+       // Close down any running servers
+       server1.invoke(() -> SecurityTestUtil.closeCache());
+       server2.invoke(() -> SecurityTestUtil.closeCache());
+ 
+       server1.invoke(() -> ClientCQPostAuthorizationDUnitTest.createServerCache(serverProps, javaProps, locatorPort, port1));
+       client1.invoke(ClientCQPostAuthorizationDUnitTest.class,
+           "createClientCache", new Object[] {javaProps2, authInit, authProps,
+               new Integer[] {port1, port2}, numOfUsers, postAuthzAllowed});
+       client2.invoke(ClientCQPostAuthorizationDUnitTest.class,
+           "createClientCache", new Object[] {javaProps2, authInit, authProps,
+               new Integer[] {port1, port2}, numOfUsers, postAuthzAllowed});
+ 
+       client1.invoke(() -> ClientCQPostAuthorizationDUnitTest.createCQ(numOfUsers));
+       client1.invoke(ClientCQPostAuthorizationDUnitTest.class, "executeCQ",
+           new Object[] {numOfUsers, new Boolean[] {false, false}, numOfPuts,
+               new String[numOfUsers], postAuthzAllowed});
+ 
+       client2.invoke(() -> ClientCQPostAuthorizationDUnitTest.doPuts(numOfPuts, Boolean.TRUE/* put last key */));
+       if (!postAuthzAllowed[0]) {
+         // There is no point waiting as no user is authorized to receive cq events.
+         try {Thread.sleep(1000);} catch (InterruptedException ie) {}
+       } else {
+         client1.invoke(() -> ClientCQPostAuthorizationDUnitTest.waitForLastKey(Integer.valueOf(0)));
+         if (postAuthzAllowed[1]) {
+           client1.invoke(() -> ClientCQPostAuthorizationDUnitTest.waitForLastKey(Integer.valueOf(1)));
+         }
+       }
+       client1.invoke(() -> ClientCQPostAuthorizationDUnitTest.checkCQListeners(numOfUsers, postAuthzAllowed,
+               numOfPuts + 1/* last key */, 0, !failover));
+       if (failover) {
+         server2.invoke(() -> ClientCQPostAuthorizationDUnitTest.createServerCache(serverProps, javaProps, locatorPort, port2));
+         server1.invoke(() -> SecurityTestUtil.closeCache());
+ 
+         // Allow time for client1 to register its CQs on server2
+         server2.invoke(() -> ClientCQPostAuthorizationDUnitTest.allowCQsToRegister(Integer.valueOf(2)));
+ 
+         client2.invoke(() -> ClientCQPostAuthorizationDUnitTest.doPuts(numOfPuts, Boolean.TRUE/* put last key */));
+         client1.invoke(() -> ClientCQPostAuthorizationDUnitTest.waitForLastKeyUpdate(Integer.valueOf(0)));
+         client1.invoke(() -> ClientCQPostAuthorizationDUnitTest.checkCQListeners(numOfUsers, postAuthzAllowed,
+                 numOfPuts + 1/* last key */, numOfPuts + 1/* last key */,
+                 Boolean.TRUE));
+       }
+   }
+ 
+   public static void createServerCache(Properties serverProps,
+       Properties javaProps, Integer serverPort) {
+     Integer locatorPort = Integer.valueOf(AvailablePort
+         .getRandomAvailablePort(AvailablePort.SOCKET));
+     SecurityTestUtil.createCacheServer((Properties)serverProps, javaProps,
+         locatorPort, null, serverPort, Boolean.TRUE, Integer.valueOf(
+             SecurityTestUtil.NO_EXCEPTION));
+   }
+ 
+   public static void createServerCache(Properties serverProps,
+         Properties javaProps, Integer locatorPort, Integer serverPort) {
+     SecurityTestUtil.createCacheServer((Properties)serverProps, javaProps,
+         locatorPort, null, serverPort, Boolean.TRUE, Integer.valueOf(
+             SecurityTestUtil.NO_EXCEPTION));
+   }
+ 
+   public static void createClientCache(Properties javaProps, String authInit,
+       Properties[] authProps, Integer ports[], Integer numOfUsers,
+       Boolean[] postAuthzAllowed) {
+     SecurityTestUtil.createCacheClientForMultiUserMode(numOfUsers, authInit,
+         authProps, javaProps, ports, null, Boolean.FALSE,
+         SecurityTestUtil.NO_EXCEPTION);
+   }
+ 
+   public static void createCQ(Integer num) {
+     for (int i = 0; i < num; i++) {
+       QueryService cqService = SecurityTestUtil.proxyCaches[i].getQueryService();
+       String cqName = "CQ_" + i;
+       String queryStr = cqNameToQueryStrings.get(cqName)
+           + SecurityTestUtil.proxyCaches[i].getRegion(regionName).getFullPath();
+       // Create CQ Attributes.
+       CqAttributesFactory cqf = new CqAttributesFactory();
+       CqListener[] cqListeners = {new CqQueryTestListener(LogWriterUtils.getLogWriter())};
+       ((CqQueryTestListener)cqListeners[0]).cqName = cqName;
+ 
+       cqf.initCqListeners(cqListeners);
+       CqAttributes cqa = cqf.create();
+ 
+       // Create CQ.
+       try {
+         CqQuery cq1 = cqService.newCq(cqName, queryStr, cqa);
+         assertTrue("newCq() state mismatch", cq1.getState().isStopped());
+       } catch (Exception ex) {
+         AssertionError err = new AssertionError("Failed to create CQ " + cqName
+             + " . ");
+         err.initCause(ex);
+         LogWriterUtils.getLogWriter().info("CqService is :" + cqService, err);
+         throw err;
+       }
+     }
+   }
+ 
+   public static void executeCQ(Integer num, Boolean[] initialResults,
+       Integer expectedResultsSize, String[] expectedErr, Boolean[] postAuthzAllowed) {
+     InternalLogWriter logWriter = InternalDistributedSystem.getStaticInternalLogWriter();
+     for (int i = 0; i < num; i++) {
+       try {
+         if (expectedErr[i] != null) {
+           logWriter.info(
+               "<ExpectedException action=add>" + expectedErr[i]
+                   + "</ExpectedException>");
+         }
+         CqQuery cq1 = null;
+         String cqName = "CQ_" + i;
+         String queryStr = cqNameToQueryStrings.get(cqName)
+             + SecurityTestUtil.proxyCaches[i].getRegion(regionName)
+                 .getFullPath();
+         QueryService cqService = SecurityTestUtil.proxyCaches[i]
+             .getQueryService();
+ 
+         // Get CqQuery object.
+         try {
+           cq1 = cqService.getCq(cqName);
+           if (cq1 == null) {
+             LogWriterUtils.getLogWriter().info(
+                 "Failed to get CqQuery object for CQ name: " + cqName);
+             fail("Failed to get CQ " + cqName);
+           } else {
+             LogWriterUtils.getLogWriter().info("Obtained CQ, CQ name: " + cq1.getName());
+             assertTrue("newCq() state mismatch", cq1.getState().isStopped());
+           }
+         } catch (Exception ex) {
+           LogWriterUtils.getLogWriter().info("CqService is :" + cqService);
+           LogWriterUtils.getLogWriter().error(ex);
+           AssertionError err = new AssertionError("Failed to execute CQ "
+               + cqName);
+           err.initCause(ex);
+           throw err;
+         }
+ 
+         if (initialResults[i]) {
+           SelectResults cqResults = null;
+ 
+           try {
+             cqResults = cq1.executeWithInitialResults();
+           } catch (CqException ce) {
+             if (ce.getCause() instanceof NotAuthorizedException && !postAuthzAllowed[i]) {
+               LogWriterUtils.getLogWriter().info("Got expected exception for CQ " + cqName);
+             } else {
+               LogWriterUtils.getLogWriter().info("CqService is: " + cqService);
+               ce.printStackTrace();
+               AssertionError err = new AssertionError("Failed to execute CQ "
+                   + cqName);
+               err.initCause(ce);
+               throw err;
+             }
+           } catch (Exception ex) {
+             LogWriterUtils.getLogWriter().info("CqService is: " + cqService);
+             ex.printStackTrace();
+             AssertionError err = new AssertionError("Failed to execute CQ "
+                 + cqName);
+             err.initCause(ex);
+             throw err;
+           }
+           LogWriterUtils.getLogWriter().info("initial result size = " + cqResults.size());
+           assertTrue("executeWithInitialResults() state mismatch", cq1
+               .getState().isRunning());
+           if (expectedResultsSize >= 0) {
+             assertEquals("unexpected results size", expectedResultsSize
+                 .intValue(), cqResults.size());
+           }
+         } else {
+           try {
+             cq1.execute();
+           } catch (CqException ce) {
+             if (ce.getCause() instanceof NotAuthorizedException && !postAuthzAllowed[i]) {
+               LogWriterUtils.getLogWriter().info("Got expected exception for CQ " + cqName);
+             } else {
+               LogWriterUtils.getLogWriter().info("CqService is: " + cqService);
+               ce.printStackTrace();
+               AssertionError err = new AssertionError("Failed to execute CQ "
+                   + cqName);
+               err.initCause(ce);
+               throw err;
+             }
+           } catch (Exception ex) {
+             AssertionError err = new AssertionError("Failed to execute CQ "
+                 + cqName);
+             err.initCause(ex);
+             if (expectedErr == null) {
+               LogWriterUtils.getLogWriter().info("CqService is: " + cqService, err);
+             }
+             throw err;
+           }
+           assertTrue("execute() state mismatch", cq1.getState().isRunning() == postAuthzAllowed[i]);
+         }
+       } finally {
+         if (expectedErr[i] != null) {
+           logWriter.info(
+               "<ExpectedException action=remove>" + expectedErr[i]
+                   + "</ExpectedException>");
+         }
+       }
+     }
+   }
+ 
+   public static void doPuts(Integer num, Boolean putLastKey) {
+ //    Region region = GemFireCache.getInstance().getRegion(regionName);
+     Region region = SecurityTestUtil.proxyCaches[0].getRegion(regionName);
+     for (int i = 0; i < num; i++) {
+       region.put("CQ_key"+i, "CQ_value"+i);
+     }
+     if (putLastKey) {
+       region.put("LAST_KEY", "LAST_KEY");
+     }
+   }
+ 
+   public static void putLastKey() {
+     Region region = GemFireCacheImpl.getInstance().getRegion(regionName);
+     region.put("LAST_KEY", "LAST_KEY");
+   }
+ 
+   public static void waitForLastKey(Integer cqIndex) {
+     String cqName = "CQ_" + cqIndex;
+     QueryService qService = SecurityTestUtil.proxyCaches[cqIndex].getQueryService();
+     ClientCQImpl cqQuery = (ClientCQImpl)qService.getCq(cqName);
+     ((CqQueryTestListener)cqQuery.getCqListeners()[0])
+         .waitForCreated("LAST_KEY");
+ //    WaitCriterion wc = new WaitCriterion() {
+ //      public boolean done() {
+ //        Region region = GemFireCache.getInstance().getRegion(regionName);
+ //        Region.Entry entry = region.getEntry("LAST_KEY");
+ //        if (entry != null && entry.getValue() != null) {
+ //          return false;
+ //        } else if (entry.getValue() != null) {
+ //          return true;
+ //        }
+ //        return false;
+ //      }
+ //      public String description() {
+ //        return "Last key not received.";
+ //      }
+ //    };
+ //    DistributedTestCase.waitForCriterion(wc, 60 * 1000, 100, false);
+   }
+ 
+   public static void waitForLastKeyUpdate(Integer cqIndex) {
+     String cqName = "CQ_" + cqIndex;
+     QueryService qService = SecurityTestUtil.proxyCaches[cqIndex].getQueryService();
+     ClientCQImpl cqQuery = (ClientCQImpl)qService.getCq(cqName);
+     ((CqQueryTestListener)cqQuery.getCqListeners()[0])
+         .waitForUpdated("LAST_KEY");
+   }
+ 
+   public static void allowCQsToRegister(Integer number) {
+     final int num = number;
+     WaitCriterion wc = new WaitCriterion() {
+       public boolean done() {
+         CqService cqService = GemFireCacheImpl.getInstance().getCqService();
+         cqService.start();
+         Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
+         if (cqs != null) {
+           return cqs.size() >= num;
+         } else {
+           return false;
+         }
+       }
+ 
+       public String description() {
+         return num + "Waited for " + num
+             + " CQs to be registered on this server.";
+       }
+     };
+     Wait.waitForCriterion(wc, 60 * 1000, 100, false);
+   }
+ 
+   public static void checkCQListeners(Integer numOfUsers,
+       Boolean[] expectedListenerInvocation, Integer createEventsSize,
+       Integer updateEventsSize, Boolean closeCache) {
+     for (int i = 0; i < numOfUsers; i++) {
+       String cqName = "CQ_" + i;
+       QueryService qService = SecurityTestUtil.proxyCaches[i].getQueryService();
+       ClientCQImpl cqQuery = (ClientCQImpl)qService.getCq(cqName);
+       if (expectedListenerInvocation[i]) {
+         for (CqListener listener : cqQuery.getCqListeners()) {
+           assertEquals(createEventsSize.intValue(),
+               ((CqQueryTestListener)listener).getCreateEventCount());
+           assertEquals(updateEventsSize.intValue(),
+               ((CqQueryTestListener)listener).getUpdateEventCount());
+         }
+       } else {
+         for (CqListener listener : cqQuery.getCqListeners()) {
+           assertEquals(0, ((CqQueryTestListener)listener).getTotalEventCount());
+         }
+       }
+       if (closeCache) {
+         SecurityTestUtil.proxyCaches[i].close();
+       }
+     }
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
index 0000000,f24b136..48aee7b
mode 000000,100644..100644
--- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
@@@ -1,0 -1,240 +1,242 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  * 
+  *   http://www.apache.org/licenses/LICENSE-2.0
+  * 
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  * KIND, either express or implied.  See the License for the
+  * specific language governing permissions and limitations
+  * under the License.
+  */
+ 
+ package com.gemstone.gemfire.cache.lucene.internal.distributed;
+ 
+ import java.io.Serializable;
+ import java.util.HashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.concurrent.CancellationException;
+ 
+ import org.junit.Assert;
+ import org.junit.experimental.categories.Category;
+ 
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.EvictionAction;
+ import com.gemstone.gemfire.cache.EvictionAlgorithm;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.RegionFactory;
+ import com.gemstone.gemfire.cache.RegionShortcut;
+ import com.gemstone.gemfire.cache.control.RebalanceOperation;
+ import com.gemstone.gemfire.cache.control.RebalanceResults;
+ import com.gemstone.gemfire.cache.lucene.LuceneQuery;
+ import com.gemstone.gemfire.cache.lucene.LuceneQueryResults;
+ import com.gemstone.gemfire.cache.lucene.LuceneResultStruct;
+ import com.gemstone.gemfire.cache.lucene.LuceneService;
+ import com.gemstone.gemfire.cache.lucene.LuceneServiceProvider;
+ import com.gemstone.gemfire.cache.lucene.internal.LuceneServiceImpl;
+ import com.gemstone.gemfire.cache30.CacheTestCase;
+ import com.gemstone.gemfire.internal.cache.EvictionAttributesImpl;
+ import com.gemstone.gemfire.internal.cache.PartitionedRegion;
+ import com.gemstone.gemfire.test.dunit.Host;
+ import com.gemstone.gemfire.test.dunit.SerializableCallable;
+ import com.gemstone.gemfire.test.dunit.VM;
+ import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+ 
++import static org.apache.logging.log4j.core.util.ExtensionLanguageMapping.VM;
++
+ @Category(DistributedTest.class)
+ public class LuceneFunctionReadPathDUnitTest extends CacheTestCase {
+   private static final String INDEX_NAME = "index";
+ 
+   private static final long serialVersionUID = 1L;
+ 
+   private VM server1;
+   private VM server2;
+ 
+   public LuceneFunctionReadPathDUnitTest(String name) {
+     super(name);
+   }
+ 
+   @Override
+   public void setUp() throws Exception {
+     super.setUp();
+     Host host = Host.getHost(0);
+     server1 = host.getVM(0);
+     server2 = host.getVM(1);
+   }
+ 
+   public void testEnd2EndFunctionExecution() {
+     e2eTextSearchForRegionType(RegionShortcut.PARTITION);
+     e2eTextSearchForRegionType(RegionShortcut.PARTITION_PERSISTENT);
+     e2eTextSearchForRegionType(RegionShortcut.PARTITION_OVERFLOW);
+     e2eTextSearchForRegionType(RegionShortcut.PARTITION_PERSISTENT_OVERFLOW);
+   }
+ 
+   private void e2eTextSearchForRegionType(RegionShortcut type) {
+     final String regionName = type.toString();
+     createPartitionRegionAndIndex(server1, regionName, type);
+     putDataInRegion(server1, regionName);
+     createPartitionRegionAndIndex(server2, regionName, type);
+     // Make sure we can search from both members
+     executeTextSearch(server1, regionName);
+     executeTextSearch(server2, regionName);
+ 
+     rebalanceRegion(server1);
+     // Make sure the search still works
+     executeTextSearch(server1, regionName);
+     executeTextSearch(server2, regionName);
+     destroyRegion(server2, regionName);
+   }
+ 
+   private void rebalanceRegion(VM vm) {
+     // Do a rebalance
+     vm.invoke(new SerializableCallable<Object>() {
+       private static final long serialVersionUID = 1L;
+ 
+       @Override
+       public Object call() throws CancellationException, InterruptedException {
+         RebalanceOperation op = getCache().getResourceManager().createRebalanceFactory().start();
+         RebalanceResults results = op.getResults();
+         assertTrue(1 < results.getTotalBucketTransfersCompleted());
+         return null;
+       }
+     });
+   }
+ 
+   private void executeTextSearch(VM vm, final String regionName) {
+     SerializableCallable<Object> executeSearch = new SerializableCallable<Object>("executeSearch") {
+       private static final long serialVersionUID = 1L;
+ 
+       public Object call() throws Exception {
+         Cache cache = getCache();
+         assertNotNull(cache);
+         Region<Object, Object> region = cache.getRegion(regionName);
+         Assert.assertNotNull(region);
+ 
+         LuceneService service = LuceneServiceProvider.get(cache);
+         LuceneQuery<Integer, TestObject> query;
+         query = service.createLuceneQueryFactory().create(INDEX_NAME, regionName, "text:world");
+         LuceneQueryResults<Integer, TestObject> results = query.search();
+         assertEquals(3, results.size());
+         List<LuceneResultStruct<Integer, TestObject>> page = results.getNextPage();
+ 
+         Map<Integer, TestObject> data = new HashMap<Integer, TestObject>();
+         for (LuceneResultStruct<Integer, TestObject> row : page) {
+           data.put(row.getKey(), row.getValue());
+         }
+ 
+         assertEquals(data, region);
+         return null;
+       }
+     };
+ 
+     vm.invoke(executeSearch);
+   }
+ 
+   private void putDataInRegion(VM vm, final String regionName) {
+     SerializableCallable<Object> createSomeData = new SerializableCallable<Object>("putDataInRegion") {
+       private static final long serialVersionUID = 1L;
+ 
+       public Object call() throws Exception {
+         final Cache cache = getCache();
+         Region<Object, Object> region = cache.getRegion(regionName);
+         assertNotNull(region);
+         region.put(1, new TestObject("hello world"));
+         region.put(113, new TestObject("hi world"));
+         region.put(2, new TestObject("goodbye world"));
+ 
+         return null;
+       }
+     };
+ 
+     vm.invoke(createSomeData);
+   }
+ 
+   private void createPartitionRegionAndIndex(VM vm, final String regionName, final RegionShortcut type) {
+     SerializableCallable<Object> createPartitionRegion = new SerializableCallable<Object>("createRegionAndIndex") {
+       private static final long serialVersionUID = 1L;
+ 
+       public Object call() throws Exception {
+         final Cache cache = getCache();
+         assertNotNull(cache);
+         LuceneService service = LuceneServiceProvider.get(cache);
+         service.createIndex(INDEX_NAME, regionName, "text");
+         RegionFactory<Object, Object> regionFactory = cache.createRegionFactory(type);
+         if (regionName.contains("OVERFLOW")) {
+           System.out.println("yello");
+           EvictionAttributesImpl evicAttr = new EvictionAttributesImpl().setAction(EvictionAction.OVERFLOW_TO_DISK);
+           evicAttr.setAlgorithm(EvictionAlgorithm.LRU_ENTRY).setMaximum(1);
+           regionFactory.setEvictionAttributes(evicAttr);
+         }
+         regionFactory.create(regionName);
+         return null;
+       }
+     };
+     vm.invoke(createPartitionRegion);
+   }
+ 
+   private void destroyRegion(VM vm, final String regionName) {
+     SerializableCallable<Object> createPartitionRegion = new SerializableCallable<Object>("destroyRegion") {
+       private static final long serialVersionUID = 1L;
+ 
+       public Object call() throws Exception {
+         final Cache cache = getCache();
+         assertNotNull(cache);
+         String aeqId = LuceneServiceImpl.getUniqueIndexName(INDEX_NAME, regionName);
+         PartitionedRegion chunkRegion = (PartitionedRegion) cache.getRegion(aeqId + ".chunks");
+         assertNotNull(chunkRegion);
+         chunkRegion.destroyRegion();
+         PartitionedRegion fileRegion = (PartitionedRegion) cache.getRegion(aeqId + ".files");
+         assertNotNull(fileRegion);
+         fileRegion.destroyRegion();
+         Region<Object, Object> region = cache.getRegion(regionName);
+         assertNotNull(region);
+         region.destroyRegion();
+         return null;
+       }
+     };
+     vm.invoke(createPartitionRegion);
+   }
+ 
+   private static class TestObject implements Serializable {
+     private static final long serialVersionUID = 1L;
+     private String text;
+ 
+     public TestObject(String text) {
+       this.text = text;
+     }
+ 
+     @Override
+     public int hashCode() {
+       final int prime = 31;
+       int result = 1;
+       result = prime * result + ((text == null) ? 0 : text.hashCode());
+       return result;
+     }
+ 
+     @Override
+     public boolean equals(Object obj) {
+       if (this == obj)
+         return true;
+       if (obj == null)
+         return false;
+       if (getClass() != obj.getClass())
+         return false;
+       TestObject other = (TestObject) obj;
+       if (text == null) {
+         if (other.text != null)
+           return false;
+       } else if (!text.equals(other.text))
+         return false;
+       return true;
+     }
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-web-api/build.gradle
----------------------------------------------------------------------
diff --cc geode-web-api/build.gradle
index 0000000,51848c2..d854d17
mode 000000,100755..100755
--- a/geode-web-api/build.gradle
+++ b/geode-web-api/build.gradle
@@@ -1,0 -1,55 +1,67 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ apply plugin: 'war'
+ 
+ dependencies {
+   compile 'commons-lang:commons-lang:' + project.'commons-lang.version'
+   compile 'commons-fileupload:commons-fileupload:' + project.'commons-fileupload.version'
+   compile 'com.fasterxml:classmate:' + project.'classmate.version'
+   compile 'com.fasterxml.jackson.core:jackson-annotations:' + project.'jackson.version'
+   compile 'com.fasterxml.jackson.core:jackson-core:' + project.'jackson.version'
+   compile 'com.fasterxml.jackson.core:jackson-databind:' + project.'jackson.version'
+   compile 'com.fasterxml.jackson.module:jackson-module-scala_2.10:' + project.'jackson-module-scala_2.10.version'
+   compile 'com.google.guava:guava:' + project.'guava.version'
+   compile 'com.mangofactory:swagger-springmvc:' + project.'swagger-springmvc.version'
+   compile 'com.thoughtworks.paranamer:paranamer:' + project.'paranamer.version'
+   compile 'com.wordnik:swagger-annotations:' + project.'swagger.version'
+   compile 'com.wordnik:swagger-core_2.10:' + project.'swagger.version'
+   compile 'org.json4s:json4s-ast_2.10:' + project.'json4s.version'
+   compile 'org.json4s:json4s-ext_2.10:' + project.'json4s.version'
+   compile 'org.json4s:json4s-core_2.10:' + project.'json4s.version'
+   compile 'org.json4s:json4s-jackson_2.10:' + project.'json4s.version'
+   compile 'org.json4s:json4s-native_2.10:' + project.'json4s.version'
+   compile 'org.scala-lang:scala-library:' + project.'scala.version'
+   compile 'org.scala-lang:scala-reflect:' + project.'scala.version'
+   compile 'org.springframework.hateoas:spring-hateoas:' + project.'spring-hateos.version'
+   compile 'org.springframework:spring-aspects:' + project.'springframework.version'
+   compile 'org.springframework:spring-oxm:' + project.'springframework.version'
+ 
+   provided 'javax.servlet:javax.servlet-api:' + project.'javax.servlet-api.version'
+   provided project(':geode-core')
+ }
+ 
+ jar {
+   from sourceSets.main.output
+ }
+ 
+ war {
+   classpath configurations.runtime
+ }
+ 
++test {  
++  def assemblyPath = project(':gemfire-assembly').buildDir
++  def distributionBaseName = "apache-geode"
++  environment 'GEMFIRE', "$assemblyPath/install/${distributionBaseName}"
++}
++
++distributedTest {  
++  def assemblyPath = project(':gemfire-assembly').buildDir
++  def distributionBaseName = "apache-geode"
++  environment 'GEMFIRE', "$assemblyPath/install/${distributionBaseName}"
++}
++


[14/50] [abbrv] incubator-geode git commit: GEODE-912: FileUtil would throw a more detailed stack trace if unable to delete a file

Posted by je...@apache.org.
GEODE-912: FileUtil would throw a more detailed stack trace if unable to delete a file


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7815581e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7815581e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7815581e

Branch: refs/heads/feature/GEODE-17
Commit: 7815581ee28450c5ae7b084d8e45e923bf0da0a1
Parents: 9e8543a
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Tue Feb 23 11:48:34 2016 -0800
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Tue Feb 23 15:23:52 2016 -0800

----------------------------------------------------------------------
 .../com/gemstone/gemfire/internal/FileUtil.java | 29 ++++++++++++++------
 .../gemfire/internal/FileUtilJUnitTest.java     | 20 ++++++++++++++
 2 files changed, 40 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7815581e/geode-core/src/main/java/com/gemstone/gemfire/internal/FileUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/FileUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/FileUtil.java
index b06b503..c87e950 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/FileUtil.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/FileUtil.java
@@ -25,6 +25,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URL;
 import java.nio.channels.FileChannel;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -156,15 +157,16 @@ public class FileUtil {
    *           which just returns false.
    */
   public static void delete(File file) throws IOException {
-    if(file.exists() && file.isDirectory()) {
+    if(!file.exists())
+      return;
+
+    if(file.isDirectory()) {
       for(File child: listFiles(file)) {
         delete(child);
       }
     }
-    
-    if(file.exists() && !file.delete()) {
-      throw new IOException("Could not delete " + file);
-    }
+
+    Files.delete(file.toPath());
   }
   
   /**
@@ -175,15 +177,24 @@ public class FileUtil {
    * This method tries to delete as much as possible.
    */
   public static void delete(File file, StringBuilder failures) {
-    if(file.exists() && file.isDirectory()) {
+    if(!file.exists())
+      return;
+
+    if(file.isDirectory()) {
       for(File child: listFiles(file)) {
         delete(child, failures);
       }
     }
-    
-    if(file.exists() && !file.delete()) {
+
+    try{
+      Files.delete(file.toPath());
+    } catch (IOException e) {
       if (failures != null) {
-        failures.append("Could not delete ").append(file).append('\n');
+        failures.append("Could not delete ")
+            .append(file)
+            .append(" due to ")
+            .append(e.getMessage())
+            .append('\n');
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7815581e/geode-core/src/test/java/com/gemstone/gemfire/internal/FileUtilJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/FileUtilJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/FileUtilJUnitTest.java
index 2c9b0c8..d3a4ebd 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/FileUtilJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/FileUtilJUnitTest.java
@@ -84,4 +84,24 @@ public class FileUtilJUnitTest {
     fileName = "/dir/dir/dir/dir/filename.txt.log";
     assertEquals("/dir/dir/dir/dir/filename.txt", FileUtil.stripOffExtension(fileName));
   }
+
+  @Test
+  public void testDeleteFile() throws IOException {
+    File file = File.createTempFile("FileUtilJUnitTest", null);
+    assertTrue(file.exists());
+    FileUtil.delete(file);
+    assertFalse(file.exists());
+  }
+
+  @Test
+  public void testDeleteDir() throws IOException {
+    File dir = new File("testDirName");
+    dir.mkdir();
+    File file = File.createTempFile("testFile", null, dir);
+    assertTrue(dir.exists());
+    assertTrue(file.exists());
+    FileUtil.delete(dir);
+    assertFalse(file.exists());
+    assertFalse(dir.exists());
+  }
 }


[09/50] [abbrv] incubator-geode git commit: GEODE-907: Incorporate review feedback

Posted by je...@apache.org.
GEODE-907: Incorporate review feedback


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/c2363f7f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/c2363f7f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/c2363f7f

Branch: refs/heads/feature/GEODE-17
Commit: c2363f7fc13fb99c373d245a1ba23170a2351d04
Parents: f42c86d
Author: Jens Deppe <jd...@pivotal.io>
Authored: Mon Feb 22 11:06:05 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Feb 23 14:04:51 2016 -0800

----------------------------------------------------------------------
 .../tools/pulse/internal/data/Cluster.java      |  8 ++---
 .../tools/pulse/internal/data/DataBrowser.java  | 31 +++++++++++---------
 2 files changed, 21 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c2363f7f/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
index 7d5cac2..5390794 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
@@ -19,6 +19,7 @@
 
 package com.vmware.gemfire.tools.pulse.internal.data;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -3516,7 +3517,7 @@ public class Cluster extends Thread {
     public ObjectNode executeQuery(String queryText, String members, int limit) {
 
       BufferedReader streamReader = null;
-      ObjectNode jsonObject = mapper.createObjectNode();
+      JsonNode jsonObject = null;
       Random rand = new Random();
       int min = 1, max = 5;
       int randomNum = rand.nextInt(max - min + 1) + min;
@@ -3641,8 +3642,7 @@ public class Cluster extends Thread {
           testQueryResultClusterSmallresponseStrBuilder.append(inputStr);
         }
 
-//        jsonObject = new JSONObject(
-//            testQueryResultClusterSmallresponseStrBuilder.toString());
+        jsonObject = mapper.readTree(testQueryResultClusterSmallresponseStrBuilder.toString());
 
         // close stream reader
         streamReader.close();
@@ -3650,7 +3650,7 @@ public class Cluster extends Thread {
         LOGGER.severe(ex.getMessage());
       }
 
-      return jsonObject;
+      return (ObjectNode) jsonObject;
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c2363f7f/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
index cb955e4..5214fec 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java
@@ -109,12 +109,14 @@ public class DataBrowser {
       // Get user's query history list
       ObjectNode userQueries = (ObjectNode) queries.get(userId);
 
-      // Remove user's query
-      userQueries.remove(queryId);
-      queries.put(userId, userQueries);
+      if (userQueries != null) {
+        // Remove user's query
+        userQueries.remove(queryId);
+        queries.put(userId, userQueries);
 
-      // Store queries in file back
-      operationStatus = storeQueriesInFile(queries);
+        // Store queries in file back
+        operationStatus = storeQueriesInFile(queries);
+      }
     }
     
     return operationStatus;
@@ -139,15 +141,16 @@ public class DataBrowser {
       // Get user's query history list
       ObjectNode userQueries = (ObjectNode) queries.get(userId);
 
-      Iterator<String> it = userQueries.fieldNames();
-      while (it.hasNext()) {
-        String key = it.next();
-        ObjectNode queryItem = mapper.createObjectNode();
-        queryItem.put("queryId", key);
-        queryItem.put("queryText", userQueries.get(key).toString());
-        queryItem.put("queryDateTime",
-            simpleDateFormat.format(Long.valueOf(key)));
-        queryList.add(queryItem);
+      if (userQueries != null) {
+        Iterator<String> it = userQueries.fieldNames();
+        while (it.hasNext()) {
+          String key = it.next();
+          ObjectNode queryItem = mapper.createObjectNode();
+          queryItem.put("queryId", key);
+          queryItem.put("queryText", userQueries.get(key).toString());
+          queryItem.put("queryDateTime", simpleDateFormat.format(Long.valueOf(key)));
+          queryList.add(queryItem);
+        }
       }
     }
 


[15/50] [abbrv] incubator-geode git commit: GEODE-930: remove the call of disconnectAllFromDS since it's already in the tear down method.

Posted by je...@apache.org.
GEODE-930: remove the call of disconnectAllFromDS since it's already in the tear down method.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/18ad0ad5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/18ad0ad5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/18ad0ad5

Branch: refs/heads/feature/GEODE-17
Commit: 18ad0ad5302eb3df2a575154522da29066c76511
Parents: 7815581
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Mon Feb 22 14:09:47 2016 -0800
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Tue Feb 23 15:25:57 2016 -0800

----------------------------------------------------------------------
 .../management/internal/cli/commands/DeployCommandsDUnitTest.java  | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/18ad0ad5/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java
index 21e44b2..9373d0f 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java
@@ -326,8 +326,6 @@ public class DeployCommandsDUnitTest extends CliCommandTestBase {
    * Does an end-to-end test using the complete CLI framework while ensuring that the shared configuration is updated.
    */
   public void testEndToEnd() throws IOException {
-    disconnectAllFromDS();
-
     final String groupName = "testDeployEndToEndGroup";
 
     // Start the Locator and wait for shared configuration to be available


[29/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceConstants.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceConstants.java
index 0000000,3a8bbbf..14d4639
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceConstants.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceConstants.java
@@@ -1,0 -1,115 +1,161 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
++/**
++ * 
++ * @author tushark
++ *
++ * @since 9.0
++ */
+ public class ResourceConstants {
 -	
 -	//public static final String LIST_DS = "LIST_DS";
 -	public static final String READ_DS = "READ_DS";
 -	public static final String SET_DS = "SET_DS";
 -	public static final String CHANGE_ALERT_LEVEL_DS = "CHANGE_ALERT_LEVEL_DS";
 -	public static final String BACKUP_DS = "BACKUP_DS";
 -	public static final String REMOVE_DISKSTORE_DS = "REMOVE_DISKSTORE_DS";
 -	public static final String SHUTDOWN_DS = "SHUTDOWN_DS";
 -	public static final String QUERYDATA_DS = "QUERYDATA_DS";
 -	public static final String ADMIN_DS = "ADMIN_DS";
 -	
 -	/*
 -	public static final String REBALANCE = "REBALANCE";
 -	public static final String PUT = "PUT";
 -	public static final String EXPORT_DATA = "EXPORT_DATA";
 -	public static final String IMPORT_DATA = "IMPORT_DATA";
 -	public static final String LOCATE_ENTRY = "LOCATE_ENTRY";*/
 -	
 -	public static final String PULSE_DASHBOARD = "PULSE_DASHBOARD";
 -  public static final String PULSE_DATABROWSER = "PULSE_DATABROWSER";
 -  public static final String PULSE_ADMIN_V1 = "PULSE_ADMIN_V1";
 -  public static final String PULSE_WEBGFSH = "PULSE_WEBGFSH";  
 -	
 -	public static final String DEFAULT_LABEL="";
 -	
 -	public static final String RESORUCE_SEC_DESCRIPTOR = "resource.secDescriptor";
 -	public static final String RESORUCE_AUTH_ACCESSOR = "resource-auth-accessor";
 -	public static final String RESORUCE_AUTHENTICATOR = "resource-authenticator";
 -  public static final String RESORUCE_DEFAULT_SEC_DESCRIPTOR = "resourceSecDesc.json";
+   
 -  //All ResourceOperation Codes
++  public static final String DEFAULT_LABEL="";
++  
++  public static final String RESORUCE_SEC_DESCRIPTOR = "resource.secDescriptor";
++  public static final String RESORUCE_AUTH_ACCESSOR = "resource-auth-accessor";
++  public static final String RESORUCE_AUTHENTICATOR = "resource-authenticator";
++  public static final String RESORUCE_DEFAULT_SEC_DESCRIPTOR = "resourceSecDesc.json";
++  public static final String CREATE_MBEAN = "createMBean";
++  public static final String UNREGISTER_MBEAN = "unregisterMBean";
++  public static final String SET_PREFIX = "set";
++  public static final String SET_ATTRIBUTE = "setAttribute";
++  public static final String SET_ATTRIBUTES= "setAttributes";
++  public static final String GET_ATTRIBUTES= "getAttributes";
++  public static final String GET_ATTRIBUTE = "getAttribute";
++  public static final String GET_PREFIX = "get";
++  public static final String GET_IS_PREFIX = "is";
++  public static final String REGISTER_MBEAN = "registerMBean";
++  public static final String PROCESS_COMMAND ="processCommand";
++  public static final String ACCESS_DENIED_MESSAGE = "Access Denied";
++  public static final String WRONGE_CREDENTIALS_MESSAGE = "Wrong Credentials";
+   
+   public static final String ALTER_REGION = "ALTER_REGION";
+   public static final String ALTER_RUNTIME = "ALTER_RUNTIME";
+   public static final String BACKUP_DISKSTORE = "BACKUP_DISKSTORE";
+   public static final String CHANGE_ALERT_LEVEL = "CHANGE_ALERT_LEVEL";
+   public static final String CLOSE_DURABLE_CLIENT = "CLOSE_DURABLE_CLIENT";
+   public static final String CLOSE_DURABLE_CQ = "CLOSE_DURABLE_CQ";
+   public static final String COMPACT_DISKSTORE = "COMPACT_DISKSTORE";
+   public static final String CONFIGURE_PDX = "CONFIGURE_PDX";
+   public static final String CREATE_AEQ = "CREATE_AEQ";
+   public static final String CREATE_DISKSTORE = "CREATE_DISKSTORE";
+   public static final String CREATE_GW_RECEIVER = "CREATE_GW_RECEIVER";
+   public static final String CREATE_GW_SENDER = "CREATE_GW_SENDER";
+   public static final String CREATE_INDEX = "CREATE_INDEX";
+   public static final String CREATE_REGION = "CREATE_REGION";
+   public static final String DEPLOY = "DEPLOY";
+   public static final String DESTROY_DISKSTORE = "DESTROY_DISKSTORE";
+   public static final String DESTROY_FUNCTION = "DESTROY_FUNCTION";
+   public static final String DESTROY_INDEX = "DESTROY_INDEX";
++
+   public static final String DESTROY_REGION = "DESTROY_REGION";
+   public static final String EXECUTE_FUNCTION = "EXECUTE_FUNCTION";
+   public static final String EXPORT_CONFIG = "EXPORT_CONFIG";
+   public static final String EXPORT_DATA = "EXPORT_DATA";
+   public static final String EXPORT_LOGS = "EXPORT_LOGS";
+   public static final String EXPORT_OFFLINE_DISKSTORE = "EXPORT_OFFLINE_DISKSTORE";
+   public static final String EXPORT_STACKTRACE = "EXPORT_STACKTRACE";
+   public static final String GC = "GC";
+   public static final String GET = "GET";
+   public static final String IMPORT_CONFIG = "IMPORT_CONFIG";
+   public static final String IMPORT_DATA = "IMPORT_DATA";
+   public static final String LIST_DS = "LIST_DS";
+   public static final String LOAD_BALANCE_GW_SENDER = "LOAD_BALANCE_GW_SENDER";
+   public static final String LOCATE_ENTRY = "LOCATE_ENTRY";
+   public static final String NETSTAT = "NETSTAT";
+   public static final String PAUSE_GW_SENDER = "PAUSE_GW_SENDER";
+   public static final String PUT = "PUT";
+   public static final String QUERY = "QUERY";
+   public static final String REBALANCE = "REBALANCE";
+   public static final String REMOVE = "REMOVE";
+   public static final String RENAME_PDX = "RENAME_PDX";
+   public static final String RESUME_GW_SENDER = "RESUME_GW_SENDER";
+   public static final String REVOKE_MISSING_DISKSTORE = "REVOKE_MISSING_DISKSTORE";
+   public static final String SHOW_DEADLOCKS = "SHOW_DEADLOCKS";
+   public static final String SHOW_LOG = "SHOW_LOG";
+   public static final String SHOW_METRICS = "SHOW_METRICS";
+   public static final String SHOW_MISSING_DISKSTORES = "SHOW_MISSING_DISKSTORES";
+   public static final String SHOW_SUBSCRIPTION_QUEUE_SIZE = "SHOW_SUBSCRIPTION_QUEUE_SIZE";
+   public static final String SHUTDOWN = "SHUTDOWN";
+   public static final String STOP_GW_RECEIVER = "STOP_GW_RECEIVER";
+   public static final String STOP_GW_SENDER = "STOP_GW_SENDER";
+   public static final String UNDEPLOY = "UNDEPLOY";
+   public static final String BACKUP_MEMBERS = "BACKUP_MEMBERS";
+   public static final String ROLL_DISKSTORE = "ROLL_DISKSTORE";
+   public static final String FORCE_COMPACTION = "FORCE_COMPACTION";
++  public static final String FORCE_ROLL = "FORCE_ROLL";
+   public static final String FLUSH_DISKSTORE = "FLUSH_DISKSTORE";
+   public static final String START_GW_RECEIVER = "START_GW_RECEIVER";
+   public static final String START_GW_SENDER = "START_GW_SENDER";
+   public static final String BECOME_LOCK_GRANTOR = "BECOME_LOCK_GRANTOR";
+   public static final String START_MANAGER = "START_MANAGER";
+   public static final String STOP_MANAGER = "STOP_MANAGER";
+   public static final String CREATE_MANAGER = "CREATE_MANAGER";
++  public static final String STOP_CONTINUOUS_QUERY = "STOP_CONTINUOUS_QUERY";
++  public static final String SET_DISK_USAGE = "SET_DISK_USAGE";
++  
+ 
++  public static final String CREATE_HDFS_STORE = "CREATE_HDFS_STORE";
++  public static final String ALTER_HDFS_STORE = "ALTER_HDFS_STORE";
++  public static final String DESTROY_HDFS_STORE = "DESTROY_HDFS_STORE";
++  
++  public static final String PULSE_DASHBOARD = "PULSE_DASHBOARD";
++  public static final String PULSE_DATABROWSER = "PULSE_DATABROWSER";
++  public static final String PULSE_ADMIN_V1 = "PULSE_ADMIN_V1";
++  public static final String PULSE_WEBGFSH = "PULSE_WEBGFSH";
++
++  public static final String DATA_READ = "DATA_READ";
++  public static final String DATA_WRITE = "DATA_WRITE";
++  public static final String MONITOR = "MONITOR";
++  public static final String ADMIN = "ADMIN";
++  
++  public static final String OBJECT_NAME_ACCESSCONTROL = "GemFire:service=AccessControl,type=Distributed";
++  public static final String USER_NAME = "security-username";
++  public static final String PASSWORD = "security-password";
++
++  public static final String MBEAN_TYPE_DISTRIBUTED = "Distributed";
++  public static final String MBEAN_TYPE_MEMBER = "Member";
++  
++  public static final String MBEAN_SERVICE_MANAGER = "Manager";
++  public static final String MBEAN_SERVICE_CACHESERVER="CacheServer";
++  public static final String MBEAN_SERVICE_REGION = "Region";
++  public static final String MBEAN_SERVICE_LOCKSERVICE = "LockService";
++  public static final String MBEAN_SERVICE_DISKSTORE = "DiskStore";
++  public static final String MBEAN_SERVICE_GATEWAY_RECEIVER = "GatewayReceiver";
++  public static final String MBEAN_SERVICE_GATEWAY_SENDER = "GatewaySender";
++  public static final String MBEAN_SERVICE_ASYNCEVENTQUEUE = "AsyncEventQueue";
++  public static final String MBEAN_SERVICE_LOCATOR = "Locator";
++  public static final String MBEAN_SERVICE_SYSTEM = "System";
++  
++  public static final String MBEAN_KEY_SERVICE ="service";
++  public static final String MBEAN_KEY_TYPE ="type";
++  
++  public static final String GETTER_IS= "is";
++  public static final String GETTER_GET = "get";
++  public static final String GETTER_FETCH = "fetch";
++  public static final String GETTER_SHOW = "show";
++  public static final String GETTER_HAS = "has";
++  public static final String GETTER_VIEW = "view";
++  public static final String GETTER_LIST = "list";
++  public static final String GETTER_DESCRIBE = "describe";
++  public static final String GETTER_STATUS = "status";
++  
++  public static final String MANAGEMENT_PACKAGE = "com.gemstone.gemfire.management";
+   
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperation.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperation.java
index 0000000,ceebd6f..4f92417
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperation.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperation.java
@@@ -1,0 -1,34 +1,40 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
+ import java.lang.annotation.ElementType;
+ import java.lang.annotation.Inherited;
+ import java.lang.annotation.Retention;
+ import java.lang.annotation.RetentionPolicy;
+ import java.lang.annotation.Target;
+ 
++/**
++ * Annotation describing Security Level required to perform any resource operation
++ * @author tushark
++ *
++ * @since 9.0
++ */
+ @Target(ElementType.METHOD)
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ public @interface ResourceOperation {
+   
+   Resource resource();
+   String label() default ResourceConstants.DEFAULT_LABEL;
+   String operation() default ResourceConstants.LIST_DS;
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
index 0000000,50b22a3..dfbf926
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
@@@ -1,0 -1,203 +1,436 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
++import java.util.ArrayList;
++import java.util.Collections;
+ import java.util.HashMap;
++import java.util.List;
+ import java.util.Map;
+ 
+ import com.gemstone.gemfire.cache.operations.OperationContext;
+ 
++/**
++ * This is base class for OperationContext for resource (JMX and CLI) operations
++ * 
++ * @author tushark
++ * 
++ * @since 9.0
++ */
+ public abstract class ResourceOperationContext extends OperationContext {
 -	
 -	 public static class ResourceOperationCode {
 -		 
 -		private static final byte OP_LIST_DS = 1;	
 -	    private static final byte OP_READ_DS = 2;
 -	    private static final byte OP_SET_DS = 3;
 -	    private static final byte OP_ADMIN_DS = 4;
 -	    private static final byte OP_CHANGE_ALERT_LEVEL_DS = 5;
 -	    private static final byte OP_BACKUP_DS = 6;
 -	    private static final byte OP_REMOVE_DISKSTORE_DS = 7;
 -	    private static final byte OP_SHUTDOWN_DS = 8;
 -	    private static final byte OP_QUERYDATA_DS = 9;
 -	    private static final byte OP_REBALANCE_DS = 10;
 -	    
 -	    private static final byte OP_EXPORT_DATA_REGION = 11;
 -	    private static final byte OP_IMPORT_DATA_REGION = 12 ;
 -	    private static final byte OP_PUT_REGION = 13;
 -	    private static final byte OP_LOCATE_ENTRY_REGION = 14;
 -	    
 -	    private static final byte OP_PULSE_DASHBOARD = 15;
 -	    private static final byte OP_PULSE_DATABROWSER = 16;
 -	    private static final byte OP_PULSE_WEBGFSH = 17;
 -	    private static final byte OP_PULSE_ADMIN_V1 = 18;
 -	    
 -	    
 -	    private static final ResourceOperationCode[] VALUES = new ResourceOperationCode[20];
 -	    private static final Map OperationNameMap = new HashMap();
 -	    
 -	    public static final ResourceOperationCode LIST_DS = new ResourceOperationCode(ResourceConstants.LIST_DS, OP_LIST_DS);
 -	    public static final ResourceOperationCode READ_DS = new ResourceOperationCode(ResourceConstants.READ_DS, OP_READ_DS);
 -	    public static final ResourceOperationCode SET_DS = new ResourceOperationCode(ResourceConstants.SET_DS, OP_SET_DS);
 -
 -	    public static final ResourceOperationCode CHANGE_ALERT_LEVEL_DS = new ResourceOperationCode(ResourceConstants.CHANGE_ALERT_LEVEL_DS, OP_CHANGE_ALERT_LEVEL_DS);
 -	    public static final ResourceOperationCode BACKUP_DS = new ResourceOperationCode(ResourceConstants.BACKUP_DS, OP_BACKUP_DS);
 -	    public static final ResourceOperationCode REMOVE_DISKSTORE_DS = new ResourceOperationCode(ResourceConstants.REMOVE_DISKSTORE_DS, OP_REMOVE_DISKSTORE_DS);
 -	    public static final ResourceOperationCode SHUTDOWN_DS = new ResourceOperationCode(ResourceConstants.SHUTDOWN_DS, OP_SHUTDOWN_DS);
 -	    public static final ResourceOperationCode QUERYDATA_DS = new ResourceOperationCode(ResourceConstants.QUERYDATA_DS, OP_QUERYDATA_DS);
 -	    public static final ResourceOperationCode REBALANCE_DS = new ResourceOperationCode(ResourceConstants.REBALANCE, OP_REBALANCE_DS);
 -	    
 -	    public static final ResourceOperationCode EXPORT_DATA_REGION = new ResourceOperationCode(ResourceConstants.EXPORT_DATA, OP_EXPORT_DATA_REGION);
 -	    public static final ResourceOperationCode IMPORT_DATA_REGION = new ResourceOperationCode(ResourceConstants.IMPORT_DATA, OP_IMPORT_DATA_REGION);
 -	    public static final ResourceOperationCode PUT_REGION = new ResourceOperationCode(ResourceConstants.PUT, OP_PUT_REGION);
 -	    public static final ResourceOperationCode LOCATE_ENTRY_REGION = new ResourceOperationCode(ResourceConstants.LOCATE_ENTRY, OP_LOCATE_ENTRY_REGION);	    
 -	    
 -	    public static final ResourceOperationCode PULSE_DASHBOARD = new ResourceOperationCode(ResourceConstants.PULSE_DASHBOARD, OP_PULSE_DASHBOARD);
 -	    public static final ResourceOperationCode PULSE_DATABROWSER = new ResourceOperationCode(ResourceConstants.PULSE_DATABROWSER, OP_PULSE_DATABROWSER);
 -	    public static final ResourceOperationCode PULSE_WEBGFSH = new ResourceOperationCode(ResourceConstants.PULSE_WEBGFSH, OP_PULSE_WEBGFSH);
 -	    public static final ResourceOperationCode PULSE_ADMIN_V1 = new ResourceOperationCode(ResourceConstants.PULSE_ADMIN_V1, OP_PULSE_ADMIN_V1);
 -	    
 -	    public static final ResourceOperationCode ADMIN_DS = new ResourceOperationCode(ResourceConstants.ADMIN_DS, OP_ADMIN_DS,
 -	    		new ResourceOperationCode[]{
 -	          CHANGE_ALERT_LEVEL_DS, 
 -	          BACKUP_DS, 
 -	          REMOVE_DISKSTORE_DS, 
 -	          SHUTDOWN_DS, 
 -	          QUERYDATA_DS, 
 -	    			REBALANCE_DS, 
 -	    			PULSE_DASHBOARD, 
 -	    			PULSE_DATABROWSER, 
 -	    			PULSE_WEBGFSH, 
 -	    			PULSE_ADMIN_V1
 -	    		});
 -		
 -	    
 -	    private final String name;
 -	    private final byte opCode;
 -	    private final ResourceOperationCode[] children;
 -	    
 -	    private ResourceOperationCode(String name, byte opCode) {
 -	      this.name = name;
 -	      this.opCode = opCode;
 -	      VALUES[opCode] = this;
 -	      OperationNameMap.put(name, this);
 -	      this.children = null;
 -	    }
 -	    
 -	    private ResourceOperationCode(String name, byte opCode, ResourceOperationCode[] children) {
 -		      this.name = name;
 -		      this.opCode = opCode;
 -		      VALUES[opCode] = this;
 -		      OperationNameMap.put(name, this);
 -		      this.children = children;
 -		}
 -	    
 -	    
 -	    
 -	    public ResourceOperationCode[] getChildren() {
 -        return children;
++  
++  private boolean isPostOperation=false;
++  private Object opResult = null;
++  
++  public static class ResourceOperationCode {
++    
++    private static final int OP_ALTER_REGION = 1;
++    private static final int OP_ALTER_RUNTIME = 2;
++    private static final int OP_BACKUP_DISKSTORE = 3;
++    private static final int OP_CHANGE_ALERT_LEVEL = 4;
++    private static final int OP_CLOSE_DURABLE_CLIENT = 5;
++    private static final int OP_CLOSE_DURABLE_CQ = 6;
++    private static final int OP_COMPACT_DISKSTORE = 7;
++    private static final int OP_CONFIGURE_PDX = 8;
++    private static final int OP_CREATE_AEQ = 9;
++    private static final int OP_CREATE_DISKSTORE = 10;
++    private static final int OP_CREATE_GW_RECEIVER = 11;
++    private static final int OP_CREATE_GW_SENDER = 12;
++    private static final int OP_CREATE_INDEX = 13;
++    private static final int OP_CREATE_REGION = 14;
++    private static final int OP_DEPLOY = 15;
++    private static final int OP_DESTROY_DISKSTORE = 16;
++    private static final int OP_DESTROY_FUNCTION = 17;
++    private static final int OP_DESTROY_INDEX = 18;
++    private static final int OP_DESTROY_REGION = 19;
++    private static final int OP_EXECUTE_FUNCTION = 20;
++    private static final int OP_EXPORT_CONFIG = 21;
++    private static final int OP_EXPORT_DATA = 22;
++    private static final int OP_EXPORT_LOGS = 23;
++    private static final int OP_EXPORT_OFFLINE_DISKSTORE = 24;
++    private static final int OP_EXPORT_STACKTRACE = 25;
++    private static final int OP_GC = 26;
++    private static final int OP_GET = 27;
++    private static final int OP_IMPORT_CONFIG = 28;
++    private static final int OP_IMPORT_DATA = 29;
++    private static final int OP_LIST_DS = 30;
++    private static final int OP_LOAD_BALANCE_GW_SENDER = 31;
++    private static final int OP_LOCATE_ENTRY = 32;
++    private static final int OP_NETSTAT = 33;
++    private static final int OP_PAUSE_GW_SENDER = 34;
++    private static final int OP_PUT = 35;
++    private static final int OP_QUERY = 36;
++    private static final int OP_REBALANCE = 37;
++    private static final int OP_REMOVE = 38;
++    private static final int OP_RENAME_PDX = 39;
++    private static final int OP_RESUME_GW_SENDER = 40;
++    private static final int OP_REVOKE_MISSING_DISKSTORE = 41;
++    private static final int OP_SHOW_DEADLOCKS = 42;
++    private static final int OP_SHOW_LOG = 43;
++    private static final int OP_SHOW_METRICS = 44;
++    private static final int OP_SHOW_MISSING_DISKSTORES = 45;
++    private static final int OP_SHOW_SUBSCRIPTION_QUEUE_SIZE = 46;
++    private static final int OP_SHUTDOWN = 47;
++    private static final int OP_STOP_GW_RECEIVER = 48;
++    private static final int OP_STOP_GW_SENDER = 49;
++    private static final int OP_UNDEPLOY = 50;
++    private static final int OP_BACKUP_MEMBERS = 51;
++    private static final int OP_ROLL_DISKSTORE = 52;
++    private static final int OP_FORCE_COMPACTION = 53;
++    private static final int OP_FORCE_ROLL = 54;
++    private static final int OP_FLUSH_DISKSTORE = 55;
++    private static final int OP_START_GW_RECEIVER = 56;
++    private static final int OP_START_GW_SENDER = 57;
++    private static final int OP_BECOME_LOCK_GRANTOR = 58;
++    private static final int OP_START_MANAGER = 59;
++    private static final int OP_STOP_MANAGER = 60;
++    private static final int OP_CREATE_MANAGER = 61;
++    private static final int OP_STOP_CONTINUOUS_QUERY = 62;
++    private static final int OP_SET_DISK_USAGE = 63;
++    private static final int OP_CREATE_HDFS_STORE = 64;
++    private static final int OP_ALTER_HDFS_STORE = 65;
++    private static final int OP_DESTROY_HDFS_STORE = 66;
++
++    private static final int OP_PULSE_DASHBOARD = 92;
++    private static final int OP_PULSE_DATABROWSER = 93;
++    private static final int OP_PULSE_WEBGFSH = 94;
++    private static final int OP_PULSE_ADMIN_V1 = 95;
++    
++    private static final int OP_DATA_READ = 96;
++    private static final int OP_DATA_WRITE = 97;
++    private static final int OP_MONITOR = 98;
++    private static final int OP_ADMIN = 99;
++
++    private static final ResourceOperationCode[] VALUES = new ResourceOperationCode[100];
++    private static final Map<String, ResourceOperationCode> OperationNameMap = new HashMap<String, ResourceOperationCode>();
++      
++    
++    public static final ResourceOperationCode ALTER_REGION  = new ResourceOperationCode(ResourceConstants.ALTER_REGION, OP_ALTER_REGION);
++    public static final ResourceOperationCode ALTER_RUNTIME = new ResourceOperationCode(ResourceConstants.ALTER_RUNTIME, OP_ALTER_RUNTIME);
++    public static final ResourceOperationCode BACKUP_DISKSTORE = new ResourceOperationCode(ResourceConstants.BACKUP_DISKSTORE, OP_BACKUP_DISKSTORE);
++    public static final ResourceOperationCode CHANGE_ALERT_LEVEL = new ResourceOperationCode(ResourceConstants.CHANGE_ALERT_LEVEL, OP_CHANGE_ALERT_LEVEL);
++    public static final ResourceOperationCode CLOSE_DURABLE_CLIENT = new ResourceOperationCode(ResourceConstants.CLOSE_DURABLE_CLIENT, OP_CLOSE_DURABLE_CLIENT);
++    public static final ResourceOperationCode CLOSE_DURABLE_CQ = new ResourceOperationCode(ResourceConstants.CLOSE_DURABLE_CQ, OP_CLOSE_DURABLE_CQ);
++    public static final ResourceOperationCode COMPACT_DISKSTORE = new ResourceOperationCode(ResourceConstants.COMPACT_DISKSTORE, OP_COMPACT_DISKSTORE);
++    public static final ResourceOperationCode CONFIGURE_PDX = new ResourceOperationCode(ResourceConstants.CONFIGURE_PDX, OP_CONFIGURE_PDX);
++    public static final ResourceOperationCode CREATE_AEQ = new ResourceOperationCode(ResourceConstants.CREATE_AEQ, OP_CREATE_AEQ);
++    public static final ResourceOperationCode CREATE_DISKSTORE = new ResourceOperationCode(ResourceConstants.CREATE_DISKSTORE, OP_CREATE_DISKSTORE);
++    public static final ResourceOperationCode CREATE_GW_RECEIVER = new ResourceOperationCode(ResourceConstants.CREATE_GW_RECEIVER, OP_CREATE_GW_RECEIVER);
++    public static final ResourceOperationCode CREATE_GW_SENDER = new ResourceOperationCode(ResourceConstants.CREATE_GW_SENDER, OP_CREATE_GW_SENDER);
++    public static final ResourceOperationCode CREATE_INDEX = new ResourceOperationCode(ResourceConstants.CREATE_INDEX, OP_CREATE_INDEX);
++    public static final ResourceOperationCode CREATE_REGION = new ResourceOperationCode(ResourceConstants.CREATE_REGION, OP_CREATE_REGION);
++    public static final ResourceOperationCode DEPLOY = new ResourceOperationCode(ResourceConstants.DEPLOY, OP_DEPLOY);
++    public static final ResourceOperationCode DESTROY_DISKSTORE = new ResourceOperationCode(ResourceConstants.DESTROY_DISKSTORE, OP_DESTROY_DISKSTORE);
++    public static final ResourceOperationCode DESTROY_FUNCTION = new ResourceOperationCode(ResourceConstants.DESTROY_FUNCTION, OP_DESTROY_FUNCTION);
++    public static final ResourceOperationCode DESTROY_INDEX = new ResourceOperationCode(ResourceConstants.DESTROY_INDEX, OP_DESTROY_INDEX);
++    public static final ResourceOperationCode DESTROY_REGION = new ResourceOperationCode(ResourceConstants.DESTROY_REGION, OP_DESTROY_REGION);
++    public static final ResourceOperationCode EXECUTE_FUNCTION = new ResourceOperationCode(ResourceConstants.EXECUTE_FUNCTION, OP_EXECUTE_FUNCTION);
++    public static final ResourceOperationCode EXPORT_CONFIG = new ResourceOperationCode(ResourceConstants.EXPORT_CONFIG, OP_EXPORT_CONFIG);
++    public static final ResourceOperationCode EXPORT_DATA = new ResourceOperationCode(ResourceConstants.EXPORT_DATA, OP_EXPORT_DATA);
++    public static final ResourceOperationCode EXPORT_LOGS = new ResourceOperationCode(ResourceConstants.EXPORT_LOGS, OP_EXPORT_LOGS);
++    public static final ResourceOperationCode EXPORT_OFFLINE_DISKSTORE = new ResourceOperationCode(ResourceConstants.EXPORT_OFFLINE_DISKSTORE, OP_EXPORT_OFFLINE_DISKSTORE);
++    public static final ResourceOperationCode EXPORT_STACKTRACE = new ResourceOperationCode(ResourceConstants.EXPORT_STACKTRACE, OP_EXPORT_STACKTRACE);
++    public static final ResourceOperationCode GC = new ResourceOperationCode(ResourceConstants.GC, OP_GC);
++    public static final ResourceOperationCode GET = new ResourceOperationCode(ResourceConstants.GET, OP_GET);
++    public static final ResourceOperationCode IMPORT_CONFIG = new ResourceOperationCode(ResourceConstants.IMPORT_CONFIG, OP_IMPORT_CONFIG);
++    public static final ResourceOperationCode IMPORT_DATA = new ResourceOperationCode(ResourceConstants.IMPORT_DATA, OP_IMPORT_DATA);
++    public static final ResourceOperationCode LIST_DS = new ResourceOperationCode(ResourceConstants.LIST_DS, OP_LIST_DS);
++    public static final ResourceOperationCode LOAD_BALANCE_GW_SENDER = new ResourceOperationCode(ResourceConstants.LOAD_BALANCE_GW_SENDER, OP_LOAD_BALANCE_GW_SENDER);
++    public static final ResourceOperationCode LOCATE_ENTRY = new ResourceOperationCode(ResourceConstants.LOCATE_ENTRY, OP_LOCATE_ENTRY);
++    public static final ResourceOperationCode NETSTAT = new ResourceOperationCode(ResourceConstants.NETSTAT, OP_NETSTAT);
++    public static final ResourceOperationCode PAUSE_GW_SENDER = new ResourceOperationCode(ResourceConstants.PAUSE_GW_SENDER, OP_PAUSE_GW_SENDER);
++    public static final ResourceOperationCode PUT = new ResourceOperationCode(ResourceConstants.PUT, OP_PUT);
++    public static final ResourceOperationCode QUERY = new ResourceOperationCode(ResourceConstants.QUERY, OP_QUERY);
++    public static final ResourceOperationCode REBALANCE = new ResourceOperationCode(ResourceConstants.REBALANCE, OP_REBALANCE);
++    public static final ResourceOperationCode REMOVE = new ResourceOperationCode(ResourceConstants.REMOVE, OP_REMOVE);
++    public static final ResourceOperationCode RENAME_PDX = new ResourceOperationCode(ResourceConstants.RENAME_PDX, OP_RENAME_PDX);
++    public static final ResourceOperationCode RESUME_GW_SENDER = new ResourceOperationCode(ResourceConstants.RESUME_GW_SENDER, OP_RESUME_GW_SENDER);
++    public static final ResourceOperationCode REVOKE_MISSING_DISKSTORE = new ResourceOperationCode(ResourceConstants.REVOKE_MISSING_DISKSTORE, OP_REVOKE_MISSING_DISKSTORE);
++    public static final ResourceOperationCode SHOW_DEADLOCKS = new ResourceOperationCode(ResourceConstants.SHOW_DEADLOCKS, OP_SHOW_DEADLOCKS);
++    public static final ResourceOperationCode SHOW_LOG = new ResourceOperationCode(ResourceConstants.SHOW_LOG, OP_SHOW_LOG);
++    public static final ResourceOperationCode SHOW_METRICS = new ResourceOperationCode(ResourceConstants.SHOW_METRICS, OP_SHOW_METRICS);
++    public static final ResourceOperationCode SHOW_MISSING_DISKSTORES = new ResourceOperationCode(ResourceConstants.SHOW_MISSING_DISKSTORES, OP_SHOW_MISSING_DISKSTORES);
++    public static final ResourceOperationCode SHOW_SUBSCRIPTION_QUEUE_SIZE = new ResourceOperationCode(ResourceConstants.SHOW_SUBSCRIPTION_QUEUE_SIZE, OP_SHOW_SUBSCRIPTION_QUEUE_SIZE);
++    public static final ResourceOperationCode SHUTDOWN = new ResourceOperationCode(ResourceConstants.SHUTDOWN, OP_SHUTDOWN);
++    public static final ResourceOperationCode STOP_GW_RECEIVER = new ResourceOperationCode(ResourceConstants.STOP_GW_RECEIVER, OP_STOP_GW_RECEIVER);
++    public static final ResourceOperationCode STOP_GW_SENDER = new ResourceOperationCode(ResourceConstants.STOP_GW_SENDER, OP_STOP_GW_SENDER);
++    public static final ResourceOperationCode UNDEPLOY = new ResourceOperationCode(ResourceConstants.UNDEPLOY, OP_UNDEPLOY);
++    public static final ResourceOperationCode BACKUP_MEMBERS = new ResourceOperationCode(ResourceConstants.BACKUP_MEMBERS, OP_BACKUP_MEMBERS);
++    public static final ResourceOperationCode ROLL_DISKSTORE = new ResourceOperationCode(ResourceConstants.ROLL_DISKSTORE, OP_ROLL_DISKSTORE);
++    public static final ResourceOperationCode FORCE_COMPACTION = new ResourceOperationCode(ResourceConstants.FORCE_COMPACTION, OP_FORCE_COMPACTION);
++    public static final ResourceOperationCode FORCE_ROLL = new ResourceOperationCode(ResourceConstants.FORCE_ROLL, OP_FORCE_ROLL);
++    public static final ResourceOperationCode FLUSH_DISKSTORE = new ResourceOperationCode(ResourceConstants.FLUSH_DISKSTORE, OP_FLUSH_DISKSTORE);
++    public static final ResourceOperationCode START_GW_RECEIVER = new ResourceOperationCode(ResourceConstants.START_GW_RECEIVER, OP_START_GW_RECEIVER);
++    public static final ResourceOperationCode START_GW_SENDER = new ResourceOperationCode(ResourceConstants.START_GW_SENDER, OP_START_GW_SENDER);
++    public static final ResourceOperationCode BECOME_LOCK_GRANTOR = new ResourceOperationCode(ResourceConstants.BECOME_LOCK_GRANTOR, OP_BECOME_LOCK_GRANTOR);
++    public static final ResourceOperationCode START_MANAGER = new ResourceOperationCode(ResourceConstants.START_MANAGER, OP_START_MANAGER);
++    public static final ResourceOperationCode STOP_MANAGER = new ResourceOperationCode(ResourceConstants.STOP_MANAGER, OP_STOP_MANAGER);
++    public static final ResourceOperationCode CREATE_MANAGER = new ResourceOperationCode(ResourceConstants.CREATE_MANAGER, OP_CREATE_MANAGER);
++    public static final ResourceOperationCode STOP_CONTINUOUS_QUERY = new ResourceOperationCode(ResourceConstants.STOP_CONTINUOUS_QUERY, OP_STOP_CONTINUOUS_QUERY);
++    public static final ResourceOperationCode SET_DISK_USAGE = new ResourceOperationCode(ResourceConstants.SET_DISK_USAGE, OP_SET_DISK_USAGE);
++    public static final ResourceOperationCode CREATE_HDFS_STORE = new ResourceOperationCode(ResourceConstants.CREATE_HDFS_STORE, OP_CREATE_HDFS_STORE);
++    public static final ResourceOperationCode ALTER_HDFS_STORE = new ResourceOperationCode(ResourceConstants.ALTER_HDFS_STORE, OP_ALTER_HDFS_STORE);
++    public static final ResourceOperationCode DESTROY_HDFS_STORE = new ResourceOperationCode(ResourceConstants.DESTROY_HDFS_STORE, OP_DESTROY_HDFS_STORE);
++    
++
++    public static final ResourceOperationCode PULSE_DASHBOARD = new ResourceOperationCode(
++        ResourceConstants.PULSE_DASHBOARD, OP_PULSE_DASHBOARD);
++    public static final ResourceOperationCode PULSE_DATABROWSER = new ResourceOperationCode(
++        ResourceConstants.PULSE_DATABROWSER, OP_PULSE_DATABROWSER);
++    public static final ResourceOperationCode PULSE_WEBGFSH = new ResourceOperationCode(
++        ResourceConstants.PULSE_WEBGFSH, OP_PULSE_WEBGFSH);
++    public static final ResourceOperationCode PULSE_ADMIN_V1 = new ResourceOperationCode(
++        ResourceConstants.PULSE_ADMIN_V1, OP_PULSE_ADMIN_V1);
++      
++    public static final ResourceOperationCode DATA_READ = new ResourceOperationCode(ResourceConstants.DATA_READ, 
++        OP_DATA_READ,
++        new ResourceOperationCode[]{ 
++          LIST_DS, 
++          PULSE_DASHBOARD
++    });
++    
++    public static final ResourceOperationCode DATA_WRITE = new ResourceOperationCode(ResourceConstants.DATA_WRITE,
++        OP_DATA_WRITE,
++        new ResourceOperationCode[]{ 
++          DATA_READ, 
++          QUERY, 
++          BECOME_LOCK_GRANTOR, 
++          PUT, 
++          REMOVE, 
++          EXECUTE_FUNCTION, 
++          PULSE_DATABROWSER
++    });
++    
++    public static final ResourceOperationCode MONITOR = new ResourceOperationCode(ResourceConstants.MONITOR,
++        OP_MONITOR,
++        new ResourceOperationCode[] {
++          DATA_READ, 
++          EXPORT_CONFIG,
++          EXPORT_DATA,
++          EXPORT_LOGS,
++          EXPORT_OFFLINE_DISKSTORE,
++          EXPORT_STACKTRACE,
++          SHOW_DEADLOCKS,
++          SHOW_LOG,
++          SHOW_METRICS,
++          SHOW_MISSING_DISKSTORES,
++          SHOW_SUBSCRIPTION_QUEUE_SIZE       
++    });
++    
++    public static final ResourceOperationCode ADMIN = new ResourceOperationCode(ResourceConstants.ADMIN,
++        OP_ADMIN,
++        new ResourceOperationCode[] {
++          DATA_WRITE,
++          MONITOR,
++          ALTER_REGION,
++          ALTER_RUNTIME,
++          BACKUP_DISKSTORE,
++          CHANGE_ALERT_LEVEL,
++          CLOSE_DURABLE_CLIENT,
++          CLOSE_DURABLE_CQ,
++          COMPACT_DISKSTORE,
++          CONFIGURE_PDX,
++          CREATE_AEQ,
++          CREATE_DISKSTORE,
++          CREATE_GW_RECEIVER,
++          CREATE_GW_SENDER,
++          CREATE_INDEX,
++          CREATE_REGION,
++          DEPLOY,
++          DESTROY_DISKSTORE,
++          DESTROY_FUNCTION,
++          DESTROY_INDEX,
++          DESTROY_REGION,
++          GC,
++          GET,
++          IMPORT_CONFIG,
++          IMPORT_DATA,
++          LIST_DS,
++          LOAD_BALANCE_GW_SENDER,
++          LOCATE_ENTRY,
++          NETSTAT,
++          PAUSE_GW_SENDER,
++          REBALANCE,
++          RENAME_PDX,
++          RESUME_GW_SENDER,
++          REVOKE_MISSING_DISKSTORE,
++          SHUTDOWN,
++          STOP_GW_RECEIVER,
++          STOP_GW_SENDER,
++          UNDEPLOY,
++          BACKUP_MEMBERS,
++          ROLL_DISKSTORE,
++          FORCE_COMPACTION,
++          FORCE_ROLL,
++          FLUSH_DISKSTORE,
++          START_GW_RECEIVER,
++          START_GW_SENDER,
++          START_MANAGER,
++          STOP_MANAGER,
++          CREATE_MANAGER,
++          STOP_CONTINUOUS_QUERY,
++          SET_DISK_USAGE,
++          PULSE_WEBGFSH,
++          PULSE_ADMIN_V1
++    });
++    
++      
++    private final String name;
++    private final int opCode;
++    private final List<ResourceOperationCode> children;    
++
++    private ResourceOperationCode(String name, int opCode) {
++      this.name = name;
++      this.opCode = opCode;
++      VALUES[opCode] = this;
++      OperationNameMap.put(name, this);
++      this.children = null;
++    }
++
++    private ResourceOperationCode(String name, int opCode, ResourceOperationCode[] children) {
++      this.name = name;
++      this.opCode = opCode;
++      VALUES[opCode] = this;
++      OperationNameMap.put(name, this);      
++      this.children = new ArrayList<ResourceOperationCode>();
++      for(ResourceOperationCode code : children) {
++        this.children.add(code);
++      }
++    }
++      
++    public List<ResourceOperationCode> getChildren() {
++      return Collections.unmodifiableList(children);
++    }
++    
++    public void addChild(ResourceOperationCode code) {
++      this.children.add(code);
++    }
++
++    /**
++     * Returns the <code>OperationCode</code> represented by specified int.
++     */
++    public static ResourceOperationCode fromOrdinal(int opCode) {
++      return VALUES[opCode];
++    }
++
++    /**
++     * Returns the <code>OperationCode</code> represented by specified string.
++     */
++    public static ResourceOperationCode parse(String operationName) {
++      return OperationNameMap.get(operationName);
++    }
++
++    /**
++     * Returns the int representing this operation code.
++     * 
++     * @return a int representing this operation.
++     */
++    public int toOrdinal() {
++      return this.opCode;
++    }
++
++    /**
++     * Returns a string representation for this operation.
++     * 
++     * @return the name of this operation.
++     */
++    @Override
++    final public String toString() {
++      return this.name;
++    }
++
++    /**
++     * Indicates whether other object is same as this one.
++     * 
++     * @return true if other object is same as this one.
++     */
++    @Override
++    final public boolean equals(final Object obj) {
++      if (obj == this) {
++        return true;
+       }
++      if (!(obj instanceof ResourceOperationCode)) {
++        return false;
++      }
++      final ResourceOperationCode other = (ResourceOperationCode) obj;
++      return (other.opCode == this.opCode);
++    }
++
++    /**
++     * Indicates whether other <code>OperationCode</code> is same as this one.
++     * 
++     * @return true if other <code>OperationCode</code> is same as this one.
++     */
++    final public boolean equals(final ResourceOperationCode opCode) {
++      return (opCode != null && opCode.opCode == this.opCode);
++    }
++
++    /**
++     * Returns a hash code value for this <code>OperationCode</code> which is
++     * the same as the int representing its operation type.
++     * 
++     * @return the hashCode of this operation.
++     */
++    @Override
++    final public int hashCode() {
++      return this.opCode;
++    }
++    
++    /**
++     * Returns true if passed operation is same or any one of its
++     * children
++     * 
++     * @param op
++     * @return true if  <code>OperationCode</code> matches 
++     */
++    public boolean allowedOp(ResourceOperationCode op) {
++      if(this.equals(op))
++        return true;
++      else {
++        if(children!=null) {
++          for(ResourceOperationCode child : children) {
++            if(child.allowedOp(op))
++              return true;
++          }
++        }
++      }
++      return false;
++    }
++  }
++
++  public abstract ResourceOperationCode getResourceOperationCode();
++   
++  @Override
++  public boolean isClientUpdate() {
++    return false;
++  }
++  
++  @Override
++  public boolean isPostOperation() {
++    return isPostOperation;
++  }
++
++  public void setPostOperationResult(Object result) {
++    this.isPostOperation = true;
++    this.opResult = result;
++  }
++  
++  public Object getOperationResult() {
++    return this.opResult;
++  }
+ 
 -      /**
 -	     * Returns the <code>OperationCode</code> represented by specified byte.
 -	     */
 -	    public static ResourceOperationCode fromOrdinal(byte opCode) {
 -	      return VALUES[opCode];
 -	    }
 -
 -	    /**
 -	     * Returns the <code>OperationCode</code> represented by specified string.
 -	     */
 -	    public static ResourceOperationCode parse(String operationName) {
 -	      return (ResourceOperationCode)OperationNameMap.get(operationName);
 -	    }
 -
 -	    /**
 -	     * Returns the byte representing this operation code.
 -	     * 
 -	     * @return a byte representing this operation.
 -	     */
 -	    public byte toOrdinal() {
 -	      return this.opCode;
 -	    }
 -
 -	    /**
 -	     * Returns a string representation for this operation.
 -	     * 
 -	     * @return the name of this operation.
 -	     */
 -	    @Override
 -	    final public String toString() {
 -	      return this.name;
 -	    }
 -
 -	    /**
 -	     * Indicates whether other object is same as this one.
 -	     * 
 -	     * @return true if other object is same as this one.
 -	     */
 -	    @Override
 -	    final public boolean equals(final Object obj) {
 -	      if (obj == this) {
 -	        return true;
 -	      }
 -	      if (!(obj instanceof ResourceOperationCode)) {
 -	        return false;
 -	      }
 -	      final ResourceOperationCode other = (ResourceOperationCode)obj;
 -	      return (other.opCode == this.opCode);
 -	    }
 -
 -	    /**
 -	     * Indicates whether other <code>OperationCode</code> is same as this one.
 -	     * 
 -	     * @return true if other <code>OperationCode</code> is same as this one.
 -	     */
 -	    final public boolean equals(final ResourceOperationCode opCode) {
 -	      return (opCode != null && opCode.opCode == this.opCode);
 -	    }
 -
 -	    /**
 -	     * Returns a hash code value for this <code>OperationCode</code> which is
 -	     * the same as the byte representing its operation type.
 -	     * 
 -	     * @return the hashCode of this operation.
 -	     */
 -	    @Override
 -	    final public int hashCode() {
 -	      return this.opCode;
 -	    }
 -
 -	    
 -	 }
 -	
 -
 -	 public abstract ResourceOperationCode getResourceOperationCode();
 -	 
 -	 /*
 -	@Override
 -	public OperationCode getOperationCode() {
 -		// TODO Auto-generated method stub
 -		return null;
 -	}*/
 -
 -	@Override
 -	public boolean isPostOperation() {
 -		return false;
 -	}
 -
 -}
++}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
index 0000000,41a890a..47c6b17
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
@@@ -1,0 -1,618 +1,711 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.management.internal.web.controllers;
+ 
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.ACCESS_DENIED_MESSAGE;
++
+ import java.io.PrintWriter;
+ import java.io.StringWriter;
+ import java.lang.management.ManagementFactory;
+ import java.net.URI;
++import java.security.Principal;
+ import java.util.Collection;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
++import java.util.Properties;
+ import java.util.Set;
++
+ import javax.management.JMX;
+ import javax.management.MBeanServer;
+ import javax.management.MalformedObjectNameException;
+ import javax.management.ObjectName;
+ import javax.management.Query;
+ import javax.management.QueryExp;
++import javax.management.remote.JMXPrincipal;
++import javax.security.auth.Subject;
+ 
++import com.gemstone.gemfire.GemFireConfigException;
++import com.gemstone.gemfire.cache.CacheFactory;
++import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.internal.logging.log4j.LogMarker;
+ import com.gemstone.gemfire.internal.util.ArrayUtils;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
++import com.gemstone.gemfire.management.ManagementService;
+ import com.gemstone.gemfire.management.MemberMXBean;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.ManagementConstants;
++import com.gemstone.gemfire.management.internal.SystemManagementService;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
++import com.gemstone.gemfire.management.internal.security.CLIOperationContext;
++import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperationContext;
+ import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
+ import com.gemstone.gemfire.management.internal.web.controllers.support.MemberMXBeanAdapter;
+ import com.gemstone.gemfire.management.internal.web.util.UriUtils;
++import com.gemstone.gemfire.security.AccessControl;
++import com.gemstone.gemfire.security.Authenticator;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.springframework.beans.propertyeditors.StringArrayPropertyEditor;
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.web.bind.WebDataBinder;
+ import org.springframework.web.bind.annotation.ExceptionHandler;
+ import org.springframework.web.bind.annotation.InitBinder;
+ import org.springframework.web.bind.annotation.ResponseBody;
++import org.springframework.web.bind.annotation.ResponseStatus;
+ import org.springframework.web.context.request.WebRequest;
+ import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
+ import org.springframework.web.util.UriComponentsBuilder;
+ 
+ /**
+  * The AbstractCommandsController class is the abstract base class encapsulating common functionality across all
+  * Management Controller classes that expose REST API web service endpoints (URLs/URIs) for GemFire shell (Gfsh)
+  * commands.
+  * 
+  * @author John Blum
+  * @see com.gemstone.gemfire.management.MemberMXBean
+  * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+  * @see org.springframework.stereotype.Controller
+  * @see org.springframework.web.bind.annotation.ExceptionHandler
+  * @see org.springframework.web.bind.annotation.InitBinder
+  * @since 8.0
+  */
+ @SuppressWarnings("unused")
+ public abstract class AbstractCommandsController {
+ 
+   private static final Logger logger = LogService.getLogger();
+   
+   protected static final String DEFAULT_ENCODING = UriUtils.DEFAULT_ENCODING;
+   protected static final String REST_API_VERSION = "/v1";
+ 
+   private MemberMXBean managingMemberMXBeanProxy;
++  
++
++  
++  private Class accessControlKlass;
++  
++  private GemFireCacheImpl cache;
++  
++  // Convert a predefined exception to an HTTP Status code
++  @ResponseStatus(value=HttpStatus.UNAUTHORIZED, reason="Not authenticated")  // 401
++  @ExceptionHandler(com.gemstone.gemfire.security.AuthenticationFailedException.class)
++  public void authenticate() {
++    
++  }
++  
++  // Convert a predefined exception to an HTTP Status code
++  @ResponseStatus(value=HttpStatus.FORBIDDEN, reason="Access Denied")  // 403
++  @ExceptionHandler(java.lang.SecurityException.class)
++  public void authorize() {
++   
++  }
++  
+ 
+   /**
+    * Asserts the argument is valid, as determined by the caller passing the result of an evaluated expression to this
+    * assertion.
+    * 
+    * @param validArg a boolean value indicating the evaluation of the expression validating the argument.
+    * @param message a String value used as the message when constructing an IllegalArgumentException.
+    * @param args Object arguments used to populate placeholder's in the message.
+    * @throws IllegalArgumentException if the argument is not valid.
+    * @see java.lang.String#format(String, Object...)
+    */
+   protected static void assertArgument(final boolean validArg, final String message, final Object... args) {
+     if (!validArg) {
+       throw new IllegalArgumentException(String.format(message, args));
+     }
+   }
+ 
+   /**
+    * Asserts the Object reference is not null!
+    * 
+    * @param obj the reference to the Object.
+    * @param message the String value used as the message when constructing and throwing a NullPointerException.
+    * @param args Object arguments used to populate placeholder's in the message.
+    * @throws NullPointerException if the Object reference is null.
+    * @see java.lang.String#format(String, Object...)
+    */
+   protected static void assertNotNull(final Object obj, final String message, final Object... args) {
+     if (obj == null) {
+       throw new NullPointerException(String.format(message, args));
+     }
+   }
+ 
+   /**
+    * Asserts whether state, based on the evaluation of a conditional expression, passed to this assertion is valid.
+    * 
+    * @param validState a boolean value indicating the evaluation of the expression from which the conditional state
+    * is based.  For example, a caller might use an expression of the form (initableObj.isInitialized()).
+    * @param message a String values used as the message when constructing an IllegalStateException.
+    * @param args Object arguments used to populate placeholder's in the message.
+    * @throws IllegalStateException if the conditional state is not valid.
+    * @see java.lang.String#format(String, Object...)
+    */
+   protected static void assertState(final boolean validState, final String message, final Object... args) {
+     if (!validState) {
+       throw new IllegalStateException(String.format(message, args));
+     }
+   }
+ 
+   /**
+    * Decodes the encoded String value using the default encoding UTF-8.  It is assumed the String value was encoded
+    * with the URLEncoder using the UTF-8 encoding.  This method handles UnsupportedEncodingException by just returning
+    * the encodedValue.
+    * 
+    * @param encodedValue the encoded String value to decode.
+    * @return the decoded value of the String or encodedValue if the UTF-8 encoding is unsupported.
+    * @see com.gemstone.gemfire.management.internal.web.util.UriUtils#decode(String)
+    */
+   protected static String decode(final String encodedValue) {
+     return UriUtils.decode(encodedValue);
+   }
+ 
+   /**
+    * Decodes the encoded String value using the specified encoding (such as UTF-8).  It is assumed the String value
+    * was encoded with the URLEncoder using the specified encoding.  This method handles UnsupportedEncodingException
+    * by just returning the encodedValue.
+    * 
+    * @param encodedValue a String value encoded in the encoding.
+    * @param encoding a String value specifying the encoding.
+    * @return the decoded value of the String or encodedValue if the specified encoding is unsupported.
+    * @see com.gemstone.gemfire.management.internal.web.util.UriUtils#decode(String, String)
+    */
+   protected static String decode(final String encodedValue, final String encoding) {
+     return UriUtils.decode(encodedValue, encoding);
+   }
+ 
+   /**
+    * Gets the specified value if not null or empty, otherwise returns the default value.
+    * 
+    * @param value the String value being evaluated for having value (not null and not empty).
+    * @param defaultValue the default String value returned if 'value' has no value.
+    * @return 'value' if not null or empty, otherwise returns the default value.
+    * @see #hasValue(String)
+    */
+   protected static String defaultIfNoValue(final String value, final String defaultValue) {
+     return (hasValue(value) ? value : defaultValue);
+   }
+ 
+   /**
+    * Encodes the String value using the default encoding UTF-8.
+    * 
+    * @param value the String value to encode.
+    * @return an encoded value of the String using the default encoding UTF-8 or value if the UTF-8 encoding
+    * is unsupported.
+    * @see com.gemstone.gemfire.management.internal.web.util.UriUtils#encode(String)
+    */
+   protected static String encode(final String value) {
+     return UriUtils.encode(value);
+   }
+ 
+   /**
+    * Encodes the String value using the specified encoding (such as UTF-8).
+    * 
+    * @param value the String value to encode.
+    * @param encoding a String value indicating the encoding.
+    * @return an encoded value of the String using the specified encoding or value if the specified encoding
+    * is unsupported.
+    * @see com.gemstone.gemfire.management.internal.web.util.UriUtils#encode(String, String)
+    */
+   protected static String encode(final String value, final String encoding) {
+     return UriUtils.encode(value, encoding);
+   }
+ 
+   /**
+    * Determines whether the specified Object has value, which is determined by a non-null Object reference.
+    * 
+    * @param value the Object value being evaluated for value.
+    * @return a boolean value indicating whether the specified Object has value.
+    * @see java.lang.Object
+    */
+   protected static boolean hasValue(final Object value) {
+     return (value instanceof String[] ? hasValue((String[]) value)
+       : (value instanceof String ? hasValue((String) value) : value != null));
+   }
+ 
+   /**
+    * Determines whether the specified String has value, determined by whether the String is non-null, not empty
+    * and not blank.
+    * 
+    * @param value the String being evaluated for value.
+    * @return a boolean indicating whether the specified String has value or not.
+    * @see java.lang.String
+    */
+   protected static boolean hasValue(final String value) {
+     return !StringUtils.isBlank(value);
+   }
+ 
+   /**
+    * Determines whether the specified String array has any value, which is determined by a non-null String array
+    * reference along with containing at least 1 non-null, not empty and not blank element.
+    * 
+    * @param array an String array being evaluated for value.
+    * @return a boolean indicating whether the specified String array has any value.
+    * @see #hasValue(String)
+    * @see java.lang.String
+    */
+   protected static boolean hasValue(final String[] array) {
+     if (array != null && array.length > 0) {
+       for (final String element : array) {
+         if (hasValue(element)) {
+           return true;
+         }
+       }
+     }
+ 
+     return false;
+   }
+ 
+   /**
+    * Writes the stack trace of the Throwable to a String.
+    * 
+    * @param t a Throwable object who's stack trace will be written to a String.
+    * @return a String containing the stack trace of the Throwable.
+    * @see java.io.StringWriter
+    * @see java.lang.Throwable#printStackTrace(java.io.PrintWriter)
+    */
+   protected static String printStackTrace(final Throwable t) {
+     final StringWriter stackTraceWriter = new StringWriter();
+     t.printStackTrace(new PrintWriter(stackTraceWriter));
+     return stackTraceWriter.toString();
+   }
+ 
+   /**
+    * Converts the URI relative path to an absolute path based on the Servlet context information.
+    * 
+    * @param path the URI relative path to append to the Servlet context path.
+    * @param scheme the scheme to use for the URI
+    * @return a URI constructed with all component path information.
+    * @see java.net.URI
+    * @see org.springframework.web.servlet.support.ServletUriComponentsBuilder
+    */
+   protected /*static*/ URI toUri(final String path, final String scheme) {
+     return ServletUriComponentsBuilder.fromCurrentContextPath()
+         .path(REST_API_VERSION).path(path).scheme(scheme).build().toUri();
+   }
+ 
+   /**
+    * Handles any Exception thrown by a REST API web service endpoint, HTTP request handler method during the invocation
+    * and processing of a command.
+    * 
+    * @param cause the Exception causing the error.
+    * @return a ResponseEntity with an appropriate HTTP status code (500 - Internal Server Error) and HTTP response body
+    * containing the stack trace of the Exception.
+    * @see java.lang.Exception
+    * @see org.springframework.http.ResponseEntity
+    * @see org.springframework.web.bind.annotation.ExceptionHandler
+    * @see org.springframework.web.bind.annotation.ResponseBody
+    */
+   @ExceptionHandler(Exception.class)
+   @ResponseBody
+   public ResponseEntity<String> handleException(final Exception cause) {
+     final String stackTrace = printStackTrace(cause);
+     logger.fatal(stackTrace);
+     return new ResponseEntity<String>(stackTrace, HttpStatus.INTERNAL_SERVER_ERROR);
+   }
+ 
+   /**
+    * Initializes data bindings for various HTTP request handler method parameter Java class types.
+    * 
+    * @param dataBinder the DataBinder implementation used for Web transactions.
+    * @see org.springframework.web.bind.WebDataBinder
+    * @see org.springframework.web.bind.annotation.InitBinder
+    */
+   @InitBinder
+   public void initBinder(final WebDataBinder dataBinder) {
+     dataBinder.registerCustomEditor(String[].class, new StringArrayPropertyEditor(
+       StringArrayPropertyEditor.DEFAULT_SEPARATOR, false));
+   }
+ 
+   /**
+    * Logs the client's HTTP (web) request including details of the HTTP headers and request parameters along with the
+    * web request context and description.
+    * 
+    * @param request the object encapsulating the details of the client's HTTP (web) request.
+    * @see org.springframework.web.context.request.WebRequest
+    */
+   protected void logRequest(final WebRequest request) {
+     if (request != null) {
+       final Map<String, String> headers = new HashMap<java.lang.String, java.lang.String>();
+ 
+       for (Iterator<String> it = request.getHeaderNames(); it.hasNext(); ) {
+         final String headerName = it.next();
+         headers.put(headerName, ArrayUtils.toString((Object[]) request.getHeaderValues(headerName)));
+       }
+ 
+       final Map<String, String> parameters = new HashMap<String, String>(request.getParameterMap().size());
+ 
+       for (Iterator<String> it = request.getParameterNames(); it.hasNext(); ) {
+         final String parameterName = it.next();
+         parameters.put(parameterName, ArrayUtils.toString((Object[]) request.getParameterValues(parameterName)));
+       }
+ 
+       logger.info("HTTP-request: description ({}), context ({}), headers ({}), parameters ({})",
+         request.getDescription(false), request.getContextPath(), headers, parameters);
+     }
+   }
+   
+   /**
+    * Gets a reference to the platform MBeanServer running in this JVM process.  The MBeanServer instance constitutes
+    * a connection to the MBeanServer.
+    * 
+    * @return a reference to the platform MBeanServer for this JVM process.
+    * @see java.lang.management.ManagementFactory#getPlatformMBeanServer()
+    * @see javax.management.MBeanServer
+    */
+   protected MBeanServer getMBeanServer() {
+     return ManagementFactory.getPlatformMBeanServer();
+   }
+ 
+   /**
+    * Gets the MemberMXBean from the JVM Platform MBeanServer for the specified member, identified by name or ID
+    * in the GemFire cluster.
+    * 
+    * @param memberNameId a String indicating the name or ID of the GemFire member.
+    * @return a proxy to the GemFire member's MemberMXBean.
+    * @throws IllegalStateException if no MemberMXBean could be found for GemFire member with ID or name.
+    * @throws RuntimeException wrapping the MalformedObjectNameException if the ObjectName pattern is malformed.
+    * @see #getMBeanServer()
+    * @see #isMemberMXBeanFound(java.util.Collection)
+    * @see javax.management.ObjectName
+    * @see javax.management.QueryExp
+    * @see javax.management.MBeanServer#queryNames(javax.management.ObjectName, javax.management.QueryExp)
+    * @see javax.management.JMX#newMXBeanProxy(javax.management.MBeanServerConnection, javax.management.ObjectName, Class)
+    * @see com.gemstone.gemfire.management.MemberMXBean
+    */
+   protected MemberMXBean getMemberMXBean(final String memberNameId) {
+     try {
+       final MBeanServer connection = getMBeanServer();
+ 
+       final String objectNamePattern = ManagementConstants.OBJECTNAME__PREFIX.concat("type=Member,*");
+ 
+       // NOTE throws a MalformedObjectNameException, but this should not happen since we constructed the ObjectName above
+       final ObjectName objectName = ObjectName.getInstance(objectNamePattern);
+ 
+       final QueryExp query = Query.or(
+         Query.eq(Query.attr("Name"), Query.value(memberNameId)),
+         Query.eq(Query.attr("Id"), Query.value(memberNameId))
+       );
+ 
+       final Set<ObjectName> objectNames = connection.queryNames(objectName, query);
+ 
+       assertState(isMemberMXBeanFound(objectNames),
+         "No MemberMXBean with ObjectName (%1$s) based on Query (%2$s) was found in the Platform MBeanServer for member (%3$s)!",
+           objectName, query, memberNameId);
+ 
+       return JMX.newMXBeanProxy(connection, objectNames.iterator().next(), MemberMXBean.class);
+     }
+     catch (MalformedObjectNameException e) {
+       throw new RuntimeException(e);
+     }
+   }
+ 
+   /**
+    * Determines whether the desired MemberMXBean, identified by name or ID, was found in the platform MBeanServer
+    * of this JVM process.
+    * 
+    * @param objectNames a Collection of ObjectNames possibly referring to the desired MemberMXBean.
+    * @return a boolean value indicating whether the desired MemberMXBean was found.
+    * @see javax.management.ObjectName
+    */
+   private boolean isMemberMXBeanFound(final Collection<ObjectName> objectNames) {
+     return !(objectNames == null || objectNames.isEmpty());
+   }
+ 
+   /**
+    * Lookup operation for the MemberMXBean representing the Manager in the GemFire cluster.  This method gets
+    * an instance fo the Platform MBeanServer for this JVM process and uses it to lookup the MemberMXBean for the
+    * GemFire Manager based on the ObjectName declared in the DistributedSystemMXBean.getManagerObjectName() operation.
+    * 
+    * @return a proxy instance to the MemberMXBean of the GemFire Manager.
+    * @see #getMBeanServer()
+    * @see #createMemberMXBeanForManagerUsingAdapter(javax.management.MBeanServer, javax.management.ObjectName)
+    * @see #createMemberMXBeanForManagerUsingProxy(javax.management.MBeanServer, javax.management.ObjectName)
+    * @see com.gemstone.gemfire.management.DistributedSystemMXBean
+    * @see com.gemstone.gemfire.management.MemberMXBean
+    */
+   protected synchronized MemberMXBean getManagingMemberMXBean() {
+     if (managingMemberMXBeanProxy == null) {
+       final MBeanServer platformMBeanServer = getMBeanServer();
+ 
+       final DistributedSystemMXBean distributedSystemMXBean = JMX.newMXBeanProxy(platformMBeanServer,
+         MBeanJMXAdapter.getDistributedSystemName(), DistributedSystemMXBean.class);
+ 
 -      //managingMemberMXBeanProxy = createMemberMXBeanForManagerUsingAdapter(platformMBeanServer,
 -      //  distributedSystemMXBean.getMemberObjectName());
++      /*managingMemberMXBeanProxy = createMemberMXBeanForManagerUsingAdapter(platformMBeanServer,
++      distributedSystemMXBean.getMemberObjectName());*/
+ 
+       managingMemberMXBeanProxy = createMemberMXBeanForManagerUsingProxy(platformMBeanServer,
+         distributedSystemMXBean.getMemberObjectName());
+     }
+ 
+     return managingMemberMXBeanProxy;
+   }
++  
++  protected synchronized ObjectName getMemberObjectName() {
++    final MBeanServer platformMBeanServer = getMBeanServer();
++
++    final DistributedSystemMXBean distributedSystemMXBean = JMX.newMXBeanProxy(platformMBeanServer,
++        MBeanJMXAdapter.getDistributedSystemName(), DistributedSystemMXBean.class);
++
++    return distributedSystemMXBean.getMemberObjectName();
++  }
+ 
+   /**
+    * Creates an Adapter using the Platform MBeanServer and ObjectName to invoke operations on the GemFire Manager's
+    * MemberMXBean.
+    * 
+    * @param server a reference to this JVM's Platform MBeanServer.
+    * @param managingMemberObjectName the ObjectName of the GemFire Manager's MemberMXBean registered in
+    * the Platform MBeanServer.
+    * @return an Adapter for invoking operations on the GemFire Manager's MemberMXBean.
+    * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController.MemberMXBeanProxy
+    * @see #createMemberMXBeanForManagerUsingProxy(javax.management.MBeanServer, javax.management.ObjectName)
+    */
+   private MemberMXBean createMemberMXBeanForManagerUsingAdapter(final MBeanServer server, final ObjectName managingMemberObjectName) {
+     return new MemberMXBeanProxy(server, managingMemberObjectName);
+   }
+ 
+   /**
+    * Creates a Proxy using the Platform MBeanServer and ObjectName in order to access attributes and invoke operations
+    * on the GemFire Manager's MemberMXBean.
+    * 
+    * @param server a reference to this JVM's Platform MBeanServer.
+    * @param managingMemberObjectName the ObjectName of the GemFire Manager's MemberMXBean registered in
+    * the Platform MBeanServer.
+    * @return a Proxy for accessing attributes and invoking operations on the GemFire Manager's MemberMXBean.
+    * @see #createMemberMXBeanForManagerUsingAdapter(javax.management.MBeanServer, javax.management.ObjectName)
+    * @see javax.management.JMX#newMXBeanProxy(javax.management.MBeanServerConnection, javax.management.ObjectName, Class)
+    */
+   private MemberMXBean createMemberMXBeanForManagerUsingProxy(final MBeanServer server, final ObjectName managingMemberObjectName) {
+     return JMX.newMXBeanProxy(server, managingMemberObjectName, MemberMXBean.class);
+   }
+ 
+   /**
+    * Gets the environment setup during this HTTP/command request for the current command process execution.
+    * 
+    * @return a mapping of environment variables to values.
+    * @see com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor#getEnvironment()
+    */
+   protected Map<String, String> getEnvironment() {
+     final Map<String, String> environment = new HashMap<String, String>();
 -
+     environment.putAll(EnvironmentVariablesHandlerInterceptor.getEnvironment());
+     environment.put(Gfsh.ENV_APP_NAME, Gfsh.GFSH_APP_NAME);
+ 
+     return environment;
+   }
+ 
+   /**
+    * Adds the named option to the command String to be processed if the named option has value or the named option is
+    * present in the HTTP request.
+    * 
+    * @param request the WebRequest object encapsulating the details (headers, request parameters and message body)
+    * of the user HTTP request.
+    * @param command the Gfsh command String to append options and process.
+    * @param optionName the name of the command option.
+    * @param optionValue the value for the named command option.
+    * @see #hasValue(Object)
+    * @see #hasValue(String[])
+    * @see com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder
+    * @see org.springframework.web.context.request.WebRequest
+    */
+   protected void addCommandOption(final WebRequest request,
+                                   final CommandStringBuilder command,
+                                   final String optionName,
+                                   final Object optionValue)
+   {
+     assertNotNull(command, "The command to append options to cannot be null!");
+     assertNotNull(optionName, "The name of the option to add to the command cannot be null!");
+ 
+     if (hasValue(optionValue)) {
+       final String optionValueString = (optionValue instanceof String[] ?
+         StringUtils.concat((String[]) optionValue, StringUtils.COMMA_DELIMITER) : String.valueOf(optionValue));
+       command.addOption(optionName, optionValueString);
+     }
+     else if (request != null && request.getParameterMap().containsKey(optionName)) {
+       command.addOption(optionName);
+     }
+     else {
+       // do nothing!
+     }
+   }
+ 
+   /**
+    * Executes the specified command as entered by the user using the GemFire Shell (Gfsh).  Note, Gfsh performs
+    * validation of the command during parsing before sending the command to the Manager for processing.
+    * 
+    * @param command a String value containing a valid command String as would be entered by the user in Gfsh.
+    * @return a result of the command execution as a String, typically marshalled in JSON to be serialized back to Gfsh.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    * @see com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor#getEnvironment()
+    * @see #getEnvironment()
+    * @see #processCommand(String, java.util.Map, byte[][])
+    */
+   protected String processCommand(final String command) {
+     return processCommand(command, getEnvironment(), null);
+   }
++  
++  protected String processCommandWithCredentials(final String command, Properties credentials) {
++    if (credentials != null) {
++      EnvironmentVariablesHandlerInterceptor.CREDENTIALS.set(credentials);
++    }
++    return processCommand(command, getEnvironment(), null);
++  }
+ 
+   /**
+    * Executes the specified command as entered by the user using the GemFire Shell (Gfsh).  Note, Gfsh performs
+    * validation of the command during parsing before sending the command to the Manager for processing.
+    * 
+    * @param command a String value containing a valid command String as would be entered by the user in Gfsh.
+    * @param fileData is a two-dimensional byte array containing the pathnames and contents of file data streamed to
+    * the Manager, usually for the 'deploy' Gfsh command.
+    * @return a result of the command execution as a String, typically marshalled in JSON to be serialized back to Gfsh.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    * @see com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor#getEnvironment()
+    * @see #getEnvironment()
+    * @see #processCommand(String, java.util.Map, byte[][])
+    */
+   protected String processCommand(final String command, final byte[][] fileData) {
+     return processCommand(command, getEnvironment(), fileData);
+   }
++  
++  protected String processCommandWithCredentials(final String command, final byte[][] fileData, Properties credentials) {
++    if (credentials != null) {
++      EnvironmentVariablesHandlerInterceptor.CREDENTIALS.set(credentials);
++    }
++    return processCommand(command, getEnvironment(), fileData);
++  }
+ 
+   /**
+    * Executes the specified command as entered by the user using the GemFire Shell (Gfsh).  Note, Gfsh performs
+    * validation of the command during parsing before sending the command to the Manager for processing.
+    * 
+    * @param command a String value containing a valid command String as would be entered by the user in Gfsh.
+    * @param environment a Map containing any environment configuration settings to be used by the Manager during
+    * command execution.  For example, when executing commands originating from Gfsh, the key/value pair (APP_NAME=gfsh)
+    * is a specified mapping in the "environment.  Note, it is common for the REST API to act as a bridge, or an adapter
+    * between Gfsh and the Manager, and thus need to specify this key/value pair mapping.
+    * @return a result of the command execution as a String, typically marshalled in JSON to be serialized back to Gfsh.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    * @see com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor#getEnvironment()
+    * @see #processCommand(String, java.util.Map, byte[][])
+    */
+   protected String processCommand(final String command, final Map<String, String> environment) {
+     return processCommand(command, environment, null);
+   }
+ 
+   /**
+    * Executes the specified command as entered by the user using the GemFire Shell (Gfsh).  Note, Gfsh performs
+    * validation of the command during parsing before sending the command to the Manager for processing.
+    * 
+    * @param command a String value containing a valid command String as would be entered by the user in Gfsh.
+    * @param environment a Map containing any environment configuration settings to be used by the Manager during
+    * command execution.  For example, when executing commands originating from Gfsh, the key/value pair (APP_NAME=gfsh)
+    * is a specified mapping in the "environment.  Note, it is common for the REST API to act as a bridge, or an adapter
+    * between Gfsh and the Manager, and thus need to specify this key/value pair mapping.
+    * @param fileData is a two-dimensional byte array containing the pathnames and contents of file data streamed to
+    * the Manager, usually for the 'deploy' Gfsh command.
+    * @return a result of the command execution as a String, typically marshalled in JSON to be serialized back to Gfsh.
+    * @see com.gemstone.gemfire.management.MemberMXBean#processCommand(String, java.util.Map, Byte[][])
+    */
+   protected String processCommand(final String command, final Map<String, String> environment, final byte[][] fileData) {
 -    logger.info(LogMarker.CONFIG, "Processing Command ({}) with Environment ({}) having File Data ({})...",
 -        command, environment, (fileData != null));
++    logger.info(LogMarker.CONFIG, "Processing Command ({}) with Environment ({}) having File Data ({})...", command,
++        environment, (fileData != null));
++
++    ResourceOperationContext ctx = authorize(command);
++
++    String result =  getManagingMemberMXBean().processCommand(command, environment, ArrayUtils.toByteArray(fileData));
++    
++    ctx = postAuthorize(command, ctx, result);
++    
++    return result;
++  }
++
++  protected ResourceOperationContext authorize(final String command) {
++
+     
 -    return getManagingMemberMXBean().processCommand(command, environment, ArrayUtils.toByteArray(fileData));
++    SystemManagementService service = (SystemManagementService) ManagementService
++        .getExistingManagementService(CacheFactory.getAnyInstance());
++    Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    CLIOperationContext context = new CLIOperationContext(command);
++    service.getAuthManager().authorize(credentials, context);
++    return context;
++  }
++  
++  protected ResourceOperationContext postAuthorize(final String command, ResourceOperationContext context, Object result) {
++
++    context.setPostOperationResult(result);
++    SystemManagementService service = (SystemManagementService) ManagementService
++        .getExistingManagementService(CacheFactory.getAnyInstance());
++    Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++
++    service.getAuthManager().postAuthorize(credentials, context);
++    return context;
+   }
++  
++  
++
+ 
+   /**
+    * The MemberMXBeanProxy class is a proxy for the MemberMXBean interface transforming an operation on the member
+    * MBean into a invocation on the MBeanServer, invoke method.
+    * 
+    * @see com.gemstone.gemfire.management.internal.web.controllers.support.MemberMXBeanAdapter
+    */
+   private static class MemberMXBeanProxy extends MemberMXBeanAdapter {
+ 
+     private final MBeanServer server;
+ 
+     private final ObjectName objectName;
+ 
+     public MemberMXBeanProxy(final MBeanServer server, final ObjectName objectName) {
+       assertNotNull(server, "The connection or reference to the Platform MBeanServer cannot be null!");
+       assertNotNull(objectName, "The JMX ObjectName for the GemFire Manager MemberMXBean cannot be null!");
+       this.server = server;
+       this.objectName = objectName;
+     }
+ 
+     protected MBeanServer getMBeanServer() {
+       return server;
+     }
+ 
+     protected ObjectName getObjectName() {
+       return objectName;
+     }
+ 
+     @Override
+     public String processCommand(final String commandString, final Map<String, String> env) {
+       try {
+         return String.valueOf(getMBeanServer().invoke(getObjectName(), "processCommand",
+           new Object[] { commandString, env }, new String[] { String.class.getName(), Map.class.getName() }));
+       }
+       catch (Exception e) {
+         throw new RuntimeException(String.format(
+           "An error occurred while executing processCommand with command String (%1$s) on the MemberMXBean (%2$s) of the GemFire Manager using environment (%3$s)!",
+             commandString, getObjectName(), env), e);
+       }
+     }
+   }
+ 
+ }


[32/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommands.java
index 0000000,1bd7692..3c68cf4
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommands.java
@@@ -1,0 -1,1081 +1,1114 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.io.BufferedReader;
+ import java.io.BufferedWriter;
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.FileWriter;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.Writer;
+ import java.net.ConnectException;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.security.KeyStore;
+ import java.util.Collections;
++import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedHashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Map.Entry;
+ import java.util.Properties;
+ import java.util.Set;
+ 
+ import javax.net.ssl.HttpsURLConnection;
+ import javax.net.ssl.KeyManagerFactory;
+ import javax.net.ssl.SSLContext;
+ import javax.net.ssl.TrustManagerFactory;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.ExitShellRequest;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+ import com.gemstone.gemfire.internal.ClassPathLoader;
+ import com.gemstone.gemfire.internal.DSFIDFactory;
+ import com.gemstone.gemfire.internal.lang.Initializer;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.internal.lang.SystemUtils;
+ import com.gemstone.gemfire.internal.util.IOUtils;
+ import com.gemstone.gemfire.internal.util.PasswordUtil;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.JmxManagerLocatorRequest;
+ import com.gemstone.gemfire.management.internal.JmxManagerLocatorResponse;
+ import com.gemstone.gemfire.management.internal.SSLUtil;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.GfshParser;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.annotation.CliArgument;
+ import com.gemstone.gemfire.management.internal.cli.converters.ConnectionEndpointConverter;
+ import com.gemstone.gemfire.management.internal.cli.domain.ConnectToLocatorResult;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.InfoResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.cli.shell.JMXConnectionException;
+ import com.gemstone.gemfire.management.internal.cli.shell.JmxOperationInvoker;
+ import com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker;
+ import com.gemstone.gemfire.management.internal.cli.shell.jline.GfshHistory;
+ import com.gemstone.gemfire.management.internal.cli.util.CauseFinder;
+ import com.gemstone.gemfire.management.internal.cli.util.ConnectionEndpoint;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ import com.gemstone.gemfire.management.internal.web.domain.LinkIndex;
+ import com.gemstone.gemfire.management.internal.web.http.support.SimpleHttpRequester;
+ import com.gemstone.gemfire.management.internal.web.shell.HttpOperationInvoker;
+ import com.gemstone.gemfire.management.internal.web.shell.RestHttpOperationInvoker;
+ 
+ /**
+  * @author Abhishek Chaudhari
+  *
+  * @since 7.0
+  */
+ public class ShellCommands implements CommandMarker {
+ 
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+ 
+   @CliCommand(value = { CliStrings.EXIT, "quit" }, help = CliStrings.EXIT__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public ExitShellRequest exit() throws IOException {
+     Gfsh gfshInstance = getGfsh();
+ 
+     gfshInstance.stop();
+ 
+     ExitShellRequest exitShellRequest = gfshInstance.getExitShellRequest();
+     if (exitShellRequest == null) {
+       // shouldn't really happen, but we'll fallback to this anyway
+       exitShellRequest = ExitShellRequest.NORMAL_EXIT;
+     }
+ 
+     return exitShellRequest;
+   }
+ 
+   // millis that connect --locator will wait for a response from the locator.
+   private final static int CONNECT_LOCATOR_TIMEOUT_MS = 60000; // see bug 45971
+ 
+   public static int getConnectLocatorTimeoutInMS() {
+     return ShellCommands.CONNECT_LOCATOR_TIMEOUT_MS;
+   }
+ 
+   @CliCommand(value = { CliStrings.CONNECT }, help = CliStrings.CONNECT__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH, CliStrings.TOPIC_GEMFIRE_JMX, CliStrings.TOPIC_GEMFIRE_MANAGER})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result connect(
+     @CliOption(key = { CliStrings.CONNECT__LOCATOR },
+                unspecifiedDefaultValue = ConnectionEndpointConverter.DEFAULT_LOCATOR_ENDPOINTS,
+                optionContext = ConnectionEndpoint.LOCATOR_OPTION_CONTEXT,
+                help = CliStrings.CONNECT__LOCATOR__HELP) ConnectionEndpoint locatorTcpHostPort,
+     @CliOption(key = { CliStrings.CONNECT__JMX_MANAGER },
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                optionContext = ConnectionEndpoint.JMXMANAGER_OPTION_CONTEXT,
+                help = CliStrings.CONNECT__JMX_MANAGER__HELP) ConnectionEndpoint memberRmiHostPort,
+     @CliOption(key = { CliStrings.CONNECT__USE_HTTP },
+                mandatory = false,
+                specifiedDefaultValue = "true",
+                unspecifiedDefaultValue = "false",
+                help = CliStrings.CONNECT__USE_HTTP__HELP) boolean useHttp,
+     @CliOption(key = { CliStrings.CONNECT__URL },
+                mandatory = false,
+                unspecifiedDefaultValue = CliStrings.CONNECT__DEFAULT_BASE_URL,
+                help = CliStrings.CONNECT__URL__HELP) String url,
+     @CliOption(key = { CliStrings.CONNECT__USERNAME },
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                help = CliStrings.CONNECT__USERNAME__HELP) String userName,
+     @CliOption(key = { CliStrings.CONNECT__PASSWORD },
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                help = CliStrings.CONNECT__PASSWORD__HELP) String password,
+     @CliOption(key = { CliStrings.CONNECT__KEY_STORE },
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                help = CliStrings.CONNECT__KEY_STORE__HELP) String keystore,
+     @CliOption(key = { CliStrings.CONNECT__KEY_STORE_PASSWORD },
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                help = CliStrings.CONNECT__KEY_STORE_PASSWORD__HELP) String keystorePassword,
+     @CliOption(key = { CliStrings.CONNECT__TRUST_STORE },
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                help = CliStrings.CONNECT__TRUST_STORE__HELP) String truststore,
+     @CliOption(key = { CliStrings.CONNECT__TRUST_STORE_PASSWORD },
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                help = CliStrings.CONNECT__TRUST_STORE_PASSWORD__HELP) String truststorePassword,
+     @CliOption(key = { CliStrings.CONNECT__SSL_CIPHERS },
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                help = CliStrings.CONNECT__SSL_CIPHERS__HELP) String sslCiphers,
+     @CliOption(key = { CliStrings.CONNECT__SSL_PROTOCOLS },
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                help = CliStrings.CONNECT__SSL_PROTOCOLS__HELP) String sslProtocols,
+     @CliOption(key = CliStrings.CONNECT__SECURITY_PROPERTIES,
+                optionContext = ConverterHint.FILE_PATHSTRING,
+                unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                help = CliStrings.CONNECT__SECURITY_PROPERTIES__HELP) final String gfSecurityPropertiesPath,
+     @CliOption(key = { CliStrings.CONNECT__USE_SSL },
+                specifiedDefaultValue = "true",
+                unspecifiedDefaultValue = "false",
+                help = CliStrings.CONNECT__USE_SSL__HELP) final boolean useSsl)
+   {
+     Result result;
+     
+     String passwordToUse           = decrypt(password);
+     String keystoreToUse           = keystore;
+     String keystorePasswordToUse   = keystorePassword;
+     String truststoreToUse         = truststore;
+     String truststorePasswordToUse = truststorePassword;
+     String sslCiphersToUse         = sslCiphers;
+     String sslProtocolsToUse       = sslProtocols;
+ 
+     // TODO shouldn't the condition be (getGfsh() != null && getGfsh().isConnectedAndReady())?
+     // otherwise, we have potential NullPointerException on the line with getGfsh().getOperationInvoker()
+     //if (getGfsh() == null || getGfsh().isConnectedAndReady()) {
+     if (getGfsh() != null && getGfsh().isConnectedAndReady()) {
+       try {
+         result = ResultBuilder.createInfoResult("Already connected to: " + getGfsh().getOperationInvoker().toString());
+       } catch (Exception e) {
+         result = ResultBuilder.buildResult(ResultBuilder.createErrorResultData().setErrorCode(
+           ResultBuilder.ERRORCODE_DEFAULT).addLine(e.getMessage()));
+       }
+     } else if (useHttp) {      
++      Gfsh gemfireShell = getGfsh();
+       try{
++    	  
++        if (userName != null && userName.length() > 0) {
++          if (passwordToUse == null || passwordToUse.length() == 0) {
++            passwordToUse = gemfireShell.readWithMask("http password: ", '*');
++          }
++          if (passwordToUse == null || passwordToUse.length() == 0) {
++            throw new IllegalArgumentException(CliStrings.CONNECT__MSG__JMX_PASSWORD_MUST_BE_SPECIFIED);
++          }
++        }
+         
+         final Map<String, String> sslConfigProps = this.readSSLConfiguration(useSsl, keystoreToUse,keystorePasswordToUse, 
+             truststoreToUse, truststorePasswordToUse, sslCiphersToUse, sslProtocolsToUse, gfSecurityPropertiesPath);
+      
+         if (useSsl) {
+           configureHttpsURLConnection(sslConfigProps);
+           if (url.startsWith("http:")) {
+             url = url.replace("http:", "https:");
+           }
+         }
+ 
++        Map<String,String> securityProperties = new HashMap<String, String>();
++        
++        Iterator<String> it = sslConfigProps.keySet().iterator();
++        while(it.hasNext()){
++          String secKey = it.next();
++          securityProperties.put(secKey, sslConfigProps.get(secKey));
++        }
++
+         // This is so that SSL termination results in https URLs being returned
+         String query = (url.startsWith("https")) ? "?scheme=https" : "";
+ 
 -        LogWrapper.getInstance().warning(String.format("Sending HTTP request for Link Index at (%1$s)...", url.concat("/index")));
++        LogWrapper.getInstance().warning(String.format("Sending HTTP request for Link Index at (%1$s)...", url.concat("/index").concat(query)));
+ 
 -        LinkIndex linkIndex = new SimpleHttpRequester(CONNECT_LOCATOR_TIMEOUT_MS).get(url.concat("/index").concat(query), LinkIndex.class);
++        LinkIndex linkIndex = new SimpleHttpRequester(gemfireShell, CONNECT_LOCATOR_TIMEOUT_MS, securityProperties).exchange(url.concat("/index").concat(query), LinkIndex.class);
+ 
+         LogWrapper.getInstance().warning(String.format("Received Link Index (%1$s)", linkIndex.toString()));
+ 
 -        Gfsh gemfireShell = getGfsh();
 -
 -        HttpOperationInvoker operationInvoker = new RestHttpOperationInvoker(linkIndex, gemfireShell, url);
++        HttpOperationInvoker operationInvoker = new RestHttpOperationInvoker(linkIndex, gemfireShell, url, securityProperties);
+ 
+         Initializer.init(operationInvoker);
+         gemfireShell.setOperationInvoker(operationInvoker);
+ 
+         LogWrapper.getInstance().info(CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS, operationInvoker.toString()));
+ 
+         Gfsh.redirectInternalJavaLoggers();
+         result = ResultBuilder.createInfoResult(CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS, operationInvoker.toString()));
+         
+       } catch (IOException ioe) {
+         String errorMessage = ioe.getMessage();
+         result = ResultBuilder.createConnectionErrorResult(errorMessage);
 -        ioe.printStackTrace();
++        if (gemfireShell.getDebug()) {ioe.printStackTrace();}
+       } catch (Exception e) {
+         String errorMessage = e.getMessage();
+         result = ResultBuilder.createConnectionErrorResult(errorMessage);
 -        e.printStackTrace();
++        if (gemfireShell.getDebug()) {e.printStackTrace();}
+       }
+     } else {
+ 
+       boolean isConnectingViaLocator = false;
+ 
+       InfoResultData infoResultData = ResultBuilder.createInfoResultData();
+       ConnectionEndpoint hostPortToConnect = null;
+       
+       try {
+         Gfsh gfshInstance = getGfsh();
+ 
+         // JMX Authentication Config
+         if (userName != null && userName.length() > 0) {
+           if (passwordToUse == null || passwordToUse.length() == 0) {
+             passwordToUse = gfshInstance.readWithMask("jmx password: ", '*');
+           }
+           if (passwordToUse == null || passwordToUse.length() == 0) {
+               throw new IllegalArgumentException(CliStrings.CONNECT__MSG__JMX_PASSWORD_MUST_BE_SPECIFIED);
+           }
+         }
+ 
+         final Map<String, String> sslConfigProps = this.readSSLConfiguration(useSsl, keystoreToUse,keystorePasswordToUse, 
+             truststoreToUse, truststorePasswordToUse, sslCiphersToUse, sslProtocolsToUse, gfSecurityPropertiesPath);
+ 
+         if (memberRmiHostPort != null) {
+           hostPortToConnect = memberRmiHostPort;
+           Gfsh.println(CliStrings.format(CliStrings.CONNECT__MSG__CONNECTING_TO_MANAGER_AT_0, new Object[] {memberRmiHostPort.toString(false)}));
+         } else {
+           isConnectingViaLocator = true;
+           hostPortToConnect = locatorTcpHostPort;
+           Gfsh.println(CliStrings.format(CliStrings.CONNECT__MSG__CONNECTING_TO_LOCATOR_AT_0, new Object[] {locatorTcpHostPort.toString(false)}));
+ 
+           // Props required to configure a SocketCreator with SSL.
+           // Used for gfsh->locator connection & not needed for gfsh->manager connection
+           if (useSsl || !sslConfigProps.isEmpty()) {
+             //Fix for 51266 : Added an check for cluster-ssl-enabled proeprty
+             if(!sslConfigProps.containsKey(DistributionConfig.CLUSTER_SSL_ENABLED_NAME))
+               sslConfigProps.put(DistributionConfig.SSL_ENABLED_NAME, String.valueOf(true));
+             sslConfigProps.put(DistributionConfig.MCAST_PORT_NAME, String.valueOf(0));
+             sslConfigProps.put(DistributionConfig.LOCATORS_NAME, "");
+ 
+             String sslInfoLogMsg = "Connecting to Locator via SSL.";
+             if (useSsl) {
+               sslInfoLogMsg = CliStrings.CONNECT__USE_SSL + " is set to true. " + sslInfoLogMsg;
+             }
+             gfshInstance.logToFile(sslInfoLogMsg, null);
+           }
+ 
+           ConnectToLocatorResult connectToLocatorResult = connectToLocator(locatorTcpHostPort.getHost(), locatorTcpHostPort.getPort(), CONNECT_LOCATOR_TIMEOUT_MS, sslConfigProps);
+           memberRmiHostPort = connectToLocatorResult.getMemberEndpoint();
+           hostPortToConnect = memberRmiHostPort;
+           Gfsh.printlnErr(connectToLocatorResult.getResultMessage());
+ 
+           // when locator is configured to use SSL (ssl-enabled=true) but manager is not (jmx-manager-ssl=false)
+           if ((useSsl || !sslConfigProps.isEmpty()) && !connectToLocatorResult.isJmxManagerSslEnabled()) {
+             gfshInstance.logInfo(CliStrings.CONNECT__USE_SSL + " is set to true. But JMX Manager doesn't support SSL, connecting without SSL.", null);
+             sslConfigProps.clear();
+           }
+         }
+ 
+         if (!sslConfigProps.isEmpty()) {
+           gfshInstance.logToFile("Connecting to manager via SSL.", null);
+         }
+ 
 -        JmxOperationInvoker operationInvoker = new JmxOperationInvoker(memberRmiHostPort.getHost(), memberRmiHostPort.getPort(), userName, passwordToUse, sslConfigProps);
++        JmxOperationInvoker operationInvoker = new JmxOperationInvoker(memberRmiHostPort.getHost(), memberRmiHostPort.getPort(), userName, passwordToUse, sslConfigProps, gfSecurityPropertiesPath);
+         gfshInstance.setOperationInvoker(operationInvoker);
+         infoResultData.addLine(CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS, memberRmiHostPort.toString(false)));
+         LogWrapper.getInstance().info(CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS, memberRmiHostPort.toString(false)));
+         result = ResultBuilder.buildResult(infoResultData);
+       } catch (Exception e) {
+         // TODO - Abhishek: Refactor to use catch blocks for instanceof checks
+         Gfsh gfshInstance = Gfsh.getCurrentInstance();
+         String errorMessage = e.getMessage();
+         boolean logAsFine = false;
+         if (CauseFinder.indexOfCause(e, javax.naming.ServiceUnavailableException.class, false) != -1) {
+           errorMessage = CliStrings.format(CliStrings.CONNECT__MSG__SERVICE_UNAVAILABLE_ERROR, hostPortToConnect.toString(false));
+         } else if (e instanceof JMXConnectionException) {
+           JMXConnectionException jce = (JMXConnectionException)e;
+           if (jce.getExceptionType() == JMXConnectionException.MANAGER_NOT_FOUND_EXCEPTION) {
+             errorMessage = CliStrings.format(CliStrings.CONNECT__MSG__SERVICE_UNAVAILABLE_ERROR, hostPortToConnect.toString(false));
+           }
+         } else if ((e instanceof ConnectException) && isConnectingViaLocator) {
+           errorMessage = CliStrings.format(CliStrings.CONNECT__MSG__COULD_NOT_CONNECT_TO_LOCATOR_0, hostPortToConnect.toString(false));
+         } else if ( (e instanceof IllegalStateException) && isConnectingViaLocator) {
+           Throwable causeByType = CauseFinder.causeByType(e, ClassCastException.class, false);
+           if (causeByType != null) {
+             errorMessage = CliStrings.format(CliStrings.CONNECT__MSG__COULD_NOT_CONNECT_TO_LOCATOR_0_POSSIBLY_SSL_CONFIG_ERROR,
+                                              new Object[] { hostPortToConnect.toString(false)});
+             if (gfshInstance.isLoggingEnabled()) {
+               errorMessage += " "+ getGfshLogsCheckMessage(gfshInstance.getLogFilePath());
+             }
+           } else if (errorMessage == null) {
+             errorMessage = CliStrings.format(CliStrings.CONNECT__MSG__COULD_NOT_CONNECT_TO_LOCATOR_0, locatorTcpHostPort.toString(false));
+             if (gfshInstance.isLoggingEnabled()) {
+               errorMessage += " "+ getGfshLogsCheckMessage(gfshInstance.getLogFilePath());
+             }
+           }
+         } else if (e instanceof IOException) {
+           Throwable causeByType = CauseFinder.causeByType(e, java.rmi.ConnectIOException.class, false);
+           if (causeByType != null) {
+             // TODO - Abhishek : Is there a better way to know about a specific cause?
+             if (String.valueOf(causeByType.getMessage()).contains("non-JRMP server")) {
+               errorMessage = CliStrings.format(CliStrings.CONNECT__MSG__COULD_NOT_CONNECT_TO_MANAGER_0_POSSIBLY_SSL_CONFIG_ERROR,
+                                                new Object[] { memberRmiHostPort.toString(false)});
+               logAsFine = true;
+             } else {
+               errorMessage = CliStrings.format(CliStrings.CONNECT__MSG__ERROR, new Object[] {memberRmiHostPort.toString(false), ""});
+             }
+             if (gfshInstance.isLoggingEnabled()) {
+               errorMessage += " "+ getGfshLogsCheckMessage(gfshInstance.getLogFilePath());
+             }
+           }
+         } else if (e instanceof SecurityException) {
+           // the default exception message is clear enough
+           String msgPart = StringUtils.isBlank(userName) && StringUtils.isBlank(passwordToUse) ? "" : "appropriate ";
+           errorMessage += ". Please specify "+msgPart+"values for --"+CliStrings.CONNECT__USERNAME+" and --"+CliStrings.CONNECT__PASSWORD;
+         } else{
+           errorMessage = CliStrings.format(CliStrings.CONNECT__MSG__ERROR, hostPortToConnect.toString(false), errorMessage);
+         }
+         result = ResultBuilder.createConnectionErrorResult(errorMessage);
+         if (logAsFine) {
+           LogWrapper.getInstance().fine(e.getMessage(), e);
+         } else {
+           LogWrapper.getInstance().severe(e.getMessage(), e);
+         }
+       }
+ 
+       Gfsh.redirectInternalJavaLoggers();
+     }
+ 
+     return result;
+   }
+ 
+   private String decrypt(String password) {
+     if (password != null) {
+       return PasswordUtil.decrypt(password);
+     }
+     return null;
+   }
+ 
+ private void configureHttpsURLConnection(Map<String, String> sslConfigProps) throws Exception {
+     String keystoreToUse = sslConfigProps.get(Gfsh.SSL_KEYSTORE);
+     String keystorePasswordToUse = sslConfigProps.get(Gfsh.SSL_KEYSTORE_PASSWORD);
+     String truststoreToUse = sslConfigProps.get(Gfsh.SSL_TRUSTSTORE);
+     String truststorePasswordToUse = sslConfigProps.get(Gfsh.SSL_TRUSTSTORE_PASSWORD);
+     // Ciphers are not passed to HttpsURLConnection. Could not find a clean way
+     // to pass this attribute to socket layer (see #51645)
+     String sslCiphersToUse = sslConfigProps.get(DistributionConfig.CLUSTER_SSL_CIPHERS_NAME);
+     String sslProtocolsToUse = sslConfigProps.get(DistributionConfig.CLUSTER_SSL_PROTOCOLS_NAME);
+ 
+     //Commenting the code to set cipher suites in GFSH rest connect (see #51645)
+     /*
+     if(sslCiphersToUse != null){
+       System.setProperty("https.cipherSuites", sslCiphersToUse);
+     }
+     */
+     FileInputStream keyStoreStream = null;
+     FileInputStream trustStoreStream = null;
+     try{
+       
+       KeyManagerFactory keyManagerFactory = null;
+       if (!StringUtils.isBlank(keystoreToUse)) {
+         KeyStore clientKeys = KeyStore.getInstance("JKS");
+         keyStoreStream = new FileInputStream(keystoreToUse);
+         clientKeys.load(keyStoreStream, keystorePasswordToUse.toCharArray());
+ 
+         keyManagerFactory = KeyManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+         keyManagerFactory.init(clientKeys, keystorePasswordToUse.toCharArray());
+       }
+ 
+       // load server public key
+       TrustManagerFactory trustManagerFactory = null;
+       if (!StringUtils.isBlank(truststoreToUse)) {
+         KeyStore serverPub = KeyStore.getInstance("JKS");
+         trustStoreStream = new FileInputStream(truststoreToUse);
+         serverPub.load(trustStoreStream, truststorePasswordToUse.toCharArray());
+         trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+         trustManagerFactory.init(serverPub);
+       }
+ 
+       SSLContext ssl = SSLContext.getInstance(SSLUtil.getSSLAlgo(SSLUtil.readArray(sslProtocolsToUse)));
+ 
+       ssl.init(keyManagerFactory != null ? keyManagerFactory.getKeyManagers() : null,
+           trustManagerFactory != null ? trustManagerFactory.getTrustManagers() : null, new java.security.SecureRandom());
+    
+       HttpsURLConnection.setDefaultSSLSocketFactory(ssl.getSocketFactory());
+     }finally{
+       if(keyStoreStream != null){
+         keyStoreStream.close();
+       }
+       if(trustStoreStream != null ){
+         trustStoreStream.close();
+       }
+       
+     }
+    
+     
+   }
+   
+   /**
+    * Common code to read SSL information. Used by JMX, Locator & HTTP mode connect
+    */
+   private Map<String, String> readSSLConfiguration(boolean useSsl, String keystoreToUse, String keystorePasswordToUse,
+       String truststoreToUse, String truststorePasswordToUse, String sslCiphersToUse, String sslProtocolsToUse,
+       String gfSecurityPropertiesPath) throws IOException {
+ 
+     Gfsh gfshInstance = getGfsh();    
+     final Map<String, String> sslConfigProps = new LinkedHashMap<String, String>();
+     
+     // JMX SSL Config 1:
+     // First from gfsecurity properties file if it's specified OR
+     // if the default gfsecurity.properties exists useSsl==true
+     if (useSsl || gfSecurityPropertiesPath != null) {
+       // reference to hold resolved gfSecurityPropertiesPath
+       String gfSecurityPropertiesPathToUse = CliUtil.resolvePathname(gfSecurityPropertiesPath);
+       URL gfSecurityPropertiesUrl = null;
+ 
+       // Case 1: User has specified gfSecurity properties file
+       if (!StringUtils.isBlank(gfSecurityPropertiesPathToUse)) {
+         // User specified gfSecurity properties doesn't exist
+         if (!IOUtils.isExistingPathname(gfSecurityPropertiesPathToUse)) {
+           gfshInstance.printAsSevere(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE, "Security ", gfSecurityPropertiesPathToUse));
+         } else {
+           gfSecurityPropertiesUrl = new File(gfSecurityPropertiesPathToUse).toURI().toURL();
+         }
+       } else if (useSsl && gfSecurityPropertiesPath == null) {
+         // Case 2: User has specified to useSsl but hasn't specified
+         // gfSecurity properties file. Use default "gfsecurity.properties"
+         // in current dir, user's home or classpath
+         gfSecurityPropertiesUrl = getFileUrl("gfsecurity.properties");
+       }
+       // if 'gfSecurityPropertiesPath' OR gfsecurity.properties has resolvable path
+       if (gfSecurityPropertiesUrl != null) {
+         gfshInstance.logToFile("Using security properties file : "
+                 + CliUtil.decodeWithDefaultCharSet(gfSecurityPropertiesUrl.getPath()), null);
+         Map<String, String> gfsecurityProps = loadPropertiesFromURL(gfSecurityPropertiesUrl);
+         // command line options (if any) would override props in gfsecurity.properties
+         sslConfigProps.putAll(gfsecurityProps);
+       }
+     }
+ 
+     int numTimesPrompted = 0;
+     /*
+      * Using do-while here for a case when --use-ssl=true is specified but
+      * no SSL options were specified & there was no gfsecurity properties
+      * specified or readable in default gfsh directory.
+      *
+      * NOTE: 2nd round of prompting is done only when sslConfigProps map is
+      * empty & useSsl is true - so we won't over-write any previous values.
+      */
+     do {
+       // JMX SSL Config 2: Now read the options
+       if (numTimesPrompted > 0) {
+         Gfsh.println("Please specify these SSL Configuration properties: ");
+       }
+ 
+       if (numTimesPrompted > 0) {
+         //NOTE: sslConfigProps map was empty
+         keystoreToUse = readText(gfshInstance, CliStrings.CONNECT__KEY_STORE + ": ");
+       }
+       if (keystoreToUse != null && keystoreToUse.length() > 0) {
+         if (keystorePasswordToUse == null || keystorePasswordToUse.length() == 0) {
+           // Check whether specified in gfsecurity props earlier
+           keystorePasswordToUse = sslConfigProps.get(Gfsh.SSL_KEYSTORE_PASSWORD);
+           if (keystorePasswordToUse == null || keystorePasswordToUse.length() == 0) {
+             // not even in properties file, prompt user for it
+             keystorePasswordToUse = readPassword(gfshInstance, CliStrings.CONNECT__KEY_STORE_PASSWORD + ": ");
+             sslConfigProps.put(Gfsh.SSL_KEYSTORE_PASSWORD, keystorePasswordToUse);
+           }
+         }else{//For cases where password is already part of command option
+           sslConfigProps.put(Gfsh.SSL_KEYSTORE_PASSWORD, keystorePasswordToUse);
+         }
+         sslConfigProps.put(Gfsh.SSL_KEYSTORE, keystoreToUse);
+       }
+ 
+       if (numTimesPrompted > 0) {
+         truststoreToUse = readText(gfshInstance, CliStrings.CONNECT__TRUST_STORE + ": ");
+       }
+       if (truststoreToUse != null && truststoreToUse.length() > 0) {
+         if (truststorePasswordToUse == null || truststorePasswordToUse.length() == 0) {
+           // Check whether specified in gfsecurity props earlier?
+           truststorePasswordToUse = sslConfigProps.get(Gfsh.SSL_TRUSTSTORE_PASSWORD);
+           if (truststorePasswordToUse == null || truststorePasswordToUse.length() == 0) {
+             // not even in properties file, prompt user for it
+             truststorePasswordToUse = readPassword(gfshInstance, CliStrings.CONNECT__TRUST_STORE_PASSWORD + ": ");
+             sslConfigProps.put(Gfsh.SSL_TRUSTSTORE_PASSWORD, truststorePasswordToUse);
+           }
+         }else{//For cases where password is already part of command option
+           sslConfigProps.put(Gfsh.SSL_TRUSTSTORE_PASSWORD, truststorePasswordToUse);
+         }
+         sslConfigProps.put(Gfsh.SSL_TRUSTSTORE, truststoreToUse);
+       }
+ 
+       if (numTimesPrompted > 0) {
+         sslCiphersToUse = readText(gfshInstance, CliStrings.CONNECT__SSL_CIPHERS + ": ");
+       }
+       if (sslCiphersToUse != null && sslCiphersToUse.length() > 0) {            
+         //sslConfigProps.put(DistributionConfig.CLUSTER_SSL_CIPHERS_NAME, sslCiphersToUse);
+         sslConfigProps.put(Gfsh.SSL_ENABLED_CIPHERS, sslCiphersToUse);
+       }
+ 
+       if (numTimesPrompted > 0) {
+         sslProtocolsToUse = readText(gfshInstance, CliStrings.CONNECT__SSL_PROTOCOLS + ": ");
+       }
+       if (sslProtocolsToUse != null && sslProtocolsToUse.length() > 0) {
+         //sslConfigProps.put(DistributionConfig.CLUSTER_SSL_PROTOCOLS_NAME, sslProtocolsToUse);
+         sslConfigProps.put(Gfsh.SSL_ENABLED_PROTOCOLS, sslProtocolsToUse);
+       }
+ 
+       // SSL is required to be used but no SSL config found
+     } while(useSsl && sslConfigProps.isEmpty() && (0 == numTimesPrompted++) && !gfshInstance.isQuietMode());    
+     return sslConfigProps;
+   }
+ 
+   private static String getGfshLogsCheckMessage(String logFilePath) {
+     return CliStrings.format(CliStrings.GFSH__PLEASE_CHECK_LOGS_AT_0, logFilePath);
+   }
+ 
+   private String readText(Gfsh gfsh, String textToPrompt) throws IOException {
+     if (!gfsh.isHeadlessMode() || !gfsh.isQuietMode()) {
+       return gfsh.interact(textToPrompt);
+     } else {
+       return null;
+     }
+   }
+ 
+   private String readPassword(Gfsh gfsh, String textToPrompt) throws IOException {
+     if (!gfsh.isHeadlessMode() || !gfsh.isQuietMode()) {
+       return gfsh.readWithMask(textToPrompt, '*');
+     } else {
+       return null;
+     }
+   }
+ 
+   /* package-private */ static Map<String, String> loadPropertiesFromURL(URL gfSecurityPropertiesUrl) {
+     Map<String, String> propsMap = Collections.emptyMap();
+ 
+     if (gfSecurityPropertiesUrl != null) {
+       InputStream inputStream = null;
+       try {
+         Properties props = new Properties();
+         inputStream = gfSecurityPropertiesUrl.openStream();
+         props.load(inputStream);
+         if (!props.isEmpty()) {
+           Set<String> jmxSpecificProps = new HashSet<String>();
+           propsMap = new LinkedHashMap<String, String>();
+           Set<Entry<Object, Object>> entrySet = props.entrySet();
+           for (Entry<Object, Object> entry : entrySet) {
+ 
+             String key = (String)entry.getKey();
+             if (key.endsWith(DistributionConfig.JMX_SSL_PROPS_SUFFIX)) {
+               key = key.substring(0, key.length() - DistributionConfig.JMX_SSL_PROPS_SUFFIX.length());
+               jmxSpecificProps.add(key);
+ 
+               propsMap.put(key, (String)entry.getValue());
+             } else if (!jmxSpecificProps.contains(key)) {// Prefer properties ending with "-jmx" over default SSL props.
+               propsMap.put(key, (String)entry.getValue());
+             }
+           }
+           props.clear();
+           jmxSpecificProps.clear();
+         }
+       } catch (IOException io) {
+         throw new RuntimeException(CliStrings.format(
+             CliStrings.CONNECT__MSG__COULD_NOT_READ_CONFIG_FROM_0,
+                 CliUtil.decodeWithDefaultCharSet(gfSecurityPropertiesUrl.getPath())), io);
+       } finally {
+         IOUtils.close(inputStream);
+       }
+     }
+     return propsMap;
+   }
+ 
+   // Copied from DistributedSystem.java
 -  private static URL getFileUrl(String fileName) {
++  public static URL getFileUrl(String fileName) {
+     File file = new File(fileName);
+ 
+     if (file.exists()) {
+       try {
+         return IOUtils.tryGetCanonicalFileElseGetAbsoluteFile(file).toURI().toURL();
+       } catch (MalformedURLException ignore) {
+       }
+     }
+ 
+     file = new File(System.getProperty("user.home"), fileName);
+ 
+     if (file.exists()) {
+       try {
+         return IOUtils.tryGetCanonicalFileElseGetAbsoluteFile(file).toURI().toURL();
+       } catch (MalformedURLException ignore) {
+       }
+     }
+ 
+     return ClassPathLoader.getLatest().getResource(ShellCommands.class, fileName);
+   }
+ 
+   public static ConnectToLocatorResult connectToLocator(String host, int port, int timeout, Map<String, String> props)
+     throws IOException
+   {
+     // register DSFID types first; invoked explicitly so that all message type
+     // initializations do not happen in first deserialization on a possibly
+     // "precious" thread
+     DSFIDFactory.registerTypes();
+     
+     JmxManagerLocatorResponse locatorResponse = JmxManagerLocatorRequest.send(host, port, timeout, props);
+ 
+     if (StringUtils.isBlank(locatorResponse.getHost()) || locatorResponse.getPort() == 0) {
+       Throwable locatorResponseException = locatorResponse.getException();
+       String exceptionMessage = CliStrings.CONNECT__MSG__LOCATOR_COULD_NOT_FIND_MANAGER;
+ 
+       if (locatorResponseException != null) {
+         String locatorResponseExceptionMessage = locatorResponseException.getMessage();
+         locatorResponseExceptionMessage = (!StringUtils.isBlank(locatorResponseExceptionMessage)
+           ? locatorResponseExceptionMessage : locatorResponseException.toString());
+         exceptionMessage = "Exception caused JMX Manager startup to fail because: '"
+           .concat(locatorResponseExceptionMessage).concat("'");
+       }
+ 
+       throw new IllegalStateException(exceptionMessage, locatorResponseException);
+     }
+ 
+     ConnectionEndpoint memberEndpoint = new ConnectionEndpoint(locatorResponse.getHost(), locatorResponse.getPort());
+ 
+     String resultMessage = CliStrings.format(CliStrings.CONNECT__MSG__CONNECTING_TO_MANAGER_AT_0,
+       memberEndpoint.toString(false));
+ 
+     return new ConnectToLocatorResult(memberEndpoint, resultMessage, locatorResponse.isJmxManagerSslEnabled());
+   }
+ 
+ 
+   @CliCommand(value = { CliStrings.DISCONNECT }, help = CliStrings.DISCONNECT__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH, CliStrings.TOPIC_GEMFIRE_JMX, CliStrings.TOPIC_GEMFIRE_MANAGER})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result disconnect() {
+     Result result = null;
+ 
+     if (getGfsh() != null && !getGfsh().isConnectedAndReady()) {
+       result = ResultBuilder.createInfoResult("Not connected.");
+     } else {
+       InfoResultData infoResultData = ResultBuilder.createInfoResultData();
+       try {
+         Gfsh gfshInstance = getGfsh();
+         if (gfshInstance.isConnectedAndReady()) {
+           OperationInvoker operationInvoker = gfshInstance.getOperationInvoker();
+           Gfsh.println("Disconnecting from: " + operationInvoker);
+           operationInvoker.stop();
+           infoResultData.addLine(CliStrings
+             .format(CliStrings.DISCONNECT__MSG__DISCONNECTED, operationInvoker.toString()));
+           LogWrapper.getInstance().info(CliStrings.format(CliStrings.DISCONNECT__MSG__DISCONNECTED, operationInvoker.toString()));
+           gfshInstance.setPromptPath(com.gemstone.gemfire.management.internal.cli.converters.RegionPathConverter.DEFAULT_APP_CONTEXT_PATH);
+         } else {
+           infoResultData.addLine(CliStrings.DISCONNECT__MSG__NOTCONNECTED);
+         }
+         result = ResultBuilder.buildResult(infoResultData);
+       } catch (Exception e) {
+         result = ResultBuilder.createConnectionErrorResult(CliStrings.format(CliStrings.DISCONNECT__MSG__ERROR, e.getMessage()));
+       }
+     }
+ 
+     return result;
+   }
+ 
+ 
+   @CliCommand(value = {CliStrings.DESCRIBE_CONNECTION}, help = CliStrings.DESCRIBE_CONNECTION__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH, CliStrings.TOPIC_GEMFIRE_JMX})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result describeConnection() {
+     Result result = null;
+     try {
+       TabularResultData tabularResultData = ResultBuilder.createTabularResultData();
+       Gfsh gfshInstance = getGfsh();
+       if (gfshInstance.isConnectedAndReady()) {
+         OperationInvoker operationInvoker = gfshInstance.getOperationInvoker();
+ //        tabularResultData.accumulate("Monitored GemFire DS", operationInvoker.toString());
+         tabularResultData.accumulate("Connection Endpoints", operationInvoker.toString());
+       } else {
+         tabularResultData.accumulate("Connection Endpoints", "Not connected");
+       }
+       result = ResultBuilder.buildResult(tabularResultData);
+     } catch (Exception e) {
+       ErrorResultData errorResultData =
+         ResultBuilder.createErrorResultData()
+           .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+           .addLine(e.getMessage());
+       result = ResultBuilder.buildResult(errorResultData);
+     }
+ 
+     return result;
+   }
+ 
+ 
+   @CliCommand(value = { CliStrings.ECHO }, help = CliStrings.ECHO__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result echo(
+       @CliOption(key = {CliStrings.ECHO__STR, ""},
+                  unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                  specifiedDefaultValue = "",
+                  mandatory = true,
+                  help = CliStrings.ECHO__STR__HELP) String stringToEcho) {
+     Result result = null;
+ 
+     if(stringToEcho.equals("$*")){
+       Gfsh gfshInstance = getGfsh();
+       Map<String, String> envMap = gfshInstance.getEnv();
+       Set< Entry<String, String> > setEnvMap = envMap.entrySet();
+       TabularResultData  resultData = buildResultForEcho(setEnvMap);
+ 
+       result = ResultBuilder.buildResult(resultData);
+     } else {
+       result = ResultBuilder.createInfoResult(stringToEcho);
+     }
+ 
+     return result;
+   }
+   TabularResultData buildResultForEcho(Set< Entry<String, String> > propertyMap){
+     TabularResultData resultData = ResultBuilder.createTabularResultData();
+     Iterator <Entry<String, String>> it = propertyMap.iterator();
+ 
+     while(it.hasNext()){
+       Entry<String, String> setEntry = it.next();
+       resultData.accumulate("Property", setEntry.getKey());
+       resultData.accumulate("Value", String.valueOf(setEntry.getValue()));
+     }
+     return resultData;
+   }
+ 
+ 
+ 
+   @CliCommand(value = { CliStrings.SET_VARIABLE }, help = CliStrings.SET_VARIABLE__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result setVariable(
+       @CliOption(key = CliStrings.SET_VARIABLE__VAR,
+                  mandatory=true,
+                  help = CliStrings.SET_VARIABLE__VAR__HELP)
+                  String var,
+       @CliOption(key = CliStrings.SET_VARIABLE__VALUE,
+                  mandatory=true,
+                  help = CliStrings.SET_VARIABLE__VALUE__HELP)
+                  String value) {
+     Result result = null;
+     try {
+       getGfsh().setEnvProperty(var, String.valueOf(value));
+       result = ResultBuilder.createInfoResult("Value for variable "+var+" is now: "+value+".");
+     } catch (IllegalArgumentException e) {
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData();
+       errorResultData.addLine(e.getMessage());
+       result = ResultBuilder.buildResult(errorResultData);
+     }
+ 
+     return result;
+   }
+ 
+ //Enable when "use region" command is required. See #46110
+ //  @CliCommand(value = { CliStrings.USE_REGION }, help = CliStrings.USE_REGION__HELP)
+ //  @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH, CliStrings.TOPIC_GEMFIRE_REGION})
+ //  public Result useRegion(
+ //      @CliArgument(name = CliStrings.USE_REGION__REGION,
+ //                   unspecifiedDefaultValue = "/",
+ //                   argumentContext = CliStrings.PARAM_CONTEXT_REGIONPATH,
+ //                   help = CliStrings.USE_REGION__REGION__HELP)
+ //                    String toRegion) {
+ //    Gfsh gfsh = Gfsh.getCurrentInstance();
+ //
+ //    gfsh.setPromptPath(toRegion);
+ //    return ResultBuilder.createInfoResult("");
+ //  }
+ 
+   @CliCommand(value = { CliStrings.DEBUG }, help = CliStrings.DEBUG__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GFSH, CliStrings.TOPIC_GEMFIRE_DEBUG_UTIL })
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result debug(
+       @CliOption(key = CliStrings.DEBUG__STATE,
+                    unspecifiedDefaultValue = "OFF",
+                    mandatory = true,
+                    optionContext = "debug",
+                    help = CliStrings.DEBUG__STATE__HELP)
+                    String state) {
+     Gfsh gfshInstance = Gfsh.getCurrentInstance();
+     if (gfshInstance != null) {
+       // Handle state
+       if (state.equalsIgnoreCase("ON")) {
+         gfshInstance.setDebug(true);
+       } else if(state.equalsIgnoreCase("OFF")){
+         gfshInstance.setDebug(false);
+       }else{
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.DEBUG__MSG_0_INVALID_STATE_VALUE,state)) ;
+       }
+ 
+     } else {
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+           .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+               CliStrings.ECHO__MSG__NO_GFSH_INSTANCE);
+       return ResultBuilder.buildResult(errorResultData);
+     }
+     return ResultBuilder.createInfoResult(CliStrings.DEBUG__MSG_DEBUG_STATE_IS + state );
+   }
+ 
+   @CliCommand(value = CliStrings.HISTORY, help = CliStrings.HISTORY__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GFSH })
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result history(
+       @CliOption(key = { CliStrings.HISTORY__FILE }, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.HISTORY__FILE__HELP)
+       String saveHistoryTo,
+       @CliOption(key = { CliStrings.HISTORY__CLEAR }, specifiedDefaultValue = "true",
+                       unspecifiedDefaultValue = "false", help = CliStrings.HISTORY__CLEAR__HELP) Boolean clearHistory) {
+ 
+     //process clear history
+     if (clearHistory ) {
+       return executeClearHistory();
+     }else {
+       //Process file option
+       Gfsh gfsh = Gfsh.getCurrentInstance();
+       ErrorResultData errorResultData = null;
+       StringBuilder contents = new StringBuilder();
+       Writer output = null;
+ 
+       int historySize = gfsh.getHistorySize();
+       String historySizeString = String.valueOf(historySize);
+       int historySizeWordLength = historySizeString.length();
+ 
+       GfshHistory gfshHistory = gfsh.getGfshHistory();
+       //List<?> gfshHistoryList = gfshHistory.getHistoryList();
+       Iterator<?> it = gfshHistory.entries();
+       boolean flagForLineNumbers = (saveHistoryTo != null && saveHistoryTo
+           .length() > 0) ? false : true;
+       long lineNumber = 0;
+ 
+       while (it.hasNext()) {
+         String line = (String) it.next();
+         if (line.isEmpty() == false) {
+           if (flagForLineNumbers) {
+             lineNumber++;
+             contents.append(String.format("%" + historySizeWordLength + "s  ",
+                 lineNumber));
+           }
+           contents.append(line);
+           contents.append(GfshParser.LINE_SEPARATOR);
+         }
+       }
+ 
+       try {
+         // write to a user file
+         if (saveHistoryTo != null && saveHistoryTo.length() > 0) {
+           File saveHistoryToFile = new File(saveHistoryTo);
+           output = new BufferedWriter(new FileWriter(saveHistoryToFile));
+ 
+           if (!saveHistoryToFile.exists()) {
+             errorResultData = ResultBuilder.createErrorResultData()
+                 .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+                 .addLine(CliStrings.HISTORY__MSG__FILE_DOES_NOT_EXISTS);
+             return ResultBuilder.buildResult(errorResultData);
+           }
+           if (!saveHistoryToFile.isFile()) {
+             errorResultData = ResultBuilder.createErrorResultData()
+                 .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+                 .addLine(CliStrings.HISTORY__MSG__FILE_SHOULD_NOT_BE_DIRECTORY);
+             return ResultBuilder.buildResult(errorResultData);
+           }
+           if (!saveHistoryToFile.canWrite()) {
+             errorResultData = ResultBuilder.createErrorResultData()
+                 .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+                 .addLine(CliStrings.HISTORY__MSG__FILE_CANNOT_BE_WRITTEN);
+             return ResultBuilder.buildResult(errorResultData);
+           }
+ 
+           output.write(contents.toString());
+         }
+ 
+       } catch (IOException ex) {
+         return ResultBuilder.createInfoResult("File error " + ex.getMessage()
+             + " for file " + saveHistoryTo);
+       } finally {
+         try {
+           if (output != null) {
+             output.close();
+           }
+         } catch (IOException e) {
+           errorResultData = ResultBuilder.createErrorResultData()
+               .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+               .addLine("exception in closing file");
+           return ResultBuilder.buildResult(errorResultData);
+         }
+       }
+       if (saveHistoryTo != null && saveHistoryTo.length() > 0) {
+         // since written to file no need to display the content
+         return ResultBuilder.createInfoResult("Wrote successfully to file "
+             + saveHistoryTo);
+       } else {
+         return ResultBuilder.createInfoResult(contents.toString());
+       }
+     }
+ 
+   }
+ 
+   Result executeClearHistory(){
+     try{
+       Gfsh gfsh = Gfsh.getCurrentInstance();
+       GfshHistory gfshHistory = gfsh.getGfshHistory();
+       gfshHistory.clear();
+     }catch(Exception e){
+       LogWrapper.getInstance().info(CliUtil.stackTraceAsString(e) );
+       return ResultBuilder.createGemFireErrorResult("Exception occured while clearing history " + e.getMessage());
+     }
+     return ResultBuilder.createInfoResult(CliStrings.HISTORY__MSG__CLEARED_HISTORY);
+ 
+   }
+ 
+ 
+ 
+   @CliCommand(value = { CliStrings.RUN }, help = CliStrings.RUN__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GFSH})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result executeScript(
+       @CliOption(key = CliStrings.RUN__FILE,
+                  optionContext = ConverterHint.FILE,
+                  mandatory = true,
+                  help = CliStrings.RUN__FILE__HELP)
+                  File file,
+       @CliOption(key = { CliStrings.RUN__QUIET },
+                  specifiedDefaultValue = "true",
+                  unspecifiedDefaultValue = "false",
+                  help = CliStrings.RUN__QUIET__HELP)
+                   boolean quiet,
+       @CliOption(key = { CliStrings.RUN__CONTINUEONERROR },
+                  specifiedDefaultValue = "true",
+                  unspecifiedDefaultValue = "false",
+                  help = CliStrings.RUN__CONTINUEONERROR__HELP)
+                   boolean continueOnError) {
+     Result result = null;
+ 
+     Gfsh gfsh = Gfsh.getCurrentInstance();
+     try {
+       result = gfsh.executeScript(file, quiet, continueOnError);
+     } catch (IllegalArgumentException e) {
+       result = ResultBuilder.createShellClientErrorResult(e.getMessage());
+     } // let CommandProcessingException go to the caller
+ 
+     return result;
+   }
+ 
+ 
+   @CliCommand(value = CliStrings.ENCRYPT, help = CliStrings.ENCRYPT__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GEMFIRE_DEBUG_UTIL})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result encryptPassword(
+       @CliOption(key = CliStrings.ENCRYPT_STRING,
+                  help = CliStrings.ENCRYPT_STRING__HELP,
+                  mandatory = true)
+                  String stringToEncrypt) {
+     return ResultBuilder.createInfoResult(PasswordUtil.encrypt(stringToEncrypt, false/*echo*/));
+   }
+ 
+   @CliCommand(value = { CliStrings.VERSION }, help = CliStrings.VERSION__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GFSH})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result version(
+       @CliOption(key = { CliStrings.VERSION__FULL },
+                  specifiedDefaultValue = "true",
+                  unspecifiedDefaultValue = "false",
+                  help = CliStrings.VERSION__FULL__HELP)
+                   boolean full) {
+     Gfsh gfsh = Gfsh.getCurrentInstance();
+ 
+     return ResultBuilder.createInfoResult(gfsh.getVersion(full));
+   }
+ 
+   @CliCommand(value = { CliStrings.SLEEP }, help = CliStrings.SLEEP__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GFSH})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result sleep(
+       @CliOption(key = { CliStrings.SLEEP__TIME },
+                  unspecifiedDefaultValue = "3",
+                  help = CliStrings.SLEEP__TIME__HELP)
+                   double time) {
+     try {
+       LogWrapper.getInstance().fine("Sleeping for " + time + "seconds.");
+       Thread.sleep( Math.round(time * 1000) );
+     } catch (InterruptedException ignorable) {}
+     return ResultBuilder.createInfoResult("");
+   }
+ 
+   @CliCommand(value = { CliStrings.SH }, help = CliStrings.SH__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GFSH})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result sh(
+       @CliArgument(name = CliStrings.SH__COMMAND,
+                    mandatory = true,
+                    help = CliStrings.SH__COMMAND__HELP)
+                     String command,
+       @CliOption(key = CliStrings.SH__USE_CONSOLE,
+                  specifiedDefaultValue = "true",
+                  unspecifiedDefaultValue = "false",
+                  help = CliStrings.SH__USE_CONSOLE__HELP)
+                   boolean useConsole) {
+     Result result = null;
+     try {
+       result = ResultBuilder.buildResult(executeCommand(Gfsh.getCurrentInstance(), command, useConsole));
+     } catch (IllegalStateException e) {
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+       LogWrapper.getInstance().warning("Unable to execute command \"" + command + "\". Reason:" + e.getMessage() + ".");
+     } catch (IOException e) {
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+       LogWrapper.getInstance().warning("Unable to execute command \"" + command + "\". Reason:" + e.getMessage() + ".");
+     }
+     return result;
+   }
+ 
+   private static InfoResultData executeCommand(Gfsh gfsh, String userCommand, boolean useConsole) throws IOException {
+     InfoResultData infoResultData = ResultBuilder.createInfoResultData();
+ 
+     String cmdToExecute   = userCommand;
+     String cmdExecutor    = "/bin/sh";
+     String cmdExecutorOpt = "-c";
+     if (SystemUtils.isWindows()) {
+       cmdExecutor    = "cmd";
+       cmdExecutorOpt = "/c";
+     } else if (useConsole) {
+       cmdToExecute = cmdToExecute + " </dev/tty >/dev/tty";
+     }
+     String[] commandArray = { cmdExecutor, cmdExecutorOpt, cmdToExecute };
+ 
+     ProcessBuilder builder = new ProcessBuilder();
+     builder.command(commandArray);
+     builder.directory();
+     builder.redirectErrorStream();
+     Process proc = builder.start();
+ 
+     BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+ 
+     String lineRead = "";
+     while ((lineRead = input.readLine()) != null) {
+       infoResultData.addLine(lineRead);
+     }
+ 
+     proc.getOutputStream().close();
+ 
+     try {
+       if (proc.waitFor() != 0) {
+         gfsh.logWarning("The command '" + userCommand + "' did not complete successfully", null);
+       }
+     } catch (final InterruptedException e) {
+       throw new IllegalStateException(e);
+     }
+     return infoResultData;
+   }
+ 
+ 
+   @CliAvailabilityIndicator({CliStrings.CONNECT, CliStrings.DISCONNECT, CliStrings.DESCRIBE_CONNECTION})
+   public boolean isAvailable() {
+     return true;
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/StatusCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/StatusCommands.java
index 0000000,a6557b1..04f3206
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/StatusCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/StatusCommands.java
@@@ -1,0 -1,92 +1,96 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.util.HashSet;
+ import java.util.List;
+ import java.util.Set;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ 
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.cli.Result.Status;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.FetchSharedConfigurationStatusFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.configuration.domain.SharedConfigurationStatus;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /********
+  * 
+  * @author bansods
+  *
+  */
+ 
+ public class StatusCommands extends AbstractCommandsSupport implements CommandMarker {
+   static final FetchSharedConfigurationStatusFunction fetchSharedConfigStatusFunction = new FetchSharedConfigurationStatusFunction(); 
+ 
+   @SuppressWarnings("unchecked")
+   @CliCommand (value = CliStrings.STATUS_SHARED_CONFIG, help = CliStrings.STATUS_SHARED_CONFIG_HELP)
+   @CliMetaData (relatedTopic = CliStrings.TOPIC_GEMFIRE_LOCATOR)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result statusSharedConfiguration() {
+     final GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
+     final Set<DistributedMember> locators = new HashSet<DistributedMember>(cache.getDistributionManager().getAllHostedLocatorsWithSharedConfiguration().keySet());
+     if (locators.isEmpty()) {
+       return ResultBuilder.createInfoResult(CliStrings.NO_LOCATORS_WITH_SHARED_CONFIG);
+     } else {
+       return ResultBuilder.buildResult(getSharedConfigurationStatus(locators));
+     }
+   }
+   
+   private TabularResultData getSharedConfigurationStatus(Set<DistributedMember> locators) {
+     boolean isSharedConfigRunning = false;
+     ResultCollector<?,?> rc = CliUtil.executeFunction(fetchSharedConfigStatusFunction, null, locators);
+     List<CliFunctionResult> results = (List<CliFunctionResult>)rc.getResult();
+     TabularResultData table = ResultBuilder.createTabularResultData();
+     table.setHeader("Status of shared configuration on locators");
+ 
+     for (CliFunctionResult result : results) {
+       table.accumulate(CliStrings.STATUS_SHARED_CONFIG_NAME_HEADER,  result.getMemberIdOrName());
+       String status = (String) result.getSerializables()[0];
+       table.accumulate(CliStrings.STATUS_SHARED_CONFIG_STATUS, status);
+       if (SharedConfigurationStatus.RUNNING.name().equals(status)) {
+         isSharedConfigRunning = true;
+       }
+     }
+ 
+     if (!isSharedConfigRunning) {
+       table.setStatus(Status.ERROR);
+     }
+     return table;
+   }
+   
+   @CliAvailabilityIndicator({ CliStrings.STATUS_SHARED_CONFIG})
+   public final boolean isConnected() {
+     if (!CliUtil.isGfshVM()) {
+       return true;
+     }
+     return (getGfsh() != null && getGfsh().isConnectedAndReady());
+   }
+ }


[39/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java
index 0000000,f724921..5cc17bb
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java
@@@ -1,0 -1,1450 +1,1466 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.io.BufferedReader;
+ import java.io.ByteArrayOutputStream;
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.PrintStream;
+ import java.net.URL;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Map.Entry;
+ import java.util.Set;
+ 
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.GemFireIOException;
+ import com.gemstone.gemfire.SystemFailure;
+ import com.gemstone.gemfire.admin.BackupStatus;
+ import com.gemstone.gemfire.admin.internal.AdminDistributedSystemImpl;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheExistsException;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.execute.Execution;
+ import com.gemstone.gemfire.cache.execute.FunctionInvocationTargetException;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.cache.persistence.PersistentID;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.distributed.internal.DM;
+ import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
+ import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+ import com.gemstone.gemfire.internal.cache.DiskStoreAttributes;
+ import com.gemstone.gemfire.internal.cache.DiskStoreImpl;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.cache.execute.AbstractExecution;
+ import com.gemstone.gemfire.internal.lang.ClassUtils;
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
+ import com.gemstone.gemfire.management.ManagementService;
+ import com.gemstone.gemfire.management.PersistentMemberDetails;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.cli.Result.Status;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.GfshParser;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.domain.DiskStoreDetails;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.CreateDiskStoreFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.DescribeDiskStoreFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.DestroyDiskStoreFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.ListDiskStoresFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData.SectionResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultDataException;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.cli.util.DiskStoreCompacter;
+ import com.gemstone.gemfire.management.internal.cli.util.DiskStoreNotFoundException;
+ import com.gemstone.gemfire.management.internal.cli.util.DiskStoreUpgrader;
+ import com.gemstone.gemfire.management.internal.cli.util.DiskStoreValidater;
+ import com.gemstone.gemfire.management.internal.cli.util.MemberNotFoundException;
+ import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
+ import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
+ import com.gemstone.gemfire.management.internal.messages.CompactRequest;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * The DiskStoreCommands class encapsulates all GemFire Disk Store commands in Gfsh.
+  * </p>
+  * @author Nikhil Jadhav
+  * @author John Blum
+  * @author Abhishek Chaudhari
+  * @author Sourabh Bansod
+  * @author David Hoots
+  * @see com.gemstone.gemfire.management.internal.cli.commands.AbstractCommandsSupport
+  * @since 7.0
+  */
+ @SuppressWarnings("unused")
+ public class DiskStoreCommands extends AbstractCommandsSupport {
+   
+   @Override
+   protected Set<DistributedMember> getMembers(final Cache cache) {
+     // TODO determine what this does (as it is untested and unmockable!)
+     return CliUtil.getAllMembers(cache);
+   }
+   
+   protected Set<DistributedMember> getNormalMembers(final Cache cache) {
+     // TODO determine what this does (as it is untested and unmockable!)
+     return CliUtil.getAllNormalMembers(cache);
+   }
+   
+   @CliCommand(value=CliStrings.BACKUP_DISK_STORE, help=CliStrings.BACKUP_DISK_STORE__HELP)
+   @CliMetaData(relatedTopic={ CliStrings.TOPIC_GEMFIRE_DISKSTORE })
++  @ResourceOperation(resource = Resource.DISKSTORE, operation= ResourceConstants.BACKUP_DISKSTORE)
+   public Result backupDiskStore(
+   
+   @CliOption(key=CliStrings.BACKUP_DISK_STORE__DISKDIRS,
+   unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+   help=CliStrings.BACKUP_DISK_STORE__DISKDIRS__HELP, 
+   mandatory = true)
+   String targetDir, 
+   @CliOption(key=CliStrings.BACKUP_DISK_STORE__BASELINEDIR,
+   help=CliStrings.BACKUP_DISK_STORE__BASELINEDIR__HELP) 
+   String baselineDir){
+ 
+     Result result = null;
+     try {
+       GemFireCacheImpl cache = (GemFireCacheImpl)CacheFactory.getAnyInstance();
+       DM dm = cache.getDistributionManager();
+       BackupStatus backupStatus = null; 
+       
+       if (baselineDir != null && !baselineDir.isEmpty()) {
+        backupStatus = AdminDistributedSystemImpl.backupAllMembers(dm, new File(targetDir), new File(baselineDir));
+       } else {
+        backupStatus = AdminDistributedSystemImpl.backupAllMembers(dm, new File(targetDir), null);
+       }
+       
+       Map<DistributedMember, Set<PersistentID>> backedupMemberDiskstoreMap = backupStatus.getBackedUpDiskStores();
+       
+       Set<DistributedMember> backedupMembers = backedupMemberDiskstoreMap.keySet();
+       CompositeResultData crd = ResultBuilder.createCompositeResultData();
+       
+       
+       if (!backedupMembers.isEmpty()) {
+        
+         SectionResultData backedupDiskStoresSection = crd.addSection();
+         backedupDiskStoresSection.setHeader(CliStrings.BACKUP_DISK_STORE_MSG_BACKED_UP_DISK_STORES);
+         TabularResultData backedupDiskStoresTable = backedupDiskStoresSection.addTable();
+         
+         for (DistributedMember member : backedupMembers) {
+           Set<PersistentID> backedupDiskStores =  backedupMemberDiskstoreMap.get(member);
+           boolean printMember = true;
+           String memberName = member.getName();
+           
+           if (memberName == null || memberName.isEmpty()) {
+             memberName = member.getId();
+           }
+           for (PersistentID persistentId : backedupDiskStores) {
+             if (persistentId != null) {
+               
+               String UUID = persistentId.getUUID().toString();
+               String hostName = persistentId.getHost().getHostName();
+               String directory = persistentId.getDirectory();
+               
+               if (printMember) {
+                 writeToBackupDisktoreTable(backedupDiskStoresTable, memberName, UUID, hostName, directory);
+                 printMember = false;
+               } else {
+                 writeToBackupDisktoreTable(backedupDiskStoresTable, "", UUID, hostName, directory);
+               }
+             }
+           }
+         }
+       } else {
+         SectionResultData noMembersBackedUp = crd.addSection();
+         noMembersBackedUp.setHeader(CliStrings.BACKUP_DISK_STORE_MSG_NO_DISKSTORES_BACKED_UP);
+       }
+      
+      Set<PersistentID> offlineDiskStores =  backupStatus.getOfflineDiskStores();
+      
+      if (!offlineDiskStores.isEmpty()) {
+        SectionResultData offlineDiskStoresSection = crd.addSection();
+        TabularResultData offlineDiskStoresTable = offlineDiskStoresSection.addTable();
+        
+        offlineDiskStoresSection.setHeader(CliStrings.BACKUP_DISK_STORE_MSG_OFFLINE_DISK_STORES);
+        for (PersistentID offlineDiskStore : offlineDiskStores) {
+          offlineDiskStoresTable.accumulate(CliStrings.BACKUP_DISK_STORE_MSG_UUID, offlineDiskStore.getUUID().toString());
+          offlineDiskStoresTable.accumulate(CliStrings.BACKUP_DISK_STORE_MSG_HOST, offlineDiskStore.getHost().getHostName());
+          offlineDiskStoresTable.accumulate(CliStrings.BACKUP_DISK_STORE_MSG_DIRECTORY, offlineDiskStore.getDirectory());
+        }
+      }
+      result = ResultBuilder.buildResult(crd);
+      
+     } catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     }
+     return result;
+   }
+   private void writeToBackupDisktoreTable(TabularResultData backedupDiskStoreTable, String memberId, String UUID, String host, String directory) {
+     backedupDiskStoreTable.accumulate(CliStrings.BACKUP_DISK_STORE_MSG_MEMBER, memberId);
+     backedupDiskStoreTable.accumulate(CliStrings.BACKUP_DISK_STORE_MSG_UUID, UUID);
+     backedupDiskStoreTable.accumulate(CliStrings.BACKUP_DISK_STORE_MSG_DIRECTORY, directory);
+     backedupDiskStoreTable.accumulate(CliStrings.BACKUP_DISK_STORE_MSG_HOST, host);
+   }
+ 
+ 
+   @CliCommand(value = CliStrings.LIST_DISK_STORE, help = CliStrings.LIST_DISK_STORE__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = { CliStrings.TOPIC_GEMFIRE_DISKSTORE })
++  @ResourceOperation(resource = Resource.DISKSTORE, operation= ResourceConstants.LIST_DS)
+   public Result listDiskStore() {
+     try {
+       Set<DistributedMember> dataMembers = getNormalMembers(getCache());
+       
+       if (dataMembers.isEmpty()) {
+        return ResultBuilder.createInfoResult(CliStrings.NO_CACHING_MEMBERS_FOUND_MESSAGE);
+       }
+      
+       return toTabularResult(getDiskStoreListing(dataMembers));
+     }
+     catch (FunctionInvocationTargetException ignore) {
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.COULD_NOT_EXECUTE_COMMAND_TRY_AGAIN,
+         CliStrings.LIST_DISK_STORE));
+     }
+     catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     }
+     catch (Throwable t) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult(String.format(CliStrings.LIST_DISK_STORE__ERROR_MESSAGE,
+         toString(t, isDebugging())));
+     }
+   }
+ 
+   @SuppressWarnings("unchecked")
+   protected List<DiskStoreDetails> getDiskStoreListing(Set<DistributedMember> members) {
+     final Execution membersFunctionExecutor = getMembersFunctionExecutor(members);
+     if (membersFunctionExecutor instanceof AbstractExecution) {
+       ((AbstractExecution) membersFunctionExecutor).setIgnoreDepartedMembers(true);
+     }
+ 
+     final ResultCollector<?, ?> resultCollector = membersFunctionExecutor.execute(new ListDiskStoresFunction());
+ 
+     final List<?> results = (List<?>) resultCollector.getResult();
+     final List<DiskStoreDetails> distributedSystemMemberDiskStores = new ArrayList<DiskStoreDetails>(results.size());
+ 
+     for (final Object result : results) {
+       if (result instanceof Set) { // ignore FunctionInvocationTargetExceptions and other Exceptions...
+         distributedSystemMemberDiskStores.addAll((Set<DiskStoreDetails>) result);
+       }
+     }
+ 
+     Collections.sort(distributedSystemMemberDiskStores);
+ 
+     return distributedSystemMemberDiskStores;
+   }
+ 
+   protected Result toTabularResult(final List<DiskStoreDetails> diskStoreList) throws ResultDataException {
+     if (!diskStoreList.isEmpty()) {
+       final TabularResultData diskStoreData = ResultBuilder.createTabularResultData();
+ 
+       for (final DiskStoreDetails diskStoreDetails : diskStoreList) {
+         diskStoreData.accumulate("Member Name", diskStoreDetails.getMemberName());
+         diskStoreData.accumulate("Member Id", diskStoreDetails.getMemberId());
+         diskStoreData.accumulate("Disk Store Name", diskStoreDetails.getName());
+         diskStoreData.accumulate("Disk Store ID", diskStoreDetails.getId());
+       }
+ 
+       return ResultBuilder.buildResult(diskStoreData);
+     }
+     else {
+       return ResultBuilder.createInfoResult(CliStrings.LIST_DISK_STORE__DISK_STORES_NOT_FOUND_MESSAGE);
+     }
+   }
+ 
+   @CliCommand(value=CliStrings.CREATE_DISK_STORE, help=CliStrings.CREATE_DISK_STORE__HELP)
+   @CliMetaData(shellOnly=false, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE}, writesToSharedConfiguration=true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.CREATE_DISKSTORE)
+   public Result createDiskStore(@CliOption(key=CliStrings.CREATE_DISK_STORE__NAME, 
+                                            mandatory=true,
+                                            optionContext = ConverterHint.DISKSTORE_ALL, 
+                                            help=CliStrings.CREATE_DISK_STORE__NAME__HELP)
+                                 String name,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__ALLOW_FORCE_COMPACTION,
+                                            specifiedDefaultValue = "true", 
+                                            unspecifiedDefaultValue = "false",
+                                            help=CliStrings.CREATE_DISK_STORE__ALLOW_FORCE_COMPACTION__HELP)
+                                 boolean allowForceCompaction,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__AUTO_COMPACT,
+                                            specifiedDefaultValue = "true", 
+                                            unspecifiedDefaultValue = "true",
+                                            help=CliStrings.CREATE_DISK_STORE__AUTO_COMPACT__HELP)
+                                 boolean autoCompact,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__COMPACTION_THRESHOLD,
+                                            unspecifiedDefaultValue="50",
+                                            help=CliStrings.CREATE_DISK_STORE__COMPACTION_THRESHOLD__HELP)
+                                 int compactionThreshold,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__MAX_OPLOG_SIZE,
+                                            unspecifiedDefaultValue="1024",
+                                            help=CliStrings.CREATE_DISK_STORE__MAX_OPLOG_SIZE__HELP)
+                                 int maxOplogSize,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__QUEUE_SIZE,
+                                            unspecifiedDefaultValue="0",
+                                            help=CliStrings.CREATE_DISK_STORE__QUEUE_SIZE__HELP)
+                                 int queueSize,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__TIME_INTERVAL,
+                                            unspecifiedDefaultValue="1000",
+                                            help=CliStrings.CREATE_DISK_STORE__TIME_INTERVAL__HELP)
+                                 long timeInterval,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__WRITE_BUFFER_SIZE,
+                                            unspecifiedDefaultValue="32768",
+                                            help=CliStrings.CREATE_DISK_STORE__WRITE_BUFFER_SIZE__HELP)
+                                 int writeBufferSize,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__DIRECTORY_AND_SIZE,
+                                            mandatory=true,
+                                            help=CliStrings.CREATE_DISK_STORE__DIRECTORY_AND_SIZE__HELP,
+                                            optionContext=ConverterHint.STRING_DISABLER)
+                                 @CliMetaData (valueSeparator = ",")
+                                 String[] directoriesAndSizes,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__GROUP,
+                                            help=CliStrings.CREATE_DISK_STORE__GROUP__HELP,
+                                            optionContext=ConverterHint.MEMBERGROUP)
+                                 @CliMetaData (valueSeparator = ",")
+                                 String[] groups,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__DISK_USAGE_WARNING_PCT, 
+                                            unspecifiedDefaultValue="90",
+                                            help=CliStrings.CREATE_DISK_STORE__DISK_USAGE_WARNING_PCT__HELP)
+                                 float diskUsageWarningPercentage,
+                                 @CliOption(key=CliStrings.CREATE_DISK_STORE__DISK_USAGE_CRITICAL_PCT, 
+                                            unspecifiedDefaultValue="99",
+                                            help=CliStrings.CREATE_DISK_STORE__DISK_USAGE_CRITICAL_PCT__HELP)
+                                 float diskUsageCriticalPercentage) {
+     
+     try {
+       DiskStoreAttributes diskStoreAttributes = new DiskStoreAttributes();
+       diskStoreAttributes.allowForceCompaction = allowForceCompaction;
+       diskStoreAttributes.autoCompact = autoCompact;
+       diskStoreAttributes.compactionThreshold = compactionThreshold;
+       diskStoreAttributes.maxOplogSizeInBytes = maxOplogSize * (1024*1024);
+       diskStoreAttributes.queueSize = queueSize;
+       diskStoreAttributes.timeInterval = timeInterval;
+       diskStoreAttributes.writeBufferSize = writeBufferSize;
+       
+       File[] directories = new File[directoriesAndSizes.length];
+       int[] sizes = new int[directoriesAndSizes.length];
+       for (int i = 0; i < directoriesAndSizes.length; i++) {
+         final int hashPosition = directoriesAndSizes[i].indexOf('#');
+         if (hashPosition == -1) {
+           directories[i] = new File(directoriesAndSizes[i]);
+           sizes[i] = Integer.MAX_VALUE;
+         } else {
+           directories[i] = new File(directoriesAndSizes[i].substring(0, hashPosition));
+           sizes[i] = Integer.parseInt(directoriesAndSizes[i].substring(hashPosition + 1));
+         }
+       }
+       diskStoreAttributes.diskDirs = directories;
+       diskStoreAttributes.diskDirSizes = sizes;
+       
+       diskStoreAttributes.setDiskUsageWarningPercentage(diskUsageWarningPercentage);;
+       diskStoreAttributes.setDiskUsageCriticalPercentage(diskUsageCriticalPercentage);
+ 
+       TabularResultData tabularData = ResultBuilder.createTabularResultData();
+       boolean accumulatedData = false;
+ 
+       Set<DistributedMember> targetMembers;
+       try {
+         targetMembers = CliUtil.findAllMatchingMembers(groups, null);
+       } catch (CommandResultException crex) {
+         return crex.getResult();
+       }
+ 
+       ResultCollector<?, ?> rc = CliUtil.executeFunction(new CreateDiskStoreFunction(), new Object[] { name, diskStoreAttributes },
+           targetMembers);
+       List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) rc.getResult());
+ 
+       XmlEntity xmlEntity = null;
+       for (CliFunctionResult result : results) {
+         if (result.getThrowable() != null) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Result", "ERROR: " + result.getThrowable().getClass().getName() + ": "
+               + result.getThrowable().getMessage());
+           accumulatedData = true;
+           tabularData.setStatus(Status.ERROR);
+         } else if (result.isSuccessful()) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Result", result.getMessage());
+           accumulatedData = true;
+           
+           if (xmlEntity == null) {
+             xmlEntity = result.getXmlEntity();
+           }
+         }
+       }
+ 
+       if (!accumulatedData) {
+         return ResultBuilder.createInfoResult("Unable to create disk store(s).");
+       }
+       
+       Result result = ResultBuilder.buildResult(tabularData);
+       
+       if (xmlEntity != null) {
+         result.setCommandPersisted((new SharedConfigurationWriter()).addXmlEntity(xmlEntity, groups));
+       }
+       
+       return ResultBuilder.buildResult(tabularData);
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.CREATE_DISK_STORE__ERROR_WHILE_CREATING_REASON_0,
+           new Object[] { th.getMessage() }));
+     }
+   }
+ 
+     
+   @CliCommand(value=CliStrings.COMPACT_DISK_STORE, help=CliStrings.COMPACT_DISK_STORE__HELP)
+   @CliMetaData(shellOnly=false, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE})
++  @ResourceOperation(resource = Resource.DISKSTORE, operation= ResourceConstants.COMPACT_DISKSTORE)
+   public Result compactDiskStore(@CliOption(key=CliStrings.COMPACT_DISK_STORE__NAME, 
+                                             mandatory=true,
+                                             optionContext = ConverterHint.DISKSTORE_ALL, 
+                                             help=CliStrings.COMPACT_DISK_STORE__NAME__HELP)
+                                  String diskStoreName,
+                                  @CliOption(key=CliStrings.COMPACT_DISK_STORE__GROUP,
+                                             unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+                                             help=CliStrings.COMPACT_DISK_STORE__GROUP__HELP,
+                                             optionContext=ConverterHint.STRING_DISABLER)
+                                  @CliMetaData (valueSeparator = ",")
+                                  String[] groups) {
+     Result result = null;
+ 
+     try {
+       // disk store exists validation
+       if (!diskStoreExists(diskStoreName)) {
+         result = ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.COMPACT_DISK_STORE__DISKSTORE_0_DOESNOT_EXIST, new Object[] {diskStoreName}));
+       } else {
+         InternalDistributedSystem ds = (InternalDistributedSystem)getCache().getDistributedSystem();
+   
+         Map<DistributedMember, PersistentID> overallCompactInfo = new HashMap<DistributedMember, PersistentID>();
+         
+         Set<?> otherMembers = ds.getDistributionManager().getOtherNormalDistributionManagerIds();
+         Set<InternalDistributedMember> allMembers = new HashSet<InternalDistributedMember>();
+         
+         for (Object member : otherMembers) {
+           allMembers.add((InternalDistributedMember) member);
+         }
+         allMembers.add(ds.getDistributedMember());
+         otherMembers = null;
+         
+         String  groupInfo = "";
+         // if groups are specified, find members in the specified group
+         if (groups != null && groups.length > 0) {
+           groupInfo = CliStrings.format(CliStrings.COMPACT_DISK_STORE__MSG__FOR_GROUP, new Object[] {Arrays.toString(groups) + "."});
+           final Set<InternalDistributedMember> selectedMembers = new HashSet<InternalDistributedMember>();
+           List<String> targetedGroups = Arrays.asList(groups);
+           for (Iterator<InternalDistributedMember> iterator = allMembers.iterator(); iterator.hasNext();) {
+             InternalDistributedMember member = iterator.next();
+             List<String> memberGroups = member.getGroups();
+             if (!Collections.disjoint(targetedGroups, memberGroups)) {
+               selectedMembers.add(member);
+             }
+           }
+           
+           allMembers = selectedMembers;
+         }
+         
+         // allMembers should not be empty when groups are not specified - it'll
+         // have at least one member
+         if (allMembers.isEmpty()) {
+           result = ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.COMPACT_DISK_STORE__NO_MEMBERS_FOUND_IN_SPECIFED_GROUP, new Object[] {Arrays.toString(groups)}));
+         } else {
+           // first invoke on local member if it exists in the targeted set
+           if (allMembers.remove(ds.getDistributedMember())) {
+             PersistentID compactedDiskStoreId = CompactRequest.compactDiskStore(diskStoreName);
+             if (compactedDiskStoreId != null) {
+               overallCompactInfo.put(ds.getDistributedMember(), compactedDiskStoreId);
+             }
+           }
+           
+           // was this local member the only one? Then don't try to send
+           // CompactRequest. Otherwise, send the request to others
+           if (!allMembers.isEmpty()) {
+             // Invoke compact on all 'other' members
+             Map<DistributedMember, PersistentID> memberCompactInfo = CompactRequest.send(ds.getDistributionManager(), diskStoreName, allMembers);
+             if (memberCompactInfo != null && !memberCompactInfo.isEmpty()) {
+               overallCompactInfo.putAll(memberCompactInfo);
+               memberCompactInfo.clear();
+             }
+             String notExecutedMembers = CompactRequest.getNotExecutedMembers();
+             LogWrapper.getInstance().info("compact disk-store \""+diskStoreName+"\" message was scheduled to be sent to but was not send to "+notExecutedMembers);
+           }
+   
+           // If compaction happened at all, then prepare the summary
+           if (overallCompactInfo != null && !overallCompactInfo.isEmpty()) {
+             CompositeResultData compositeResultData = ResultBuilder.createCompositeResultData();
+             SectionResultData section = null;
+             
+             Set<Entry<DistributedMember, PersistentID>> entries = overallCompactInfo.entrySet();
+     
+             for (Entry<DistributedMember, PersistentID> entry : entries) {
+               String memberId = entry.getKey().getId();
+               section = compositeResultData.addSection(memberId);
+               section.addData("On Member", memberId);
+     
+               PersistentID persistentID = entry.getValue();
+               if (persistentID != null) {
+                 SectionResultData subSection = section.addSection("DiskStore"+memberId);
+                 subSection.addData("UUID", persistentID.getUUID());
+                 subSection.addData("Host", persistentID.getHost().getHostName());
+                 subSection.addData("Directory", persistentID.getDirectory());
+               }
+             }
+             compositeResultData.setHeader("Compacted " + diskStoreName + groupInfo);
+             result = ResultBuilder.buildResult(compositeResultData);
+           } else {
+             result = ResultBuilder.createInfoResult(CliStrings.COMPACT_DISK_STORE__COMPACTION_ATTEMPTED_BUT_NOTHING_TO_COMPACT);
+           }
+         } // all members' if
+       } // disk store exists' if
+     } catch (RuntimeException e) {
+       LogWrapper.getInstance().info(e.getMessage(), e);
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.COMPACT_DISK_STORE__ERROR_WHILE_COMPACTING_REASON_0, new Object[] {e.getMessage()}));
+     }
+     
+     return result;
+   }
+   
+   private boolean diskStoreExists(String diskStoreName) {
+     Cache cache = getCache();
+     ManagementService managementService = ManagementService.getExistingManagementService(cache);
+     DistributedSystemMXBean dsMXBean = managementService.getDistributedSystemMXBean();
+     Map<String, String[]> diskstore = dsMXBean.listMemberDiskstore();
+     
+     Set<Entry<String, String[]>> entrySet = diskstore.entrySet();
+     
+     for (Entry<String, String[]> entry : entrySet) {
+       String[] value = entry.getValue(); 
+       if (CliUtil.contains(value, diskStoreName)) {
+         return true;
+       }
+     }
+     
+     return false;
+   }
+ 
+   @CliCommand(value=CliStrings.COMPACT_OFFLINE_DISK_STORE, help=CliStrings.COMPACT_OFFLINE_DISK_STORE__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result compactOfflineDiskStore(
+                  @CliOption(key=CliStrings.COMPACT_OFFLINE_DISK_STORE__NAME, 
+                             mandatory=true,
+                             help=CliStrings.COMPACT_OFFLINE_DISK_STORE__NAME__HELP)
+                  String diskStoreName,
+                  @CliOption(key=CliStrings.COMPACT_OFFLINE_DISK_STORE__DISKDIRS,
+                             mandatory=true,
+                             unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+                             help=CliStrings.COMPACT_OFFLINE_DISK_STORE__DISKDIRS__HELP,
+                             optionContext=ConverterHint.DIRS+":"+ConverterHint.STRING_DISABLER)
+                  @CliMetaData (valueSeparator = ",")
+                  String[] diskDirs,
+                  @CliOption(key=CliStrings.COMPACT_OFFLINE_DISK_STORE__MAXOPLOGSIZE,
+                             unspecifiedDefaultValue="-1",
+                             help=CliStrings.COMPACT_OFFLINE_DISK_STORE__MAXOPLOGSIZE__HELP)
+                  long maxOplogSize,
+                  @CliOption(key=CliStrings.COMPACT_OFFLINE_DISK_STORE__J,
+                             unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+                             help=CliStrings.COMPACT_OFFLINE_DISK_STORE__J__HELP)
+                  @CliMetaData (valueSeparator = ",")
+                  String[] jvmProps) {
+     Result result = null;
+     LogWrapper logWrapper = LogWrapper.getInstance();
+ 
+     StringBuilder output = new StringBuilder();
+     StringBuilder error = new StringBuilder();
+     String errorMessage = "";
+     Process compacterProcess = null;
+ 
+     try {
+       String validatedDirectories = validatedDirectories(diskDirs);
+       if (validatedDirectories != null) {
+         throw new IllegalArgumentException("Could not find "+CliStrings.COMPACT_OFFLINE_DISK_STORE__DISKDIRS + ": \""+validatedDirectories+"\"");
+       }
+ 
+       List<String> commandList = new ArrayList<String>();
+       commandList.add(System.getProperty("java.home") + File.separatorChar + "bin"+ File.separatorChar + "java");
+       
+       configureLogging(commandList);
+           
+       if (jvmProps != null && jvmProps.length != 0) {
+         for (int i = 0; i < jvmProps.length; i++) {
+           commandList.add(jvmProps[i]);
+         }
+       }
+       commandList.add("-classpath");
+       commandList.add(System.getProperty("java.class.path", "."));
+       commandList.add(DiskStoreCompacter.class.getName());
+       
+       commandList.add(CliStrings.COMPACT_OFFLINE_DISK_STORE__NAME+"="+diskStoreName);
+       
+       if (diskDirs != null && diskDirs.length != 0) {
+         StringBuilder builder = new StringBuilder();
+         int arrayLength = diskDirs.length;
+         for (int i = 0; i < arrayLength; i++) {
+           if (File.separatorChar == '\\') {
+             builder.append(diskDirs[i].replace("\\", "/")); // see 46120
+           } else {
+             builder.append(diskDirs[i]);
+           }
+           if (i + 1 != arrayLength) {
+             builder.append(',');
+           }
+         }
+         commandList.add(CliStrings.COMPACT_OFFLINE_DISK_STORE__DISKDIRS+"="+builder.toString());
+       }
+       // -1 is ignore as maxOplogSize
+       commandList.add(CliStrings.COMPACT_OFFLINE_DISK_STORE__MAXOPLOGSIZE+"="+maxOplogSize);
+ 
+       ProcessBuilder procBuilder = new ProcessBuilder(commandList);
+       compacterProcess = procBuilder.start();
+       InputStream inputStream = compacterProcess.getInputStream();
+       InputStream errorStream = compacterProcess.getErrorStream();
+       BufferedReader inputReader = new BufferedReader(new InputStreamReader(inputStream));
+       BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
+ 
+       String line = null;
+       while ((line = inputReader.readLine()) != null) {
+         output.append(line).append(GfshParser.LINE_SEPARATOR);
+       }
+ 
+       line = null;
+       boolean switchToStackTrace = false;
+       while ((line = errorReader.readLine()) != null) {
+         if (!switchToStackTrace && DiskStoreCompacter.STACKTRACE_START.equals(line)) {
+           switchToStackTrace = true;
+         } else if (switchToStackTrace) {
+           error.append(line).append(GfshParser.LINE_SEPARATOR);
+         } else {
+           errorMessage = errorMessage + line;
+         }
+       }
+ 
+       if (!errorMessage.isEmpty()) {
+         throw new GemFireIOException(errorMessage);
+       }
+ 
+       // do we have to waitFor??
+       compacterProcess.destroy();
+       result = ResultBuilder.createInfoResult(output.toString());
+     } catch (IOException e) {
+       if (output.length() != 0) {
+         Gfsh.println(output.toString());
+       }
+       String fieldsMessage = (maxOplogSize != -1 ? CliStrings.COMPACT_OFFLINE_DISK_STORE__MAXOPLOGSIZE + "=" +maxOplogSize + "," : "");
+       fieldsMessage += CliUtil.arrayToString(diskDirs);
+       String errorString = CliStrings.format(CliStrings.COMPACT_OFFLINE_DISK_STORE__MSG__ERROR_WHILE_COMPACTING_DISKSTORE_0_WITH_1_REASON_2, new Object[] {diskStoreName, fieldsMessage});
+       result = ResultBuilder.createUserErrorResult(errorString);
+       if (logWrapper.fineEnabled()) {
+         logWrapper.fine(e.getMessage(), e);
+       }
+     } catch (GemFireIOException e) {
+       if (output.length() != 0) {
+         Gfsh.println(output.toString());
+       }
+       result = ResultBuilder.createUserErrorResult(errorMessage);
+       if (logWrapper.fineEnabled()) {
+         logWrapper.fine(error.toString());
+       }
+     } catch (IllegalArgumentException e) {
+       if (output.length() != 0) {
+         Gfsh.println(output.toString());
+       }
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+     } finally {
+       if (compacterProcess != null) {
+         try {
+           // just to check whether the process has exited
+           // Process.exitValue() throws IllegalThreadStateException if Process 
+           // is alive
+           compacterProcess.exitValue();
+         } catch (IllegalThreadStateException ise) {
+           // not yet terminated, destroy the process
+           compacterProcess.destroy();
+         }
+       }
+     }
+     return result;
+   }
+ 
+   
+   @CliCommand(value=CliStrings.UPGRADE_OFFLINE_DISK_STORE, help=CliStrings.UPGRADE_OFFLINE_DISK_STORE__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result upgradeOfflineDiskStore(
+       @CliOption(key=CliStrings.UPGRADE_OFFLINE_DISK_STORE__NAME, 
+       mandatory=true,
+       help=CliStrings.UPGRADE_OFFLINE_DISK_STORE__NAME__HELP)
+       String diskStoreName,
+       @CliOption(key=CliStrings.UPGRADE_OFFLINE_DISK_STORE__DISKDIRS,
+       mandatory=true,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help=CliStrings.UPGRADE_OFFLINE_DISK_STORE__DISKDIRS__HELP,
+       optionContext=ConverterHint.DIRS+":"+ConverterHint.STRING_DISABLER)
+       @CliMetaData (valueSeparator = ",")
+       String[] diskDirs,
+       @CliOption(key=CliStrings.UPGRADE_OFFLINE_DISK_STORE__MAXOPLOGSIZE,
+       unspecifiedDefaultValue="-1",
+       help=CliStrings.UPGRADE_OFFLINE_DISK_STORE__MAXOPLOGSIZE__HELP)
+       long maxOplogSize,
+       @CliOption(key=CliStrings.UPGRADE_OFFLINE_DISK_STORE__J,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help=CliStrings.UPGRADE_OFFLINE_DISK_STORE__J__HELP)
+       @CliMetaData (valueSeparator = ",")
+       String[] jvmProps) throws InterruptedException {
+ 
+     
+     Result result = null;
+     LogWrapper logWrapper = LogWrapper.getInstance();
+ 
+     StringBuilder output = new StringBuilder();
+     StringBuilder error = new StringBuilder();
+     String errorMessage = "";
+     Process upgraderProcess = null;
+       
+     try {
+       String validatedDirectories = validatedDirectories(diskDirs);
+       if (validatedDirectories != null) {
+         throw new IllegalArgumentException("Could not find "+CliStrings.UPGRADE_OFFLINE_DISK_STORE__DISKDIRS + ": \""+validatedDirectories+"\"");
+       }
+ 
+       List<String> commandList = new ArrayList<String>();
+       commandList.add(System.getProperty("java.home") + File.separatorChar + "bin"+ File.separatorChar + "java");
+ 
+       configureLogging(commandList);
+ 
+       if (jvmProps != null && jvmProps.length != 0) {
+         for (int i = 0; i < jvmProps.length; i++) {
+           commandList.add(jvmProps[i]);
+         }
+       }
+       commandList.add("-classpath");
+       commandList.add(System.getProperty("java.class.path", "."));
+       commandList.add(DiskStoreUpgrader.class.getName());
+       
+       commandList.add(CliStrings.UPGRADE_OFFLINE_DISK_STORE__NAME+"="+diskStoreName);
+       
+       if (diskDirs != null && diskDirs.length != 0) {
+         StringBuilder builder = new StringBuilder();
+         int arrayLength = diskDirs.length;
+         for (int i = 0; i < arrayLength; i++) {
+           if (File.separatorChar == '\\') {
+             builder.append(diskDirs[i].replace("\\", "/")); // see 46120
+           } else {
+             builder.append(diskDirs[i]);
+           }
+           if (i + 1 != arrayLength) {
+             builder.append(',');
+           }
+         }
+         commandList.add(CliStrings.UPGRADE_OFFLINE_DISK_STORE__DISKDIRS+"="+builder.toString());
+       }
+       // -1 is ignore as maxOplogSize
+       commandList.add(CliStrings.UPGRADE_OFFLINE_DISK_STORE__MAXOPLOGSIZE+"="+maxOplogSize);
+ 
+       ProcessBuilder procBuilder = new ProcessBuilder(commandList);
+       //procBuilder.redirectErrorStream(true);
+       upgraderProcess = procBuilder.start();
+       InputStream inputStream = upgraderProcess.getInputStream();
+       InputStream errorStream = upgraderProcess.getErrorStream();
+       BufferedReader inputReader = new BufferedReader(new InputStreamReader(inputStream));
+       BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
+ 
+       String line = null;
+       while ((line = inputReader.readLine()) != null) {
+         output.append(line).append(GfshParser.LINE_SEPARATOR);
+       }
+ 
+       line = null;
+       boolean switchToStackTrace = false;
+       while ((line = errorReader.readLine()) != null) {
+         if (!switchToStackTrace && DiskStoreUpgrader.STACKTRACE_START.equals(line)) {
+           switchToStackTrace = true;
+         } else if (switchToStackTrace) {
+           error.append(line).append(GfshParser.LINE_SEPARATOR);
+         } else {
+           errorMessage = errorMessage + line;
+         }
+       }
+ 
+       if (!errorMessage.isEmpty()) {
+         throw new GemFireIOException(errorMessage);
+       }
+ 
+       // do we have to waitFor??
+       //upgraderProcess.waitFor();
+       upgraderProcess.destroy();
+       result = ResultBuilder.createInfoResult(output.toString());
+     } catch (IOException e) {
+       if (output.length() != 0) {
+         Gfsh.println(output.toString());
+       }
+       String fieldsMessage = (maxOplogSize != -1 ? CliStrings.UPGRADE_OFFLINE_DISK_STORE__MAXOPLOGSIZE + "=" +maxOplogSize + "," : "");
+       fieldsMessage += CliUtil.arrayToString(diskDirs);
+       String errorString = CliStrings.format(CliStrings.UPGRADE_OFFLINE_DISK_STORE__MSG__ERROR_WHILE_COMPACTING_DISKSTORE_0_WITH_1_REASON_2, new Object[] {diskStoreName, fieldsMessage});
+       result = ResultBuilder.createUserErrorResult(errorString);
+       if (logWrapper.fineEnabled()) {
+         logWrapper.fine(e.getMessage(), e);
+       }
+     } catch (GemFireIOException e) {
+       if (output.length() != 0) {
+         Gfsh.println(output.toString());
+       }
+       result = ResultBuilder.createUserErrorResult(errorMessage);
+       if (logWrapper.fineEnabled()) {
+         logWrapper.fine(error.toString());
+       }
+     } catch (IllegalArgumentException e) {
+       if (output.length() != 0) {
+         Gfsh.println(output.toString());
+       }
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+     } finally {
+       if (upgraderProcess != null) {
+         try {
+           // just to check whether the process has exited
+           // Process.exitValue() throws IllegalStateException if Process is alive
+           upgraderProcess.exitValue();
+         } catch (IllegalThreadStateException itse) {
+           // not yet terminated, destroy the process
+           upgraderProcess.destroy();
+         }
+       }
+     }
+     return result;
+   }
+   
+   
+   
+   private String validatedDirectories(String[] diskDirs) {
+     String invalidDirectories = null;
+     StringBuilder builder = null;
+     File diskDir = null; 
+     for (String diskDirPath : diskDirs) {
+       diskDir = new File(diskDirPath);
+       if (!diskDir.exists()) {
+         if (builder == null) {
+           builder = new StringBuilder();
+         } else if (builder.length() != 0) {
+           builder.append(", ");
+         }
+         builder.append(diskDirPath);
+       }
+     }
+     if (builder != null) {
+       invalidDirectories = builder.toString();
+     } 
+ 
+     return invalidDirectories;
+   }
+ 
+   @CliCommand(value = CliStrings.DESCRIBE_DISK_STORE, help = CliStrings.DESCRIBE_DISK_STORE__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = { CliStrings.TOPIC_GEMFIRE_DISKSTORE })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result describeDiskStore(@CliOption(key = CliStrings.DESCRIBE_DISK_STORE__MEMBER, mandatory = true, optionContext = ConverterHint.MEMBERIDNAME, help = CliStrings.DESCRIBE_DISK_STORE__MEMBER__HELP)
+                                   final String memberName,
+                                   @CliOption(key = CliStrings.DESCRIBE_DISK_STORE__NAME, mandatory = true, optionContext = ConverterHint.DISKSTORE_ALL, help = CliStrings.DESCRIBE_DISK_STORE__NAME__HELP)
+                                   final String diskStoreName) {
+     try {
+       return toCompositeResult(getDiskStoreDescription(memberName, diskStoreName));
+     }
+     catch (DiskStoreNotFoundException e) {
+       return ResultBuilder.createShellClientErrorResult(e.getMessage());
+     }
+     catch (MemberNotFoundException e) {
+       return ResultBuilder.createShellClientErrorResult(e.getMessage());
+     }
+     catch (FunctionInvocationTargetException ignore) {
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.COULD_NOT_EXECUTE_COMMAND_TRY_AGAIN,
+         CliStrings.DESCRIBE_DISK_STORE));
+     }
+     catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     }
+     catch (Throwable t) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult(String.format(CliStrings.DESCRIBE_DISK_STORE__ERROR_MESSAGE,
+         memberName, diskStoreName, toString(t, isDebugging())));
+     }
+   }
+ 
+   protected DiskStoreDetails getDiskStoreDescription(final String memberName, final String diskStoreName) {
+     final DistributedMember member = getMember(getCache(), memberName); // may throw a MemberNotFoundException
+ 
+     final ResultCollector<?, ?> resultCollector = getMembersFunctionExecutor(Collections.singleton(member))
+       .withArgs(diskStoreName).execute(new DescribeDiskStoreFunction());
+ 
+     final Object result = ((List<?>) resultCollector.getResult()).get(0);
+ 
+     if (result instanceof DiskStoreDetails) { // disk store details in hand...
+       return (DiskStoreDetails) result;
+     }
+     else if (result instanceof DiskStoreNotFoundException) { // bad disk store name...
+       throw (DiskStoreNotFoundException) result;
+     }
+     else { // unknown and unexpected return type...
+       final Throwable cause = (result instanceof Throwable ? (Throwable) result : null);
+ 
+       if (isLogging()) {
+         if (cause != null) {
+           getGfsh().logSevere(String.format(
+             "Exception (%1$s) occurred while executing '%2$s' on member (%3$s) with disk store (%4$s).",
+               ClassUtils.getClassName(cause), CliStrings.DESCRIBE_DISK_STORE, memberName, diskStoreName), cause);
+         }
+         else {
+           getGfsh().logSevere(String.format(
+             "Received an unexpected result of type (%1$s) while executing '%2$s' on member (%3$s) with disk store (%4$s).",
+               ClassUtils.getClassName(result), CliStrings.DESCRIBE_DISK_STORE, memberName, diskStoreName), null);
+         }
+       }
+ 
+       throw new RuntimeException(CliStrings.format(CliStrings.UNEXPECTED_RETURN_TYPE_EXECUTING_COMMAND_ERROR_MESSAGE,
+         ClassUtils.getClassName(result), CliStrings.DESCRIBE_DISK_STORE), cause);
+     }
+   }
+ 
+   protected Result toCompositeResult(final DiskStoreDetails diskStoreDetails) {
+     final CompositeResultData diskStoreData = ResultBuilder.createCompositeResultData();
+ 
+     final CompositeResultData.SectionResultData diskStoreSection = diskStoreData.addSection();
+ 
+     diskStoreSection.addData("Disk Store ID", diskStoreDetails.getId());
+     diskStoreSection.addData("Disk Store Name", diskStoreDetails.getName());
+     diskStoreSection.addData("Member ID", diskStoreDetails.getMemberId());
+     diskStoreSection.addData("Member Name", diskStoreDetails.getMemberName());
+     diskStoreSection.addData("Allow Force Compaction", toString(diskStoreDetails.isAllowForceCompaction(), "Yes", "No"));
+     diskStoreSection.addData("Auto Compaction", toString(diskStoreDetails.isAutoCompact(), "Yes", "No"));
+     diskStoreSection.addData("Compaction Threshold", diskStoreDetails.getCompactionThreshold());
+     diskStoreSection.addData("Max Oplog Size", diskStoreDetails.getMaxOplogSize());
+     diskStoreSection.addData("Queue Size", diskStoreDetails.getQueueSize());
+     diskStoreSection.addData("Time Interval", diskStoreDetails.getTimeInterval());
+     diskStoreSection.addData("Write Buffer Size", diskStoreDetails.getWriteBufferSize());
+     diskStoreSection.addData("Disk Usage Warning Percentage", diskStoreDetails.getDiskUsageWarningPercentage());
+     diskStoreSection.addData("Disk Usage Critical Percentage", diskStoreDetails.getDiskUsageCriticalPercentage());
+     diskStoreSection.addData("PDX Serialization Meta-Data Stored",
+       toString(diskStoreDetails.isPdxSerializationMetaDataStored(), "Yes", "No"));
+ 
+     final TabularResultData diskDirTable = diskStoreData.addSection().addTable();
+ 
+     for (DiskStoreDetails.DiskDirDetails diskDirDetails : diskStoreDetails) {
+       diskDirTable.accumulate("Disk Directory", diskDirDetails.getAbsolutePath());
+       diskDirTable.accumulate("Size", diskDirDetails.getSize());
+     }
+ 
+     final TabularResultData regionTable = diskStoreData.addSection().addTable();
+ 
+     for (DiskStoreDetails.RegionDetails regionDetails : diskStoreDetails.iterateRegions()) {
+       regionTable.accumulate("Region Path", regionDetails.getFullPath());
+       regionTable.accumulate("Region Name", regionDetails.getName());
+       regionTable.accumulate("Persistent", toString(regionDetails.isPersistent(), "Yes", "No"));
+       regionTable.accumulate("Overflow To Disk", toString(regionDetails.isOverflowToDisk(), "Yes", "No"));
+     }
+ 
+     final TabularResultData cacheServerTable = diskStoreData.addSection().addTable();
+ 
+     for (DiskStoreDetails.CacheServerDetails cacheServerDetails : diskStoreDetails.iterateCacheServers()) {
+       cacheServerTable.accumulate("Bind Address", cacheServerDetails.getBindAddress());
+       cacheServerTable.accumulate("Hostname for Clients", cacheServerDetails.getHostName());
+       cacheServerTable.accumulate("Port", cacheServerDetails.getPort());
+     }
+ 
+     final TabularResultData gatewayTable = diskStoreData.addSection().addTable();
+ 
+     for (DiskStoreDetails.GatewayDetails gatewayDetails : diskStoreDetails.iterateGateways()) {
+       gatewayTable.accumulate("Gateway ID", gatewayDetails.getId());
+       gatewayTable.accumulate("Persistent", toString(gatewayDetails.isPersistent(), "Yes", "No"));
+     }
+ 
+     final TabularResultData asyncEventQueueTable = diskStoreData.addSection().addTable();
+ 
+     for (DiskStoreDetails.AsyncEventQueueDetails asyncEventQueueDetails : diskStoreDetails.iterateAsyncEventQueues()) {
+       asyncEventQueueTable.accumulate("Async Event Queue ID", asyncEventQueueDetails.getId());
+     }
+ 
+     return ResultBuilder.buildResult(diskStoreData);
+   }
+ 
+   @CliCommand(value = CliStrings.REVOKE_MISSING_DISK_STORE, help = CliStrings.REVOKE_MISSING_DISK_STORE__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_DISKSTORE })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.REVOKE_MISSING_DISKSTORE)
+   public Result revokeMissingDiskStore(
+       @CliOption(key = CliStrings.REVOKE_MISSING_DISK_STORE__ID, mandatory = true, help = CliStrings.REVOKE_MISSING_DISK_STORE__ID__HELP)
+       String id) {
+ 
+     try {
+       DistributedSystemMXBean dsMXBean = ManagementService.getManagementService(CacheFactory.getAnyInstance())
+           .getDistributedSystemMXBean();
+       if (dsMXBean.revokeMissingDiskStores(id)) {
+         return ResultBuilder.createInfoResult("Missing disk store successfully revoked");
+       }
+ 
+       return ResultBuilder.createUserErrorResult("Unable to find missing disk store to revoke");
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       if (th.getMessage() == null) {
+         return ResultBuilder.createGemFireErrorResult("An error occurred while revoking missing disk stores: " + th);
+       }
+       return ResultBuilder.createGemFireErrorResult("An error occurred while revoking missing disk stores: " + th.getMessage());
+     }
+   }
+ 
+   @CliCommand(value = CliStrings.SHOW_MISSING_DISK_STORE, help = CliStrings.SHOW_MISSING_DISK_STORE__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_DISKSTORE })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result showMissingDiskStore() {
+ 
+     try {
+       TabularResultData tabularData = ResultBuilder.createTabularResultData();
+       boolean accumulatedData = false;
+ 
+       DistributedSystemMXBean dsMXBean = ManagementService.getManagementService(CacheFactory.getAnyInstance())
+           .getDistributedSystemMXBean();
+       PersistentMemberDetails[] allPersistentMemberDetails = dsMXBean.listMissingDiskStores();
+       if (allPersistentMemberDetails != null) {
+         for (PersistentMemberDetails peristentMemberDetails : allPersistentMemberDetails) {
+           tabularData.accumulate("Disk Store ID", peristentMemberDetails.getDiskStoreId());
+           tabularData.accumulate("Host", peristentMemberDetails.getHost());
+           tabularData.accumulate("Directory", peristentMemberDetails.getDirectory());
+           accumulatedData = true;
+         }
+       }
+ 
+       if (!accumulatedData) {
+         return ResultBuilder.createInfoResult("No missing disk store found");
+      }
+ 
+       return ResultBuilder.buildResult(tabularData);
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       if (th.getMessage() == null) {
+         return ResultBuilder.createGemFireErrorResult("An error occurred while showing missing disk stores: " + th);
+       }
+       return ResultBuilder.createGemFireErrorResult("An error occurred while showing missing disk stores: " + th.getMessage());
+     }
+   }
+   
+   
+   @CliCommand(value=CliStrings.DESCRIBE_OFFLINE_DISK_STORE, help=CliStrings.DESCRIBE_OFFLINE_DISK_STORE__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result describeOfflineDiskStore(
+       @CliOption (key=CliStrings.DESCRIBE_OFFLINE_DISK_STORE__DISKSTORENAME, 
+           mandatory=true,
+           help=CliStrings.DESCRIBE_OFFLINE_DISK_STORE__DISKSTORENAME__HELP)
+         String diskStoreName,
+       @CliOption (key=CliStrings.DESCRIBE_OFFLINE_DISK_STORE__DISKDIRS,
+           mandatory=true,
+           help=CliStrings.DESCRIBE_OFFLINE_DISK_STORE__DISKDIRS__HELP)
+       @CliMetaData (valueSeparator = ",")
+         String[] diskDirs,
+       @CliOption (key=CliStrings.DESCRIBE_OFFLINE_DISK_STORE__PDX_TYPES,
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+           help=CliStrings.DESCRIBE_OFFLINE_DISK_STORE__PDX_TYPES__HELP)
+       Boolean listPdxTypes,
+       @CliOption  (key=CliStrings.DESCRIBE_OFFLINE_DISK_STORE__REGIONNAME, 
+           help=CliStrings.DESCRIBE_OFFLINE_DISK_STORE__REGIONNAME__HELP,
+           unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE)
+         String regionName) {
+ 
+     try {
+       final File[] dirs = new File[diskDirs.length];
+       for (int i = 0; i < diskDirs.length; i++) {
+         dirs[i] = new File((diskDirs[i]));
+       }
+       
+       if (Region.SEPARATOR.equals(regionName)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.INVALID_REGION_NAME);
+       }
+       
+       ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+       PrintStream printStream = new PrintStream(outputStream);
+       
+       DiskStoreImpl.dumpInfo(printStream, diskStoreName, dirs, regionName, listPdxTypes);
+       return ResultBuilder.createInfoResult(outputStream.toString());
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       if (th.getMessage() == null) {
+         return ResultBuilder.createGemFireErrorResult("An error occurred while describing offline disk stores: " + th);
+       }
+       return ResultBuilder.createGemFireErrorResult("An error occurred while describing offline disk stores: " + th.getMessage());
+     }
+   }
+   
+   @CliCommand(value=CliStrings.EXPORT_OFFLINE_DISK_STORE, help=CliStrings.EXPORT_OFFLINE_DISK_STORE__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result exportOfflineDiskStore(
+       @CliOption (key=CliStrings.EXPORT_OFFLINE_DISK_STORE__DISKSTORENAME, 
+           mandatory=true,
+           help=CliStrings.EXPORT_OFFLINE_DISK_STORE__DISKSTORENAME__HELP)
+         String diskStoreName,
+       @CliOption (key=CliStrings.EXPORT_OFFLINE_DISK_STORE__DISKDIRS,
+           mandatory=true,
+           help=CliStrings.EXPORT_OFFLINE_DISK_STORE__DISKDIRS__HELP)
+       @CliMetaData (valueSeparator = ",")
+         String[] diskDirs,
+       @CliOption  (key=CliStrings.EXPORT_OFFLINE_DISK_STORE__DIR,
+           mandatory=true,
+           help=CliStrings.EXPORT_OFFLINE_DISK_STORE__DIR__HELP)         
+         String dir) {
+ 
+     try {
+       final File[] dirs = new File[diskDirs.length];
+       for (int i = 0; i < diskDirs.length; i++) {
+         dirs[i] = new File((diskDirs[i]));
+       }
+       
+       File output = new File(dir);
+       
+       //Note, this can consume a lot of memory, so this should
+       //not be moved to a separate process unless we provide a way for the user
+       //to configure the size of that process.
+       DiskStoreImpl.exportOfflineSnapshot(diskStoreName, dirs, output);
+       String resultString = CliStrings.format(CliStrings.EXPORT_OFFLINE_DISK_STORE__SUCCESS,diskStoreName, dir);
+       return ResultBuilder.createInfoResult(resultString.toString());
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       LogWrapper.getInstance().warning(th.getMessage(), th);
+       return ResultBuilder
+           .createGemFireErrorResult(CliStrings.format(CliStrings.EXPORT_OFFLINE_DISK_STORE__ERROR,diskStoreName, th.toString()));
+     }
+   }
+   
+   private void configureLogging(final List<String> commandList) {
+     URL configUrl = LogService.class.getResource(LogService.CLI_CONFIG);
+     String configFilePropertyValue = configUrl.toString();
+     commandList.add("-Dlog4j.configurationFile=" + configFilePropertyValue);
+   }
+ 
+   @CliCommand(value=CliStrings.VALIDATE_DISK_STORE, help=CliStrings.VALIDATE_DISK_STORE__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GEMFIRE_DISKSTORE}) //offline command
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result validateDiskStore(
+       @CliOption(key=CliStrings.VALIDATE_DISK_STORE__NAME, mandatory=true,
+                   help=CliStrings.VALIDATE_DISK_STORE__NAME__HELP)
+                   String diskStoreName,
+       @CliOption(key=CliStrings.VALIDATE_DISK_STORE__DISKDIRS,
+                   mandatory=true,
+                   unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,                 
+                   help=CliStrings.VALIDATE_DISK_STORE__DISKDIRS__HELP)
+       @CliMetaData (valueSeparator = ",")
+                   String[] diskDirs,
+       @CliOption(key=CliStrings.VALIDATE_DISK_STORE__J,
+                   unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+                   help=CliStrings.VALIDATE_DISK_STORE__J__HELP)
+       @CliMetaData (valueSeparator = ",")
+       String[] jvmProps) {   
+     try {
+       String resultString = new String();
+       
+       // create a new process ...bug 46075
+       StringBuilder dirList = new StringBuilder();
+       for (int i = 0; i < diskDirs.length; i++) {
+         dirList.append(diskDirs[i]);
+         dirList.append(";");
+       }
+ 
+       List<String> commandList = new ArrayList<String>();
+       commandList.add(System.getProperty("java.home") + File.separatorChar
+           + "bin" + File.separatorChar + "java");
+ 
+       configureLogging(commandList);
+       
+       if (jvmProps != null && jvmProps.length != 0) {
+         for (int i = 0; i < jvmProps.length; i++) {
+           commandList.add(jvmProps[i]);
+         }
+       }
+       
+       //Pass any java options on to the command
+       String opts = System.getenv("JAVA_OPTS");
+       if (opts != null) {
+         commandList.add(opts);
+       }
+       commandList.add("-classpath");
+       commandList.add(System.getProperty("java.class.path", "."));
+       commandList.add(DiskStoreValidater.class.getName());
+       commandList.add(diskStoreName);
+       commandList.add(dirList.toString());
+ 
+       ProcessBuilder procBuilder = new ProcessBuilder(commandList);
+       StringBuilder output = new StringBuilder();
+       String errorString = new String();
+ 
+       Process validateDiskStoreProcess = procBuilder.redirectErrorStream(true).start();
+       InputStream inputStream = validateDiskStoreProcess.getInputStream();
+       BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+       String line = null;
+ 
+       while ((line = br.readLine()) != null) {
+         output.append(line).append(GfshParser.LINE_SEPARATOR);
+       }
+       validateDiskStoreProcess.destroy();
+ 
+       if (errorString != null) {
+         output.append(errorString).append(GfshParser.LINE_SEPARATOR);
+       }
+       resultString = "Validating " + diskStoreName + GfshParser.LINE_SEPARATOR + output.toString();
+       return ResultBuilder.createInfoResult(resultString.toString());
+     } catch (IOException ex) {
+       return ResultBuilder
+           .createGemFireErrorResult(CliStrings.format(CliStrings.VALIDATE_DISK_STORE__MSG__IO_ERROR,diskStoreName, ex.getMessage() ));
+     } catch (Exception ex) {
+ //      StringPrintWriter s = new StringPrintWriter();
+ //      ex.printStackTrace(s);
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.VALIDATE_DISK_STORE__MSG__ERROR,diskStoreName, ex.getMessage()));
+     }
+ 
+   }
+   
+   
+   @CliCommand(value=CliStrings.ALTER_DISK_STORE, help=CliStrings.ALTER_DISK_STORE__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE})
 -  
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result alterOfflineDiskStore(
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__DISKSTORENAME, 
+       mandatory=true,
+       help=CliStrings.ALTER_DISK_STORE__DISKSTORENAME__HELP)
+       String diskStoreName,
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__REGIONNAME, 
+       mandatory=true,
+       help=CliStrings.ALTER_DISK_STORE__REGIONNAME__HELP)
+       String regionName, 
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__DISKDIRS,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help=CliStrings.ALTER_DISK_STORE__DISKDIRS__HELP,
+       mandatory=true)
+       @CliMetaData (valueSeparator = ",")
+       String[] diskDirs,
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__COMPRESSOR,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       specifiedDefaultValue="none",
+       help=CliStrings.ALTER_DISK_STORE__COMPRESSOR__HELP)
+       String compressorClassName,
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__CONCURRENCY__LEVEL,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help=CliStrings.ALTER_DISK_STORE__CONCURRENCY__LEVEL__HELP)
+       Integer concurrencyLevel,
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__STATISTICS__ENABLED,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help=CliStrings.ALTER_DISK_STORE__STATISTICS__ENABLED__HELP)
+       Boolean statisticsEnabled, 
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__INITIAL__CAPACITY,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help=CliStrings.ALTER_DISK_STORE__INITIAL__CAPACITY__HELP)
+       Integer initialCapacity, 
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__LOAD__FACTOR,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help=CliStrings.ALTER_DISK_STORE__LOAD__FACTOR__HELP)
+       Float loadFactor,
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__LRU__EVICTION__ACTION,
+       help=CliStrings.ALTER_DISK_STORE__LRU__EVICTION__ACTION__HELP)
+       String lruEvictionAction,
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__LRU__EVICTION__ALGORITHM,
+       help=CliStrings.ALTER_DISK_STORE__LRU__EVICTION__ALGORITHM__HELP)
+       String lruEvictionAlgo,
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__LRU__EVICTION__LIMIT,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help=CliStrings.ALTER_DISK_STORE__LRU__EVICTION__LIMIT__HELP)
+       Integer lruEvictionLimit,
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__OFF_HEAP,
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help=CliStrings.ALTER_DISK_STORE__OFF_HEAP__HELP)
+       Boolean offHeap, 
+       @CliOption  (key=CliStrings.ALTER_DISK_STORE__REMOVE,
+       help=CliStrings.ALTER_DISK_STORE__REMOVE__HELP,
+       mandatory = false,
+       specifiedDefaultValue = "true",
+       unspecifiedDefaultValue = "false")
+       boolean remove) {
+     
+     Result result = null;
+     
+     try {
+       File[] dirs = null;
+       
+       if (diskDirs != null) {
+         dirs = new File[diskDirs.length];
+         for (int i=0; i < diskDirs.length; i++) {
+           dirs[i] = new File((diskDirs[i]));
+         }
+       }
+       
+       if (regionName.equals(Region.SEPARATOR)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.INVALID_REGION_NAME);
+       }
+ 
+       if ((lruEvictionAlgo != null) ||
+           (lruEvictionAction != null) ||
+           (lruEvictionLimit != null) ||
+           (concurrencyLevel != null) ||
+           (initialCapacity != null) ||
+           (loadFactor != null) ||
+           (compressorClassName != null) ||
+           (offHeap != null) ||
+           (statisticsEnabled != null)
+           ) {
+         if (!remove) {
+           String lruEvictionLimitString = lruEvictionLimit == null ? null : lruEvictionLimit.toString();
+           String concurrencyLevelString = concurrencyLevel == null ? null : concurrencyLevel.toString();
+           String initialCapacityString = initialCapacity == null ? null : initialCapacity.toString();
+           String loadFactorString = loadFactor == null ? null : loadFactor.toString();
+           String statisticsEnabledString = statisticsEnabled == null ? null : statisticsEnabled.toString();
+           String offHeapString = offHeap == null ? null : offHeap.toString();
+           
+           if ("none".equals(compressorClassName)) {
+             compressorClassName = "";
+           }
+           
+           String resultMessage = DiskStoreImpl.modifyRegion(diskStoreName, dirs, "/"+regionName,
+               lruEvictionAlgo, lruEvictionAction, lruEvictionLimitString,
+               concurrencyLevelString, initialCapacityString, loadFactorString,
+               compressorClassName, statisticsEnabledString, offHeapString, false);
+ 
+           result = ResultBuilder.createInfoResult(resultMessage);
+         } else {
+           result = ResultBuilder.createParsingErrorResult("Cannot use the --remove=true parameter with any other parameters");
+         }
+       } else {
+         if (remove) {
+           DiskStoreImpl.destroyRegion(diskStoreName, dirs, "/" + regionName);
+           result = ResultBuilder.createInfoResult("The region " + regionName + " was successfully removed from the disk store " + diskStoreName);
+         } else {
+           //Please provide an option
+           result = ResultBuilder.createParsingErrorResult("Please provide a relevant parameter");
+         }
+       }
+       //Catch the IllegalArgumentException thrown by the modifyDiskStore function and sent the 
+     } catch (IllegalArgumentException e) {
+       String message = "Please check the parameters";
+       message += "\n" + e.getMessage();
+       result = ResultBuilder.createGemFireErrorResult(message);
+     } catch (IllegalStateException e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     } catch (CacheExistsException e) {
+       //Indicates that the command is being used when a cache is open 
+       result = ResultBuilder.createGemFireErrorResult("Cannot execute " + CliStrings.ALTER_DISK_STORE + " when a cache exists (Offline command)");
+     } catch (Exception e) {
+       result = createErrorResult(e.getMessage());
+     } 
+     return result;
+   }
+ 
+   @CliCommand(value=CliStrings.DESTROY_DISK_STORE, help=CliStrings.DESTROY_DISK_STORE__HELP)
+   @CliMetaData(shellOnly=false, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE}, writesToSharedConfiguration=true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.DESTROY_DISKSTORE)
+   public Result destroyDiskStore(
+       @CliOption  (key=CliStrings.DESTROY_DISK_STORE__NAME, 
+           mandatory=true,
+           help=CliStrings.DESTROY_DISK_STORE__NAME__HELP)
+         String name,
+       @CliOption(key=CliStrings.DESTROY_DISK_STORE__GROUP,
+           help=CliStrings.DESTROY_DISK_STORE__GROUP__HELP,
+           optionContext=ConverterHint.MEMBERGROUP)
+         @CliMetaData (valueSeparator = ",")
+         String[] groups) {
+     try {      
+       TabularResultData tabularData = ResultBuilder.createTabularResultData();
+       boolean accumulatedData = false;
+ 
+       Set<DistributedMember> targetMembers;
+       try {
+         targetMembers = CliUtil.findAllMatchingMembers(groups, null);
+       } catch (CommandResultException crex) {
+         return crex.getResult();
+       }
+ 
+       ResultCollector<?, ?> rc = CliUtil.executeFunction(new DestroyDiskStoreFunction(), new Object[] { name },
+           targetMembers);
+       List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) rc.getResult());
+ 
+       XmlEntity xmlEntity = null;
+       for (CliFunctionResult result : results) {
+         if (result.getThrowable() != null) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Result", "ERROR: " + result.getThrowable().getClass().getName() + ": "
+               + result.getThrowable().getMessage());
+           accumulatedData = true;
+           tabularData.setStatus(Status.ERROR);
+         } else if (result.getMessage() != null) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Result", result.getMessage());
+           accumulatedData = true;
+           
+           if (xmlEntity == null) {
+             xmlEntity = result.getXmlEntity();
+           }
+         }
+       }
+       
+ 
+       if (!accumulatedData) {
+         return ResultBuilder.createInfoResult("No matching disk stores found.");
+       }
+       
+       Result result = ResultBuilder.buildResult(tabularData);
+       if (xmlEntity != null) {
+         result.setCommandPersisted((new SharedConfigurationWriter()).deleteXmlEntity(xmlEntity, groups));
+       }
+       
+       return result;
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.DESTROY_DISK_STORE__ERROR_WHILE_DESTROYING_REASON_0,
+           new Object[] { th.getMessage() }));
+     }
+  }
+       
+   private Result createErrorResult(String message) {
+     ErrorResultData erd = ResultBuilder.createErrorResultData();
+     erd.addLine(message);
+     return ResultBuilder.buildResult(erd);
+   }
+ 
+   @CliAvailabilityIndicator({CliStrings.BACKUP_DISK_STORE, CliStrings.COMPACT_DISK_STORE,
+     CliStrings.DESCRIBE_DISK_STORE, CliStrings.LIST_DISK_STORE, CliStrings.REVOKE_MISSING_DISK_STORE,
+     CliStrings.SHOW_MISSING_DISK_STORE, CliStrings.CREATE_DISK_STORE, CliStrings.DESTROY_DISK_STORE})
+   public boolean diskStoreCommandsAvailable() {
+     // these disk store commands are always available in GemFire
+     return (!CliUtil.isGfshVM() || (getGfsh() != null && getGfsh().isConnectedAndReady()));
+   }
+ 
+   @CliAvailabilityIndicator({CliStrings.DESCRIBE_OFFLINE_DISK_STORE})
+   public boolean offlineDiskStoreCommandsAvailable() {
+     return true;
+   }
+ }


[26/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionCommands.java
index 0000000,3c1d4a39..2a09375
mode 000000,100644..100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionCommands.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionCommands.java
@@@ -1,0 -1,219 +1,228 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.internal.cache.extension.mock;
+ 
+ import java.util.List;
+ import java.util.Set;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.execute.Function;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.cli.Result.Status;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
+ import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * Mock Extension gfsh commands.
+  * 
+  * @author jbarrett@pivotal.io
+  *
+  * @since 8.1
+  */
+ public class MockExtensionCommands implements CommandMarker {
+ 
+   public static final String OPTION_VALUE = "value";
+ 
+   public static final String OPTION_REGION_NAME = "region-name";
+ 
+   public static final String CREATE_MOCK_REGION_EXTENSION = "create mock region extension";
+ 
+   public static final String ALTER_MOCK_REGION_EXTENSION = "alter mock region extension";
+ 
+   public static final String DESTROY_MOCK_REGION_EXTENSION = "destroy mock region extension";
+ 
+   public static final String CREATE_MOCK_CACHE_EXTENSION = "create mock cache extension";
+ 
+   public static final String ALTER_MOCK_CACHE_EXTENSION = "alter mock cache extension";
+ 
+   public static final String DESTROY_MOCK_CACHE_EXTENSION = "destroy mock cache extension";
+ 
+   /**
+    * Creates a {@link MockRegionExtension} on the given <code>regionName</code>.
+    * 
+    * @param regionName
+    *          {@link Region} name on which to create {@link MockRegionExtension}
+    *          .
+    * @param value
+    *          {@link String} value to set on
+    *          {@link MockRegionExtension#setValue(String)}.
+    * @return {@link Result}
+    * @since 8.1
+    */
+   @CliCommand(value = CREATE_MOCK_REGION_EXTENSION)
+   @CliMetaData(writesToSharedConfiguration = true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result createMockRegionExtension(@CliOption(key = OPTION_REGION_NAME, mandatory = true) final String regionName,
+       @CliOption(key = OPTION_VALUE, mandatory = true) final String value) {
+     return executeFunctionOnAllMembersTabulateResultPersist(CreateMockRegionExtensionFunction.INSTANCE, true,
+         CreateMockRegionExtensionFunction.toArgs(regionName, value));
+   }
+ 
+   /**
+    * Alters a {@link MockRegionExtension} on the given <code>regionName</code>.
+    * 
+    * @param regionName
+    *          {@link Region} name on which to create {@link MockRegionExtension}
+    *          .
+    * @param value
+    *          {@link String} value to set on
+    *          {@link MockRegionExtension#setValue(String)}.
+    * @return {@link Result}
+    * @since 8.1
+    */
+   @CliCommand(value = ALTER_MOCK_REGION_EXTENSION)
+   @CliMetaData(writesToSharedConfiguration = true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result alterMockRegionExtension(@CliOption(key = OPTION_REGION_NAME, mandatory = true) final String regionName,
+       @CliOption(key = OPTION_VALUE, mandatory = true) final String value) {
+     return executeFunctionOnAllMembersTabulateResultPersist(AlterMockRegionExtensionFunction.INSTANCE, true,
+         AlterMockRegionExtensionFunction.toArgs(regionName, value));
+   }
+ 
+   /**
+    * Destroy the {@link MockRegionExtension} on the given
+    * <code>regionName</code>.
+    * 
+    * @param regionName
+    *          {@link Region} name on which to create {@link MockRegionExtension}
+    *          .
+    * @return {@link Result}
+    * @since 8.1
+    */
+   @CliCommand(value = DESTROY_MOCK_REGION_EXTENSION)
+   @CliMetaData(writesToSharedConfiguration = true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result destroyMockRegionExtension(@CliOption(key = OPTION_REGION_NAME, mandatory = true) final String regionName) {
+     return executeFunctionOnAllMembersTabulateResultPersist(DestroyMockRegionExtensionFunction.INSTANCE, true,
+         DestroyMockRegionExtensionFunction.toArgs(regionName));
+   }
+ 
+   /**
+    * Creates a {@link MockCacheExtension}.
+    * 
+    * @param value
+    *          {@link String} value to set on
+    *          {@link MockCacheExtension#setValue(String)}.
+    * @return {@link Result}
+    * @since 8.1
+    */
+   @CliCommand(value = CREATE_MOCK_CACHE_EXTENSION)
+   @CliMetaData(writesToSharedConfiguration = true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result createMockCacheExtension(@CliOption(key = OPTION_VALUE, mandatory = true) final String value) {
+     return executeFunctionOnAllMembersTabulateResultPersist(CreateMockCacheExtensionFunction.INSTANCE, true, CreateMockCacheExtensionFunction.toArgs(value));
+   }
+ 
+   /**
+    * Alter a {@link MockCacheExtension}.
+    * 
+    * @param value
+    *          {@link String} value to set on
+    *          {@link MockCacheExtension#setValue(String)}.
+    * @return {@link Result}
+    * @since 8.1
+    */
+   @CliCommand(value = ALTER_MOCK_CACHE_EXTENSION)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   @CliMetaData(writesToSharedConfiguration = true)
+   public Result alterMockCacheExtension(@CliOption(key = OPTION_VALUE, mandatory = true) final String value) {
+     return executeFunctionOnAllMembersTabulateResultPersist(AlterMockCacheExtensionFunction.INSTANCE, true, AlterMockCacheExtensionFunction.toArgs(value));
+   }
+ 
+   /**
+    * Destroy a {@link MockCacheExtension}.
+    * 
+    * @return {@link Result}
+    * @since 8.1
+    */
+   @CliCommand(value = DESTROY_MOCK_CACHE_EXTENSION)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   @CliMetaData(writesToSharedConfiguration = true)
+   public Result destroyMockCacheExtension() {
+     return executeFunctionOnAllMembersTabulateResultPersist(DestroyMockCacheExtensionFunction.INSTANCE, false);
+   }
+ 
+   /**
+    * Call <code>function</code> with <code>args</code> on all members, tabulate
+    * results and persist shared config if changed.
+    * 
+    * @param function
+    *          {@link Function} to execute.
+    * @param addXmlElement
+    *          If <code>true</code> then add result {@link XmlEntity} to the
+    *          config, otherwise delete it.
+    * @param args
+    *          Arguments to pass to function.
+    * @return {@link TabularResultData}
+    * @since 8.1
+    */
+   protected Result executeFunctionOnAllMembersTabulateResultPersist(final Function function, final boolean addXmlElement, final Object... args) {
+     final Cache cache = CacheFactory.getAnyInstance();
+     final Set<DistributedMember> members = CliUtil.getAllNormalMembers(cache);
+ 
+     @SuppressWarnings("unchecked")
+     final ResultCollector<CliFunctionResult, List<CliFunctionResult>> resultCollector = (ResultCollector<CliFunctionResult, List<CliFunctionResult>>) CliUtil
+         .executeFunction(function, args, members);
+     final List<CliFunctionResult> functionResults = (List<CliFunctionResult>) resultCollector.getResult();
+ 
+     XmlEntity xmlEntity = null;
+     final TabularResultData tabularResultData = ResultBuilder.createTabularResultData();
+     final String errorPrefix = "ERROR: ";
+     for (CliFunctionResult functionResult : functionResults) {
+       boolean success = functionResult.isSuccessful();
+       tabularResultData.accumulate("Member", functionResult.getMemberIdOrName());
+       if (success) {
+         tabularResultData.accumulate("Status", functionResult.getMessage());
+         xmlEntity = functionResult.getXmlEntity();
+       } else {
+         tabularResultData.accumulate("Status", errorPrefix + functionResult.getMessage());
+         tabularResultData.setStatus(Status.ERROR);
+       }
+     }
+ 
+     final Result result = ResultBuilder.buildResult(tabularResultData);
+ 
+     System.out.println("MockExtensionCommands: persisting xmlEntity=" + xmlEntity);
+     if (null != xmlEntity) {
+       if (addXmlElement) {
+         result.setCommandPersisted((new SharedConfigurationWriter()).addXmlEntity(xmlEntity, null));
+       } else {
+         result.setCommandPersisted((new SharedConfigurationWriter()).deleteXmlEntity(xmlEntity, null));
+       }
+     }
+ 
+     return result;
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandManagerJUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandManagerJUnitTest.java
index 0000000,66b2d92..df86b6a
mode 000000,100644..100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandManagerJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandManagerJUnitTest.java
@@@ -1,0 -1,330 +1,340 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli;
+ 
+ import static org.junit.Assert.assertEquals;
+ import static org.junit.Assert.assertNotNull;
+ import static org.junit.Assert.assertNotSame;
+ import static org.junit.Assert.assertTrue;
+ 
+ import java.lang.annotation.Annotation;
+ import java.lang.reflect.Method;
+ import java.util.ArrayList;
+ import java.util.List;
+ import java.util.Map;
+ 
+ import org.junit.After;
+ import org.junit.Test;
+ import org.junit.experimental.categories.Category;
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.Completion;
+ import org.springframework.shell.core.Converter;
+ import org.springframework.shell.core.MethodTarget;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.annotation.CliArgument;
+ import com.gemstone.gemfire.management.internal.cli.parser.Argument;
+ import com.gemstone.gemfire.management.internal.cli.parser.AvailabilityTarget;
+ import com.gemstone.gemfire.management.internal.cli.parser.CommandTarget;
+ import com.gemstone.gemfire.management.internal.cli.parser.Option;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ import com.gemstone.gemfire.test.junit.categories.UnitTest;
+ 
++
+ /**
+  * CommandManagerTest - Includes tests to check the CommandManager functions
+  * 
+  * @author apande
+  */
+ @Category(UnitTest.class)
+ public class CommandManagerJUnitTest {
+   private static final String COMMAND1_NAME = "command1";
+   private static final String COMMAND1_NAME_ALIAS = "command1_alias";
+   private static final String COMMAND2_NAME = "c2";
+ 
+   private static final String COMMAND1_HELP = "help for " + COMMAND1_NAME;
+   // ARGUMENTS
+   private static final String ARGUMENT1_NAME = "argument1";
+   private static final String ARGUMENT1_HELP = "help for argument1";
+   private static final String ARGUMENT1_CONTEXT = "context for argument 1";
+   private static final Completion[] ARGUMENT1_COMPLETIONS = {
+       new Completion("arg1"), new Completion("arg1alt") };
+   private static final String ARGUEMNT2_NAME = "argument2";
+   private static final String ARGUMENT2_CONTEXT = "context for argument 2";
+   private static final String ARGUMENT2_HELP = "help for argument2";
+   private static final String ARGUMENT2_UNSPECIFIED_DEFAULT_VALUE = "{unspecified default value for argument2}";
+   private static final Completion[] ARGUMENT2_COMPLETIONS = {
+       new Completion("arg2"), new Completion("arg2alt") };
+ 
+   // OPTIONS
+   private static final String OPTION1_NAME = "option1";
+   private static final String OPTION1_SYNONYM = "opt1";
+   private static final String OPTION1_HELP = "help for option1";
+   private static final String OPTION1_CONTEXT = "context for option1";
+   private static final String OPTION1_SPECIFIED_DEFAULT_VALUE = "{specified default value for option1}";
+   private static final Completion[] OPTION1_COMPLETIONS = {
+       new Completion("option1"), new Completion("option1Alternate") };
+   private static final String OPTION2_NAME = "option2";
+   private static final String OPTION2_HELP = "help for option2";
+   private static final String OPTION2_CONTEXT = "context for option2";
+   private static final String OPTION2_SPECIFIED_DEFAULT_VALUE = "{specified default value for option2}";
+   private static final String OPTION3_NAME = "option3";
+   private static final String OPTION3_SYNONYM = "opt3";
+   private static final String OPTION3_HELP = "help for option3";
+   private static final String OPTION3_CONTEXT = "context for option3";
+   private static final String OPTION3_SPECIFIED_DEFAULT_VALUE = "{specified default value for option3}";
+   private static final String OPTION3_UNSPECIFIED_DEFAULT_VALUE = "{unspecified default value for option3}";
+ 
+   @After
+   public void tearDown() {
+     CommandManager.clearInstance();
+   }
+   
+   // tests loadCommands()
+   @Test
+   public void testCommandManagerLoadCommands() throws Exception {
+     CommandManager commandManager = CommandManager.getInstance(true);
+     assertNotNull(commandManager);
+     assertNotSame(0, commandManager.getCommands().size());
+   }
+ 
+   // tests commandManagerInstance method
+   @Test
+   public void testCommandManagerInstance() throws Exception {
+     CommandManager commandManager = CommandManager.getInstance(true);
+     assertNotNull(commandManager);
+   }
+ 
+   // tests createOption method for creating option
+   @Test
+   public void testCommandManagerCreateOption() throws Exception {
+     CommandManager commandManager = CommandManager.getInstance(true);
+     assertNotNull(commandManager);
+ 
+     Method method = Commands.class.getMethod(COMMAND1_NAME, String.class,
+         String.class, String.class, String.class, String.class);
+ 
+     Annotation[][] annotations = method.getParameterAnnotations();
+     Class<?>[] parameterTypes = method.getParameterTypes();
+     List<String> optionNames = new ArrayList<String>();
+     optionNames.add(OPTION1_NAME);
+     optionNames.add(OPTION2_NAME);
+     optionNames.add(OPTION3_NAME);
+ 
+     int parameterNo = 0;
+     for (int i = 0; i < annotations.length; i++) {
+       Annotation[] annotation = annotations[i];
+       for (Annotation ann : annotation) {
+         if (ann instanceof CliOption) {
+           Option createdOption = commandManager.createOption((CliOption) ann,
+               parameterTypes[i], parameterNo);
+           assertTrue(optionNames.contains(createdOption.getLongOption()));          
+           assertEquals(((CliOption) ann).help(), createdOption.getHelp());          
+           if (((CliOption) ann).specifiedDefaultValue() != null
+               && ((CliOption) ann).specifiedDefaultValue().length() > 0) {            
+             assertEquals(((CliOption) ann).specifiedDefaultValue().trim(),
+                 createdOption.getSpecifiedDefaultValue().trim());
+           }
+           if (((CliOption) ann).unspecifiedDefaultValue() != null
+               && ((CliOption) ann).unspecifiedDefaultValue().length() > 0) {           
+             assertEquals(((CliOption) ann).specifiedDefaultValue().trim(),
+                 createdOption.getSpecifiedDefaultValue().trim());
+           }
+ 
+         }
+       }
+     }
+   }
+ 
+   // tests createArgument method for creating argument
+   @Test
+   public void testCommandManagerCreateArgument() throws Exception {
+     CommandManager commandManager = CommandManager.getInstance(true);
+     assertNotNull(commandManager);
+ 
+     Method method = Commands.class.getMethod(COMMAND1_NAME, String.class,
+         String.class, String.class, String.class, String.class);
+ 
+     Annotation[][] annotations = method.getParameterAnnotations();
+     Class<?>[] parameterTypes = method.getParameterTypes();
+     List<String> argumentList = new ArrayList<String>();
+     argumentList.add(ARGUMENT1_NAME);
+     argumentList.add(ARGUEMNT2_NAME);
+ 
+     int parameterNo = 0;
+     for (int i = 0; i < annotations.length; i++) {
+       Annotation[] annotation = annotations[i];
+       for (Annotation ann : annotation) {
+         if (ann instanceof CliArgument) {
+           Argument arg = commandManager.createArgument((CliArgument) ann,
+               parameterTypes[i], parameterNo);
+           assertEquals(true, argumentList.contains(arg.getArgumentName()));
+           assertEquals(((CliArgument) ann).mandatory(), arg.isRequired());
+           assertEquals(((CliArgument) ann).name().trim(), arg.getArgumentName()
+               .trim());
+           assertEquals(((CliArgument) ann).argumentContext().trim(), arg
+               .getContext().trim());
+           assertEquals(((CliArgument) ann).help().trim(), arg.getHelp().trim());
+         }
+       }
+     }
+   }
+ 
+   // tests availabilityIndicator for a method
+   @Test
+   public void testCommandManagerAvailabilityIndicator() throws Exception {
+     CommandManager commandManager = CommandManager.getInstance(true);
+     assertNotNull(commandManager);
+     commandManager.add(Commands.class.newInstance());
+     Map<String, CommandTarget> commands = commandManager.getCommands();
+     for (String commandName : commands.keySet()) {
+       if (commandName.equals(COMMAND1_NAME)) {
+         CommandTarget commandTarget = commands.get(commandName);
+         AvailabilityTarget availabilityIndicator = commandTarget
+             .getAvailabilityIndicator();
+         if (availabilityIndicator == null) {
+           availabilityIndicator = commandManager
+               .getAvailabilityIndicator(COMMAND1_NAME);
+           commandTarget.setAvailabilityIndicator(availabilityIndicator);
+         }
+         assertEquals(true, commandTarget.isAvailable());
+         break;
+       }
+     }
+   }
+   
+   /**
+    * Tests {@link CommandManager#loadPluginCommands()}.
+    * @since 8.1
+    */
+   @Test
+   public void testCommandManagerLoadPluginCommands() throws Exception {
+     CommandManager commandManager  = CommandManager.getInstance(true);
+     assertNotNull(commandManager);
+     
+     // see META-INF/services/org.springframework.shell.core.CommandMarker service loader file.
+     assertTrue("Should find listed plugin.", commandManager.getCommands().containsKey("mock plugin command"));
+     assertTrue("Should not find unlisted plugin.", !commandManager.getCommands().containsKey("mock plugin command unlisted"));
+   }
+ 
+ 
+   // class that represents dummy commands
+   static public class Commands implements CommandMarker {
+     @CliCommand(value = { COMMAND1_NAME, COMMAND1_NAME_ALIAS }, help = COMMAND1_HELP)
+     @CliMetaData(shellOnly = true, relatedTopic = { "relatedTopicOfCommand1" })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static String command1(
+         @CliArgument(name = ARGUMENT1_NAME, argumentContext = ARGUMENT1_CONTEXT, help = ARGUMENT1_HELP, mandatory = true)
+         String argument1,
+         @CliArgument(name = ARGUEMNT2_NAME, argumentContext = ARGUMENT2_CONTEXT, help = ARGUMENT2_HELP, mandatory = false, unspecifiedDefaultValue = ARGUMENT2_UNSPECIFIED_DEFAULT_VALUE, systemProvided = false)
+         String argument2,
+         @CliOption(key = { OPTION1_NAME, OPTION1_SYNONYM }, help = OPTION1_HELP, mandatory = true, optionContext = OPTION1_CONTEXT, specifiedDefaultValue = OPTION1_SPECIFIED_DEFAULT_VALUE)
+         String option1,
+         @CliOption(key = { OPTION2_NAME }, help = OPTION2_HELP, mandatory = false, optionContext = OPTION2_CONTEXT, specifiedDefaultValue = OPTION2_SPECIFIED_DEFAULT_VALUE)
+         String option2,
+         @CliOption(key = { OPTION3_NAME, OPTION3_SYNONYM }, help = OPTION3_HELP, mandatory = false, optionContext = OPTION3_CONTEXT, unspecifiedDefaultValue = OPTION3_UNSPECIFIED_DEFAULT_VALUE, specifiedDefaultValue = OPTION3_SPECIFIED_DEFAULT_VALUE)
+         String option3) {
+       return null;
+     }
+ 
+     @CliCommand(value = { COMMAND2_NAME })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static String command2() {
+       return null;
+     }
+ 
+     @CliCommand(value = { "testParamConcat" })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static Result testParamConcat(
+         @CliOption(key = { "string" })
+         String string,
+         @CliOption(key = { "stringArray" })
+         @CliMetaData(valueSeparator = ",")
+         String[] stringArray,
+         @CliOption(key = { "stringList" }, optionContext = ConverterHint.STRING_LIST)
+         @CliMetaData(valueSeparator = ",")
+         List<String> stringList, @CliOption(key = { "integer" })
+         Integer integer, @CliOption(key = { "colonArray" })
+         @CliMetaData(valueSeparator = ":")
+         String[] colonArray) {
+       return null;
+     }
+ 
+     @CliCommand(value = { "testMultiWordArg" })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static Result testMultiWordArg(@CliArgument(name = "arg1")
+     String arg1, @CliArgument(name = "arg2")
+     String arg2) {
+       return null;
+     }
+ 
+     @CliAvailabilityIndicator({ COMMAND1_NAME })
+     public boolean isAvailable() {
+       return true; // always available on server
+ 
+     }
+ 
+   }
+ 
+   static class SimpleConverter implements Converter<String> {
+ 
+     public boolean supports(Class<?> type, String optionContext) {
+       if (type.isAssignableFrom(String.class)) {
+         return true;
+       }
+       return false;
+     }
+ 
+     public String convertFromText(String value, Class<?> targetType,
+         String optionContext) {
+       return value;
+     }
+ 
+     public boolean getAllPossibleValues(List<Completion> completions,
+         Class<?> targetType, String existingData, String context,
+         MethodTarget target) {
+       if (context.equals(ARGUMENT1_CONTEXT)) {
+         for (Completion completion : ARGUMENT1_COMPLETIONS) {
+           completions.add(completion);
+         }
+       } else if (context.equals(ARGUMENT2_CONTEXT)) {
+         for (Completion completion : ARGUMENT2_COMPLETIONS) {
+           completions.add(completion);
+         }
+       } else if (context.equals(OPTION1_CONTEXT)) {
+         for (Completion completion : OPTION1_COMPLETIONS) {
+           completions.add(completion);
+         }
+       }
+       return true;
+     }
+   }
+ 
+   public static class MockPluginCommand implements CommandMarker {
+     @CliCommand(value = "mock plugin command")
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public Result mockPluginCommand() {
+       return null;
+     }
+   }
+ 
+   public static class MockPluginCommandUnlisted implements CommandMarker {
+     @CliCommand(value = "mock plugin command unlisted")
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public Result mockPluginCommandUnlisted() {
+       return null;
+     }
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/GfshParserJUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/GfshParserJUnitTest.java
index 0000000,45d3414..00a09e3
mode 000000,100644..100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/GfshParserJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/GfshParserJUnitTest.java
@@@ -1,0 -1,1154 +1,1162 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli;
+ 
+ import static org.junit.Assert.assertEquals;
+ import static org.junit.Assert.assertNotNull;
+ import static org.junit.Assert.fail;
+ 
+ import java.lang.reflect.Method;
+ import java.util.ArrayList;
+ import java.util.List;
+ 
+ import org.junit.After;
+ import org.junit.Before;
+ import org.junit.Test;
+ import org.junit.experimental.categories.Category;
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.Completion;
+ import org.springframework.shell.core.Converter;
+ import org.springframework.shell.core.MethodTarget;
+ import org.springframework.shell.core.Parser;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ import org.springframework.shell.event.ParseResult;
+ 
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.CommandProcessingException;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.annotation.CliArgument;
+ import com.gemstone.gemfire.management.internal.cli.converters.StringArrayConverter;
+ import com.gemstone.gemfire.management.internal.cli.converters.StringListConverter;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.parser.SyntaxConstants;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ import com.gemstone.gemfire.test.junit.categories.UnitTest;
+ 
+ /**
+  * GfshParserJUnitTest - Includes tests to check the parsing and auto-completion
+  * capabilities of {@link GfshParser}
+  *
+  * @author njadhav
+  */
+ @Category(UnitTest.class)
+ public class GfshParserJUnitTest {
+   
+   /**
+    * @since 8.1
+    */
+   private static final Method METHOD_command1;
+   static {
+     try {
+       METHOD_command1 = Commands.class.getMethod("command1", String.class, String.class, String.class, String.class, String.class);
+     } catch (Exception e) {
+       throw new IllegalStateException(e);
+     }
+   }
+ 
+   /**
+    * @since 8.1
+    */
+   private static final Method METHOD_testParamConcat;
+   static {
+     try {
+       METHOD_testParamConcat = Commands.class.getMethod("testParamConcat", String.class, String[].class, List.class, Integer.class, String[].class);
+     } catch (Exception e) {
+       throw new IllegalStateException(e);
+     }
+   }
+   
+   /**
+    * @since 8.1
+    */
+   private static final Method METHOD_testMultiWordArg;
+   static {
+     try {
+       METHOD_testMultiWordArg = Commands.class.getMethod("testMultiWordArg", String.class, String.class);
+     } catch (Exception e) {
+       throw new IllegalStateException(e);
+     }
+   }
+ 
+   private static final String COMMAND1_NAME = "command1";
+   private static final String COMMAND1_NAME_ALIAS = "command1_alias";
+   private static final String COMMAND2_NAME = "c2";
+ 
+   private static final String COMMAND1_HELP = "help for " + COMMAND1_NAME;
+   // ARGUMENTS
+   private static final String ARGUMENT1_NAME = "argument1";
+   private static final String ARGUMENT1_HELP = "help for argument1";
+   private static final String ARGUMENT1_CONTEXT = "context for argument 1";
+   private static final Completion[] ARGUMENT1_COMPLETIONS = {
+       new Completion("arg1"), new Completion("arg1alt") };
+   private static final String ARGUEMNT2_NAME = "argument2";
+   private static final String ARGUMENT2_CONTEXT = "context for argument 2";
+   private static final String ARGUMENT2_HELP = "help for argument2";
+   private static final String ARGUMENT2_UNSPECIFIED_DEFAULT_VALUE = "{unspecified default value for argument2}";
+   private static final Completion[] ARGUMENT2_COMPLETIONS = {
+       new Completion("arg2"), new Completion("arg2alt") };
+ 
+   // OPTIONS
+   private static final String OPTION1_NAME = "option1";
+   private static final String OPTION1_SYNONYM = "opt1";
+   private static final String OPTION1_HELP = "help for option1";
+   private static final String OPTION1_CONTEXT = "context for option1";
+   private static final Completion[] OPTION1_COMPLETIONS = {
+       new Completion("option1"), new Completion("option1Alternate") };
+   private static final String OPTION2_NAME = "option2";
+   private static final String OPTION2_HELP = "help for option2";
+   private static final String OPTION2_CONTEXT = "context for option2";
+   private static final String OPTION2_SPECIFIED_DEFAULT_VALUE = "{specified default value for option2}";
+   private static final Completion[] OPTION2_COMPLETIONS = {
+       new Completion("option2"), new Completion("option2Alternate") };
+   private static final String OPTION3_NAME = "option3";
+   private static final String OPTION3_SYNONYM = "opt3";
+   private static final String OPTION3_HELP = "help for option3";
+   private static final String OPTION3_CONTEXT = "context for option3";
+   private static final String OPTION3_UNSPECIFIED_DEFAULT_VALUE = "{unspecified default value for option3}";
+   private static final Completion[] OPTION3_COMPLETIONS = {
+       new Completion("option3"), new Completion("option3Alternate") };
+ 
+   private CommandManager commandManager;
+ 
+   private GfshParser parser;
+ 
+   @Before
+   public void setUp() throws Exception {
+     // Make sure no prior tests leave the CommandManager in a funky state
+     CommandManager.clearInstance();
+ 
+     commandManager = CommandManager.getInstance(false);
+     commandManager.add(Commands.class.newInstance());
+     commandManager.add(SimpleConverter.class.newInstance());
+     commandManager.add(StringArrayConverter.class.newInstance());
+     commandManager.add(StringListConverter.class.newInstance());
+     // Set up the parser
+     parser = new GfshParser(commandManager);
+ 
+     CliUtil.isGfshVM = false;
+   }
+ 
+   @After
+   public void tearDown() {
+     CommandManager.clearInstance();
+   }
+   
+   /**
+    * Tests the auto-completion capability of {@link GfshParser} with the method
+    * {@link GfshParser#complete(String, int, List)}
+    *
+    * @throws IllegalAccessException
+    * @throws InstantiationException
+    * @throws NoSuchMethodException
+    * @throws SecurityException
+    */
+   @Test
+   public void testComplete() throws Exception {
+     // Get the names of the command
+     String[] command1Names = ((CliCommand) METHOD_command1
+         .getAnnotation(CliCommand.class)).value();
+ 
+     // Input contains an entirely different string
+     String input = "moc";
+     List<String> completionCandidates = new ArrayList<String>();
+     List<String> completionValues = new ArrayList<String>();
+     parser.complete(input, input.length(), completionCandidates);
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains a string which is prefix
+     // of more than 1 command
+     input = "c";
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // completions will come alphabetically sorted
+     completionValues.add(COMMAND2_NAME);
+     completionValues.add(COMMAND1_NAME);
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains only prefix of the command
+     // name which is not a prefix of other command.
+     // It may be the prefix for the synonym of command
+     input = command1Names[0].substring(0, 3);
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     completionValues.add(COMMAND1_NAME);
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains only the command name
+     input = command1Names[0];
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the completions for argument1
+     // For arguments, the formatted value will equal the actual arguments
+     // But the actual value will contain the ARGUMENT_SEPARATOR
+     for (Completion completion : ARGUMENT1_COMPLETIONS) {
+       completionValues.add(" "
+           + completion.getValue());
+     }
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name and prefix of first
+     // argument
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue().substring(0, 3);
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the completions for argument2
+     // which have the provided first argument as the prefix
+     for (Completion completion : ARGUMENT1_COMPLETIONS) {
+       if (completion.getValue().startsWith(
+           ARGUMENT1_COMPLETIONS[0].getValue().substring(0, 3))) {
+         completionValues.add(" "
+             + completion.getValue());
+       }
+     }
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name and first argument
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue();
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the completions for argument2
+     for (Completion completion : ARGUMENT2_COMPLETIONS) {
+       completionValues.add(SyntaxConstants.ARGUMENT_SEPARATOR
+           + completion.getValue());
+     }
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument and the prefix of second
+     // argument
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue().substring(0, 2);
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the completions for argument2
+     for (Completion completion : ARGUMENT2_COMPLETIONS) {
+       if (completion.getValue().startsWith(
+           ARGUMENT2_COMPLETIONS[0].getValue().substring(0, 2))) {
+         completionValues.add(SyntaxConstants.ARGUMENT_SEPARATOR
+             + completion.getValue());
+       }
+     }
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument and second argument
+     input = COMMAND1_NAME + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue();
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect all the mandatory options
+     completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+         + OPTION1_NAME);
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name (synonym), first argument, second argument,
+     // prefix of first option
+     input = command1Names[1] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME.substring(0, 3);
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the names for all the options
+     // whose prefix matches with the provided prefix
+     completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+         + OPTION1_NAME);
+     if (OPTION2_NAME.startsWith(OPTION1_NAME.substring(0, 3))) {
+       completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+           + OPTION2_NAME);
+     }
+     if (OPTION3_NAME.startsWith(OPTION1_NAME.substring(0, 3))) {
+       completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+           + OPTION3_NAME);
+     }
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument
+     // and first option
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME;
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the values for the first option
+     for (Completion completion : OPTION1_COMPLETIONS) {
+       completionValues.add(SyntaxConstants.OPTION_VALUE_SPECIFIER
+           + completion.getValue());
+     }
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option and prefix of one of the values provided
+     // by the auto-completor.
+     input = command1Names[1] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue().substring(0, 2);
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the values for the first option
+     for (Completion completion : OPTION1_COMPLETIONS) {
+       if (completion.getValue().startsWith(
+           OPTION1_COMPLETIONS[0].getValue().substring(0, 2))) {
+         completionValues.add(SyntaxConstants.OPTION_VALUE_SPECIFIER
+             + completion.getValue());
+       }
+     }
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option and one of the values provided
+     // by the auto-completor.
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue();
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the remaining options
+     // As only first option is mandatory, we expect the
+     // the other non-mandatory options.
+     completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+         + OPTION2_NAME);
+     completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+         + OPTION3_NAME);
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option, one value for the option and value separator at
+     // the end
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR;
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the other values for completion
+     completionValues.add(SyntaxConstants.VALUE_SEPARATOR
+         + OPTION1_COMPLETIONS[1].getValue());
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option and both the values for the option
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR
+         + OPTION1_COMPLETIONS[1].getValue();
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect the remaining options
+     // As only first option is mandatory, we expect the
+     // the other non-mandatory options.
+     completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+         + OPTION2_NAME);
+     completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+         + OPTION3_NAME);
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option, both the values for the option and valueSeparator
+     // at the end
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR
+         + OPTION1_COMPLETIONS[1].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR;
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect nothing for completion
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option and multiple values assigned to it. It also contains
+     // start of the second option
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR
+         + OPTION1_COMPLETIONS[1].getValue()
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION2_NAME.substring(0, 3);
+     clearAndSimpleComplete(completionCandidates,completionValues,input,parser);
+     // Here we expect those options which have not been specified
+     // before and which have the prefix specified herein as their
+     // prefix
+     completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+         + OPTION2_NAME);
+     if (OPTION3_NAME.startsWith(OPTION2_NAME.substring(0, 3))) {
+       completionValues.add(" " + SyntaxConstants.LONG_OPTION_SPECIFIER
+           + OPTION3_NAME);
+     }
+     assertSimpleCompletionValues(completionValues, completionCandidates);
+   }
+ 
+   private void clearAndSimpleComplete(List<String> completionCandidates,List<String> completionValues,String input,Parser parser){
+     completionCandidates.clear();
+     completionValues.clear();
+     parser.complete(input, input.length(), completionCandidates);
+   }
+ 
+   private void assertSimpleCompletionValues(List<String> expected,
+       List<String> actual) {
+     // TODO Auto-generated method stub
+     assertEquals("Check size", expected.size(), actual.size());
+     for (int i = 0; i < expected.size(); i++) {
+       assertEquals("Check completion value no." + i +". Expected("+expected.get(i)+") & Actual("+actual.get(i)+").", expected.get(i),
+           actual.get(i));
+     }
+   }
+ 
+   /**
+    * Tests the auto-completion capability of {@link GfshParser} with the method
+    * {@link GfshParser#completeAdvanced(String, int, List)}
+    *
+    * @throws IllegalAccessException
+    * @throws InstantiationException
+    * @throws NoSuchMethodException
+    * @throws SecurityException
+    */
+   @Test
+   public void testCompleteAdvanced() throws Exception {
+     // Get the names of the command
+     String[] command1Names = ((CliCommand) METHOD_command1
+         .getAnnotation(CliCommand.class)).value();
+ 
+     // Input contains an entirely different string
+     String input = "moc";
+     List<Completion> completionCandidates = new ArrayList<Completion>();
+     List<Completion> completionValues = new ArrayList<Completion>();
+     parser.completeAdvanced(input, input.length(), completionCandidates);
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains a string which is prefix
+     // of more than 1 command
+     input = "c";
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // completions will come alphabetically sorted
+     completionValues.add(new Completion(COMMAND2_NAME));
+     completionValues.add(new Completion(COMMAND1_NAME));
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains only prefix of the command
+     // name which is not a prefix of other command.
+     // It may be the prefix for the synonym of command
+     input = command1Names[0].substring(0, 3);
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     completionValues.add(new Completion(COMMAND1_NAME));
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains only the command name
+     input = command1Names[0];
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the completions for argument1
+     // For arguments, the formatted value will equal the actual arguments
+     // But the actual value will contain the ARGUMENT_SEPARATOR
+     for (Completion completion : ARGUMENT1_COMPLETIONS) {
+       completionValues.add(new Completion(" "
+           + completion.getValue(), completion.getFormattedValue(), null, 0));
+     }
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name and prefix of first
+     // argument
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue().substring(0, 3);
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the completions for argument2
+     // which have the provided first argument as the prefix
+     for (Completion completion : ARGUMENT1_COMPLETIONS) {
+       if (completion.getValue().startsWith(
+           ARGUMENT1_COMPLETIONS[0].getValue().substring(0, 3))) {
+         completionValues.add(new Completion(" "
+             + completion.getValue(), completion.getFormattedValue(), null, 0));
+       }
+     }
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name and first argument
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue();
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the completions for argument2
+     for (Completion completion : ARGUMENT2_COMPLETIONS) {
+       completionValues.add(new Completion(SyntaxConstants.ARGUMENT_SEPARATOR
+           + completion.getValue(), completion.getFormattedValue(), null, 0));
+     }
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument and the prefix of second
+     // argument
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue().substring(0, 2);
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the completions for argument2
+     for (Completion completion : ARGUMENT2_COMPLETIONS) {
+       if (completion.getValue().startsWith(
+           ARGUMENT2_COMPLETIONS[0].getValue().substring(0, 2))) {
+         completionValues.add(new Completion(SyntaxConstants.ARGUMENT_SEPARATOR
+             + completion.getValue(), completion.getFormattedValue(), null, 0));
+       }
+     }
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument and second argument
+     input = COMMAND1_NAME + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue();
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect all the mandatory options
+     completionValues.add(new Completion(" "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME, OPTION1_NAME,
+         null, 0));
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name (synonym), first argument, second argument,
+     // prefix of first option
+     input = command1Names[1] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME.substring(0, 3);
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the names for all the options
+     // whose prefix matches with the provided prefix
+     completionValues.add(new Completion(" "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME, OPTION1_NAME,
+         null, 0));
+     if (OPTION2_NAME.startsWith(OPTION1_NAME.substring(0, 3))) {
+       completionValues.add(new Completion(" "
+           + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION2_NAME, OPTION2_NAME,
+           null, 0));
+     }
+     if (OPTION3_NAME.startsWith(OPTION1_NAME.substring(0, 3))) {
+       completionValues.add(new Completion(" "
+           + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION3_NAME, OPTION3_NAME,
+           null, 0));
+     }
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument
+     // and first option
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME;
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the values for the first option
+     for (Completion completion : OPTION1_COMPLETIONS) {
+       completionValues.add(new Completion(
+           SyntaxConstants.OPTION_VALUE_SPECIFIER + completion.getValue(),
+           completion.getValue(), null, 0));
+     }
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option and prefix of one of the values provided
+     // by the auto-completor.
+     input = command1Names[1] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue().substring(0, 2);
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the values for the first option
+     for (Completion completion : OPTION1_COMPLETIONS) {
+       if (completion.getValue().startsWith(
+           OPTION1_COMPLETIONS[0].getValue().substring(0, 2))) {
+         completionValues.add(new Completion(
+             SyntaxConstants.OPTION_VALUE_SPECIFIER + completion.getValue(),
+             completion.getValue(), null, 0));
+       }
+     }
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option and one of the values provided
+     // by the auto-completor.
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue();
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the remaining options
+     // As only first option is mandatory, we expect the
+     // the other non-mandatory options.
+     completionValues.add(new Completion(" "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION2_NAME, OPTION2_NAME,
+         null, 0));
+     completionValues.add(new Completion(" "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION3_NAME, OPTION3_NAME,
+         null, 0));
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option, one value for the option and value separator at
+     // the end
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR;
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the other values for completion
+     completionValues.add(new Completion(SyntaxConstants.VALUE_SEPARATOR
+         + OPTION1_COMPLETIONS[1].getValue(), OPTION1_COMPLETIONS[1].getValue(),
+         null, 0));
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option and both the values for the option
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR
+         + OPTION1_COMPLETIONS[1].getValue();
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect the remaining options
+     // As only first option is mandatory, we expect the
+     // the other non-mandatory options.
+     completionValues.add(new Completion(" "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION2_NAME, OPTION2_NAME,
+         null, 0));
+     completionValues.add(new Completion(" "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION3_NAME, OPTION3_NAME,
+         null, 0));
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option, both the values for the option and valueSeparator
+     // at the end
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR
+         + OPTION1_COMPLETIONS[1].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR;
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect nothing for completion
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+     // Input contains command name, first argument, second argument,
+     // first option and multiple values assigned to it. It also contains
+     // start of the second option
+     input = command1Names[0] + " "
+         + ARGUMENT1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + ARGUMENT2_COMPLETIONS[0].getValue()
+         + SyntaxConstants.ARGUMENT_SEPARATOR
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER
+         + OPTION1_COMPLETIONS[0].getValue()
+         + SyntaxConstants.VALUE_SEPARATOR
+         + OPTION1_COMPLETIONS[1].getValue()
+         + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION2_NAME.substring(0, 3);
+     clearAndAdvancedComplete(completionCandidates, completionValues, input,parser);
+     // Here we expect those options which have not been specified
+     // before and which have the prefix specified herein as their
+     // prefix
+     completionValues.add(new Completion(" "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION2_NAME, OPTION2_NAME,
+         null, 0));
+     if (OPTION3_NAME.startsWith(OPTION2_NAME.substring(0, 3))) {
+       completionValues.add(new Completion(" "
+           + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION3_NAME, OPTION3_NAME,
+           null, 0));
+     }
+     assertAdvancedCompletionValues(completionValues, completionCandidates);
+ 
+   }
+ 
+   private void clearAndAdvancedComplete(List<Completion> completionCandidates,List<Completion> completionValues,String input,Parser parser){
+     completionCandidates.clear();
+     completionValues.clear();
+     parser.completeAdvanced(input, input.length(), completionCandidates);
+   }
+ 
+   private void assertAdvancedCompletionValues(List<Completion> expected,
+       List<Completion> actual) {
+     // TODO Auto-generated method stub
+     assertEquals("Check size", expected.size(), actual.size());
+     for (int i = 0; i < expected.size(); i++) {
+       assertEquals("Check completion value no." + i+". Expected("+expected.get(i)+") & Actual("+actual.get(i)+").",
+           expected.get(i).getValue(), actual.get(i).getValue());
+       if (expected.get(i).getFormattedValue() != null) {
+         assertEquals("Check completion formatted value no." + i +". Expected("+expected.get(i).getFormattedValue()+") & Actual("+actual.get(i).getFormattedValue()+").", expected
+             .get(i).getFormattedValue(), actual.get(i).getFormattedValue());
+       }
+     }
+   }
+ 
+   /**
+    * Test for checking parsing of {@link GfshParser} with method
+    * {@link GfshParser#parse(String)}
+    *
+    * Does not include testing for multiple values as this change is still
+    * pending in spring-shell
+    *
+    * @throws InstantiationException
+    * @throws IllegalAccessException
+    * @throws NoSuchMethodException
+    * @throws SecurityException
+    */
+   @Test
+   public void testParse() throws Exception {
+     // Get the names of the command
+     String[] command1Names = ((CliCommand) METHOD_command1
+         .getAnnotation(CliCommand.class)).value();
+ 
+     // Input contains an entirely different string
+     String input = "moc";
+     ParseResult parse = null;
+     CommandProcessingException expectedException = null;
+     try {
+       parse = parser.parse(input);
+     } catch (CommandProcessingException e) {
+       expectedException = e;
+     } finally {
+       assertNotNull("Expecting a "+CommandProcessingException.class+" for an invalid command name: "+input, expectedException);
+       assertEquals("CommandProcessingException type doesn't match. "
+           + "Actual(" + expectedException.getErrorType() + ") & Expected("
+           + CommandProcessingException.COMMAND_INVALID_OR_UNAVAILABLE + ") ",
+           expectedException.getErrorType(),
+           CommandProcessingException.COMMAND_INVALID_OR_UNAVAILABLE);
+     }
+ 
+     // Input contains a string which is prefix
+     // of more than 1 command
+     input = "c";
+     expectedException = null;
+     try {
+       parse = parser.parse(input);
+     } catch (CommandProcessingException e) {
+       expectedException = e;
+     } finally {
+       assertNotNull("Expecting a "+CommandProcessingException.class+" for an invalid/incomplete command name: "+input, expectedException);
+       assertEquals("CommandProcessingException type doesn't match. Actual("
+           + expectedException.getErrorType() + ") & Expected("
+           + CommandProcessingException.COMMAND_INVALID_OR_UNAVAILABLE + ") ",
+           expectedException.getErrorType(),
+           CommandProcessingException.COMMAND_INVALID_OR_UNAVAILABLE);
+     }
+ 
+     // Input contains only prefix of the command
+     // name which is not a prefix of other command.
+     // It may be the prefix for the synonym of command
+     input = "com";
+     expectedException = null;
+     try {
+       parse = parser.parse(input);
+     } catch (CommandProcessingException e) {
+       expectedException = e;
+     } finally {
+       //FIXME - Nikhil/Abhishek prefix shouldn't work
+       assertNotNull("Expecting a "+CommandProcessingException.class+" for an invalid/incomplete command name: "+input, expectedException);
+       assertEquals("CommandProcessingException type doesn't match. Actual("
+           + expectedException.getErrorType() + ") & Expected("
+           + CommandProcessingException.COMMAND_INVALID_OR_UNAVAILABLE + ") ",
+           expectedException.getErrorType(),
+           CommandProcessingException.COMMAND_INVALID_OR_UNAVAILABLE);
+     }
+ 
+     // Input contains only command name
+     input = command1Names[0];
+     expectedException = null;
+     try {
+       parse = parser.parse(input);
+     } catch (CommandProcessingException e) {
+       expectedException = e;
+     } finally {
+       assertNotNull("Expecting a "+CommandProcessingException.class+" for an invalid/incomplete command name: "+input, expectedException);
+       assertEquals("CommandProcessingException type doesn't match. Actual("
+           + expectedException.getErrorType() + ") & Expected("
+           + CommandProcessingException.REQUIRED_ARGUMENT_MISSING + ") ",
+           CommandProcessingException.REQUIRED_ARGUMENT_MISSING,
+           expectedException.getErrorType());
+     }
+ 
+     // Input contains first argument and first option with value
+     input = command1Names[0] + " ARGUMENT1_VALUE "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER + "somevalue";
+     parse = parser.parse(input);
+     assertNotNull(parse);
+     assertEquals("Check ParseResult method", parse.getMethod(), METHOD_command1);
+     assertEquals("Check no. of method arguments", 5,
+         parse.getArguments().length);
+     assertEquals("Check argument1", "ARGUMENT1_VALUE", parse.getArguments()[0]);
+     assertEquals("Check argument2", ARGUMENT2_UNSPECIFIED_DEFAULT_VALUE,
+         parse.getArguments()[1]);
+     assertEquals("Check option1 value", "somevalue", parse.getArguments()[2]);
+     assertEquals("Check option2 value", null, parse.getArguments()[3]);
+     assertEquals("Check option3 value", OPTION3_UNSPECIFIED_DEFAULT_VALUE,
+         parse.getArguments()[4]);
+ 
+     // Input contains only both arguments but is terminated by long option
+     // specifiers. These hyphens at the end are ignored by the parser
+     input = command1Names[1]
+         + " ARGUMENT1_VALUE?      ARGUMENT2_VALUE -- ----------";
+     try {
+       parse = parser.parse(input);
+     } catch (CommandProcessingException e) {
+       expectedException = e;
+     } finally {
+       assertNotNull("Expecting a "+CommandProcessingException.class+" for an invalid/incomplete command name: "+input, expectedException);
+       assertEquals("CommandProcessingException type doesn't match. Actual("
+           + expectedException.getErrorType() + ") & Expected("
+           + CommandProcessingException.REQUIRED_OPTION_MISSING + ") ",
+           expectedException.getErrorType(),
+           CommandProcessingException.REQUIRED_OPTION_MISSING);
+     }
+ 
+     // Input contains both arguments. The first option is specified with value
+     // The second is specified without value and the third option is not
+     // specified
+     input = command1Names[1]
+         + "         ARGUMENT1_VALUE?       ARGUMENT2_VALUE "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER + "option1value" + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION2_NAME;
+     parse = parser.parse(input);
+     assertNotNull(parse);
+     assertEquals("Check ParseResult method", parse.getMethod(), METHOD_command1);
+     assertEquals("Check no. of method arguments", 5,
+         parse.getArguments().length);
+     assertEquals("Check argument1", "ARGUMENT1_VALUE", parse.getArguments()[0]);
+     assertEquals("Check argument2", "ARGUMENT2_VALUE", parse.getArguments()[1]);
+     assertEquals("Check option1 value", "option1value", parse.getArguments()[2]);
+     assertEquals("Check option2 value", OPTION2_SPECIFIED_DEFAULT_VALUE,
+         parse.getArguments()[3]);
+     assertEquals("Check option3 value", OPTION3_UNSPECIFIED_DEFAULT_VALUE,
+         parse.getArguments()[4]);
+ 
+     // Input contains both arguments. All the three options
+     // are specified with values
+     input = command1Names[1]
+         + "         ARGUMENT1_VALUE?       ARGUMENT2_VALUE "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION1_SYNONYM
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER + "option1value" + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION2_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER + "option2value" + " "
+         + SyntaxConstants.LONG_OPTION_SPECIFIER + OPTION3_NAME
+         + SyntaxConstants.OPTION_VALUE_SPECIFIER + "option3value";
+     parse = parser.parse(input);
+     assertNotNull(parse);
+     assertEquals("Check ParseResult method", parse.getMethod(), METHOD_command1);
+     assertEquals("Check no. of method arguments", 5,
+         parse.getArguments().length);
+     assertEquals("Check argument1", "ARGUMENT1_VALUE", parse.getArguments()[0]);
+     assertEquals("Check argument2", "ARGUMENT2_VALUE", parse.getArguments()[1]);
+     assertEquals("Check option1 value", "option1value", parse.getArguments()[2]);
+     assertEquals("Check option2 value", "option2value", parse.getArguments()[3]);
+     assertEquals("Check option3 value", "option3value", parse.getArguments()[4]);
+ 
+     // Test concatenation of options when they appear more than once in the command
+     String command = "testParamConcat --string=string1 --stringArray=1,2 --stringArray=3,4 --stringList=11,12,13 --integer=10 --stringArray=5 --stringList=14,15";
+     ParseResult parseResult = parser.parse(command);
+     assertNotNull(parseResult);
+     assertEquals("Check ParseResult method", parseResult.getMethod(), METHOD_testParamConcat);
+     assertEquals("Check no. of method arguments", 5, parseResult.getArguments().length);
+     Object[] arguments = parseResult.getArguments();
+     assertEquals(arguments[0], "string1");
+     assertEquals(((String[]) arguments[1])[0], "1");
+     assertEquals(((String[]) arguments[1])[1], "2");
+     assertEquals(((String[]) arguments[1])[2], "3");
+     assertEquals(((String[]) arguments[1])[3], "4");
+     assertEquals(((String[]) arguments[1])[4], "5");
+     assertEquals(((List) arguments[2]).get(0), "11");
+     assertEquals(((List) arguments[2]).get(1), "12");
+     assertEquals(((List) arguments[2]).get(2), "13");
+     assertEquals(((List) arguments[2]).get(3), "14");
+     assertEquals(((List) arguments[2]).get(4), "15");
+     assertEquals(arguments[3], 10);
+ 
+     // Test concatenation of options when they appear more than once in the command
+     command = "testParamConcat --stringArray=1,2 --stringArray=\'3,4\'";
+     parseResult = parser.parse(command);
+     assertNotNull(parseResult);
+     assertEquals("Check ParseResult method", parseResult.getMethod(), METHOD_testParamConcat);
+     assertEquals("Check no. of method arguments", 5, parseResult.getArguments().length);
+     arguments = parseResult.getArguments();
+     assertEquals(((String[]) arguments[1])[0], "1");
+     assertEquals(((String[]) arguments[1])[1], "2");
+     assertEquals(((String[]) arguments[1])[2], "3,4");
+ 
+     command = "testParamConcat --string=\"1\" --colonArray=2:3:4 --stringArray=5,\"6,7\",8 --stringList=\"9,10,11,12\"";
+     parseResult = parser.parse(command);
+     assertNotNull(parseResult);
+     assertEquals("Check ParseResult method", parseResult.getMethod(), METHOD_testParamConcat);
+     assertEquals("Check no. of method arguments", 5, parseResult.getArguments().length);
+     arguments = parseResult.getArguments();
+     assertEquals(arguments[0], "1");
+     assertEquals(((String[]) arguments[1])[0], "5");
+     assertEquals(((String[]) arguments[1])[1], "6,7");
+     assertEquals(((String[]) arguments[1])[2], "8");
+     assertEquals(((List) arguments[2]).get(0), "9,10,11,12");
+     assertEquals(((String[]) arguments[4])[0], "2");
+     assertEquals(((String[]) arguments[4])[1], "3");
+     assertEquals(((String[]) arguments[4])[2], "4");
+ 
+     try {
+     command = "testParamConcat --string=string1 --stringArray=1,2 --string=string2";
+     parseResult = parser.parse(command);
+     fail("Should have received a CommandProcessingException due to 'string' being specified twice");
+     } catch (CommandProcessingException expected) {
+       // Expected
+     }
+ 
+     command = "testMultiWordArg this is just one argument?this is a second argument";
+     parseResult = parser.parse(command);
+     assertNotNull(parseResult);
+     assertEquals("Check ParseResult method", parseResult.getMethod(), METHOD_testMultiWordArg);
+     assertEquals("Check no. of method arguments", 2, parseResult.getArguments().length);
+     arguments = parseResult.getArguments();
+     assertEquals(arguments[0], "this is just one argument");
+     assertEquals(arguments[1], "this is a second argument");
+   }
+ 
+   public void testDefaultAvailabilityMessage() throws Exception {
+     checkAvailabilityMessage(new AvailabilityCommands(), AvailabilityCommands.C2_NAME, AvailabilityCommands.C2_MSG_UNAVAILABLE, AvailabilityCommands.C2_PROP);
+   }
+ 
+   public void testCustomAvailabilityMessage() throws Exception {
+     checkAvailabilityMessage(new AvailabilityCommands(), AvailabilityCommands.C1_NAME, AvailabilityCommands.C1_MSG_UNAVAILABLE, AvailabilityCommands.C1_PROP);
+   }
+ 
+   public void checkAvailabilityMessage(CommandMarker availabilityCommands, String commandString, String unavailableMessage, String availabiltyBooleanProp) throws Exception {
+     CommandManager cmdManager =  CommandManager.getInstance(false);
+     cmdManager.add(availabilityCommands);
+ 
+     GfshParser parser = new GfshParser(cmdManager);
+     ParseResult parseResult = null;
+ 
+     // Case 1: Command is not available
+     try {
+       parseResult = parser.parse(commandString);
+     } catch (CommandProcessingException e) {
+       String actualMessage = e.getMessage();
+       String expectedMessage = CliStrings.format(CliStrings.GFSHPARSER__MSG__0_IS_NOT_AVAILABLE_REASON_1, new Object[] {commandString, unavailableMessage});
+       assertEquals("1. Unavailabilty message ["+actualMessage+"] is not as expected["+expectedMessage+"].", actualMessage, expectedMessage);
+     }
+ 
+     // Case 2: Command is 'made' available
+     try {
+       System.setProperty(availabiltyBooleanProp, "true");
+       parseResult = parser.parse(commandString);
+       assertNotNull("ParseResult should not be null for available command.", parseResult);
+     } catch (CommandProcessingException e) {
+       fail("Command \""+commandString+"\" is expected to be available");
+       e.printStackTrace();
+     } finally {
+       System.clearProperty(availabiltyBooleanProp);
+     }
+ 
+     // Case 3: Command is not available again
+     try {
+       parseResult = parser.parse(commandString);
+     } catch (CommandProcessingException e) {
+       String actualMessage = e.getMessage();
+       String expectedMessage = CliStrings.format(CliStrings.GFSHPARSER__MSG__0_IS_NOT_AVAILABLE_REASON_1, new Object[] {commandString, unavailableMessage});
+       assertEquals("2. Unavailabilty message ["+actualMessage+"] is not as expected["+expectedMessage+"].", actualMessage, expectedMessage);
+     }
+   }
+ 
+   static class Commands implements CommandMarker {
+ 
+     @CliCommand(value = { COMMAND1_NAME, COMMAND1_NAME_ALIAS }, help = COMMAND1_HELP)
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static String command1(
+         @CliArgument(name = ARGUMENT1_NAME, argumentContext = ARGUMENT1_CONTEXT, help = ARGUMENT1_HELP, mandatory = true)
+         String argument1,
+         @CliArgument(name = ARGUEMNT2_NAME, argumentContext = ARGUMENT2_CONTEXT, help = ARGUMENT2_HELP, mandatory = false, unspecifiedDefaultValue = ARGUMENT2_UNSPECIFIED_DEFAULT_VALUE, systemProvided = false)
+         String argument2,
+         @CliOption(key = { OPTION1_NAME, OPTION1_SYNONYM }, help = OPTION1_HELP, mandatory = true, optionContext = OPTION1_CONTEXT)
+         String option1,
+         @CliOption(key = { OPTION2_NAME }, help = OPTION2_HELP, mandatory = false, optionContext = OPTION2_CONTEXT, specifiedDefaultValue = OPTION2_SPECIFIED_DEFAULT_VALUE)
+         String option2,
+         @CliOption(key = { OPTION3_NAME, OPTION3_SYNONYM }, help = OPTION3_HELP, mandatory = false, optionContext = OPTION3_CONTEXT, unspecifiedDefaultValue = OPTION3_UNSPECIFIED_DEFAULT_VALUE)
+         String option3) {
+       return null;
+     }
+ 
+     @CliCommand(value = { COMMAND2_NAME })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static String command2() {
+       return null;
+     }
+ 
+     @CliCommand(value = { "testParamConcat" })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static Result testParamConcat(
+         @CliOption(key = { "string" }) String string,
+         @CliOption(key = { "stringArray" }) @CliMetaData(valueSeparator = ",") String[] stringArray,
+         @CliOption(key = { "stringList" }, optionContext = ConverterHint.STRING_LIST) @CliMetaData(valueSeparator = ",") List<String> stringList,
+         @CliOption(key = { "integer" }) Integer integer,
+         @CliOption(key = { "colonArray" }) @CliMetaData(valueSeparator = ":") String[] colonArray) {
+       return null;
+     }
+ 
+     @CliCommand(value = { "testMultiWordArg" })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public static Result testMultiWordArg(
+         @CliArgument(name = "arg1" ) String arg1,
+         @CliArgument(name = "arg2" ) String arg2) {
+       return null;
+     }
+   }
+ 
+   static class SimpleConverter implements Converter<String> {
+ 
+     public boolean supports(Class<?> type, String optionContext) {
+       // TODO Auto-generated method stub
+       if (type.isAssignableFrom(String.class)) {
+         return true;
+       }
+       return false;
+     }
+ 
+     public String convertFromText(String value, Class<?> targetType,
+         String optionContext) {
+       // TODO Auto-generated method stub
+       return value;
+     }
+ 
+     public boolean getAllPossibleValues(List<Completion> completions,
+         Class<?> targetType, String existingData, String context,
+         MethodTarget target) {
+       // TODO Auto-generated method stub
+       if (context.equals(ARGUMENT1_CONTEXT)) {
+         for (Completion completion : ARGUMENT1_COMPLETIONS) {
+           completions.add(completion);
+         }
+       } else if (context.equals(ARGUMENT2_CONTEXT)) {
+         for (Completion completion : ARGUMENT2_COMPLETIONS) {
+           completions.add(completion);
+         }
+       } else if (context.equals(OPTION1_CONTEXT)) {
+         for (Completion completion : OPTION1_COMPLETIONS) {
+           completions.add(completion);
+         }
+       }
+       return true;
+     }
+   }
+ 
+   public static class AvailabilityCommands implements CommandMarker {
+     static final String C1_NAME = "C1";
+     static final String C1_PROP = C1_NAME+"-available";
+     static final String C1_MSG_UNAVAILABLE = "Requires " + C1_PROP + "=true";
+     static final String C1_MSG_AVAILABLE   = C1_NAME + " is available.";
+ 
+     static final String C2_NAME = "C2";
+     static final String C2_PROP = C2_NAME+"-available";
+     static final String C2_MSG_UNAVAILABLE = CliStrings.AVAILABILITYTARGET_MSG_DEFAULT_UNAVAILABILITY_DESCRIPTION;
+     static final String C2_MSG_AVAILABLE   = C2_NAME + " is available.";
+ 
+     @CliCommand(value = { C1_NAME })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public Result command1() {
+       return ResultBuilder.createInfoResult(C1_MSG_AVAILABLE);
+     }
+ 
+     @CliCommand(value = { C2_NAME })
++    @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+     public Result command2() {
+       return ResultBuilder.createInfoResult(C2_MSG_AVAILABLE);
+     }
+ 
 -    @CliAvailabilityIndicator(C1_NAME)
 -    @CliMetaData.AvailabilityMetadata(availabilityDescription=C1_MSG_UNAVAILABLE)
++    @CliAvailabilityIndicator(C1_NAME)    
+     public boolean isCommand1Available() {
+       return Boolean.getBoolean(C1_PROP);
+     }
+ 
+     @CliAvailabilityIndicator(C2_NAME)
+     public boolean isCommand2Available() {
+       return Boolean.getBoolean(C2_PROP);
+     }
+   }
+ }


[49/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/build.gradle
----------------------------------------------------------------------
diff --cc geode-core/build.gradle
index 0000000,1aa07ee..5a79c7c
mode 000000,100755..100755
--- a/geode-core/build.gradle
+++ b/geode-core/build.gradle
@@@ -1,0 -1,204 +1,217 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ sourceSets {
+   jca {
+     compileClasspath += configurations.compile
+     runtimeClasspath += configurations.runtime
+   }
+ }
+ 
+ configurations {
+   //declaring new configuration that will be used to associate with artifacts
+   archives
+ }
+ 
+ dependencies {
+    // Source Dependencies
+   // External 
+   provided files("${System.getProperty('java.home')}/../lib/tools.jar")
+   compile 'org.jgroups:jgroups:3.6.7.Final'
+   compile 'antlr:antlr:' + project.'antlr.version'
+   compile 'com.fasterxml.jackson.core:jackson-annotations:' + project.'jackson.version'
+   compile 'com.fasterxml.jackson.core:jackson-core:' + project.'jackson.version'
+   compile 'com.fasterxml.jackson.core:jackson-databind:' + project.'jackson.version'
+   provided 'com.google.guava:guava:' + project.'guava.version'
+   compile 'commons-io:commons-io:' + project.'commons-io.version'
+   compile 'commons-lang:commons-lang:' + project.'commons-lang.version'
+   compile 'commons-logging:commons-logging:' + project.'commons-logging.version'
+   compile 'commons-modeler:commons-modeler:' + project.'commons-modeler.version'
+   compile 'io.netty:netty-all:' + project.'netty-all.version'
+   compile 'it.unimi.dsi:fastutil:' + project.'fastutil.version'
+   compile 'javax.activation:activation:' + project.'activation.version'
+   compile 'javax.mail:javax.mail-api:' + project.'javax.mail-api.version'
+   compile 'javax.resource:javax.resource-api:' + project.'javax.resource-api.version'
+   compile 'javax.servlet:javax.servlet-api:' + project.'javax.servlet-api.version'
+   compile 'javax.transaction:javax.transaction-api:' + project.'javax.transaction-api.version'
+   compile 'mx4j:mx4j:' + project.'mx4j.version'
+   compile 'mx4j:mx4j-remote:' + project.'mx4j.version'
+   compile 'mx4j:mx4j-tools:' + project.'mx4j.version'
+   compile 'net.java.dev.jna:jna:' + project.'jna.version'
+   compile 'jline:jline:' + project.'jline.version'
+   provided 'org.apache.hadoop:hadoop-common:' + project.'hadoop.version'
+   provided 'org.apache.hadoop:hadoop-annotations:' + project.'hadoop.version'
+   provided 'org.apache.hadoop:hadoop-hdfs:' + project.'hadoop.version'
+   provided 'org.apache.hadoop:hadoop-mapreduce-client-core:' + project.'hadoop.version'
+   compile 'org.apache.hbase:hbase:' + project.'hbase.version'
+   compile 'org.apache.logging.log4j:log4j-api:' + project.'log4j.version'
+   compile 'org.apache.logging.log4j:log4j-core:' + project.'log4j.version'
+   runtime 'org.apache.logging.log4j:log4j-slf4j-impl:' + project.'log4j.version'
+   runtime 'org.apache.logging.log4j:log4j-jcl:' + project.'log4j.version'
+   runtime 'org.apache.logging.log4j:log4j-jul:' + project.'log4j.version'
+   compile 'org.eclipse.jetty:jetty-http:' + project.'jetty.version'
+   compile 'org.eclipse.jetty:jetty-io:' + project.'jetty.version'
+   compile 'org.eclipse.jetty:jetty-security:' + project.'jetty.version'
+   compile 'org.eclipse.jetty:jetty-server:' + project.'jetty.version'
+   compile 'org.eclipse.jetty:jetty-servlet:' + project.'jetty.version'
+   compile 'org.eclipse.jetty:jetty-util:' + project.'jetty.version'
+   compile 'org.eclipse.jetty:jetty-webapp:' + project.'jetty.version'
+   compile 'org.eclipse.jetty:jetty-xml:' + project.'jetty.version'
+   compile 'org.fusesource.jansi:jansi:' + project.'jansi.version'
+   compile 'org.slf4j:slf4j-api:' + project.'slf4j-api.version'
+   compile 'org.springframework.data:spring-data-commons:' + project.'spring-data-commons.version'
+   provided 'org.springframework.data:spring-data-gemfire:' + project.'spring-data-gemfire.version'
+   compile 'org.springframework:spring-tx:' + project.'springframework.version'
+   compile 'org.springframework.shell:spring-shell:' + project.'spring-shell.version'
+   compile 'org.xerial.snappy:snappy-java:' + project.'snappy-java.version'
+   compile 'org.apache.hbase:hbase:' + project.'hbase.version'
+  
+   compile project(':geode-common')
+   compile project(':geode-joptsimple')
+   compile project(':geode-json')
+   
+   jcaCompile sourceSets.main.output
+ 
+   testCompile project(':geode-junit')
+ 
+   // Test Dependencies
+   // External
+   testCompile 'org.apache.bcel:bcel:' + project.'bcel.version'
+   testRuntime 'org.apache.derby:derby:' + project.'derby.version'
+   testRuntime 'org.apache.hadoop:hadoop-auth:' + project.'hadoop.version'
+   testCompile 'org.mockito:mockito-core:' + project.'mockito-core.version'
+   testRuntime 'commons-collections:commons-collections:' + project.'commons-collections.version'
+   testRuntime 'commons-configuration:commons-configuration:' + project.'commons-configuration.version'
+   testRuntime 'commons-io:commons-io:' + project.'commons-io.version'
+   testCompile 'net.spy:spymemcached:' + project.'spymemcached.version'
+   testCompile 'redis.clients:jedis:' + project.'jedis.version'
+ 
+   testCompile 'org.powermock:powermock-core:' + project.'powermock.version'
+   testCompile 'org.powermock:powermock-module-junit4:' + project.'powermock.version'
+   testCompile 'org.powermock:powermock-api-mockito:' + project.'powermock.version'
+ }
+ 
+ def generatedResources = "$buildDir/generated-resources/main"
+ 
+ sourceSets {
+   main {
+     output.dir(generatedResources, builtBy: 'createVersionPropertiesFile')
+   }
+ }
+  
+ // Creates the version properties file and writes it to the classes dir
+ task createVersionPropertiesFile {
+   def propertiesFile = file(generatedResources + "/com/gemstone/gemfire/internal/GemFireVersion.properties");
+   outputs.file propertiesFile
+   inputs.dir compileJava.destinationDir
+ 
+   doLast {
+ 
+     try {
+       def grgit = org.ajoberstar.grgit.Grgit.open(currentDir: projectDir)
+       ext.branch = grgit.branch.getCurrent().name
+       ext.commitId = grgit.head().id
+       ext.sourceDate = grgit.head().getDate().format('yyyy-MM-dd HH:mm:ss Z')
+       grgit.close()
+     } catch (Exception e) {
+       logger.warn( '***** Unable to find Git workspace. Using default version information *****' )
+       ext.branch = 'UNKNOWN'
+       ext.commitId = 'UNKNOWN'
+       ext.sourceDate = new Date().format('yyyy-MM-dd HH:mm:ss Z')
+     }
+ 
+     ext.osArch = System.getProperty('os.arch')
+     ext.osName = System.getProperty('os.name')
+     ext.osVersion = System.getProperty('os.version')
+     ext.buildDate = new Date().format('yyyy-MM-dd HH:mm:ss Z')
+     ext.buildNumber = new Date().format('MMddyy')
+     ext.jdkVersion = System.getProperty('java.version')
+ 
+     def props = [
+       "Product-Name"      : "Apache Geode (incubating)",
+       "Product-Version"   : version,
+       "Build-Id"          : System.env.USER + ' ' + ext.buildNumber,
+       "Build-Date"        : ext.buildDate,
+       "Build-Platform"    : ext.osName + ' ' + ext.osVersion + ' ' + ext.osArch,
+       "Build-Java-Version": ext.jdkVersion,
+       "Source-Date"       : ext.sourceDate,
+       "Source-Revision"   : ext.commitId,
+       "Source-Repository" : ext.branch
+     ] as Properties
+ 
+     propertiesFile.getParentFile().mkdirs();
+     new FileOutputStream(propertiesFile).withStream { fos ->
+       props.store(fos, '')
+     }
+   }
+ }
+ 
+ jar {
+ 
+   from sourceSets.main.output
+   from sourceSets.jca.output
+   
+   exclude 'com/gemstone/gemfire/management/internal/web/**'
+   exclude 'com/gemstone/gemfire/internal/i18n/StringIdResourceBundle_ja.txt'
+   exclude 'com/gemstone/gemfire/admin/doc-files/ds4_0.dtd'
+ }
+ 
+ task webJar (type: Jar, dependsOn: classes) {
+   description 'Assembles the jar archive containing the gemfire management web classes.'
+   from sourceSets.main.output
+   baseName 'geode-web'
+   include 'com/gemstone/gemfire/management/internal/web/**'
+ }
+ 
+ task raJar (type: Jar, dependsOn: classes) {
+   description 'Assembles the jar archive that contains the JCA classes'
+   from sourceSets.jca.output
+   exclude 'com/gemstone/gemfire/ra/**'
+   archiveName 'ra.jar'
+ }
+ 
+ task jcaJar (type: Jar, dependsOn: raJar) {
+   description 'Assembles the jar archive that contains the JCA bundle'
+   baseName 'geode-jca'
+   extension 'rar'
+   metaInf { from 'src/jca/ra.xml' }
+   from raJar.archivePath
+ }
+ 
+ configurations {
+   classesOutput {
+     extendsFrom compile
+     description  'a dependency that exposes the compiled classes'
+   }
+ }
+ 
+ dependencies {
+   classesOutput sourceSets.main.output
+ }
++
++test {  
++  def assemblyPath = project(':gemfire-assembly').buildDir
++  def distributionBaseName = "apache-geode"
++  environment 'GEMFIRE', "$assemblyPath/install/${distributionBaseName}"
++}
++
++distributedTest {  
++  def assemblyPath = project(':gemfire-assembly').buildDir
++  def distributionBaseName = "apache-geode"
++  environment 'GEMFIRE', "$assemblyPath/install/${distributionBaseName}"
++}
++

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
index 0000000,5cae85d..ab3607f
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
@@@ -1,0 -1,521 +1,587 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.cache.operations;
+ 
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.Region;
+ 
+ /**
+  * Encapsulates a cache operation and the data associated with it for both the
+  * pre-operation and post-operation cases. Implementations for specific
+  * operations will extend this with the specifics as required e.g. a getKey()
+  * method for a GET operation. Implementations for all the cache operations that
+  * require authorization are provided.
+  * 
+  * Implementations of this interface are <b>not</b> expected to be thread-safe.
+  * 
+  * @author Sumedh Wale
+  * @since 5.5
+  */
+ public abstract class OperationContext {
+ 
+   /**
+    * Enumeration for various cache operations. Implementations for each of the
+    * supported operation listed here are provided.
+    * 
+    * @author Sumedh Wale
+    * @since 5.5
+    */
+   public static final class OperationCode {
+ 
+     private static final byte OP_GET = 1;
+ 
+     private static final byte OP_PUT = 2;
+ 
+     private static final byte OP_DESTROY = 3;
+ 
+     private static final byte OP_INVALIDATE = 4;
+ 
+     private static final byte OP_REGISTER_INTEREST = 5;
+ 
+     private static final byte OP_UNREGISTER_INTEREST = 6;
+ 
+     private static final byte OP_CONTAINS_KEY = 7;
+ 
+     private static final byte OP_KEY_SET = 8;
+ 
+     private static final byte OP_QUERY = 9;
+ 
+     private static final byte OP_EXECUTE_CQ = 10;
+ 
+     private static final byte OP_STOP_CQ = 11;
+ 
+     private static final byte OP_CLOSE_CQ = 12;
+ 
+     private static final byte OP_REGION_CLEAR = 13;
+ 
+     private static final byte OP_REGION_CREATE = 14;
+ 
+     private static final byte OP_REGION_DESTROY = 15;
+     
+     private static final byte OP_PUTALL = 16;
+     
+     private static final byte OP_EXECUTE_FUNCTION = 17;
+     
+     private static final byte OP_GET_DURABLE_CQS = 18;
+     
+     private static final byte OP_REMOVEALL = 19;
+     
++    /**
++    @since Geode 1.0
++    */
+     private static final byte OP_RESOURCE = 20;
+     
 -    private static final OperationCode[] VALUES = new OperationCode[22];
++    private static final byte OP_LIST = 21;
++    
++    private static final byte OP_CREATE_QUERY = 22;
++
++    private static final byte OP_UPDATE_QUERY = 23;
++
++    private static final byte OP_DELETE_QUERY = 24;
++    
++    private static final OperationCode[] VALUES = new OperationCode[25];
+ 
+     private static final Map OperationNameMap = new HashMap();
+ 
+     /**
++     * A LIST operation.
++     * LIST regions, registered functions, named queries in DS. 
++     */
++    public static final OperationCode LIST = new OperationCode(
++        "LIST", OP_LIST);
++    
++    /**
++     * A create parameterized query operation with developer REST APIs. 
++     */
++    public static final OperationCode CREATE_QUERY = new OperationCode(
++        "CREATE_QUERY", OP_CREATE_QUERY);
++    
++    /**
++     * A update parameterized query operation with developer REST APIs. 
++     */
++    public static final OperationCode UPDATE_QUERY = new OperationCode(
++        "UPDATE_QUERY", OP_UPDATE_QUERY);
++    
++    /**
++     * A delete parameterized query operation with developer REST APIs. 
++     */
++    public static final OperationCode DELETE_QUERY = new OperationCode(
++        "DELETE_QUERY", OP_DELETE_QUERY);
++    
++    /**
+      * An entry get operation.
+      * 
+      * @see Region#get(Object)
+      */
+     public static final OperationCode GET = new OperationCode("GET", OP_GET);
+ 
+     /**
+      * An entry create/update operation.
+      * 
+      * @see Region#put(Object, Object)
+      */
+     public static final OperationCode PUT = new OperationCode("PUT", OP_PUT);
+ 
+     /**
+      * An map putAll operation.
+      * 
+      * @see Region#putAll(Map map)
+      */
+     public static final OperationCode PUTALL = new OperationCode("PUTALL", OP_PUTALL);
+     
+     /**
+      * A region removeAll operation.
+      * 
+      * @see Region#removeAll(java.util.Collection)
+      * @since 8.1
+      */
+     public static final OperationCode REMOVEALL = new OperationCode("REMOVEALL", OP_REMOVEALL);
+     
+     /**
+      * An entry destroy operation.
+      * 
+      * @see Region#destroy(Object, Object)
+      */
+     public static final OperationCode DESTROY = new OperationCode("DESTROY",
+         OP_DESTROY);
+ 
+     /**
+      * An entry invalidate operation.
+      * 
+      * @see Region#invalidate(Object, Object)
+      */
+     public static final OperationCode INVALIDATE = new OperationCode(
+         "INVALIDATE", OP_INVALIDATE);
+ 
+     /**
+      * A register interest operation.
+      * 
+      * @see Region#registerInterest(Object)
+      */
+     public static final OperationCode REGISTER_INTEREST = new OperationCode(
+         "REGISTER_INTEREST", OP_REGISTER_INTEREST);
+ 
+     /**
+      * An unregister interest operation.
+      * 
+      * @see Region#unregisterInterest
+      */
+     public static final OperationCode UNREGISTER_INTEREST = new OperationCode(
+         "UNREGISTER_INTEREST", OP_UNREGISTER_INTEREST);
+ 
+     /**
+      * A region <code>containsKey</code> operation.
+      * 
+      * @see Region#containsKey
+      */
+     public static final OperationCode CONTAINS_KEY = new OperationCode(
+         "CONTAINS_KEY", OP_CONTAINS_KEY);
+ 
+     /**
+      * A region <code>keySet</code> operation.
+      * 
+      * @see Region#keySet
+      */
+     public static final OperationCode KEY_SET = new OperationCode("KEY_SET",
+         OP_KEY_SET);
+ 
+     /**
+      * A cache query operation.
+      * 
+      * @see Region#query
+      */
+     public static final OperationCode QUERY = new OperationCode("QUERY",
+         OP_QUERY);
+ 
+     /**
+      * A continuous query execution operation.
+      */
+     public static final OperationCode EXECUTE_CQ = new OperationCode(
+         "EXECUTE_CQ", OP_EXECUTE_CQ);
+ 
+     /**
+      * A continuous query stop operation.
+      */
+     public static final OperationCode STOP_CQ = new OperationCode("STOP_CQ",
+         OP_STOP_CQ);
+ 
+     /**
+      * A continuous query close operation.
+      */
+     public static final OperationCode CLOSE_CQ = new OperationCode("CLOSE_CQ",
+         OP_CLOSE_CQ);
+ 
+     /**
+      * A region clear operation.
+      * 
+      * @see Region#clear
+      */
+     public static final OperationCode REGION_CLEAR = new OperationCode(
+         "REGION_CLEAR", OP_REGION_CLEAR);
+ 
+     /**
+      * A region create operation.
+      * 
+      * @see Region#createSubregion
+      * @see Cache#createRegion
+      */
+     public static final OperationCode REGION_CREATE = new OperationCode(
+         "REGION_CREATE", OP_REGION_CREATE);
+ 
+     /**
+      * A region destroy operation.
+      * 
+      * @see Region#destroyRegion(Object)
+      */
+     public static final OperationCode REGION_DESTROY = new OperationCode(
+         "REGION_DESTROY", OP_REGION_DESTROY);
+     
+     /**
+      * A function execution operation
+      */
+     public static final OperationCode EXECUTE_FUNCTION = new OperationCode(
+         "EXECUTE_FUNCTION", OP_EXECUTE_FUNCTION);
+     
+     /**
+      * A get durable continuous query operation
+      */
+     public static final OperationCode GET_DURABLE_CQS = new OperationCode(
+         "GET_DURABLE_CQS", OP_GET_DURABLE_CQS);
+     
+     
+     /**
 -     * A resource operation. See ResourceOperationContext for more details
++     * A resource operation 
++     * 
++     * @since Geode 1.0
+      */
+     public static final OperationCode RESOURCE = new OperationCode(
+         "RESOURCE", OP_RESOURCE);
+ 
+     /** The name of this operation. */
+     private final String name;
+ 
+     /**
+      * One of the following: OP_GET, OP_CREATE, OP_UPDATE, OP_INVALIDATE,
+      * OP_DESTROY, OP_REGISTER_INTEREST, OP_REGISTER_INTEREST_REGEX,
+      * OP_UNREGISTER_INTEREST, OP_UNREGISTER_INTEREST_REGEX, OP_QUERY,
+      * OP_REGION_CREATE, OP_REGION_DESTROY, OP_PUTALL
+      */
+     private final byte opCode;
+ 
+     /** Creates a new instance of Operation. */
+     private OperationCode(String name, byte opCode) {
+       this.name = name;
+       this.opCode = opCode;
+       VALUES[opCode] = this;
+       OperationNameMap.put(name, this);
+     }
++    
++    /**
++     * Returns true if this is a list operation for regions, functions and queries.
++     */
++    public boolean isList() {
++      return (this.opCode == OP_LIST);
++    }
++    
++    /**
++     * Returns true if this is a create named query operation.
++     */
++    public boolean isCreateQuery() {
++      return (this.opCode == OP_CREATE_QUERY);
++    }
+ 
+     /**
++     * Returns true if this is a update named query operation.
++     */
++    public boolean isUpdateQuery() {
++      return (this.opCode == OP_UPDATE_QUERY);
++    }
++    
++    /**
++     * Returns true if this is a delete named query operation.
++     */
++    public boolean isDestroyQuery() {
++      return (this.opCode == OP_DELETE_QUERY);
++    }
++    
++    /**
+      * Returns true if this is a entry get operation.
+      */
+     public boolean isGet() {
+       return (this.opCode == OP_GET);
+     }
+ 
+     /**
+      * Returns true if this is a entry create/update operation.
+      */
+     public boolean isPut() {
+       return (this.opCode == OP_PUT);
+     }
+     
+     /**
+      * Returns true if this is a map putAll operation.
+      */
+     public boolean isPutAll() {
+       return (this.opCode == OP_PUTALL);
+     }
+     
+     /**
+      * Returns true if this is a region removeAll operation.
+      * @since 8.1
+      */
+     public boolean isRemoveAll() {
+       return (this.opCode == OP_REMOVEALL);
+     }
+ 
+     /**
+      * Returns true if this is an entry destroy operation.
+      */
+     public boolean isDestroy() {
+       return (this.opCode == OP_DESTROY);
+     }
+ 
+     /**
+      * Returns true if this is an entry invalidate operation.
+      */
+     public boolean isInvalidate() {
+       return (this.opCode == OP_INVALIDATE);
+     }
+ 
+     /**
+      * Returns true if this is a register interest operation.
+      */
+     public boolean isRegisterInterest() {
+       return (this.opCode == OP_REGISTER_INTEREST);
+     }
+ 
+     /**
+      * Returns true if this is an unregister interest operation.
+      */
+     public boolean isUnregisterInterest() {
+       return (this.opCode == OP_UNREGISTER_INTEREST);
+     }
+ 
+     /**
+      * Returns true if this is a region <code>containsKey</code> operation.
+      */
+     public boolean isContainsKey() {
+       return (this.opCode == OP_CONTAINS_KEY);
+     }
+ 
+     /**
+      * Returns true if this is a region <code>keySet</code> operation.
+      */
+     public boolean isKeySet() {
+       return (this.opCode == OP_KEY_SET);
+     }
+ 
+     /**
+      * Returns true if this is a cache query operation.
+      */
+     public boolean isQuery() {
+       return (this.opCode == OP_QUERY);
+     }
+ 
+     /**
+      * Returns true if this is a continuous query execution operation.
+      */
+     public boolean isExecuteCQ() {
+       return (this.opCode == OP_EXECUTE_CQ);
+     }
+ 
+     /**
+      * Returns true if this is a continuous query stop operation.
+      */
+     public boolean isStopCQ() {
+       return (this.opCode == OP_STOP_CQ);
+     }
+ 
+     /**
+      * Returns true if this is a continuous query close operation.
+      */
+     public boolean isCloseCQ() {
+       return (this.opCode == OP_CLOSE_CQ);
+     }
+ 
+     /**
+      * Returns true if this is a region clear operation.
+      */
+     public boolean isRegionClear() {
+       return (this.opCode == OP_REGION_CLEAR);
+     }
+ 
+     /**
+      * Returns true if this is a region create operation.
+      */
+     public boolean isRegionCreate() {
+       return (this.opCode == OP_REGION_CREATE);
+     }
+ 
+     /**
+      * Returns true if this is a region destroy operation.
+      */
+     public boolean isRegionDestroy() {
+       return (this.opCode == OP_REGION_DESTROY);
+     }
+     
+     /**
+      * Returns true if this is a execute region function operation.
+      */
+     public boolean isExecuteRegionFunction() {
+       return (this.opCode == OP_EXECUTE_FUNCTION);
+     }
+ 
+     /**
+      * Returns true if this is a get durable cqs operation.
+      */
+     public boolean isGetDurableCQs() {
+       return (this.opCode == OP_GET_DURABLE_CQS);
+     }
+     
+     /**
+      * Returns the <code>OperationCode</code> represented by specified byte.
+      */
+     public static OperationCode fromOrdinal(byte opCode) {
+       return VALUES[opCode];
+     }
+ 
+     /**
+      * Returns the <code>OperationCode</code> represented by specified string.
+      */
+     public static OperationCode parse(String operationName) {
+       return (OperationCode)OperationNameMap.get(operationName);
+     }
+ 
+     /**
+      * Returns the byte representing this operation code.
+      * 
+      * @return a byte representing this operation.
+      */
+     public byte toOrdinal() {
+       return this.opCode;
+     }
+ 
+     /**
+      * Returns a string representation for this operation.
+      * 
+      * @return the name of this operation.
+      */
+     @Override
+     final public String toString() {
+       return this.name;
+     }
+ 
+     /**
+      * Indicates whether other object is same as this one.
+      * 
+      * @return true if other object is same as this one.
+      */
+     @Override
+     final public boolean equals(final Object obj) {
+       if (obj == this) {
+         return true;
+       }
+       if (!(obj instanceof OperationCode)) {
+         return false;
+       }
+       final OperationCode other = (OperationCode)obj;
+       return (other.opCode == this.opCode);
+     }
+ 
+     /**
+      * Indicates whether other <code>OperationCode</code> is same as this one.
+      * 
+      * @return true if other <code>OperationCode</code> is same as this one.
+      */
+     final public boolean equals(final OperationCode opCode) {
+       return (opCode != null && opCode.opCode == this.opCode);
+     }
+ 
+     /**
+      * Returns a hash code value for this <code>OperationCode</code> which is
+      * the same as the byte representing its operation type.
+      * 
+      * @return the hashCode of this operation.
+      */
+     @Override
+     final public int hashCode() {
+       return this.opCode;
+     }
+ 
+   }
+ 
+   /**
+    * Return the operation code associated with the <code>OperationContext</code>
+    * object.
+    */
+   public abstract OperationCode getOperationCode();
+ 
+   /**
+    * True if the context is for post-operation.
+    * 
+    * The <code>OperationContext</code> interface encapsulates the data both
+    * before the operation is performed and after the operation is complete. For
+    * example, for a query operation the <code>Query</code> object as well as
+    * the list of region names referenced by the query would be part of the
+    * context object in the pre-processing stage. In the post-processing stage
+    * the context object shall contain results of the query.
+    */
+   public abstract boolean isPostOperation();
+ 
+   /**
+    * When called post-operation, returns true if the operation was one that performed an update.
+    * An update occurs when one of the following methods on <code>getOperationCode()</code> returns true:
+    * <code>isPut()</code>, <code>isPutAll()</code>, <code>isDestroy()</code>, <code>isRemoveAll()</code>,
+    * <code>isInvalidate()</code>, <code>isRegionCreate()</code>, <code>isRegionClear()</code>, <code>isRegionDestroy()</code>.
+    * Otherwise, returns false.
+    * 
+    * @since 6.6
+    */
+   public boolean isClientUpdate() {
+     if (isPostOperation()) {
+       switch (getOperationCode().opCode) {
+         case OperationCode.OP_PUT:
+         case OperationCode.OP_PUTALL:
+         case OperationCode.OP_DESTROY:
+         case OperationCode.OP_REMOVEALL:
+         case OperationCode.OP_INVALIDATE:
+         case OperationCode.OP_REGION_CREATE:
+         case OperationCode.OP_REGION_DESTROY:
+         case OperationCode.OP_REGION_CLEAR:
+           return true;
+       }
+     }
+     return false;
+   }
+ 
+   /**
+    * True if the context is created before sending the updates to a client.
+    */
+   @Deprecated
+   public boolean isClientUpdate(OperationContext context) {
+     OperationCode opCode = context.getOperationCode();
+     return context.isPostOperation()
+         && (opCode.isPut() || opCode.isPutAll() || opCode.isDestroy()
+             || opCode.isRemoveAll()
+             || opCode.isInvalidate() || opCode.isRegionCreate()
+             || opCode.isRegionDestroy() || opCode.isRegionClear());
+   }
+ }


[10/50] [abbrv] incubator-geode git commit: GEODE-856: New unit test class for covering MemoryBlockNode

Posted by je...@apache.org.
GEODE-856: New unit test class for covering MemoryBlockNode

this closes #103


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/66fa3650
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/66fa3650
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/66fa3650

Branch: refs/heads/feature/GEODE-17
Commit: 66fa36509fedf038a0e573671d724e40b05f102a
Parents: c2363f7
Author: Ken Howe <kh...@pivotal.io>
Authored: Tue Feb 23 11:53:29 2016 -0800
Committer: Sai Boorlagadda <sb...@pivotal.io>
Committed: Tue Feb 23 14:36:39 2016 -0800

----------------------------------------------------------------------
 .../offheap/MemoryBlockNodeJUnitTest.java       | 435 +++++++++++++++++++
 1 file changed, 435 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/66fa3650/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/MemoryBlockNodeJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/MemoryBlockNodeJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/MemoryBlockNodeJUnitTest.java
new file mode 100644
index 0000000..3d2dbc7
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/MemoryBlockNodeJUnitTest.java
@@ -0,0 +1,435 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gemstone.gemfire.internal.offheap;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.lang.ClassNotFoundException;
+import java.nio.ByteBuffer;
+
+import org.assertj.core.api.JUnitSoftAssertions;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.*;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.ExpectedException;
+
+import com.gemstone.gemfire.LogWriter;
+import com.gemstone.gemfire.cache.CacheClosedException;
+import com.gemstone.gemfire.internal.DSCODE;
+import com.gemstone.gemfire.internal.cache.EntryEventImpl;
+import com.gemstone.gemfire.internal.offheap.MemoryBlock.State;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+public class MemoryBlockNodeJUnitTest {
+
+  private SimpleMemoryAllocatorImpl ma;
+  private OutOfOffHeapMemoryListener ooohml;
+  private OffHeapMemoryStats stats;
+  private LogWriter lw;
+  private int numSlabs;
+  private AddressableMemoryChunk[] slabs = {
+      new UnsafeMemoryChunk((int)OffHeapStorage.MIN_SLAB_SIZE), 
+      new UnsafeMemoryChunk((int)OffHeapStorage.MIN_SLAB_SIZE * 2)
+  };
+  private MemoryChunkWithRefCount storedObject = null;
+
+  static {
+    ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
+  }
+  
+  @Rule public final ProvideSystemProperty myPropertyHasMyValue = new ProvideSystemProperty("gemfire.OFF_HEAP_DO_EXPENSIVE_VALIDATION", "true");
+
+  @Rule
+  public final RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties();
+  
+  @Rule
+  public ExpectedException expectedException = ExpectedException.none();
+  
+  @Rule
+  public JUnitSoftAssertions softly = new JUnitSoftAssertions();
+
+  @BeforeClass
+  public static void setUpBeforeClass() {
+  }
+
+  @AfterClass
+  public static void tearDownAfterClass() {
+  }
+
+  @Before
+  public void setUp() {
+    ooohml = mock(OutOfOffHeapMemoryListener.class);
+    stats = mock(OffHeapMemoryStats.class);
+    lw = mock(LogWriter.class);
+    numSlabs = 3;
+    ma = (SimpleMemoryAllocatorImpl) SimpleMemoryAllocatorImpl.createForUnitTest(ooohml, stats, slabs);
+  }
+
+  @After
+  public void tearDown() {
+    SimpleMemoryAllocatorImpl.freeOffHeapMemory();
+  }
+  
+  protected Object getValue() {
+    return Long.valueOf(Long.MAX_VALUE);
+  }
+
+  protected MemoryChunkWithRefCount createValueAsUnserializedStoredObject(Object value) {
+    MemoryChunkWithRefCount createdObject = createValueAsUnserializedStoredObject(value, false);
+    return createdObject;
+  }
+  protected MemoryChunkWithRefCount createValueAsUnserializedStoredObject(Object value, boolean isCompressed) {
+    byte[] valueInByteArray;
+    if (value instanceof Long) {
+      valueInByteArray = convertValueToByteArray(value);
+    } else {
+      valueInByteArray = (byte[]) value;
+    }
+
+    boolean isSerialized = false;
+
+    MemoryChunkWithRefCount createdObject = createChunk(valueInByteArray, isSerialized, isCompressed);
+    return createdObject;
+  }
+
+  private byte[] convertValueToByteArray(Object value) {
+    return ByteBuffer.allocate(Long.SIZE / Byte.SIZE).putLong((Long) value).array();
+  }
+
+  private MemoryChunkWithRefCount createChunk(byte[] v, boolean isSerialized, boolean isCompressed) {
+    MemoryChunkWithRefCount chunk = (MemoryChunkWithRefCount) ma.allocateAndInitialize(v, isSerialized, isCompressed);
+    return chunk;
+  }
+
+
+  protected MemoryChunkWithRefCount createValueAsSerializedStoredObject(Object value) {
+    MemoryChunkWithRefCount createdObject = createValueAsSerializedStoredObject(value, false);
+    return createdObject;
+  }
+  
+  protected MemoryChunkWithRefCount createValueAsSerializedStoredObject(Object value, boolean isCompressed) {
+    byte[] valueInSerializedByteArray = EntryEventImpl.serialize(value);
+
+    boolean isSerialized = true;
+
+    MemoryChunkWithRefCount createdObject = createChunk(valueInSerializedByteArray, isSerialized, isCompressed);
+    return createdObject;
+  }
+  
+
+  private void allocateOffHeapDeserialized() {
+    Object regionEntryValue = getValue();
+    storedObject = createValueAsUnserializedStoredObject(regionEntryValue);
+  }
+
+  @Test
+  public void memoryBlockNodesConstructedWithNullBlockArgumentThrowNPEForOperations() {
+    expectedException.expect(NullPointerException.class);
+    
+    MemoryBlock mb = new MemoryBlockNode(ma, null);
+    Long addr = mb.getMemoryAddress();
+    fail("Operations on MemoryBlockNodes with null block argument expected to throw NullPointerException ");
+  }
+  
+  @Test
+  public void zeroLengthMemoryBlockCausesAssertionErrorInConstructor() {
+    expectedException.expect(AssertionError.class);
+    
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock)ma.allocate(0));
+    softly.assertThat(mb.getBlockSize()).isEqualTo(0);
+  }
+
+  @Test
+  public void getStateReturnsStateOfBlock() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+    allocateOffHeapDeserialized();
+    softly.assertThat(mb.getState()).isEqualTo(fragment.getState());
+  }
+  
+  @Test
+  public void getMemoryAddressReturnsAddressOfBlock() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+    softly.assertThat(mb.getMemoryAddress()).isEqualTo(fragment.getMemoryAddress());
+ }
+  
+  @Test
+  public void getBlockSizeReturnsSizeOfBlock() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+    softly.assertThat(mb.getBlockSize()).isEqualTo(fragment.getBlockSize());
+  }
+  
+  @Test
+  public void getNextBlockOfSingleBlockReturnsNull() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+    softly.assertThat(mb.getNextBlock()).isNull();
+  }
+  
+  @Test
+  public void getSlabIdReturnsIdOfSlabBlockWasConstructedFrom() {
+    for (int i = 0; i < slabs.length; ++i) {
+      Fragment fragment = new Fragment(slabs[i].getMemoryAddress(), slabs[i].getSize());
+      MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+      softly.assertThat(mb.getSlabId()).isEqualTo(i);
+    }
+  }
+  
+  @Test
+  public void getFreeListIdReturnsIdFromUnderlyingBlock() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+    softly.assertThat(mb.getFreeListId()).isEqualTo(-1);
+  }
+  
+  @Test
+  public void getRefCountReturnsRefCountFromUnderlyingBlock() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+    softly.assertThat(mb.getRefCount()).isEqualTo(0);
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb2 = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb2.getRefCount()).isEqualTo(1);
+  }
+  
+  @Test
+  public void getDataTypeReturnsTypeFromUnderlyingBlock() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb2 = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb2.getDataType()).isEqualTo("java.lang.Long");
+  }
+  
+  @Test
+  public void getHashCodeReturnsCodeFromUnderlyingBlock() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb2 = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb2.hashCode()).isEqualTo(storedObject.hashCode());
+  }
+  
+  @Test
+  public void equalsComparisonWithNonMemoryBlockNodeReturnsFalse() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb2 = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb2.equals(fragment)).isEqualTo(false);
+  }
+  
+  @Test
+  public void equalsComparisonWithAnotherMemoryBlockReturnsFalse() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb2 = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb2.equals(mb)).isEqualTo(false);
+    softly.assertThat(mb.equals(mb2)).isEqualTo(false);
+  }
+  
+  @Test
+  public void equalsComparisonToSelfReturnsTrue() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb.equals(mb)).isEqualTo(true);
+  }
+  
+  @Test
+  public void equalsComparisonWhenUnderlyingBlocksHaveSameMemoryAddressReturnsTrue() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb1 = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    MemoryBlock mb2 = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb1.equals(mb2)).isEqualTo(true);
+  }
+  
+  @Test
+  public void getDataTypeOfSerializedCompressedReturnsTypeFromUnderlyingBlock() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj, true);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb.getDataType()).isEqualTo("compressed object of size 9");
+  }
+  
+  @Test
+  public void getDataTypeOfUnserializedNotCompressedReturnsTypeFromUnderlyingBlock() {
+    Object obj = getValue();
+    storedObject = createValueAsUnserializedStoredObject(obj, false);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb.getDataType()).isEqualTo("byte[8]"
+        + "");
+  }
+  
+  @Test
+  public void getDataTypeOfUnserializedCompressedReturnsTypeFromUnderlyingBlock() {
+
+    Object obj = getValue();
+    storedObject = createValueAsUnserializedStoredObject(obj, true);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb.getDataType()).isEqualTo("compressed byte[8]");
+  }
+  
+  @Test
+  public void getDataValueSerializedNotCompressedReturnsFromUnderlyingBlock() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+    softly.assertThat(mb.getDataValue()).isNull();
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb2 = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb2.getDataValue()).isEqualTo(getValue());
+  }
+  
+  @Test
+  public void getDataValueSerializedCompressedReturnsBytesFromUnderlyingBlock() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj, true);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    byte[] storedObjectBytes = new byte[storedObject.getValueSizeInBytes()];
+    storedObject.readBytes(0, storedObjectBytes);
+    softly.assertThat(mb.getDataValue()).isEqualTo(storedObjectBytes);
+  }
+  
+  @Test
+  public void getDataValueUnserializedCompressedReturnsBytesFromUnderlyingBlock() {
+    Object obj = getValue();
+    storedObject = createValueAsUnserializedStoredObject(obj, true);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    byte[] storedObjectBytes = new byte[storedObject.getValueSizeInBytes()];
+    storedObject.readBytes(0, storedObjectBytes);
+    softly.assertThat(mb.getDataValue()).isEqualTo(storedObjectBytes);
+  }
+  
+  @Test
+  public void getDataValueUnserializedNotCompressedReturnsBytesFromUnderlyingBlock() {
+    Object obj = getValue();
+    storedObject = createValueAsUnserializedStoredObject(obj, false);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    byte[] storedObjectBytes = new byte[storedObject.getValueSizeInBytes()];
+    storedObject.readBytes(0, storedObjectBytes);
+    softly.assertThat(mb.getDataValue()).isEqualTo(storedObjectBytes);
+  }
+  
+  @Test
+  public void getDataValueWithIllegalDataTypeCatchesIOException() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    storedObject.writeByte(0, DSCODE.ILLEGAL);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    ByteArrayOutputStream errContent = new ByteArrayOutputStream();
+    System.setErr(new PrintStream(errContent));
+    softly.assertThat(mb.getDataValue()).isEqualTo("IOException:Unknown header byte: -127");
+  }
+  
+  @Test
+  public void getDataValueCatchesCacheClosedException() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    StoredObject spyStoredObject = spy(storedObject);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) spyStoredObject);
+    when(((ObjectChunk)spyStoredObject).getRawBytes()).thenCallRealMethod().thenThrow(new CacheClosedException("Unit test forced exception"));
+    ByteArrayOutputStream errContent = new ByteArrayOutputStream();
+    System.setErr(new PrintStream(errContent));
+    softly.assertThat(mb.getDataValue()).isEqualTo("CacheClosedException:Unit test forced exception");
+  }
+  
+  @SuppressWarnings("unchecked")
+  @Test
+  public void getDataValueCatchesClassNotFoundException() throws Exception {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    StoredObject spyStoredObject = spy(storedObject);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) spyStoredObject);
+    when(((ObjectChunk)spyStoredObject).getRawBytes()).thenCallRealMethod().thenThrow(ClassNotFoundException.class);
+    ByteArrayOutputStream errContent = new ByteArrayOutputStream();
+    System.setErr(new PrintStream(errContent));
+    softly.assertThat(mb.getDataValue()).isEqualTo("ClassNotFoundException:null");
+  }
+  
+  @Test
+  public void toStringOfUnusedBlockReturnsStateUnusedAndTypeNA() {
+    Fragment fragment = new Fragment(slabs[0].getMemoryAddress(), slabs[0].getSize());
+    MemoryBlock mb = new MemoryBlockNode(ma, fragment);
+    softly.assertThat(mb.toString()).matches("MemoryBlock\\{MemoryAddress=\\d*, State=UNUSED, BlockSize=1024, SlabId=0, FreeListId=NONE, RefCount=0, isSerialized=false, isCompressed=false, DataType=N/A, DataValue=null}");
+  }
+  
+  @Test
+  public void toStringOfAllocatedBlockReturnsStateAllocateddAndTypeOfData() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb.toString()).matches("MemoryBlock\\{MemoryAddress=\\d*, State=ALLOCATED, BlockSize=\\d*, SlabId=0, FreeListId=NONE, RefCount=1, isSerialized=true, isCompressed=false, DataType=java.lang.Long, DataValue=9223372036854775807}");
+  }
+  
+  @Test
+  public void toStringOfAllocatedBlockWithUnserializedValueReturnsByteArrayType() {
+    Object obj = getValue();
+    storedObject = createValueAsUnserializedStoredObject(obj);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb.toString()).matches("MemoryBlock\\{MemoryAddress=\\d*, State=ALLOCATED, BlockSize=\\d*, SlabId=0, FreeListId=NONE, RefCount=1, isSerialized=false, isCompressed=false, DataType=byte\\[8], DataValue=\\[127, -1, -1, -1, -1, -1, -1, -1]}");
+  }
+  
+  @Test
+  public void toStringWithStateDeallocatedResultsInFreeListIdHuge() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    MemoryBlock spyMb = spy(mb);
+    softly.assertThat(spyMb.toString()).matches("MemoryBlock\\{MemoryAddress=\\d*, State=ALLOCATED, BlockSize=\\d*, SlabId=0, FreeListId=NONE, RefCount=1, isSerialized=true, isCompressed=false, DataType=java.lang.Long, DataValue=9223372036854775807}");
+    when(spyMb.getState()).thenReturn(State.DEALLOCATED);
+    when(spyMb.getRefCount()).thenReturn(0);
+    softly.assertThat(spyMb.toString()).matches("MemoryBlock\\{MemoryAddress=\\d*, State=DEALLOCATED, BlockSize=\\d*, SlabId=0, FreeListId=HUGE, RefCount=0, isSerialized=true, isCompressed=false, DataType=java.lang.Long, DataValue=9223372036854775807}");
+  }
+
+  @Test
+  public void toStringWithFreeListNotMinus1() {
+    Object obj = getValue();
+    storedObject = createValueAsSerializedStoredObject(obj);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    MemoryBlock spyMb = spy(mb);
+    softly.assertThat(spyMb.toString()).matches("MemoryBlock\\{MemoryAddress=\\d*, State=ALLOCATED, BlockSize=\\d*, SlabId=0, FreeListId=NONE, RefCount=1, isSerialized=true, isCompressed=false, DataType=java.lang.Long, DataValue=9223372036854775807}");
+    when(spyMb.getState()).thenReturn(State.DEALLOCATED);
+    when(spyMb.getRefCount()).thenReturn(0);
+    softly.assertThat(spyMb.toString()).matches("MemoryBlock\\{MemoryAddress=\\d*, State=DEALLOCATED, BlockSize=\\d*, SlabId=0, FreeListId=HUGE, RefCount=0, isSerialized=true, isCompressed=false, DataType=java.lang.Long, DataValue=9223372036854775807}");
+    when(spyMb.getFreeListId()).thenReturn(0);
+    softly.assertThat(spyMb.toString()).matches("MemoryBlock\\{MemoryAddress=\\d*, State=DEALLOCATED, BlockSize=\\d*, SlabId=0, FreeListId=0, RefCount=0, isSerialized=true, isCompressed=false, DataType=java.lang.Long, DataValue=9223372036854775807}");
+  }
+
+  @Test
+  public void toStringOfAllocatedBlockWithLargeByteArrayValueShowsValueAsArraySize() {
+    Object obj = new byte[1024];
+    storedObject = createValueAsUnserializedStoredObject(obj);
+    MemoryBlock mb = new MemoryBlockNode(ma, (MemoryBlock) storedObject);
+    softly.assertThat(mb.toString()).matches("MemoryBlock\\{MemoryAddress=\\d*, State=ALLOCATED, BlockSize=\\d*, SlabId=1, FreeListId=NONE, RefCount=1,"
+        + " isSerialized=false, isCompressed=false, DataType=byte\\[1024], DataValue=<byte array of length 1024>}");
+  }
+}


[33/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/PDXCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/PDXCommands.java
index 0000000,820518b..234ce9c
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/PDXCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/PDXCommands.java
@@@ -1,0 -1,286 +1,291 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.io.ByteArrayOutputStream;
+ import java.io.File;
+ import java.io.PrintStream;
+ import java.io.PrintWriter;
+ import java.io.StringWriter;
+ import java.util.Arrays;
+ import java.util.Collection;
+ 
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.internal.cache.CacheConfig;
+ import com.gemstone.gemfire.internal.cache.DiskStoreImpl;
+ import com.gemstone.gemfire.internal.cache.xmlcache.CacheCreation;
+ import com.gemstone.gemfire.internal.cache.xmlcache.CacheXml;
+ import com.gemstone.gemfire.internal.cache.xmlcache.CacheXmlGenerator;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.InfoResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
+ import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ import com.gemstone.gemfire.pdx.ReflectionBasedAutoSerializer;
+ import com.gemstone.gemfire.pdx.internal.EnumInfo;
+ import com.gemstone.gemfire.pdx.internal.PdxType;
+ 
+ public class PDXCommands extends AbstractCommandsSupport{
+ 
+ 
+   @CliCommand (value = CliStrings.CONFIGURE_PDX, help = CliStrings.CONFIGURE_PDX__HELP)
+   @CliMetaData (relatedTopic = CliStrings.TOPIC_GEMFIRE_REGION, writesToSharedConfiguration = true)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.CONFIGURE_PDX)
+   public Result configurePDX( 
+       @CliOption (key = CliStrings.CONFIGURE_PDX__READ__SERIALIZED,
+       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.CONFIGURE_PDX__READ__SERIALIZED__HELP) 
+       Boolean readSerialized,
+ 
+       @CliOption (key = CliStrings.CONFIGURE_PDX__IGNORE__UNREAD_FIELDS,
+       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.CONFIGURE_PDX__IGNORE__UNREAD_FIELDS__HELP) 
+       Boolean ignoreUnreadFields,
+ 
+       @CliOption (key = CliStrings.CONFIGURE_PDX__DISKSTORE,
+       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+       specifiedDefaultValue = "",
+       help = CliStrings.CONFIGURE_PDX__DISKSTORE__HELP)
+       String diskStore, 
+ 
+       @CliMetaData (valueSeparator = ",")
+       @CliOption (key = CliStrings.CONFIGURE_PDX__AUTO__SERIALIZER__CLASSES,
+       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+       specifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.CONFIGURE_PDX__AUTO__SERIALIZER__CLASSES__HELP)
+       String[] patterns,
+ 
+ 
+       @CliMetaData (valueSeparator = ",")
+       @CliOption (key = CliStrings.CONFIGURE_PDX__PORTABLE__AUTO__SERIALIZER__CLASSES,
+       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+       specifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.CONFIGURE_PDX__PORTABLE__AUTO__SERIALIZER__CLASSES__HELP)
+       String[] portablePatterns){
+     Result result = null;
+ 
+     try {
+       InfoResultData ird  = ResultBuilder.createInfoResultData();
+       CacheCreation cache = new CacheCreation(true);
+ 
+       if ((portablePatterns != null && portablePatterns.length > 0) && (patterns != null && patterns.length > 0)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.CONFIGURE_PDX__ERROR__MESSAGE);
+       }
+       if (CliUtil.getAllNormalMembers(CliUtil.getCacheIfExists()).isEmpty()) {
+         ird.addLine(CliStrings.CONFIGURE_PDX__NORMAL__MEMBERS__WARNING);
+       }
+       //Set persistent and the disk-store
+       if (diskStore != null) {
+         cache.setPdxPersistent(true);
+         ird.addLine(CliStrings.CONFIGURE_PDX__PERSISTENT + " = " + cache.getPdxPersistent());
+         if (!diskStore.equals("")) {
+           cache.setPdxDiskStore(diskStore);
+           ird.addLine(CliStrings.CONFIGURE_PDX__DISKSTORE + " = " + cache.getPdxDiskStore());
+         } else {
+           ird.addLine(CliStrings.CONFIGURE_PDX__DISKSTORE + " = " + "DEFAULT");
+         }
+       } else {
+         cache.setPdxPersistent(CacheConfig.DEFAULT_PDX_PERSISTENT);
+         ird.addLine(CliStrings.CONFIGURE_PDX__PERSISTENT + " = " + cache.getPdxPersistent());
+       }
+ 
+       //Set read-serialized
+       if (readSerialized != null) {
+         cache.setPdxReadSerialized(readSerialized);
+       } else {
+         cache.setPdxReadSerialized(CacheConfig.DEFAULT_PDX_READ_SERIALIZED);
+       }
+       ird.addLine(CliStrings.CONFIGURE_PDX__READ__SERIALIZED + " = " + cache.getPdxReadSerialized());
+ 
+ 
+       //Set ingoreUnreadFields
+       if (ignoreUnreadFields != null) {
+         cache.setPdxIgnoreUnreadFields(ignoreUnreadFields);
+       } else {
+         cache.setPdxIgnoreUnreadFields(CacheConfig.DEFAULT_PDX_IGNORE_UNREAD_FIELDS);
+       }
+       ird.addLine(CliStrings.CONFIGURE_PDX__IGNORE__UNREAD_FIELDS + " = " + cache.getPdxIgnoreUnreadFields());
+ 
+ 
+       if (portablePatterns != null) {
+         ReflectionBasedAutoSerializer autoSerializer =  new ReflectionBasedAutoSerializer(portablePatterns);
+         cache.setPdxSerializer(autoSerializer);
+         ird.addLine("PDX Serializer " + cache.getPdxSerializer().getClass().getName());
+         ird.addLine("Portable classes " + Arrays.toString(portablePatterns));
+       } 
+ 
+       if (patterns!=null) {
+         ReflectionBasedAutoSerializer nonPortableAutoSerializer =  new ReflectionBasedAutoSerializer(true, patterns);
+         cache.setPdxSerializer(nonPortableAutoSerializer);
+         ird.addLine("PDX Serializer : " + cache.getPdxSerializer().getClass().getName());
+         ird.addLine("Non portable classes :" + Arrays.toString(patterns));
+       }
+ 
+       final StringWriter stringWriter = new StringWriter();
+       final PrintWriter printWriter = new PrintWriter(stringWriter);
+       CacheXmlGenerator.generate(cache, printWriter, true, false, false);
+       printWriter.close();
+       String xmlDefinition = stringWriter.toString();
+       // TODO jbarrett - shouldn't this use the same loadXmlDefinition that other constructors use?
+       XmlEntity xmlEntity = XmlEntity.builder().withType(CacheXml.PDX).withConfig(xmlDefinition).build();
+ 
+ 
+       SharedConfigurationWriter scWriter = new SharedConfigurationWriter();
+       boolean commandPersisted = scWriter.addXmlEntity(xmlEntity, null);
+ 
+       result = ResultBuilder.buildResult(ird);
+       result.setCommandPersisted(commandPersisted);
+     } catch (Exception e) {
+       return ResultBuilder.createGemFireErrorResult(e.getMessage());
+     }
+ 
+     return result;
+   }
+ 
+   @CliAvailabilityIndicator({CliStrings.CONFIGURE_PDX})
+   public boolean isRegionCommandAvailable() {
+     if (!CliUtil.isGfshVM()) {
+       return true;
+     }
+     return (getGfsh() != null && getGfsh().isConnectedAndReady());
+   }
+ 
+   @CliCommand (value = CliStrings.PDX_RENAME, help = CliStrings.PDX_RENAME__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE})
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.RENAME_PDX)
+   public Result pdxRename( 
+       @CliOption (key = CliStrings.PDX_RENAME_OLD,
+       mandatory=true,
+       help = CliStrings.PDX_RENAME_OLD__HELP) 
+       String oldClassName,
+ 
+       @CliOption (key = CliStrings.PDX_RENAME_NEW,
+       mandatory=true,
+       help = CliStrings.PDX_RENAME_NEW__HELP) 
+       String newClassName,
+ 
+       @CliOption (key = CliStrings.PDX_DISKSTORE,
+       mandatory=true,
+       help = CliStrings.PDX_DISKSTORE__HELP)
+       String diskStore, 
+ 
+       @CliOption (key = CliStrings.PDX_DISKDIR,
+       mandatory=true,
+       help = CliStrings.PDX_DISKDIR__HELP)
+       @CliMetaData (valueSeparator = ",")
+       String[] diskDirs){
+     
+     try {
+       final File[] dirs = new File[diskDirs.length];
+       for (int i = 0; i < diskDirs.length; i++) {
+         dirs[i] = new File((diskDirs[i]));
+       }
+       
+       Collection<Object> results = DiskStoreImpl.pdxRename(diskStore, dirs, oldClassName, newClassName);
+       
+       if(results.isEmpty()) {
+         return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.PDX_RENAME__EMPTY));
+       }
+       
+       ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+       PrintStream printStream = new PrintStream(outputStream);
+       for(Object p : results) {
+         if(p instanceof PdxType) {
+           ((PdxType)p).toStream(printStream, false);
+         } else {
+           ((EnumInfo)p).toStream(printStream);
+         }
+       }
+       String resultString = CliStrings.format(CliStrings.PDX_RENAME__SUCCESS, outputStream.toString());
+       return ResultBuilder.createInfoResult(resultString.toString());
+ 
+     } catch (Exception e) {
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.PDX_RENAME__ERROR, e.getMessage()));
+     }
+     
+   }
+   
+   // The pdx delete-field command has been disabled until it has native client support.
+ //  @CliCommand (value = CliStrings.PDX_DELETE_FIELD, help = CliStrings.PDX_DELETE_FIELD__HELP)
+ //  @CliMetaData(shellOnly=true, relatedTopic={CliStrings.TOPIC_GEMFIRE_DISKSTORE})
+ //  public Result pdxDeleteField( 
+ //      @CliOption (key = CliStrings.PDX_CLASS,
+ //      mandatory=true,
+ //      help = CliStrings.PDX_CLASS__HELP) 
+ //      String className,
+ //
+ //      @CliOption (key = CliStrings.PDX_FIELD,
+ //      mandatory=true,
+ //      help = CliStrings.PDX_FIELD__HELP) 
+ //      String fieldName,
+ //      
+ //      @CliOption (key = CliStrings.PDX_DISKSTORE,
+ //      mandatory=true,
+ //      help = CliStrings.PDX_DISKSTORE__HELP)
+ //      String diskStore, 
+ //
+ //      @CliOption (key = CliStrings.PDX_DISKDIR,
+ //      mandatory=true,
+ //      help = CliStrings.PDX_DISKDIR__HELP)
+ //      @CliMetaData (valueSeparator = ",")
+ //      String[] diskDirs){
+ //    
+ //    try {
+ //      final File[] dirs = new File[diskDirs.length];
+ //      for (int i = 0; i < diskDirs.length; i++) {
+ //        dirs[i] = new File((diskDirs[i]));
+ //      }
+ //      
+ //      Collection<PdxType> results = DiskStoreImpl.pdxDeleteField(diskStore, dirs, className, fieldName);
+ //      
+ //      if(results.isEmpty()) {
+ //        return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.PDX_DELETE__EMPTY));
+ //      }
+ //      
+ //      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ //      PrintStream printStream = new PrintStream(outputStream);
+ //      for(PdxType p : results) {
+ //        p.toStream(printStream, false);
+ //      }
+ //      String resultString = CliStrings.format(CliStrings.PDX_DELETE_FIELD__SUCCESS, outputStream.toString());
+ //      return ResultBuilder.createInfoResult(resultString);
+ //
+ //    } catch (Exception e) {
+ //      return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.PDX_DELETE_FIELD__ERROR, e.getMessage()));
+ //    }
+ //
+ //  }
+ //  
+ //  @CliAvailabilityIndicator({CliStrings.PDX_DELETE_FIELD})
+ //  public boolean pdxDeleteFieldCommandsAvailable() {
+ //    return true;
+ //  }
+   
+   @CliAvailabilityIndicator({CliStrings.PDX_RENAME})
+   public boolean pdxRenameCommandsAvailable() {
+     return true;
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommands.java
index 0000000,f594c39..52d230e
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommands.java
@@@ -1,0 -1,281 +1,286 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.Set;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.SystemFailure;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.cli.Result.Status;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.domain.AsyncEventQueueDetails;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.CreateAsyncEventQueueFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.ListAsyncEventQueuesFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
+ import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * The QueueCommands class encapsulates all GemFire Queue commands in Gfsh.
+  * </p>
+  * @author David Hoots
+  * 
+  * @since 8.0
+  */
+ public class QueueCommands implements CommandMarker {
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+ 
+   @CliCommand(value = CliStrings.CREATE_ASYNC_EVENT_QUEUE, help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__HELP)
+   @CliMetaData(writesToSharedConfiguration = true)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.CREATE_AEQ)
+   public Result createAsyncEventQueue(
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ID, 
+                  mandatory = true,
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ID__HELP)
+       String id,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__GROUP, 
+                  unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, 
+                  optionContext = ConverterHint.MEMBERGROUP,
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__GROUP__HELP)
+       String[] groups,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__PARALLEL, 
+                  unspecifiedDefaultValue = "false",
+                  specifiedDefaultValue = "true",
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__PARALLEL__HELP) 
+       Boolean parallel,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ENABLEBATCHCONFLATION,
+                  unspecifiedDefaultValue = "false",
+                  specifiedDefaultValue = "true",
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ENABLEBATCHCONFLATION__HELP) 
+       Boolean enableBatchConflation,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__BATCH_SIZE, 
+                  unspecifiedDefaultValue = "100", 
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__BATCH_SIZE__HELP)
+       int batchSize,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__BATCHTIMEINTERVAL,
+                  unspecifiedDefaultValue = "1000", 
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__BATCHTIMEINTERVAL__HELP) 
+       int batchTimeInterval,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__PERSISTENT, 
+                  unspecifiedDefaultValue = "false",
+                  specifiedDefaultValue = "true",
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__PERSISTENT__HELP)
+       boolean persistent,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISK_STORE, 
+                  unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, 
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISK_STORE__HELP)
+       String diskStore,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISKSYNCHRONOUS,
+                  unspecifiedDefaultValue = "true",
+                  specifiedDefaultValue = "true",
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISKSYNCHRONOUS__HELP) 
+       Boolean diskSynchronous,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__MAXIMUM_QUEUE_MEMORY,
+                  unspecifiedDefaultValue = "100", 
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__MAXIMUM_QUEUE_MEMORY__HELP)
+       int maxQueueMemory,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISPATCHERTHREADS,
+                  unspecifiedDefaultValue = "1",
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISPATCHERTHREADS__HELP) 
+       Integer dispatcherThreads,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ORDERPOLICY,
+                  unspecifiedDefaultValue = "KEY",
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ORDERPOLICY__HELP) 
+       String orderPolicy,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__GATEWAYEVENTFILTER, 
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__GATEWAYEVENTFILTER__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] gatewayEventFilters,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__SUBSTITUTION_FILTER, 
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__SUBSTITUTION_FILTER__HELP)
+       String gatewaySubstitutionListener,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__LISTENER,
+                  mandatory = true,
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__LISTENER__HELP)
+       String listener,
+       @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__LISTENER_PARAM_AND_VALUE, 
+                  help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__LISTENER_PARAM_AND_VALUE__HELP,
+                  optionContext=ConverterHint.STRING_DISABLER)
+       @CliMetaData (valueSeparator = ",")
+       String[] listenerParamsAndValues) {
+ 
+     Properties listenerProperties = new Properties();
+ 
+     try {
+       if (listenerParamsAndValues != null) {
+         for (int i = 0; i < listenerParamsAndValues.length; i++) {
+           final int hashPosition = listenerParamsAndValues[i].indexOf('#');
+           if (hashPosition == -1) {
+             listenerProperties.put(listenerParamsAndValues[i], "");
+           } else {
+             listenerProperties.put(listenerParamsAndValues[i].substring(0, hashPosition), listenerParamsAndValues[i]
+                 .substring(hashPosition + 1));
+           }
+         }
+       }
+ 
+       TabularResultData tabularData = ResultBuilder.createTabularResultData();
+       boolean accumulatedData = false;
+ 
+       Set<DistributedMember> targetMembers;
+       try {
+         targetMembers = CliUtil.findAllMatchingMembers(groups, null);
+       } catch (CommandResultException crex) {
+         return crex.getResult();
+       }
+ 
+       ResultCollector<?, ?> rc = CliUtil.executeFunction(new CreateAsyncEventQueueFunction(), new Object[] { id, parallel, enableBatchConflation, batchSize,batchTimeInterval,
+           persistent, diskStore, diskSynchronous, maxQueueMemory, dispatcherThreads, orderPolicy, gatewayEventFilters, gatewaySubstitutionListener, listener, listenerProperties }, targetMembers);
+       List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) rc.getResult());
+ 
+       XmlEntity xmlEntity = null;
+       for (CliFunctionResult result : results) {
+         if (result.getThrowable() != null) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Result", "ERROR: " + result.getThrowable().getClass().getName() + ": "
+               + result.getThrowable().getMessage());
+           accumulatedData = true;
+           tabularData.setStatus(Status.ERROR);
+         } else if (result.isSuccessful()) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Result", result.getMessage());
+           accumulatedData = true;
+           
+           if (xmlEntity == null) {
+             xmlEntity = result.getXmlEntity();
+           }
+         }
+       }
+ 
+       if (!accumulatedData) {
+         return ResultBuilder.createInfoResult("Unable to create async event queue(s).");
+       }
+       
+       Result result = ResultBuilder.buildResult(tabularData);
+       if (xmlEntity != null) {
+         result.setCommandPersisted((new SharedConfigurationWriter()).addXmlEntity(xmlEntity, groups));
+       }
+       return result;
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(
+           CliStrings.CREATE_ASYNC_EVENT_QUEUE__ERROR_WHILE_CREATING_REASON_0, new Object[] { th.getMessage() }));
+     }
+   }
+ 
+   @CliCommand(value = CliStrings.LIST_ASYNC_EVENT_QUEUES, help = CliStrings.LIST_ASYNC_EVENT_QUEUES__HELP)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result listAsyncEventQueues() {
+     try {
+       TabularResultData tabularData = ResultBuilder.createTabularResultData();
+       boolean accumulatedData = false;
+ 
+       Set<DistributedMember> targetMembers;
+       try {
+         targetMembers = CliUtil.findAllMatchingMembers((String) null, (String) null);
+       } catch (CommandResultException crex) {
+         return crex.getResult();
+       }
+ 
+       ResultCollector<?, ?> rc = CliUtil.executeFunction(new ListAsyncEventQueuesFunction(), new Object[] {}, targetMembers);
+       List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) rc.getResult());
+ 
+       for (CliFunctionResult result : results) {
+         if (result.getThrowable() != null) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Result", "ERROR: " + result.getThrowable().getClass().getName() + ": "
+               + result.getThrowable().getMessage());
+           accumulatedData = true;
+           tabularData.setStatus(Status.ERROR);
+         } else {
+           AsyncEventQueueDetails[] details = (AsyncEventQueueDetails[]) result.getSerializables();
+           for (int i = 0; i < details.length; i++) {
+             tabularData.accumulate("Member", result.getMemberIdOrName());
+             tabularData.accumulate("ID", details[i].getId());
+             tabularData.accumulate("Batch Size", details[i].getBatchSize());
+             tabularData.accumulate("Persistent", details[i].isPersistent());
+             tabularData.accumulate("Disk Store", details[i].getDiskStoreName());
+             tabularData.accumulate("Max Memory", details[i].getMaxQueueMemory());
+ 
+             Properties listenerProperties = details[i].getListenerProperties();
+             if (listenerProperties == null || listenerProperties.size() == 0) {
+               tabularData.accumulate("Listener", details[i].getListener());
+             } else {
+               StringBuilder propsStringBuilder = new StringBuilder();
+               propsStringBuilder.append('(');
+               boolean firstProperty = true;
+               for (Map.Entry<Object, Object> property : listenerProperties.entrySet()) {
+                 if (!firstProperty) {
+                   propsStringBuilder.append(',');
+                 } else {
+                   firstProperty = false;
+                 }
+                 propsStringBuilder.append(property.getKey()).append('=').append(property.getValue());
+               }
+               propsStringBuilder.append(')');
+               
+               tabularData.accumulate("Listener", details[i].getListener() + propsStringBuilder.toString());
+             }
+             accumulatedData = true;
+           }
+         }
+       }
+ 
+       if (!accumulatedData) {
+         return ResultBuilder.createInfoResult(CliStrings.LIST_ASYNC_EVENT_QUEUES__NO_QUEUES_FOUND_MESSAGE);
+       }
+ 
+       return ResultBuilder.buildResult(tabularData);
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(
+           CliStrings.LIST_ASYNC_EVENT_QUEUES__ERROR_WHILE_LISTING_REASON_0, new Object[] { th.getMessage() }));
+     }
+   }
+ 
+   @CliAvailabilityIndicator({ CliStrings.CREATE_ASYNC_EVENT_QUEUE, CliStrings.LIST_ASYNC_EVENT_QUEUES })
+   public boolean queueCommandsAvailable() {
+     boolean isAvailable = true;
+     if (CliUtil.isGfshVM()) {
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
index 0000000,1c972a5..aace536
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
@@@ -1,0 -1,493 +1,498 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.LinkedHashSet;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.TreeSet;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.execute.FunctionInvocationTargetException;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.domain.FixedPartitionAttributesInfo;
+ import com.gemstone.gemfire.management.internal.cli.domain.RegionDescription;
+ import com.gemstone.gemfire.management.internal.cli.domain.RegionDescriptionPerMember;
+ import com.gemstone.gemfire.management.internal.cli.domain.RegionInformation;
+ import com.gemstone.gemfire.management.internal.cli.functions.GetRegionDescriptionFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.GetRegionsFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData.SectionResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.cli.util.RegionAttributesNames;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /***
+  * Class containing implementation of commands based on region:
+  * <ul>
+  * <li>list region
+  * <li>describe region
+  * </ul>
+  * 
+  * @author Sourabh Bansod
+  * @since 7.0
+  */
+ public class RegionCommands implements CommandMarker {
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+ 
+   private static final GetRegionsFunction getRegionsFunction = new GetRegionsFunction();
+   private static final GetRegionDescriptionFunction getRegionDescription = new GetRegionDescriptionFunction();
+ 
+   @CliCommand(value = { CliStrings.LIST_REGION }, help = CliStrings.LIST_REGION__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = CliStrings.TOPIC_GEMFIRE_REGION)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result listRegion(
+       @CliOption(key = { CliStrings.LIST_REGION__GROUP },
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.LIST_REGION__GROUP__HELP)
+       String group,
+       @CliOption(key = { CliStrings.LIST_REGION__MEMBER },
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.LIST_REGION__MEMBER__HELP)
+       String memberNameOrId) {
+     
+     
+     Result result = null;
+     try {
+       Set<RegionInformation> regionInfoSet = new LinkedHashSet<RegionInformation>();
+       ResultCollector<?, ?> rc = null;
+ 
+       Set<DistributedMember> targetMembers;
+       try {
+         targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrId);
+       } catch (CommandResultException crex) {
+         return crex.getResult();
+       }
+ 
+       TabularResultData resultData = ResultBuilder.createTabularResultData();
+       rc = CliUtil.executeFunction(getRegionsFunction, null, targetMembers);
+ 
+       ArrayList<?> resultList = (ArrayList<?>) rc.getResult();
+ 
+       if (resultList != null) {
+         Iterator<?> iters = resultList.iterator();
+ 
+         while (iters.hasNext()) {
+           Object resultObj = iters.next();
+ 
+           if (resultObj != null) {
+             if (resultObj instanceof Object[]) {
+               Object[] resultObjectArray = (Object[]) resultObj;
+               for (Object regionInfo : resultObjectArray) {
+                 if (regionInfo instanceof RegionInformation) {
+                   regionInfoSet.add((RegionInformation) regionInfo);
+                 }
+               }
+             }
+           }
+         }
+ 
+         Set<String> regionNames = new TreeSet<String>();
+ 
+         for (RegionInformation regionInfo : regionInfoSet) {
+           regionNames.add(regionInfo.getName());
+           Set<String> subRegionNames = regionInfo.getSubRegionNames();
+ 
+           for (String subRegionName : subRegionNames) {
+             regionNames.add(subRegionName);
+           }
+         }
+ 
+         for (String regionName : regionNames) {
+           resultData.accumulate("List of regions", regionName);
+         }
+ 
+         if (!regionNames.isEmpty()) {
+           result = ResultBuilder.buildResult(resultData);
+ 
+         } else {
+           result = ResultBuilder.createInfoResult(CliStrings.LIST_REGION__MSG__NOT_FOUND);
+         }
+       }
+     } catch (FunctionInvocationTargetException e) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.COULD_NOT_EXECUTE_COMMAND_TRY_AGAIN, CliStrings.LIST_REGION));
+     }
+     catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.LIST_REGION__MSG__ERROR + " : " + e.getMessage());
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = { CliStrings.DESCRIBE_REGION }, help = CliStrings.DESCRIBE_REGION__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = { CliStrings.TOPIC_GEMFIRE_REGION, CliStrings.TOPIC_GEMFIRE_CONFIG } )
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result describeRegion(
+       @CliOption(key = CliStrings.DESCRIBE_REGION__NAME,
+       optionContext = ConverterHint.REGIONPATH,
+       help = CliStrings.DESCRIBE_REGION__NAME__HELP,
+       mandatory = true)
+       String regionName) {
+ 
+     Result result = null;
+     try {
+       
+       if (regionName == null || regionName.isEmpty()) {
+         return ResultBuilder.createUserErrorResult("Please provide a region name");
+       }
+       
+       if (regionName.equals(Region.SEPARATOR)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.INVALID_REGION_NAME);
+       }
+ 
+       Cache cache = CacheFactory.getAnyInstance();
+       ResultCollector <?, ?> rc = CliUtil.executeFunction(getRegionDescription, regionName, CliUtil.getAllMembers(cache));
+ 
+       List<?> resultList = (List<?>) rc.getResult();
+ 
+       // The returned result could be a region description with per member and /or single local region
+       Object[] results = resultList.toArray();
+       List<RegionDescription> regionDescriptionList = new ArrayList<RegionDescription>();
+ 
+       for (int i = 0; i < results.length; i++) {
+ 
+         if (results[i] instanceof RegionDescriptionPerMember) {
+           RegionDescriptionPerMember regionDescPerMember = (RegionDescriptionPerMember) results[i];
+ 
+           if (regionDescPerMember != null) {
+             RegionDescription regionDescription = new RegionDescription();
+             regionDescription.add(regionDescPerMember);
+ 
+             for (int j = i + 1; j < results.length; j++) {
+               if (results[j] != null && results[j] instanceof RegionDescriptionPerMember) {
+                 RegionDescriptionPerMember preyRegionDescPerMember = (RegionDescriptionPerMember) results[j];
+                 if (regionDescription.add(preyRegionDescPerMember)) {
+                   results[j] = null;
+                 }
+               }
+             }
+             regionDescriptionList.add(regionDescription);
+           }
+         } else if (results[i] instanceof Throwable) {
+           Throwable t = (Throwable) results[i];
+           LogWrapper.getInstance().info(t.getMessage(), t);
+         }
+       }
+ 
+       if (regionDescriptionList.isEmpty()) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.REGION_NOT_FOUND, regionName));
+       }
+ 
+       CompositeResultData crd = ResultBuilder.createCompositeResultData();
+       Iterator<RegionDescription> iters = regionDescriptionList.iterator();
+ 
+       while (iters.hasNext()) {
+         RegionDescription regionDescription = iters.next();
+         
+         //No point in displaying the scope for PR's 
+         if (regionDescription.isPartition()) {
+           regionDescription.getCndRegionAttributes().remove(RegionAttributesNames.SCOPE);
+         } else {
+           String scope = regionDescription.getCndRegionAttributes().get(RegionAttributesNames.SCOPE);
+           if (scope != null) {
+             scope = scope.toLowerCase().replace('_', '-');
+             regionDescription.getCndRegionAttributes().put(RegionAttributesNames.SCOPE, scope);
+           }
+         }
+         SectionResultData regionSection = crd.addSection();
+         regionSection.addSeparator('-');
+         regionSection.addData("Name", regionDescription.getName());
+ 
+         String dataPolicy = regionDescription.getDataPolicy().toString().toLowerCase().replace('_', ' ');
+         regionSection.addData("Data Policy", dataPolicy);
+ 
+         String memberType = "";
+ 
+         if (regionDescription.isAccessor()) {
+           memberType = CliStrings.DESCRIBE_REGION__ACCESSOR__MEMBER;
+         } else {
+           memberType = CliStrings.DESCRIBE_REGION__HOSTING__MEMBER;
+         }
+         regionSection.addData(memberType, CliUtil.convertStringSetToString(regionDescription.getHostingMembers(), '\n'));
+         regionSection.addSeparator('.');
+ 
+         TabularResultData commonNonDefaultAttrTable = regionSection.addSection().addTable();
+ 
+         commonNonDefaultAttrTable.setHeader(CliStrings.format(CliStrings.DESCRIBE_REGION__NONDEFAULT__COMMONATTRIBUTES__HEADER, memberType));
+         // Common Non Default Region Attributes
+         Map<String, String> cndRegionAttrsMap = regionDescription.getCndRegionAttributes();
+ 
+         // Common Non Default Eviction Attributes
+         Map<String, String> cndEvictionAttrsMap = regionDescription.getCndEvictionAttributes();
+ 
+         // Common Non Default Partition Attributes
+         Map<String, String> cndPartitionAttrsMap = regionDescription.getCndPartitionAttributes();
+ 
+         writeCommonAttributesToTable(commonNonDefaultAttrTable, CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE__REGION, cndRegionAttrsMap);
+         writeCommonAttributesToTable(commonNonDefaultAttrTable, CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE__EVICTION, cndEvictionAttrsMap);
+         writeCommonAttributesToTable(commonNonDefaultAttrTable, CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE__PARTITION, cndPartitionAttrsMap);
+ 
+         // Member-wise non default Attributes
+         Map<String, RegionDescriptionPerMember> regDescPerMemberMap = regionDescription.getRegionDescriptionPerMemberMap();
+         Set<String> members = regDescPerMemberMap.keySet();
+ 
+         TabularResultData table = regionSection.addSection().addTable();
+         //table.setHeader(CliStrings.format(CliStrings.DESCRIBE_REGION__NONDEFAULT__PERMEMBERATTRIBUTES__HEADER, memberType));
+ 
+         boolean setHeader = false; 
+         for (String member : members) {
+           RegionDescriptionPerMember regDescPerMem = regDescPerMemberMap.get(member);
+           Map<String, String> ndRa = regDescPerMem.getNonDefaultRegionAttributes();
+           Map<String, String> ndEa = regDescPerMem.getNonDefaultEvictionAttributes();
+           Map<String, String> ndPa = regDescPerMem.getNonDefaultPartitionAttributes();
+ 
+           // Get all the member-specific non-default attributes by removing the common keys
+           ndRa.keySet().removeAll(cndRegionAttrsMap.keySet());
+           ndEa.keySet().removeAll(cndEvictionAttrsMap.keySet());
+           ndPa.keySet().removeAll(cndPartitionAttrsMap.keySet());
+           
+           //Scope is not valid for PR's
+           if (regionDescription.isPartition()) {
+             if (ndRa.get(RegionAttributesNames.SCOPE) != null) {
+               ndRa.remove(RegionAttributesNames.SCOPE);
+             }
+           }
+           
+           List<FixedPartitionAttributesInfo> fpaList = regDescPerMem.getFixedPartitionAttributes();
+ 
+           if (!(ndRa.isEmpty() && ndEa.isEmpty() && ndPa.isEmpty()) || fpaList != null) {
+             setHeader = true;
+             boolean memberNameAdded = false;
+             memberNameAdded = writeAttributesToTable(table, CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE__REGION, ndRa, member, memberNameAdded);
+             memberNameAdded = writeAttributesToTable(table, CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE__EVICTION, ndEa, member, memberNameAdded);
+             memberNameAdded = writeAttributesToTable(table, CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE__PARTITION, ndPa, member, memberNameAdded);
+ 
+             writeFixedPartitionAttributesToTable(table, "", fpaList, member, memberNameAdded);
+             //Fix for #46767 
+             //writeAttributeToTable(table, "", "", "", "");
+           }
+         }
+ 
+         if (setHeader == true) {
+           table.setHeader(CliStrings.format(CliStrings.DESCRIBE_REGION__NONDEFAULT__PERMEMBERATTRIBUTES__HEADER, memberType));
+         }
+       }
+ 
+       result = ResultBuilder.buildResult(crd);
+     } catch (FunctionInvocationTargetException e) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.COULD_NOT_EXECUTE_COMMAND_TRY_AGAIN, CliStrings.DESCRIBE_REGION));
+     }
+     catch (Exception e) {
+       String errorMessage = CliStrings.format(CliStrings.EXCEPTION_CLASS_AND_MESSAGE, e.getClass().getName(), e.getMessage());
+       result = ResultBuilder.createGemFireErrorResult(errorMessage);
+     }
+     return result;
+   }
+ 
+   private void writeCommonAttributesToTable(TabularResultData table, String attributeType, Map<String, String> attributesMap) {
+     if (!attributesMap.isEmpty()) {
+       Set<String> attributes = attributesMap.keySet();
+       boolean isTypeAdded = false;
+       final String blank = "";
+ 
+       Iterator<String> iters = attributes.iterator();
+ 
+       while (iters.hasNext()) {
+         String attributeName = iters.next();
+         String attributeValue = attributesMap.get(attributeName);
+         String type, memName;
+ 
+         if (!isTypeAdded) {
+           type = attributeType;
+           isTypeAdded = true;
+         } else {
+           type = blank;
+         }
+         writeCommonAttributeToTable(table, type, attributeName, attributeValue);
+       }
+     }
+   }
+ 
+   private boolean writeFixedPartitionAttributesToTable(TabularResultData table, String attributeType,
+       List<FixedPartitionAttributesInfo> fpaList, String member, boolean isMemberNameAdded) {
+ 
+     if (fpaList != null) {
+       boolean isTypeAdded = false;
+       final String blank = "";
+ 
+       Iterator<FixedPartitionAttributesInfo> fpaIter = fpaList.iterator();
+       String type, memName;
+ 
+       while (fpaIter.hasNext()) {
+         FixedPartitionAttributesInfo fpa = fpaIter.next();
+         StringBuilder fpaBuilder = new StringBuilder();
+         fpaBuilder.append(fpa.getPartitionName());
+         fpaBuilder.append(',');
+ 
+         if (fpa.isPrimary()) {
+           fpaBuilder.append("Primary");
+         } else {
+           fpaBuilder.append("Secondary");
+         }
+         fpaBuilder.append(',');
+         fpaBuilder.append(fpa.getNumBuckets());
+ 
+         if (!isTypeAdded) {
+           type = attributeType;
+           isTypeAdded = true;
+         } else {
+           type = blank;
+         }
+ 
+         if (!isMemberNameAdded) {
+           memName = member;
+           isMemberNameAdded = true;
+         } else {
+           memName = blank;
+         }
+ 
+         writeAttributeToTable(table, memName, type, "Fixed Partition", fpaBuilder.toString());
+       }
+     }
+ 
+     return isMemberNameAdded;
+   }
+ 
+   private boolean writeAttributesToTable(TabularResultData table, String attributeType, Map<String, String> attributesMap,
+       String member, boolean isMemberNameAdded) {
+     if (!attributesMap.isEmpty()) {
+       Set<String> attributes = attributesMap.keySet();
+       boolean isTypeAdded = false;
+       final String blank = "";
+ 
+       Iterator<String> iters = attributes.iterator();
+ 
+       while (iters.hasNext()) {
+         String attributeName = iters.next();
+         String attributeValue = attributesMap.get(attributeName);
+         String type, memName;
+         
+         if (!isTypeAdded) {
+           type = attributeType;
+           isTypeAdded = true;
+         } else {
+           type = blank;
+         }
+ 
+         if (!isMemberNameAdded) {
+           memName = member;
+           isMemberNameAdded = true;
+         } else {
+           memName = blank;
+         }
+ 
+         writeAttributeToTable(table, memName, type, attributeName, attributeValue);
+       }
+     }
+ 
+     return isMemberNameAdded;
+   }
+   
+   public void writeAttributeToTable(TabularResultData table, String member, String attributeType, String attributeName,
+       String attributeValue) {
+     
+     final String blank = "";
+     if (attributeValue != null) {
+     //Tokenize the attributeValue
+     String[] attributeValues = attributeValue.split(",");
+     boolean isFirstValue = true;
+     
+     for (String value : attributeValues) {
+       if (isFirstValue) {
+         table.accumulate(CliStrings.DESCRIBE_REGION__MEMBER, member);
+         table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE, attributeType);
+         table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__NAME, attributeName);
+         table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__VALUE, value);
+         isFirstValue = false;
+       } else {
+         table.accumulate(CliStrings.DESCRIBE_REGION__MEMBER, blank);
+         table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE, blank);
+         table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__NAME, blank);
+         table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__VALUE, value);
+       }
+     }
+    }
+   }
+   
+   
+   private void writeCommonAttributeToTable(TabularResultData table, String attributeType, String attributeName,
+       String attributeValue) {
+     final String blank = "";
+     
+     if (attributeValue != null) {
+       String[] attributeValues = attributeValue.split(",");
+       boolean isFirstValue = true;
+       for (String value : attributeValues) {
+         if (isFirstValue) {
+           isFirstValue = false;
+           table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE, attributeType);
+           table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__NAME, attributeName);
+           table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__VALUE, value);
+         } else {
+           table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__TYPE, blank);
+           table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__NAME, blank);
+           table.accumulate(CliStrings.DESCRIBE_REGION__ATTRIBUTE__VALUE, value);
+         }
+       }
+      
+     }
+   }
+ 
+   public void addChildSection(SectionResultData parentSection, Map<String, String> map, String header) {
+     if (!map.isEmpty()) {
+       Set<String> attributes = map.keySet();
+       SectionResultData section = parentSection.addSection();
+       section.setHeader(header);
+       for (String attribute : attributes) {
+         section.addData(attribute, map.get(attribute));
+       }
+     }
+   }
+ 
+   @CliAvailabilityIndicator({ CliStrings.LIST_REGION, CliStrings.DESCRIBE_REGION })
+   public boolean isRegionCommandAvailable() {
+     boolean isAvailable = true; // always available on server
+     if (CliUtil.isGfshVM()) { // in gfsh check if connected //TODO - Abhishek: make this better
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;
+   }
+ 
+ }


[43/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/GatewaySenderMXBean.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/GatewaySenderMXBean.java
index 0000000,27ad171..0f8642a
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/GatewaySenderMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/GatewaySenderMXBean.java
@@@ -1,0 -1,249 +1,257 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management;
+ 
+ import com.gemstone.gemfire.cache.wan.GatewaySender;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * MBean that provides access to information and management functionality for a
+  * {@link GatewaySender}.
+  * 
+  * @author rishim
+  * @since 7.0
+  *
+  */
+ public interface GatewaySenderMXBean {
+ 
+   /**
+    * Returns the ID of the GatewaySender.
+    */
+   public String getSenderId();
+ 
+   /**
+    * Returns the id of the remote <code>GatewayReceiver</code>'s
+    * DistributedSystem.
+    */
+   public int getRemoteDSId();
+ 
+   /**
+    * Returns the configured buffer size of the socket connection between this
+    * GatewaySender and its receiving <code>GatewayReceiver</code>.
+    */
+   public int getSocketBufferSize();
+ 
+   /**
+    * Returns the amount of time (in milliseconds) that a socket read between a
+    * sending GatewaySender and its receiving <code>GatewayReceiver</code> is
+    * allowed to block.
+    */
+   public long getSocketReadTimeout();
+ 
+   /**
+    * Returns the name of the disk store that is used for persistence.
+    */
+   public String getOverflowDiskStoreName();
+ 
+   /**
+    * Returns the maximum memory after which the data needs to be overflowed to disk.
+    */
+   public int getMaximumQueueMemory();
+ 
+   /**
+    * Returns the size of a batch that gets delivered by the GatewaySender.
+    */
+   public int getBatchSize();
+ 
+   /**
+    * Returns the interval between transmissions by the GatewaySender.
+    */
+   public long getBatchTimeInterval();
+ 
+   /**
+    * Returns whether batch conflation for the GatewaySender's queue is enabled
+    * 
+    * @return True if batch conflation is enabled, false otherwise.
+    */
+   public boolean isBatchConflationEnabled();
+ 
+   /**
+    * Returns whether the GatewaySender is configured to be persistent or
+    * non-persistent.
+    * 
+    * @return True if the sender is persistent, false otherwise.
+    */
+ 
+   public boolean isPersistenceEnabled();
+ 
+   /**
+    * Returns the alert threshold for entries in a GatewaySender's queue.The
+    * default value is 0 milliseconds in which case no alert will be logged if
+    * events are delayed in Queue.
+    */
+   public int getAlertThreshold();
+ 
+   /**
+    * Returns a list of <code>GatewayEventFilter</code>s added to this
+    * GatewaySender.
+    */
+   public String[] getGatewayEventFilters();
+ 
+   /**
+    * Returns a list of <code>GatewayTransportFilter</code>s added to this
+    * GatewaySender.
+    */
+   public String[] getGatewayTransportFilters();
+ 
+   /**
+    * Returns whether the GatewaySender is configured for manual start.
+    * 
+    * @return True if the GatewaySender is configured for manual start, false otherwise.
+    */
+   public boolean isManualStart();
+ 
+   /**
+    * Returns whether or not this GatewaySender is running.
+    * 
+    * @return True if the GatewaySender is running, false otherwise.
+    */
+   public boolean isRunning();
+ 
+   /**
+    * Returns whether or not this GatewaySender is paused.
+    * 
+    * @return True of the GatewaySender is paused, false otherwise.
+    */
+   public boolean isPaused();
+ 
+   /**
+    * Returns the rate of events received per second by this Sender if it's a
+    * serial-wan.
+    */
+   public float getEventsReceivedRate();
+ 
+   /**
+    * Returns the rate of events being queued.
+    */
+   public float getEventsQueuedRate();
+ 
+   /**
+    * Returns the current size of the event queue.
+    */
+   public int getEventQueueSize();
+ 
+   /**
+    * Returns the number of events received, but not added to the event queue, because
+    * the queue already contains an event with the same key.
+    */
+   public int getTotalEventsConflated();
+ 
+ 
+   /**
+    * Returns the average number of batches sent per second.
+    */
+   public float getBatchesDispatchedRate();
+ 
+   /**
+    * Returns the average time taken to send a batch of events.
+    */
+   public long getAverageDistributionTimePerBatch();
+ 
+   /**
+    * Returns the total number of batches of events that were resent.
+    */
+   public int getTotalBatchesRedistributed();
+ 
+   /**
+    * Starts this GatewaySender. Once the GatewaySender is running its
+    * configuration cannot be changed.
+    * 
+    */
++  @ResourceOperation(resource=Resource.GATEWAY_SENDER, operation=ResourceConstants.START_GW_SENDER)
+   public void start();
+ 
+   /**
+    * Stops this GatewaySender.
+    */
++  @ResourceOperation(resource=Resource.GATEWAY_SENDER, operation=ResourceConstants.STOP_GW_SENDER)
+   public void stop();
+ 
+   /**
+    * Pauses this GatewaySender.
+    */
++  @ResourceOperation(resource=Resource.GATEWAY_SENDER, operation=ResourceConstants.PAUSE_GW_SENDER)
+   public void pause();
+ 
+   /**
+    * Resumes this paused GatewaySender.
+    */
++  @ResourceOperation(resource=Resource.GATEWAY_SENDER, operation=ResourceConstants.RESUME_GW_SENDER)
+   public void resume();
+ 
+   /**
+    * Rebalances this GatewaySender.
+    */
++  @ResourceOperation(resource=Resource.GATEWAY_SENDER, operation=ResourceConstants.LOAD_BALANCE_GW_SENDER)
+   public void rebalance();
+   
+   /**
+    * Returns whether this GatewaySender is primary or secondary.
+    * 
+    * @return True if this is the primary, false otherwise.
+    */
+   public boolean isPrimary();
+   
+   /**
+    * Returns the number of dispatcher threads working for this <code>GatewaySender</code>.
+    */
+   public int getDispatcherThreads();
+   
+   /**
+    * Returns the order policy followed while dispatching the events to remote
+    * distributed system. Order policy is only relevant when the number of dispatcher
+    * threads is greater than one.
+    */
+   
+   public String getOrderPolicy();
+  
+   /**
+    * Returns whether the isDiskSynchronous property is set for this GatewaySender.
+    * 
+    * @return True if the property is set, false otherwise.
+    */
+   public boolean isDiskSynchronous();
+ 
+   /**
+    * Returns whether the isParallel property is set for this GatewaySender.
+    * 
+    * @return True if the property is set, false otherwise.
+    */
+   public boolean isParallel();
+ 
+   /**
+    * Returns the host and port information of GatewayReceiver to which this
+    * gateway sender is connected.
+    */
+   public String getGatewayReceiver();
+   
+   /**
+    * Returns whether this GatewaySender is connected and sending data to a
+    * GatewayReceiver.
+    */
+   public boolean isConnected();
+   
+   /**
+    * Returns number of events which have exceeded the configured alert threshold.
+    */
+   public int getEventsExceedingAlertThreshold();
+ 
+   
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/LockServiceMXBean.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/LockServiceMXBean.java
index 0000000,9cec87f..067a799
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/LockServiceMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/LockServiceMXBean.java
@@@ -1,0 -1,85 +1,89 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management;
+ 
+ import java.util.Map;
+ 
+ import com.gemstone.gemfire.distributed.internal.locks.DLockService;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * MBean that provides access to information and management functionality for a
+  * {@link DLockService}.  Since any number of DLockService objects can be created
+  * by a member there may be 0 or more instances of this MBean available.
+  * 
+  * @author rishim
+  * @since 7.0
+  * 
+  */
+ public interface LockServiceMXBean {
+ 
+   /**
+    * Returns the name of the lock service.
+    */
+   public String getName();
+ 
+   /**
+    * Returns whether this is a distributed LockService.
+    *
+    * @return True is this is a distributed LockService, false otherwise.
+    */
+   public boolean isDistributed();
+ 
+   /**
+    * Returns the number of members using this LockService.
+    */
+   public int getMemberCount();
+ 
+   /**
+    * Returns of the name of the member which grants the lock.
+    */
+   public String fetchGrantorMember();
+ 
+   /**
+    * Returns a list of names of the members using this LockService.
+    */
+   public String[] getMemberNames();
+ 
+   /**
+    * Returns whether this member is the granter.
+    * 
+    * @return True if this member is the granter, false otherwise.
+    */
+   public boolean isLockGrantor();
+ 
+  
+   /**
+    * Requests that this member become the granter.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.BECOME_LOCK_GRANTOR)
+   public void becomeLockGrantor();
+ 
+   /**
+    * Returns a map of the names of the objects being locked on and the names of
+    * the threads holding the locks.
+    */
+   public Map<String, String> listThreadsHoldingLock();
+ 
+   /**
+    * Returns a list of names of the locks held by this member's threads.
+    */
+   public String[] listHeldLocks();
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/ManagerMXBean.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/ManagerMXBean.java
index 0000000,39981cf..62a5f52
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/ManagerMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/ManagerMXBean.java
@@@ -1,0 -1,83 +1,90 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management;
+ 
+ import javax.management.JMException;
+ 
+ import com.gemstone.gemfire.management.internal.Manager;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ 
+ /**
+  * MBean that provides access to information and management functionality for a
+  * {@link Manager}.
+  * 
+  * @author rishim
+  * @since 7.0
+  * 
+  */
+ public interface ManagerMXBean {
+ 
+   /**
+    * Returns whether the manager service is running on this member.
+    * 
+    * @return True of the manager service is running, false otherwise.
+    */
+   public boolean isRunning();
+ 
+   /**
+    * Starts the manager service.
+    * 
+    * @return True if the manager service was successfully started, false otherwise.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.START_MANAGER)
+   public boolean start() throws JMException;
+ 
+   /**
+    * Stops the manager service.
+    * 
+    * @return True if the manager service was successfully stopped, false otherwise.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.STOP_MANAGER)
+   public boolean stop() throws JMException;
+ 
+   /**
+    * Returns the URL for connecting to the Pulse application.
+    */
+   public String getPulseURL();
+   
+   /**
+    * Sets the URL for the Pulse application.
+    * 
+    * @param pulseURL
+    *          The URL for the Pulse application.
+    */
++  @ResourceOperation(resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public void setPulseURL(String pulseURL);
+ 
+   /**
+    * Returns the last set status message. Generally, a subcomponent will call
+    * setStatusMessage to save the result of its execution.  For example, if
+    * the embedded HTTP server failed to start, the reason for that failure will
+    * be saved here.
+    */
+   public String getStatusMessage();
+ 
+   /**
+    * Sets the status message.
+    * 
+    * @param message
+    *          The status message.
+    */
++  @ResourceOperation(resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public void setStatusMessage(String message);
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java
index 0000000,e803825..c4316ae
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java
@@@ -1,0 -1,855 +1,866 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management;
+ 
+ import java.util.Map;
+ 
+ import com.gemstone.gemfire.distributed.DistributedMember;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ 
+ /**
+  * MBean that provides access to information and management functionality for a
+  * {@link DistributedMember} of the GemFire distributed system.
+  * 
+  * <p>
+  * ObjectName of the MBean
+  * :GemFire:type=Member,member=&ltname-or-dist-member-id&gt
+  * 
+  * <p>
+  * There will be one instance of this MBean per GemFire node.
+  * 
+  * <p>
+  * List of notification emitted by MemberMXBean.
+  * 
+  * <p>
+  * <table border="1">
+  * <tr>
+  * <th>Notification Type</th>
+  * <th>Notification Source</th>
+  * <th>Message</th>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.region.created</td>
+  * <td>Member name or ID</td>
+  * <td>Region Created with Name &ltRegion Name&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.region.closed</td>
+  * <td>Member name or ID</td>
+  * <td>Region Destroyed/Closed with Name &ltRegion Name&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.disk.created</td>
+  * <td>Member name or ID</td>
+  * <td>DiskStore Created with Name &ltDiskStore Name&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.disk.closed</td>
+  * <td>Member name or ID</td>
+  * <td>DiskStore Destroyed/Closed with Name &ltDiskStore Name&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.lockservice.created</td>
+  * <td>Member name or ID</td>
+  * <td>LockService Created with Name &ltLockService Name&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.lockservice.closed</td>
+  * <td>Member name or ID</td>
+  * <td>Lockservice Closed with Name &ltLockService Name&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.gateway.sender.created</td>
+  * <td>Member name or ID</td>
+  * <td>GatewaySender Created in the VM</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.gateway.sender.started</td>
+  * <td>Member name or ID</td>
+  * <td>GatewaySender Started in the VM &ltSender Id&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.gateway.sender.stopped</td>
+  * <td>Member name or ID</td>
+  * <td>GatewaySender Stopped in the VM &ltSender Id&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.gateway.sender.paused</td>
+  * <td>Member name or ID</td>
+  * <td>GatewaySender Paused in the VM &ltSender Id&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.gateway.sender.resumed</td>
+  * <td>Member name or ID</td>
+  * <td>GatewaySender Resumed in the VM &ltSender Id&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.async.event.queue.created</td>
+  * <td>Member name or ID</td>
+  * <td>Async Event Queue is Created in the VM</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.gateway.receiver.created</td>
+  * <td>Member name or ID</td>
+  * <td>GatewayReceiver Created in the VM</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.gateway.receiver.started</td>
+  * <td>Member name or ID</td>
+  * <td>GatewayReceiver Started in the VM</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.gateway.receiver.stopped</td>
+  * <td>Member name or ID</td>
+  * <td>GatewayReceiver Stopped in the VM</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.server.started</td>
+  * <td>Member name or ID</td>
+  * <td>Cache Server is Started in the VM</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.server.stopped</td>
+  * <td>Member name or ID</td>
+  * <td>Cache Server is stopped in the VM</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.locator.started</td>
+  * <td>Member name or ID</td>
+  * <td>Locator is Started in the VM</td>
+  * </tr>
+  * </table>
+  * 
+  * @author rishim
+  * @since 7.0
+  */
+ public interface MemberMXBean {
+ 
+   /**
+    * Returns the most recent log entries for the member.
+    * 
+    * @param numberOfLines
+    *          Number of lines to return, up to a maximum of 100.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.SHOW_LOG)
+   public String showLog(int numberOfLines);
+ 
+   /**
+    * Returns the license string for this member.
+    *
+    * @deprecated Removed licensing in 8.0.
+    */
+   @Deprecated
+   public String viewLicense();
+ 
+   /**
+    * Performs compaction on all of the member's disk stores.
+    * 
+    * @return A list of names of the disk stores that were compacted.
+    */
++  @ResourceOperation(resource=Resource.DISKSTORE, operation=ResourceConstants.COMPACT_DISKSTORE)
+   public String[] compactAllDiskStores();
+   
+   /**
+    * Creates a Manager MBean on this member.
+    * 
+    * @return True if the Manager MBean was successfully create, false otherwise.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.CREATE_MANAGER)
+   public boolean createManager();
+   
+   /**
+    * Shuts down the member. This is an asynchronous call and it will 
+    * return immediately without waiting for a result.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.SHUTDOWN)
+   public void shutDownMember();
+   
+   /**
+    * Returns JVM metrics.
+    */
+   public JVMMetrics showJVMMetrics();
+   
+   /**
+    * Returns operating system metrics.
+    */
+   public OSMetrics showOSMetrics();
+ 
+   /**
+    * Executes a command on the member.
+    * 
+    * @param commandString
+    *          Command to be executed.
+    * 
+    * @return Result of the execution in JSON format.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.LIST_DS)
+   String processCommand(String commandString);
+   
+   /**
+    * Executes a command on the member.
+    * 
+    * @param commandString
+    *          Command to be execute.
+    * @param env
+    *          Environmental properties to use during command execution.
+    * @return Result of the execution in JSON format.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.LIST_DS)
+   String processCommand(String commandString, Map<String, String> env);
+   
+   /**
+    * Executes a command on the member.
+    * 
+    * @param commandString
+    *          Command to be execute.
+    * @param env
+    *          Environmental properties to use during command execution.
+    * @param binaryData
+    *          Binary data specific to the command being executed.
+    * @return Result of the execution in JSON format.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.LIST_DS)
+   String processCommand(String commandString, Map<String, String> env, Byte[][] binaryData);
+ 
+   /**
+    * Returns the name of all disk stores in use by this member.
+    * 
+    * @param includeRegionOwned
+    *          Whether to include disk stores owned by a region.
+    */
+   public String[] listDiskStores(boolean includeRegionOwned);
+ 
+   /**
+    * 
+    * @return  list of HDFSStore's present in the Cache
+    */
+   
+   public String[] getHDFSStores();
+ 
+   /**
+    * Returns the GemFire specific properties for this member.
+    */
+   public GemFireProperties listGemFireProperties();
+ 
+   /**
+    * Returns the name or IP address of the host on which this member is
+    * running.
+    */
+   public String getHost();
+ 
+   /**
+    * Returns the name of this member.
+    */
+   public String getName();
+   
+   /**
+    * Returns the ID of this member.
+    */
+   public String getId();
+   
+   /**
+    * Returns the name of the member if it's been set, otherwise the ID.
+    */
+   public String getMember();
+   
+   /**
+    * Returns the names of the groups this member belongs to.
+    */
+   public String[] getGroups();
+ 
+   /**
+    * Returns the operating system process ID.
+    */
+   public int getProcessId();
+ 
+   /**
+    * Returns the status.
+    */
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.LIST_DS)
+   public String status();
+ 
+   /**
+    * Returns the GemFire version.
+    */
+   public String getVersion();
+  
+   /**
+    * Returns whether this member is attached to at least one Locator.
+    * 
+    * @return True if this member is attached to a Locator, false otherwise.
+    */
+   public boolean isLocator();
+ 
+   /**
+    * Returns the number of seconds that this member will wait for a
+    * distributed lock.
+    */
+   public long getLockTimeout();
+ 
+   /**
+    * Returns the number of second that this member will lease a distributed
+    * lock.
+    */
+   public long getLockLease();
+ 
+   /**
+    * Any long-running GemFire process that was started with "start server" command from GFSH.
+    * It returns true even if that process has --disable-default-server=true.
+    */
+   public boolean isServer();
+ 
+   /**
+    * Returns whether this member has at least one GatewaySender.
+    * 
+    * @return True if this member has at least one GatwaySender, false otherwise.
+    */
+   public boolean hasGatewaySender();
+ 
+   /**
+    * Returns whether this member is running the Manager service.
+    * 
+    * @return True if this member is running the Manager service, false otherwise.
+    */
+   public boolean isManager();
+ 
+   /**
+    * Returns whether this member has created the Manager service (it may be
+    * created, but not running).
+    * 
+    * @return True if this member has created the Manager service, false otherwise.
+    */
+   public boolean isManagerCreated();
+ 
+   /**
+    * Returns whether this member has at least one GatewayReceiver.
+    * 
+    * @return True if this member has at least one GatwayReceiver, false otherwise.
+    */
+   public boolean hasGatewayReceiver();
+ 
+   /**
+    * Returns the ClassPath.
+    */
+   public String getClassPath();
+ 
+   /**
+    * Returns the current time on the member's host.
+    */
+   public long getCurrentTime();
+ 
+   /**
+    * Returns the number of seconds that this member has been running.
+    */
+   public long getMemberUpTime();
+ 
+   /**
+    * Returns the time (as a percentage) that this member's process time with
+    * respect to Statistics sample time interval. If process time between two
+    * sample time t1 & t2 is p1 and p2 
+    * cpuUsage = ((p2-p1) * 100) / ((t2-t1))
+    * 
+    * ProcessCpuTime is obtained from OperatingSystemMXBean.
+    * If process CPU time is not available in the platform it will be shown as -1
+    * 
+    */
+   public float getCpuUsage();
+ 
+   /**
+    * Returns the current size of the heap in megabytes.
+    * @deprecated Please use {@link #getUsedMemory()} instead.
+    */
+   public long getCurrentHeapSize();
+ 
+   /**
+    * Returns the maximum size of the heap in megabytes.
+    * @deprecated Please use {@link #getMaxMemory()} instead.
+    */
+   public long getMaximumHeapSize();
+ 
+   /**
+    * Returns the free heap size in megabytes.
+    * @deprecated Please use {@link #getFreeMemory()} instead.
+    */
+   public long getFreeHeapSize();
+ 
+   /**
+    * Returns the maximum size of the heap in megabytes.
+    * 
+    */
+   public long getMaxMemory();
+   
+   /**
+    * Returns the free heap size in megabytes.
+    */
+   public long getFreeMemory();
+   
+   /**
+    * Returns the current size of the heap in megabytes.
+    */
+   public long getUsedMemory();
+   
+   /**
+    * Returns the current threads.
+    */
+   public String[] fetchJvmThreads();
+ 
+   /**
+    * Returns the maximum number of open file descriptors allowed for the member's
+    * host operating system.
+    */
+   public long getFileDescriptorLimit();
+ 
+   /**
+    * Returns the current number of open file descriptors.
+    */
+   public long getTotalFileDescriptorOpen();
+ 
+   /**
+    * Returns the number of Regions present in the Cache.
+    */
+   public int getTotalRegionCount();
+ 
+   /**
+    * Returns the number of Partition Regions present in the Cache.
+    */
+   public int getPartitionRegionCount();
+ 
+   /**
+    * Returns a list of all Region names.
+    */
+   public String[] listRegions();
+   
+   
+   /**
+    * Returns a list of all disk stores, including those owned by a Region.
+    */
+   public String[] getDiskStores();
+   
+   /**
+    * Returns a list of all root Region names.
+    */
+   public String[] getRootRegionNames();
+ 
+   /**
+    * Returns the total number of entries in all regions.
+    */
+   public int getTotalRegionEntryCount();
+ 
+   /**
+    * Returns the total number of buckets.
+    */
+   public int getTotalBucketCount();
+ 
+   /**
+    * Returns the number of buckets for which this member is the primary holder.
+    */
+   public int getTotalPrimaryBucketCount();
+ 
+   /**
+    * Returns the cache get average latency.
+    */
+   public long getGetsAvgLatency();
+ 
+   /**
+    * Returns the cache put average latency.
+    */
+   public long getPutsAvgLatency();
+ 
+   /**
+    * Returns the cache putAll average latency.
+    */
+   public long getPutAllAvgLatency();
+ 
+   /**
+    * Returns the number of times that a cache miss occurred for all regions.
+    */
+   public int getTotalMissCount();
+ 
+   /**
+    * Returns the number of times that a hit occurred for all regions.
+    */
+   public int getTotalHitCount();
+ 
+   /**
+    * Returns the number of gets per second.
+    */
+   public float getGetsRate();
+ 
+   /**
+    * Returns the number of puts per second. Only includes puts done explicitly
+    * on this member's cache, not those pushed from another member.
+    */
+   public float getPutsRate();
+ 
+   /**
+    * Returns the number of putAlls per second.
+    */
+   public float getPutAllRate();
+ 
+   /**
+    * Returns the number of creates per second.
+    */
+   public float getCreatesRate();
+   
+   /**
+    * Returns the number of destroys per second.
+    */
+   public float getDestroysRate();
+ 
+   /**
+    * Returns the average latency of a call to a CacheWriter.
+    */
+   public long getCacheWriterCallsAvgLatency();
+ 
+   /**
+    * Returns the average latency of a call to a CacheListener.
+    */
+   public long getCacheListenerCallsAvgLatency();
+ 
+   /**
+    * Returns the total number of times that a load on this cache has completed,
+    * as a result of either a local get or a remote net load.
+    */
+   public int getTotalLoadsCompleted();
+   
+   /**
+    * Returns the average latency of a load.
+    */
+   public long getLoadsAverageLatency();
+   
+   /**
+    * Returns the total number of times the a network load initiated by this cache
+    * has completed.
+    */
+   public int getTotalNetLoadsCompleted();
+   
+   /**
+    * Returns the net load average latency.
+    */
+   public long getNetLoadsAverageLatency();
+   
+   /**
+    * Returns the total number of times that a network search initiated by this cache 
+    * has completed.
+    */
+   public int getTotalNetSearchCompleted();
+ 
+   /**
+    * Returns the net search average latency.
+    */
+   public long getNetSearchAverageLatency();
+   
+   /**
+    * Returns the current number of disk tasks (op-log compaction, asynchronous
+    * recovery, etc.) that are waiting for a thread to run.
+    */
+   public int getTotalDiskTasksWaiting();
+ 
+   /**
+    * Returns the average number of bytes per second sent.
+    */
+   public float getBytesSentRate();
+ 
+   /**
+    * Returns the average number of bytes per second received.
+    */
+   public float getBytesReceivedRate();
+ 
+   /**
+    * Returns a list of IDs for all connected gateway receivers.
+    */
+   public String[] listConnectedGatewayReceivers();
+ 
+   /**
+    * Returns a list of IDs for all gateway senders.
+    */
+   public String[] listConnectedGatewaySenders();
+ 
+   /**
+    * Returns the number of currently executing functions.
+    */
+   public int getNumRunningFunctions();
+ 
+   /**
+    * Returns the average function execution rate.
+    */
+   public float getFunctionExecutionRate();
+ 
+   /**
+    * Returns the number of currently executing functions that will return
+    * resutls.
+    */
+   public int getNumRunningFunctionsHavingResults();
+ 
+   /**
+    * Returns the number of current transactions.
+    */
+   public int getTotalTransactionsCount();
+ 
+   /**
+    * Returns the average commit latency in nanoseconds .
+    */
+   public long getTransactionCommitsAvgLatency();
+ 
+   /**
+    * Returns the number of committed transactions.
+    */
+   public int getTransactionCommittedTotalCount();
+ 
+   /**
+    * Returns the number of transactions that were rolled back.
+    */
+   public int getTransactionRolledBackTotalCount();
+ 
+   /**
+    * Returns the average number of transactions committed per second.
+    */
+   public float getTransactionCommitsRate();
+   
+ 
+   /**
+    * Returns the number of bytes reads per second from all the disks of the member. 
+    */
+   public float getDiskReadsRate();
+ 
+   /**
+    * Returns the number of bytes written per second to disk to all the disks of the member. 
+    */
+   public float getDiskWritesRate();
+ 
+   /**
+    * Returns the average disk flush latency time in nanoseconds. 
+    */
+   public long getDiskFlushAvgLatency();
+ 
+   /**
+    * Returns the number of backups currently in progress for all disk stores.
+    */
+   public int getTotalBackupInProgress();
+   
+   /**
+    * Returns the number of backups that have been completed.
+    */
+   public int getTotalBackupCompleted();
+   
+   /**
+    * Returns the number of threads waiting for a lock.
+    */
+   public int getLockWaitsInProgress();
+ 
+   /**
+    * Returns the amount of time (in milliseconds) spent waiting for a lock.
+    */
+   public long getTotalLockWaitTime();
+ 
+   /**
+    * Returns the number of lock services in use.
+    */
+   public int getTotalNumberOfLockService();
+   
+   /**
+    * Returns the number of locks for which this member is a granter.
+    */
+   public int getTotalNumberOfGrantors();
+ 
+   /**
+    * Returns the number of lock request queues in use by this member.
+    */
+   public int getLockRequestQueues();
+ 
+   /**
+    * Returns the entry eviction rate as triggered by the LRU policy.
+    */
+   public float getLruEvictionRate();
+ 
+   /**
+    * Returns the rate of entries destroyed either by destroy cache operations or
+    * eviction.
+    */
+   public float getLruDestroyRate();
+ 
+   /**
+    * Returns the number of initial images in progress.
+    */
+   public int getInitialImagesInProgres();
+ 
+   /**
+    * Returns the total amount of time spent performing a "get initial image"
+    * operation when creating a region.
+    */
+   public long getInitialImageTime();
+ 
+   /**
+    * Return the number of keys received while performing a "get initial image"
+    * operation when creating a region.
+    */
+   public int getInitialImageKeysReceived();
+   
+   /**
+    * Returns the average time (in nanoseconds) spent deserializing objects.
+    * Includes deserializations that result in a PdxInstance.
+    */
+   public long getDeserializationAvgLatency();
+ 
+   /**
+    * Returns the average latency (in nanoseconds) spent deserializing objects.
+    * Includes deserializations that result in a PdxInstance.
+    */
+   public long getDeserializationLatency();
+ 
+   /**
+    * Returns the instantaneous rate of deserializing objects.
+    * Includes deserializations that result in a PdxInstance.
+    */
+   public float getDeserializationRate();
+ 
+   /**
+    * Returns the average time (in nanoseconds) spent serializing objects.
+    * Includes serializations that result in a PdxInstance.
+    */
+   public long getSerializationAvgLatency();
+ 
+   /**
+    * Returns the average latency (in nanoseconds) spent serializing objects.
+    * Includes serializations that result in a PdxInstance.
+    */
+   public long getSerializationLatency();
+ 
+   /**
+    * Returns the instantaneous rate of serializing objects.
+    * Includes serializations that result in a PdxInstance.
+    */
+   public float getSerializationRate();
+ 
+   /**
+    * Returns the instantaneous rate of PDX instance deserialization.
+    */
+   public float getPDXDeserializationRate();
+ 
+   /**
+    * Returns the average time, in seconds, spent deserializing PDX instanced.
+    */
+   public long getPDXDeserializationAvgLatency();
+ 
+   /**
+    * Returns the total number of bytes used on all disks.
+    */
+   public long getTotalDiskUsage();
+   
+   /**
+    * Returns the number of threads in use.
+    */
+   public int getNumThreads();
+   
+   /**
+    * Returns the system load average for the last minute. The system load
+    * average is the sum of the number of runnable entities queued to the
+    * available processors and the number of runnable entities running on the
+    * available processors averaged over a period of time.
+    * 
+    * Pulse Attribute
+    * 
+    * @return The load average or a negative value if one is not available.
+    */
+   public double getLoadAverage();
+   
+   /**
+    * Returns the number of times garbage collection has occurred.
+    */
+   public long getGarbageCollectionCount();
+ 
+   /**
+    * Returns the amount of time (in milliseconds) spent on garbage collection.
+    */
+   public long getGarbageCollectionTime();  
+   
+   /**
+    * Returns the average number of reads per second.
+    */
+   public float getAverageReads();
+ 
+   /**
+    * Returns the average writes per second, including both put and putAll operations.
+    */
+   public float getAverageWrites();
+   
+   /**
+    * Returns the number JVM pauses (which may or may not include full garbage
+    * collection pauses) detected by GemFire.
+    */
+   public long getJVMPauses();
+   
+   
+   /**
+    * Returns the underlying host's current cpuActive percentage 
+    */
+   public int getHostCpuUsage();
+   
+   /**
+    * 
+    * Returns true if a cache server is running on this member and able server requests from GemFire clients
+    */
+   public boolean isCacheServer();
+   
+   /**
+    * Returns the redundancy-zone of the member;
+    */
+   public String getRedundancyZone();
+   
+   /**
+    * Returns current number of cache rebalance operations being directed by this process. 
+    */
+   public int getRebalancesInProgress();
+   
+   /**
+    * Returns current number of threads waiting for a reply.
+    */
+   public int getReplyWaitsInProgress();
+   
+   /**
+    * Returns total number of times waits for a reply have completed. 
+    */
+   public int getReplyWaitsCompleted();
+   
+   /**
+    * The current number of nodes in this distributed system visible to this member. 
+    */
+   public int getVisibleNodes();
+ 
+   /**
+    * Returns the number of off heap objects.
+    */
+   public int getOffHeapObjects();
+   
+   /**
+    * Returns the size of the maximum configured off-heap memory in bytes.
+    */
+   public long getOffHeapMaxMemory();
+   
+   /**
+    * Returns the size of available (or unallocated) off-heap memory in bytes.
+    */
+   public long getOffHeapFreeMemory();
+   
+   /**
+    * Returns the size of utilized off-heap memory in bytes.
+    */
+   public long getOffHeapUsedMemory();
+ 
+   /**
+    * Returns the percentage of off-heap memory fragmentation.
+    */
+   public int getOffHeapFragmentation();
+   
+   /**
+    * Returns the total time spent compacting in millseconds.
+    */
+   public long getOffHeapCompactionTime();
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
index 0000000,3b22eec..e28ddf5
mode 000000,100755..100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
@@@ -1,0 -1,516 +1,526 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal;
+ 
+ import java.io.IOException;
+ import java.io.Serializable;
+ import java.lang.management.ManagementFactory;
+ import java.net.InetAddress;
+ import java.net.ServerSocket;
+ import java.net.Socket;
+ import java.net.UnknownHostException;
+ import java.rmi.AlreadyBoundException;
+ import java.rmi.registry.LocateRegistry;
+ import java.rmi.registry.Registry;
+ import java.rmi.server.RMIClientSocketFactory;
+ import java.rmi.server.RMIServerSocketFactory;
+ import java.rmi.server.UnicastRemoteObject;
+ import java.util.HashMap;
+ 
+ import javax.management.MBeanServer;
+ import javax.management.remote.JMXConnectorServer;
+ import javax.management.remote.JMXServiceURL;
+ import javax.management.remote.rmi.RMIConnectorServer;
+ import javax.management.remote.rmi.RMIJRMPServerImpl;
+ import javax.management.remote.rmi.RMIServerImpl;
+ import javax.rmi.ssl.SslRMIClientSocketFactory;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.eclipse.jetty.server.Server;
+ import org.eclipse.jetty.server.ServerConnector;
+ 
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+ import com.gemstone.gemfire.distributed.internal.DistributionManager;
+ import com.gemstone.gemfire.internal.GemFireVersion;
+ import com.gemstone.gemfire.internal.SocketCreator;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.internal.tcp.TCPConduit;
+ import com.gemstone.gemfire.management.ManagementException;
+ import com.gemstone.gemfire.management.ManagementService;
+ import com.gemstone.gemfire.management.ManagerMXBean;
+ import com.gemstone.gemfire.management.internal.security.ManagementInterceptor;
+ import com.gemstone.gemfire.management.internal.unsafe.ReadOpFileAccessController;
+ 
+ /**
+  * Agent implementation that controls the JMX server end points for JMX clients
+  * to connect, such as an RMI server.
+  * 
+  * The ManagementAgent could be used in a loner or GemFire client to define and
+  * control JMX server end points for the Platform MBeanServer and the GemFire
+  * MBeans hosted within it.
+  *
+  * @author VMware, Inc.
+  * @since 7.0
+  */
+ public class ManagementAgent {
+   private static final Logger logger = LogService.getLogger();
+ 
+   /**
+    * True if running. Protected by synchronizing on this Manager instance. I
+    * used synchronization because I think we'll want to hold the same
+    * synchronize while configuring, starting, and eventually stopping the RMI
+    * server, the hidden management regions (in FederatingManager), etc
+    */
+   private boolean running = false;
+   private Registry registry;
+   private JMXConnectorServer cs;
+   private final DistributionConfig config;
+   private boolean isHttpServiceRunning = false;
+   private ManagementInterceptor securityInterceptor;
+ 
+   /**
+    * This system property is set to true when the embedded HTTP server is
+    * started so that the embedded pulse webapp can use a local MBeanServer
+    * instead of a remote JMX connection.
+    */
+   private static final String PULSE_EMBEDDED_PROP = "pulse.embedded";
+ 
+   public ManagementAgent(DistributionConfig config) {
+     this.config = config;
+   }
+ 
+   public synchronized boolean isRunning() {
+     return this.running;
+   }
+ 
+   public synchronized boolean isHttpServiceRunning() {
+     return isHttpServiceRunning;
+   }
+ 
+   public synchronized void setHttpServiceRunning(boolean isHttpServiceRunning) {
+     this.isHttpServiceRunning = isHttpServiceRunning;
+   }
+ 
+   private boolean isAPIRestServiceRunning(GemFireCacheImpl cache) {
+     return (cache != null && cache.getRestAgent() != null && cache.getRestAgent().isRunning());
+   }
+ 
+   private boolean isServerNode(GemFireCacheImpl cache) {
+     return (cache.getDistributedSystem().getDistributedMember().getVmKind() != DistributionManager.LOCATOR_DM_TYPE
+         && cache.getDistributedSystem().getDistributedMember().getVmKind() != DistributionManager.ADMIN_ONLY_DM_TYPE && !cache
+           .isClient());
+   }
+ 
+   public synchronized void startAgent(GemFireCacheImpl cache) {
+     // Do not start Management REST service if developer REST service is already
+     // started.
+ 
+     if (!isAPIRestServiceRunning(cache)) {
+       startHttpService(isServerNode(cache));
+     } else {
+       if (logger.isDebugEnabled()) {
+         logger
+             .debug("Developer REST APIs webapp is already running, Not Starting M&M REST and pulse!");
+       }
+     }
+ 
+     if (!this.running && this.config.getJmxManagerPort() != 0) {
+       try {
+         configureAndStart();
+       } catch (IOException e) {
+         throw new ManagementException(e);
+       }
+       this.running = true;
+     }
+   }
+ 
+   public synchronized void stopAgent() {
+     stopHttpService();
+ 
+     if (!this.running)
+       return;
+ 
+     if (logger.isDebugEnabled()) {
+       logger.debug("Stopping jmx manager agent");
+     }
+     try {
+       cs.stop();
+       UnicastRemoteObject.unexportObject(registry, true);
+     } catch (IOException e) {
+       throw new ManagementException(e);
+     }
+ 
+     this.running = false;
+   }
+ 
+   private Server httpServer;
+   private final String GEMFIRE_VERSION = GemFireVersion.getGemFireVersion();
+   private AgentUtil agentUtil = new AgentUtil(GEMFIRE_VERSION);
+ 
+   private void startHttpService(boolean isServer) {
+     final SystemManagementService managementService = (SystemManagementService) ManagementService
+         .getManagementService(CacheFactory.getAnyInstance());
+ 
+     final ManagerMXBean managerBean = managementService.getManagerMXBean();
+ 
+     if (this.config.getHttpServicePort() != 0) {
+       if (logger.isDebugEnabled()) {
+         logger.debug("Attempting to start HTTP service on port ({}) at bind-address ({})...",
+             this.config.getHttpServicePort(), this.config.getHttpServiceBindAddress());
+       }
+ 
+       // Find the Management WAR file
+       final String gemfireWar = agentUtil.findWarLocation("geode-web");
+       if (gemfireWar == null) {
+         if (logger.isDebugEnabled()) {
+           logger.debug("Unable to find GemFire Management REST API WAR file; the Management REST Interface for GemFire will not be accessible.");
+         }
+       }
+ 
+       // Find the Pulse WAR file
+       final String pulseWar = agentUtil.findWarLocation("geode-pulse");
+ 
+       if (pulseWar == null) {
+         final String message = "Unable to find Pulse web application WAR file; Pulse for GemFire will not be accessible";
+         setStatusMessage(managerBean, message);
+         if (logger.isDebugEnabled()) {
+           logger.debug(message);
+         }
+       }
+ 
+       // Find developer REST WAR file
+       final String gemfireAPIWar = agentUtil.findWarLocation("geode-web-api");
+       if (gemfireAPIWar == null) {
+         final String message = "Unable to find GemFire Developer REST API WAR file; the Developer REST Interface for GemFire will not be accessible.";
+         setStatusMessage(managerBean, message);
+         if (logger.isDebugEnabled()) {
+           logger.debug(message);
+         }
+       }
+ 
+       try {
+         if (agentUtil.isWebApplicationAvailable(gemfireWar, pulseWar, gemfireAPIWar)) {
+ 
+           final String bindAddress = this.config.getHttpServiceBindAddress();
+           final int port = this.config.getHttpServicePort();
+ 
+           boolean isRestWebAppAdded = false;
+ 
+           this.httpServer = JettyHelper.initJetty(bindAddress, port,
+               this.config.getHttpServiceSSLEnabled(),
+               this.config.getHttpServiceSSLRequireAuthentication(),
+               this.config.getHttpServiceSSLProtocols(), this.config.getHttpServiceSSLCiphers(),
+               this.config.getHttpServiceSSLProperties());
+ 
+           if (agentUtil.isWebApplicationAvailable(gemfireWar)) {
+             this.httpServer = JettyHelper
+                 .addWebApplication(this.httpServer, "/gemfire", gemfireWar);
+           }
+ 
+           if (agentUtil.isWebApplicationAvailable(pulseWar)) {
+             this.httpServer = JettyHelper.addWebApplication(this.httpServer, "/pulse", pulseWar);
+           }
+ 
+           if (isServer && this.config.getStartDevRestApi()) {
+             if (agentUtil.isWebApplicationAvailable(gemfireAPIWar)) {
+               this.httpServer = JettyHelper.addWebApplication(this.httpServer, "/gemfire-api",
+                   gemfireAPIWar);
+               isRestWebAppAdded = true;
+             }
+           } else {
+             final String message = "Developer REST API web application will not start when start-dev-rest-api is not set and node is not server";
+             setStatusMessage(managerBean, message);
+             if (logger.isDebugEnabled()) {
+               logger.debug(message);
+             }
+           }
+ 
+           if (logger.isDebugEnabled()) {
+             logger.debug("Starting HTTP embedded server on port ({}) at bind-address ({})...",
+                 ((ServerConnector) this.httpServer.getConnectors()[0]).getPort(), bindAddress);
+           }
+ 
+           System.setProperty(PULSE_EMBEDDED_PROP, "true");
+ 
+           this.httpServer = JettyHelper.startJetty(this.httpServer);
+ 
+           // now, that Tomcat has been started, we can set the URL used by web
+           // clients to connect to Pulse
+           if (agentUtil.isWebApplicationAvailable(pulseWar)) {
+             managerBean.setPulseURL("http://".concat(getHost(bindAddress)).concat(":")
+                 .concat(String.valueOf(port)).concat("/pulse/"));
+           }
+ 
+           // set cache property for developer REST service running
+           if (isRestWebAppAdded) {
+             GemFireCacheImpl cache = (GemFireCacheImpl) CacheFactory.getAnyInstance();
+             cache.setRESTServiceRunning(true);
+ 
+             // create region to hold query information (queryId, queryString).
+             // Added for the developer REST APIs
+             RestAgent.createParameterizedQueryRegion();
++            
++            //Rest APIs security
++            if(!StringUtils.isBlank(this.config.SECURITY_CLIENT_AUTHENTICATOR_NAME)){
++              RestAgent.createTokenToAuthzRequestRegion();
++            }
+           }
+ 
+           // set true for HTTP service running
+           setHttpServiceRunning(true);
+         }
+       } catch (Exception e) {
+         stopHttpService();// Jetty needs to be stopped even if it has failed to
+                           // start. Some of the threads are left behind even if
+                           // server.start() fails due to an exception
+         setStatusMessage(managerBean, "HTTP service failed to start with "
+             + e.getClass().getSimpleName() + " '" + e.getMessage() + "'");
+         throw new ManagementException("HTTP service failed to start", e);
+       }
+     } else {
+       setStatusMessage(managerBean,
+           "Embedded HTTP server configured not to start (http-service-port=0) or (jmx-manager-http-port=0)");
+     }
+   }
+ 
+   private String getHost(final String bindAddress) throws UnknownHostException {
+     if (!StringUtils.isBlank(this.config.getJmxManagerHostnameForClients())) {
+       return this.config.getJmxManagerHostnameForClients();
+     } else if (!StringUtils.isBlank(bindAddress)) {
+       return InetAddress.getByName(bindAddress).getHostAddress();
+     } else {
+       return SocketCreator.getLocalHost().getHostAddress();
+     }
+   }
+ 
+   private boolean isRunningInTomcat() {
+     return (System.getProperty("catalina.base") != null || System.getProperty("catalina.home") != null);
+   }
+ 
+   private void setStatusMessage(ManagerMXBean mBean, String message) {
+     mBean.setPulseURL("");
+     mBean.setStatusMessage(message);
+   }
+ 
+   private void stopHttpService() {
+     if (this.httpServer != null) {
+       if (logger.isDebugEnabled()) {
+         logger.debug("Stopping the HTTP service...");
+       }
+       try {
+         this.httpServer.stop();
+       } catch (Exception e) {
+         logger.warn("Failed to stop the HTTP service because: {}", e.getMessage(), e);
+       } finally {
+         try {
+           this.httpServer.destroy();
+         } catch (Exception ignore) {
+           logger.error("Failed to properly release resources held by the HTTP service: {}",
+               ignore.getMessage(), ignore);
+         } finally {
+           this.httpServer = null;
+           System.clearProperty("catalina.base");
+           System.clearProperty("catalina.home");
+         }
+       }
+     }
+   }
+ 
+   /**
+    * http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html
+    * #gdfvq https://blogs.oracle.com/jmxetc/entry/java_5_premain_rmi_connectors
+    * https
+    * ://blogs.oracle.com/jmxetc/entry/building_a_remotely_stoppable_connector
+    * https
+    * ://blogs.oracle.com/jmxetc/entry/jmx_connecting_through_firewalls_using
+    */
+   private void configureAndStart() throws IOException {
+     // KIRK: I copied this from
+     // https://blogs.oracle.com/jmxetc/entry/java_5_premain_rmi_connectors
+     // we'll need to change this significantly but it's a starting point
+ 
+     // get the port for RMI Registry and RMI Connector Server
+     final int port = this.config.getJmxManagerPort();
+     final String hostname;
+     final InetAddress bindAddr;
+     if (this.config.getJmxManagerBindAddress().equals("")) {
+       hostname = SocketCreator.getLocalHost().getHostName();
+       bindAddr = null;
+     } else {
+       hostname = this.config.getJmxManagerBindAddress();
+       bindAddr = InetAddress.getByName(hostname);
+     }
+ 
+     final boolean ssl = this.config.getJmxManagerSSLEnabled();
+ 
+     if (logger.isDebugEnabled()) {
+       logger.debug("Starting jmx manager agent on port {}{}", port,
+           (bindAddr != null ? (" bound to " + bindAddr) : "") + (ssl ? " using SSL" : ""));
+     }
+ 
+     final SocketCreator sc = SocketCreator.createNonDefaultInstance(ssl,
+         this.config.getJmxManagerSSLRequireAuthentication(),
+         this.config.getJmxManagerSSLProtocols(), this.config.getJmxManagerSSLCiphers(),
+         this.config.getJmxSSLProperties());
+     RMIClientSocketFactory csf = ssl ? new SslRMIClientSocketFactory() : null;// RMISocketFactory.getDefaultSocketFactory();
+     // new GemFireRMIClientSocketFactory(sc, getLogger());
+     RMIServerSocketFactory ssf = new GemFireRMIServerSocketFactory(sc, bindAddr);
+ 
+     // Following is done to prevent rmi causing stop the world gcs
+     System.setProperty("sun.rmi.dgc.server.gcInterval", Long.toString(Long.MAX_VALUE - 1));
+ 
+     // Create the RMI Registry using the SSL socket factories above.
+     // In order to use a single port, we must use these factories
+     // everywhere, or nowhere. Since we want to use them in the JMX
+     // RMI Connector server, we must also use them in the RMI Registry.
+     // Otherwise, we wouldn't be able to use a single port.
+     //
+     // Start an RMI registry on port <port>.
+     registry = LocateRegistry.createRegistry(port, csf, ssf);
+ 
+     // Retrieve the PlatformMBeanServer.
+     MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+ 
+     // Environment map. KIRK: why is this declared as HashMap?
+     final HashMap<String, Object> env = new HashMap<String, Object>();
+ 
 -    boolean integratedSecEnabled = System.getProperty("resource-authenticator") != null;
++    boolean integratedSecEnabled = isIntegratedSecEnabled();    
+     if (integratedSecEnabled) {
 -      securityInterceptor = new ManagementInterceptor(logger);
++      securityInterceptor = new ManagementInterceptor((GemFireCacheImpl)CacheFactory.getAnyInstance(), logger);
+       env.put(JMXConnectorServer.AUTHENTICATOR, securityInterceptor);
+     } else {
+       /* Disable the old authenticator mechanism */
+       String pwFile = this.config.getJmxManagerPasswordFile();
+       if (pwFile != null && pwFile.length() > 0) {
+         env.put("jmx.remote.x.password.file", pwFile);
+       }
+ 
+       String accessFile = this.config.getJmxManagerAccessFile();
+       if (accessFile != null && accessFile.length() > 0) {
+         // Lets not use default connector based authorization
+         // env.put("jmx.remote.x.access.file", accessFile);
+         // Rewire the mbs hierarchy to set accessController
+         ReadOpFileAccessController controller = new ReadOpFileAccessController(accessFile);
+         controller.setMBeanServer(mbs);
+         mbs = controller;
+       }
+     }
+ 
+     // Manually creates and binds a JMX RMI Connector Server stub with the
+     // registry created above: the port we pass here is the port that can
+     // be specified in "service:jmx:rmi://"+hostname+":"+port - where the
+     // RMI server stub and connection objects will be exported.
+     // Here we choose to use the same port as was specified for the
+     // RMI Registry. We can do so because we're using \*the same\* client
+     // and server socket factories, for the registry itself \*and\* for this
+     // object.
+     final RMIServerImpl stub = new RMIJRMPServerImpl(port, csf, ssf, env);
+ 
+     // Create an RMI connector server.
+     //
+     // As specified in the JMXServiceURL the RMIServer stub will be
+     // registered in the RMI registry running in the local host on
+     // port <port> with the name "jmxrmi". This is the same name the
+     // out-of-the-box management agent uses to register the RMIServer
+     // stub too.
+     //
+     // The port specified in "service:jmx:rmi://"+hostname+":"+port
+     // is the second port, where RMI connection objects will be exported.
+     // Here we use the same port as that we choose for the RMI registry.
+     // The port for the RMI registry is specified in the second part
+     // of the URL, in "rmi://"+hostname+":"+port
+     //
+     // We construct a JMXServiceURL corresponding to what we have done
+     // for our stub...
+     final JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://" + hostname + ":" + port
+         + "/jndi/rmi://" + hostname + ":" + port + "/jmxrmi");
+ 
+     // Create an RMI connector server with the JMXServiceURL
+     //
+     // KIRK: JDK 1.5 cannot use JMXConnectorServerFactory because of
+     // http://bugs.sun.com/view_bug.do?bug_id=5107423
+     // but we're using JDK 1.6
+     cs = new RMIConnectorServer(new JMXServiceURL("rmi", hostname, port), env, stub, mbs) {
+       @Override
+       public JMXServiceURL getAddress() {
+         return url;
+       }
+ 
+       @Override
+       public synchronized void start() throws IOException {
+         try {
+           registry.bind("jmxrmi", stub);
+         } catch (AlreadyBoundException x) {
+           final IOException io = new IOException(x.getMessage());
+           io.initCause(x);
+           throw io;
+         }
+         super.start();
+       }
+     };
+     // This may be the 1.6 way of doing it but the problem is it does not use
+     // our "stub".
+     // cs = JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs);
+ 
+     if (integratedSecEnabled) {
+       cs.setMBeanServerForwarder(securityInterceptor.getMBeanServerForwarder());
+       logger.info("Starting RMI Connector with Security Interceptor");
+     }
+ 
+     cs.start();
+     if (logger.isDebugEnabled()) {
+       logger.debug("Finished starting jmx manager agent.");
+     }
+     // System.out.println("Server started at: "+cs.getAddress());
+ 
+     // Start the CleanThread daemon... KIRK: not sure what CleanThread is...
+     //
+     // final Thread clean = new CleanThread(cs);
+     // clean.start();
+   }
++  
++  private boolean isIntegratedSecEnabled() {    
++    String authenticatorFactoryName = config.getSecurityClientAuthenticator();    
++    return authenticatorFactoryName != null && !authenticatorFactoryName.isEmpty();
++  }
+ 
+   private static class GemFireRMIClientSocketFactory implements RMIClientSocketFactory,
+       Serializable {
+     private static final long serialVersionUID = -7604285019188827617L;
+ 
+     private/* final hack to prevent serialization */transient SocketCreator sc;
+ 
+     public GemFireRMIClientSocketFactory(SocketCreator sc) {
+       this.sc = sc;
+     }
+ 
+     @Override
+     public Socket createSocket(String host, int port) throws IOException {
+       return this.sc.connectForClient(host, port, 0/* no timeout */);
+     }
+   };
+ 
+   private static class GemFireRMIServerSocketFactory implements RMIServerSocketFactory,
+       Serializable {
+     private static final long serialVersionUID = -811909050641332716L;
+     private/* final hack to prevent serialization */transient SocketCreator sc;
+     private final InetAddress bindAddr;
+ 
+     public GemFireRMIServerSocketFactory(SocketCreator sc, InetAddress bindAddr) {
+       this.sc = sc;
+       this.bindAddr = bindAddr;
+     }
+ 
+     @Override
+     public ServerSocket createServerSocket(int port) throws IOException {
+       return this.sc.createServerSocket(port, TCPConduit.getBackLog(), this.bindAddr);
+     }
+   };
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/RestAgent.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/RestAgent.java
index 0000000,d8faea6..f9e4823
mode 000000,100755..100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/RestAgent.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/RestAgent.java
@@@ -1,0 -1,217 +1,344 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.management.internal;
+ 
++import java.security.Principal;
++import java.util.List;
++
+ import org.apache.logging.log4j.Logger;
+ import org.eclipse.jetty.server.Server;
+ import org.eclipse.jetty.server.ServerConnector;
++import org.springframework.util.Assert;
+ 
+ import com.gemstone.gemfire.cache.AttributesFactory;
++import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.DataPolicy;
++import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.RegionAttributes;
+ import com.gemstone.gemfire.cache.Scope;
+ import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+ import com.gemstone.gemfire.internal.GemFireVersion;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.cache.InternalRegionArguments;
++import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.internal.logging.LogService;
++import com.gemstone.gemfire.internal.security.AuthorizeRequest;
++import com.gemstone.gemfire.internal.security.AuthorizeRequestPP;
+ import com.gemstone.gemfire.management.ManagementService;
+ 
+ /**
+  * Agent implementation that controls the HTTP server end points used for REST
+  * clients to connect gemfire data node.
+  * 
+  * The RestAgent is used to start http service in embedded mode on any non
+  * manager data node with developer REST APIs service enabled.
+  *
+  * @author Nilkanth Patel.
+  * @since 8.0
+  */
+ public class RestAgent {
+   private static final Logger logger = LogService.getLogger();
+ 
+   private boolean running = false;
+   private final DistributionConfig config;
 -
++  
++  public static final String AUTH_METADATA_REGION = "__TokenToAuthzRequest__";
++  
+   public RestAgent(DistributionConfig config) {
+     this.config = config;
+   }
+ 
+   public synchronized boolean isRunning() {
+     return this.running;
+   }
 -
 -  private boolean isManagementRestServiceRunning(GemFireCacheImpl cache) {
 -    final SystemManagementService managementService = (SystemManagementService) ManagementService
 -        .getManagementService(cache);
 -    return (managementService.getManagementAgent() != null && managementService
 -        .getManagementAgent().isHttpServiceRunning());
 -
++  
++  private static Cache getCache(){
++    Cache cache = GemFireCacheImpl.getExisting();
++    Assert.state(cache != null, "The Gemfire Cache reference was not properly initialized");
++    return cache;
++  }
++  
++  public static Region<String, List<Object>> getAuthzRegion(final String namePath) {
++    /*
++    return  ValidationUtils.returnValueThrowOnNull(getCache().<String, List<Object>>getRegion(namePath),
++      new GemfireRestException(String.format(" (%1$s) store does not exist!", namePath)));
++    */
++    try{
++      return getCache().getRegion(namePath);
++    }catch(Exception e){
++      throw new RuntimeException("AuthorizeStore does not exist!" + e.getMessage());
++    }
++  }
++  
++  public static AuthorizeRequest getAuthorizeRequest(String token){
++    List<Object> objs  = getAuthzRegion(RestAgent.AUTH_METADATA_REGION).get(token);
++    return (AuthorizeRequest)objs.get(0);
++  }
++  
++  public static AuthorizeRequestPP getAuthorizeRequestPP(String token){
++    List<Object> objs  = getAuthzRegion(RestAgent.AUTH_METADATA_REGION).get(token);
++    return (AuthorizeRequestPP)objs.get(1);
++  }
++  
++  public static Principal getPrincipalForToken(String token){
++    return getAuthorizeRequest(token).getPrincipal();
++  }
++  
++  public static synchronized void removeAuthzEntry(String token){
++    //remove the authzCallback. Note that this does not close() it.
++    getAuthzRegion(AUTH_METADATA_REGION).remove(token);
++  }
++  
++  public static void closeAuthz(String token){
++    //Close the authzCallback
++    try{  
++      AuthorizeRequest authRequest =  getAuthorizeRequest(token);
++      if(authRequest != null) {
++        authRequest.close();
++      }
++      
++      AuthorizeRequestPP authRequestPP =  getAuthorizeRequestPP(token);
++      if(authRequestPP != null) {
++        authRequestPP.close();
++      }
++    } catch(Exception e){
++      logger.error("Cannot close the authzCallback for token {}", token, e);
++    }
++  }
++  
++  public static synchronized void addAuthzEntry(String token, List<Object> authObjects){
++    getAuthzRegion(AUTH_METADATA_REGION).put(token, authObjects);
++  }
++  
++  private boolean isManagementRestServiceRunning(GemFireCacheImpl cache){
++    final SystemManagementService managementService = (SystemManagementService) ManagementService.getManagementService(
++        cache);
++    return ( managementService.getManagementAgent() != null && managementService.getManagementAgent().isHttpServiceRunning());
++    
+   }
+ 
+   public synchronized void start(GemFireCacheImpl cache) {
+     if (!this.running && this.config.getHttpServicePort() != 0
+         && !isManagementRestServiceRunning(cache)) {
+       try {
+         startHttpService();
+         this.running = true;
+         cache.setRESTServiceRunning(true);
+ 
+         // create region to hold query information (queryId, queryString). Added
+         // for the developer REST APIs
+         RestAgent.createParameterizedQueryRegion();
 -
 -      } catch (RuntimeException e) {
++        
++        if(!StringUtils.isBlank(this.config.SECURITY_CLIENT_AUTHENTICATOR_NAME)){
++          RestAgent.createTokenToAuthzRequestRegion();
++        }
++        
++      } catch (RuntimeException e){
+         logger.debug(e.getMessage(), e);
+       }
+     }
+ 
+   }
+ 
+   public synchronized void stop() {
+     if (this.running) {
+       stopHttpService();
+       if (logger.isDebugEnabled()) {
+         logger.debug("Gemfire Rest Http service stopped");
+       }
+       this.running = false;
+     } else {
+       if (logger.isDebugEnabled()) {
+         logger.debug("Attempt to stop Gemfire Rest Http service which is not running");
+       }
+     }
+   }
 -
++  
++  public synchronized void cleanup(){
++    //close all authzCallback instances currently present in the region;
++    if(!StringUtils.isBlank(this.config.SECURITY_CLIENT_AUTHENTICATOR_NAME)){
++      for(final String key : getAuthzRegion(AUTH_METADATA_REGION).keySet() ){
++        try{
++          closeAuthz(key);
++          
++        }catch(Exception e){
++          logger.error("Cannot close the authzCallback for token {}", key, e);
++        }
++      }
++    }
++  }
++  
+   private Server httpServer;
+   private final String GEMFIRE_VERSION = GemFireVersion.getGemFireVersion();
+   private AgentUtil agentUtil = new AgentUtil(GEMFIRE_VERSION);
+ 
+   private boolean isRunningInTomcat() {
+     return (System.getProperty("catalina.base") != null || System.getProperty("catalina.home") != null);
+   }
+ 
+   // Start HTTP service in embedded mode
+   public void startHttpService() {
+     // TODO: add a check that will make sure that we start HTTP service on
+     // non-manager data node
+     logger.info("Attempting to start HTTP service on port ({}) at bind-address ({})...",
+         this.config.getHttpServicePort(), this.config.getHttpServiceBindAddress());
+ 
+     // Find the developer REST WAR file
+     final String gemfireAPIWar = agentUtil.findWarLocation("geode-web-api");
+     if (gemfireAPIWar == null) {
+       logger.info("Unable to find GemFire Developer REST API WAR file; the Developer REST Interface for GemFire will not be accessible.");
+     }
+ 
+     try {
+       // Check if we're already running inside Tomcat
+       if (isRunningInTomcat()) {
+         logger.warn("Detected presence of catalina system properties. HTTP service will not be started. To enable the GemFire Developer REST API, please deploy the /geode-web-api WAR file in your application server."); 
+       } else if (agentUtil.isWebApplicationAvailable(gemfireAPIWar)) {
+ 
+         final String bindAddress = this.config.getHttpServiceBindAddress();
+         final int port = this.config.getHttpServicePort();
+ 
+         this.httpServer = JettyHelper.initJetty(bindAddress, port,
+             this.config.getHttpServiceSSLEnabled(),
+             this.config.getHttpServiceSSLRequireAuthentication(),
+             this.config.getHttpServiceSSLProtocols(), this.config.getHttpServiceSSLCiphers(),
+             this.config.getHttpServiceSSLProperties());
+ 
+         this.httpServer = JettyHelper.addWebApplication(httpServer, "/gemfire-api", gemfireAPIWar);
+ 
+         if (logger.isDebugEnabled()) {
+           logger.debug("Starting HTTP embedded server on port ({}) at bind-address ({})...",
+               ((ServerConnector) this.httpServer.getConnectors()[0]).getPort(), bindAddress);
+         }
+ 
+         this.httpServer = JettyHelper.startJetty(this.httpServer);
+         logger.info("HTTP service started successfully...!!");
+       }
+     } catch (Exception e) {
+       stopHttpService();// Jetty needs to be stopped even if it has failed to
+                         // start. Some of the threads are left behind even if
+                         // server.start() fails due to an exception
+       throw new RuntimeException("HTTP service failed to start due to " + e.getMessage());
+     }
+   }
+ 
+   private void stopHttpService() {
+     if (this.httpServer != null) {
+       logger.info("Stopping the HTTP service...");
+       try {
+         this.httpServer.stop();
+       } catch (Exception e) {
+         logger.warn("Failed to stop the HTTP service because: {}", e.getMessage(), e);
+       } finally {
+         try {
+           this.httpServer.destroy();
+         } catch (Exception ignore) {
+           logger.error("Failed to properly release resources held by the HTTP service: {}",
+               ignore.getMessage(), ignore);
+         } finally {
+           this.httpServer = null;
+           System.clearProperty("catalina.base");
+           System.clearProperty("catalina.home");
+         }
+       }
+     }
+   }
+ 
+   /**
+    * This method will create a REPLICATED region named _ParameterizedQueries__.
+    * In developer REST APIs, this region will be used to store the queryId and
+    * queryString as a key and value respectively.
+    */
+   public static void createParameterizedQueryRegion() {
+     try {
+       if (logger.isDebugEnabled()) {
+         logger.debug("Starting creation of  __ParameterizedQueries__ region");
+       }
+       GemFireCacheImpl cache = (GemFireCacheImpl) CacheFactory.getAnyInstance();
+       if (cache != null) {
+         // cache.getCacheConfig().setPdxReadSerialized(true);
+         final InternalRegionArguments regionArguments = new InternalRegionArguments();
+         regionArguments.setIsUsedForMetaRegion(true);
+         final AttributesFactory<String, String> attributesFactory = new AttributesFactory<String, String>();
+ 
+         attributesFactory.setConcurrencyChecksEnabled(false);
+         attributesFactory.setDataPolicy(DataPolicy.REPLICATE);
+         attributesFactory.setKeyConstraint(String.class);
+         attributesFactory.setScope(Scope.DISTRIBUTED_NO_ACK);
+         attributesFactory.setStatisticsEnabled(false);
+         attributesFactory.setValueConstraint(String.class);
+ 
+         final RegionAttributes<String, String> regionAttributes = attributesFactory.create();
+ 
+         cache.createVMRegion("__ParameterizedQueries__", regionAttributes, regionArguments);
+         if (logger.isDebugEnabled()) {
+           logger.debug("Successfully created __ParameterizedQueries__ region");
+         }
+       } else {
+         logger.error("Cannot create ParameterizedQueries Region as no cache found!");
+       }
 -    } catch (Exception e) {
++    }
++    catch (Exception e) {
++      if (logger.isDebugEnabled()) {
++        logger.debug("Error creating __ParameterizedQueries__ Region with cause {}",e.getMessage(), e);
++      }
++    }
++  }
++  
++  /**
++   * This method will create a REPLICATED region named _ParameterizedQueries__.
++   * In developer REST APIs, this region will be used to store the queryId and queryString as a key and value respectively.
++   */
++  public static void createTokenToAuthzRequestRegion(){
++    try {
++      if (logger.isDebugEnabled()) {
++        logger.debug("Starting creation of  ({}) region", AUTH_METADATA_REGION);
++      }
++      GemFireCacheImpl cache = (GemFireCacheImpl)CacheFactory.getAnyInstance();
++      if (cache != null) {
++        //cache.getCacheConfig().setPdxReadSerialized(true);
++        final InternalRegionArguments regionArguments = new InternalRegionArguments();
++        regionArguments.setIsUsedForMetaRegion(true);
++        final AttributesFactory<String, List<Object>> attributesFactory = new AttributesFactory<String, List<Object>>();
++
++        attributesFactory.setConcurrencyChecksEnabled(false);
++        attributesFactory.setDataPolicy(DataPolicy.NORMAL);
++        attributesFactory.setKeyConstraint(String.class);
++        attributesFactory.setScope(Scope.LOCAL);
++        attributesFactory.setStatisticsEnabled(false);
++        //attributesFactory.setValueConstraint(AuthorizeRequest.class);
++
++        final RegionAttributes<String, List<Object>> regionAttributes = attributesFactory.create();
++        
++        cache.createVMRegion(AUTH_METADATA_REGION, regionAttributes, regionArguments);
++        if (logger.isDebugEnabled()) {
++          logger.debug("Successfully created ({}) region", AUTH_METADATA_REGION);
++        }
++      }else {
++        logger.error("Cannot create ({}) Region as no cache found!", AUTH_METADATA_REGION);
++      }
++    }
++    catch (Exception e) {
+       if (logger.isDebugEnabled()) {
+         logger.debug("Error creating __ParameterizedQueries__ Region with cause {}",
+             e.getMessage(), e);
+       }
+     }
+   }
+ }


[50/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
Merge branch 'develop' into feature/GEODE-17


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/5c01d5f4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/5c01d5f4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/5c01d5f4

Branch: refs/heads/feature/GEODE-17
Commit: 5c01d5f41eea91eed5f064a6820e286d422ccbb8
Parents: c39f8a5 deaa7aa
Author: Jens Deppe <jd...@pivotal.io>
Authored: Thu Feb 25 12:25:54 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Thu Feb 25 12:25:54 2016 -0800

----------------------------------------------------------------------
 COMPILING.txt                                   |     2 +-
 LICENSE                                         |     6 +
 NOTICE                                          |    13 +
 README.md                                       |    20 +-
 RUNNING.txt                                     |     2 +-
 build.gradle                                    |     5 +-
 docker/Dockerfile                               |     6 +-
 .../gemfire-modules-assembly/build.gradle       |   247 -
 .../release/conf/cache-client.xml               |    40 -
 .../release/conf/cache-peer.xml                 |    48 -
 .../release/conf/cache-server.xml               |    74 -
 .../release/scripts/cacheserver.bat             |   133 -
 .../release/scripts/cacheserver.sh              |    97 -
 .../release/scripts/gemfire.bat                 |    41 -
 .../release/scripts/gemfire.sh                  |    58 -
 .../release/scripts/setenv.properties           |     6 -
 .../release/session/bin/cacheserver.bat         |    56 -
 .../release/session/bin/cacheserver.sh          |    57 -
 .../release/session/bin/gemfire.bat             |    53 -
 .../release/session/bin/gemfire.sh              |    69 -
 .../release/session/bin/modify_war              |   392 -
 .../release/session/bin/setenv.properties       |     6 -
 .../gemfire-cs-tomcat-7/context-fragment.xml    |    15 -
 .../tcserver/gemfire-cs-tomcat-7/modules.env    |     1 -
 .../gemfire-cs-tomcat-8/context-fragment.xml    |    15 -
 .../tcserver/gemfire-cs-tomcat-8/modules.env    |     1 -
 .../gemfire-cs/configuration-prompts.properties |    17 -
 .../tcserver/gemfire-cs/context-fragment.xml    |    13 -
 .../release/tcserver/gemfire-cs/modules.env     |     1 -
 .../tcserver/gemfire-cs/server-fragment.xml     |    12 -
 .../gemfire-p2p-tomcat-7/context-fragment.xml   |    15 -
 .../tcserver/gemfire-p2p-tomcat-7/modules.env   |     1 -
 .../gemfire-p2p-tomcat-8/context-fragment.xml   |    15 -
 .../tcserver/gemfire-p2p-tomcat-8/modules.env   |     1 -
 .../configuration-prompts.properties            |    19 -
 .../tcserver/gemfire-p2p/context-fragment.xml   |    13 -
 .../release/tcserver/gemfire-p2p/modules.env    |     1 -
 .../tcserver/gemfire-p2p/server-fragment.xml    |    14 -
 .../gemfire-modules-hibernate/build.gradle      |    33 -
 .../gemfire/modules/hibernate/EnumType.java     |    58 -
 .../gemfire/modules/hibernate/GemFireCache.java |   238 -
 .../modules/hibernate/GemFireCacheListener.java |    54 -
 .../modules/hibernate/GemFireCacheProvider.java |   200 -
 .../hibernate/GemFireQueryCacheFactory.java     |    39 -
 .../modules/hibernate/GemFireRegionFactory.java |   237 -
 .../modules/hibernate/internal/Access.java      |   257 -
 .../ClientServerRegionFactoryDelegate.java      |   208 -
 .../hibernate/internal/CollectionAccess.java    |   224 -
 .../hibernate/internal/EntityRegionWriter.java  |    87 -
 .../hibernate/internal/EntityVersion.java       |    28 -
 .../hibernate/internal/EntityVersionImpl.java   |    51 -
 .../hibernate/internal/EntityWrapper.java       |    89 -
 .../hibernate/internal/GemFireBaseRegion.java   |   166 -
 .../internal/GemFireCollectionRegion.java       |    59 -
 .../hibernate/internal/GemFireEntityRegion.java |   187 -
 .../internal/GemFireQueryResultsRegion.java     |   113 -
 .../modules/hibernate/internal/KeyWrapper.java  |    93 -
 .../internal/NonStrictReadWriteAccess.java      |    83 -
 .../hibernate/internal/ReadOnlyAccess.java      |    55 -
 .../hibernate/internal/ReadWriteAccess.java     |    36 -
 .../internal/RegionFactoryDelegate.java         |   153 -
 .../hibernate/internal/TransactionalAccess.java |    25 -
 .../com/gemstone/gemfire/modules/Event.java     |    67 -
 .../gemfire/modules/HibernateJUnitTest.java     |   410 -
 .../com/gemstone/gemfire/modules/Owner.java     |   186 -
 .../com/gemstone/gemfire/modules/Person.java    |    72 -
 .../gemstone/gemfire/modules/SecondVMTest.java  |    93 -
 .../com/gemstone/gemfire/modules/Event.hbm.xml  |    32 -
 .../com/gemstone/gemfire/modules/Person.hbm.xml |    36 -
 .../src/test/resources/log4j.properties         |    16 -
 extensions/gemfire-modules-session/build.gradle |    54 -
 .../session/filter/SessionCachingFilter.java    |   652 -
 .../modules/session/filter/SessionListener.java |    51 -
 .../modules/session/installer/Installer.java    |   296 -
 .../session/installer/JarClassLoader.java       |   123 -
 .../session/installer/args/Argument.java        |   275 -
 .../session/installer/args/ArgumentHandler.java |    38 -
 .../installer/args/ArgumentProcessor.java       |   397 -
 .../session/installer/args/ArgumentValues.java  |   222 -
 .../installer/args/URLArgumentHandler.java      |    77 -
 .../installer/args/UnknownArgumentHandler.java  |    36 -
 .../session/installer/args/UsageException.java  |    89 -
 .../internal/common/AbstractSessionCache.java   |   102 -
 .../session/internal/common/CacheProperty.java  |    65 -
 .../common/ClientServerSessionCache.java        |   186 -
 .../internal/common/PeerToPeerSessionCache.java |   184 -
 .../session/internal/common/SessionCache.java   |    68 -
 .../common/SessionExpirationCacheListener.java  |    53 -
 .../session/internal/filter/Constants.java      |    30 -
 .../internal/filter/DummySessionManager.java    |   132 -
 .../internal/filter/GemfireHttpSession.java     |   526 -
 .../filter/GemfireSessionException.java         |    41 -
 .../internal/filter/GemfireSessionManager.java  |   511 -
 .../internal/filter/ListenerEventType.java      |    75 -
 .../session/internal/filter/SessionManager.java |   110 -
 .../AbstractDeltaSessionAttributes.java         |   107 -
 .../attributes/AbstractSessionAttributes.java   |   188 -
 .../internal/filter/attributes/DeltaEvent.java  |   119 -
 .../DeltaQueuedSessionAttributes.java           |    94 -
 .../attributes/DeltaSessionAttributes.java      |    75 -
 .../attributes/ImmediateSessionAttributes.java  |    68 -
 .../attributes/QueuedSessionAttributes.java     |    65 -
 .../filter/attributes/SessionAttributes.java    |   120 -
 .../filter/util/NamedThreadFactory.java         |    68 -
 .../filter/util/ThreadLocalSession.java         |    39 -
 .../internal/filter/util/TypeAwareMap.java      |    50 -
 .../session/internal/jmx/SessionStatistics.java |    78 -
 .../internal/jmx/SessionStatisticsMXBean.java   |    30 -
 .../internal/filter/AbstractListener.java       |    57 -
 .../session/internal/filter/BasicServlet.java   |    52 -
 .../session/internal/filter/Callback.java       |    30 -
 .../internal/filter/CallbackServlet.java        |    91 -
 .../session/internal/filter/CommonTests.java    |   582 -
 .../HttpSessionAttributeListenerImpl.java       |    46 -
 .../filter/HttpSessionBindingListenerImpl.java  |    42 -
 .../filter/HttpSessionListenerImpl.java         |    41 -
 .../filter/HttpSessionListenerImpl2.java        |    43 -
 .../internal/filter/MyServletTester.java        |    38 -
 .../internal/filter/RendezvousManager.java      |    46 -
 .../ServletRequestAttributeListenerImpl.java    |    45 -
 .../filter/ServletRequestListenerImpl.java      |    36 -
 .../SessionReplicationIntegrationJUnitTest.java |  1558 --
 .../filter/SessionReplicationJUnitTest.java     |    53 -
 .../SessionReplicationLocalCacheJUnitTest.java  |    54 -
 .../session/junit/ChildFirstClassLoader.java    |    86 -
 .../modules/session/junit/NamedRunner.java      |   120 -
 .../session/junit/PerTestClassLoaderRunner.java |   283 -
 .../junit/SeparateClassloaderTestRunner.java    |    56 -
 .../src/test/resources/log4j.properties         |    12 -
 extensions/gemfire-modules-tomcat7/build.gradle |    54 -
 .../catalina/Tomcat7DeltaSessionManager.java    |   112 -
 .../session/Tomcat7SessionsJUnitTest.java       |    35 -
 .../test/resources/tomcat/conf/tomcat-users.xml |     3 -
 .../src/test/resources/tomcat/logs/.gitkeep     |     0
 .../src/test/resources/tomcat/temp/.gitkeep     |     0
 extensions/gemfire-modules/build.gradle         |    39 -
 .../gatewaydelta/AbstractGatewayDeltaEvent.java |    64 -
 .../modules/gatewaydelta/GatewayDelta.java      |    26 -
 .../gatewaydelta/GatewayDeltaCreateEvent.java   |    88 -
 .../gatewaydelta/GatewayDeltaDestroyEvent.java  |    82 -
 .../modules/gatewaydelta/GatewayDeltaEvent.java |    24 -
 ...tewayDeltaEventApplicationCacheListener.java |    67 -
 .../GatewayDeltaForwarderCacheListener.java     |   197 -
 .../session/bootstrap/AbstractCache.java        |   398 -
 .../session/bootstrap/ClientServerCache.java    |    74 -
 .../session/bootstrap/LifecycleTypeAdapter.java |    59 -
 .../session/bootstrap/PeerToPeerCache.java      |    85 -
 .../AbstractCacheLifecycleListener.java         |    68 -
 .../session/catalina/AbstractSessionCache.java  |   113 -
 .../ClientServerCacheLifecycleListener.java     |    26 -
 .../catalina/ClientServerSessionCache.java      |   252 -
 .../session/catalina/CommitSessionValve.java    |    68 -
 .../modules/session/catalina/DeltaSession.java  |   597 -
 .../session/catalina/DeltaSessionFacade.java    |    49 -
 .../session/catalina/DeltaSessionManager.java   |   992 -
 .../session/catalina/JvmRouteBinderValve.java   |   108 -
 .../session/catalina/LocalStrings.properties    |    16 -
 .../PeerToPeerCacheLifecycleListener.java       |    29 -
 .../catalina/PeerToPeerSessionCache.java        |   215 -
 .../modules/session/catalina/SessionCache.java  |    64 -
 .../session/catalina/SessionManager.java        |    48 -
 .../catalina/Tomcat6DeltaSessionManager.java    |    98 -
 .../callback/LocalSessionCacheLoader.java       |    45 -
 .../callback/LocalSessionCacheWriter.java       |    59 -
 .../SessionExpirationCacheListener.java         |    77 -
 .../internal/DeltaSessionAttributeEvent.java    |    25 -
 .../DeltaSessionAttributeEventBatch.java        |    88 -
 .../DeltaSessionDestroyAttributeEvent.java      |    73 -
 .../internal/DeltaSessionStatistics.java        |    88 -
 .../DeltaSessionUpdateAttributeEvent.java       |    83 -
 .../gemstone/gemfire/modules/util/Banner.java   |    59 -
 .../modules/util/BootstrappingFunction.java     |   188 -
 .../util/ClassLoaderObjectInputStream.java      |    40 -
 .../gemfire/modules/util/ContextMapper.java     |    53 -
 .../modules/util/CreateRegionFunction.java      |   245 -
 .../modules/util/DebugCacheListener.java        |    72 -
 .../gemfire/modules/util/ModuleStatistics.java  |    91 -
 .../modules/util/RegionConfiguration.java       |   308 -
 .../util/RegionConfigurationCacheListener.java  |   114 -
 .../gemfire/modules/util/RegionHelper.java      |   241 -
 .../modules/util/RegionSizeFunction.java        |    56 -
 .../gemfire/modules/util/RegionStatus.java      |    21 -
 .../modules/util/ResourceManagerValidator.java  |   166 -
 .../modules/util/SessionCustomExpiry.java       |    64 -
 .../TouchPartitionedRegionEntriesFunction.java  |   100 -
 .../TouchReplicatedRegionEntriesFunction.java   |    97 -
 .../main/resources/modules-version.properties   |     1 -
 .../gemfire/modules/session/Callback.java       |    30 -
 .../gemfire/modules/session/CommandServlet.java |    91 -
 .../gemfire/modules/session/EmbeddedTomcat.java |   193 -
 .../gemfire/modules/session/QueryCommand.java   |    34 -
 .../modules/session/TestSessionsBase.java       |   493 -
 .../session/Tomcat6SessionsJUnitTest.java       |    35 -
 .../com/gemstone/gemfire/modules/Event.hbm.xml  |    16 -
 .../com/gemstone/gemfire/modules/Person.hbm.xml |    21 -
 .../src/test/resources/log4j.properties         |    16 -
 .../test/resources/tomcat/conf/tomcat-users.xml |     3 -
 .../src/test/resources/tomcat/logs/.gitkeep     |     0
 .../src/test/resources/tomcat/temp/.gitkeep     |     0
 extensions/geode-modules-assembly/build.gradle  |   247 +
 .../release/conf/cache-client.xml               |    40 +
 .../release/conf/cache-peer.xml                 |    48 +
 .../release/conf/cache-server.xml               |    74 +
 .../release/scripts/cacheserver.bat             |   133 +
 .../release/scripts/cacheserver.sh              |    97 +
 .../release/scripts/gemfire.bat                 |    41 +
 .../release/scripts/gemfire.sh                  |    58 +
 .../release/scripts/setenv.properties           |     6 +
 .../release/session/bin/cacheserver.bat         |    56 +
 .../release/session/bin/cacheserver.sh          |    57 +
 .../release/session/bin/gemfire.bat             |    53 +
 .../release/session/bin/gemfire.sh              |    69 +
 .../release/session/bin/modify_war              |   392 +
 .../release/session/bin/setenv.properties       |     6 +
 .../gemfire-cs-tomcat-7/context-fragment.xml    |    15 +
 .../tcserver/gemfire-cs-tomcat-7/modules.env    |     1 +
 .../gemfire-cs-tomcat-8/context-fragment.xml    |    15 +
 .../tcserver/gemfire-cs-tomcat-8/modules.env    |     1 +
 .../gemfire-cs/configuration-prompts.properties |    17 +
 .../tcserver/gemfire-cs/context-fragment.xml    |    13 +
 .../release/tcserver/gemfire-cs/modules.env     |     1 +
 .../tcserver/gemfire-cs/server-fragment.xml     |    12 +
 .../gemfire-p2p-tomcat-7/context-fragment.xml   |    15 +
 .../tcserver/gemfire-p2p-tomcat-7/modules.env   |     1 +
 .../gemfire-p2p-tomcat-8/context-fragment.xml   |    15 +
 .../tcserver/gemfire-p2p-tomcat-8/modules.env   |     1 +
 .../configuration-prompts.properties            |    19 +
 .../tcserver/gemfire-p2p/context-fragment.xml   |    13 +
 .../release/tcserver/gemfire-p2p/modules.env    |     1 +
 .../tcserver/gemfire-p2p/server-fragment.xml    |    14 +
 extensions/geode-modules-hibernate/build.gradle |    33 +
 .../gemfire/modules/hibernate/EnumType.java     |    58 +
 .../gemfire/modules/hibernate/GemFireCache.java |   238 +
 .../modules/hibernate/GemFireCacheListener.java |    54 +
 .../modules/hibernate/GemFireCacheProvider.java |   200 +
 .../hibernate/GemFireQueryCacheFactory.java     |    39 +
 .../modules/hibernate/GemFireRegionFactory.java |   237 +
 .../modules/hibernate/internal/Access.java      |   257 +
 .../ClientServerRegionFactoryDelegate.java      |   208 +
 .../hibernate/internal/CollectionAccess.java    |   224 +
 .../hibernate/internal/EntityRegionWriter.java  |    87 +
 .../hibernate/internal/EntityVersion.java       |    28 +
 .../hibernate/internal/EntityVersionImpl.java   |    51 +
 .../hibernate/internal/EntityWrapper.java       |    89 +
 .../hibernate/internal/GemFireBaseRegion.java   |   166 +
 .../internal/GemFireCollectionRegion.java       |    59 +
 .../hibernate/internal/GemFireEntityRegion.java |   187 +
 .../internal/GemFireQueryResultsRegion.java     |   113 +
 .../modules/hibernate/internal/KeyWrapper.java  |    93 +
 .../internal/NonStrictReadWriteAccess.java      |    83 +
 .../hibernate/internal/ReadOnlyAccess.java      |    55 +
 .../hibernate/internal/ReadWriteAccess.java     |    36 +
 .../internal/RegionFactoryDelegate.java         |   153 +
 .../hibernate/internal/TransactionalAccess.java |    25 +
 .../com/gemstone/gemfire/modules/Event.java     |    67 +
 .../gemfire/modules/HibernateJUnitTest.java     |   410 +
 .../com/gemstone/gemfire/modules/Owner.java     |   186 +
 .../com/gemstone/gemfire/modules/Person.java    |    72 +
 .../gemstone/gemfire/modules/SecondVMTest.java  |    93 +
 .../com/gemstone/gemfire/modules/Event.hbm.xml  |    32 +
 .../com/gemstone/gemfire/modules/Person.hbm.xml |    36 +
 .../src/test/resources/log4j.properties         |    16 +
 extensions/geode-modules-session/build.gradle   |    54 +
 .../session/filter/SessionCachingFilter.java    |   652 +
 .../modules/session/filter/SessionListener.java |    51 +
 .../modules/session/installer/Installer.java    |   296 +
 .../session/installer/JarClassLoader.java       |   123 +
 .../session/installer/args/Argument.java        |   275 +
 .../session/installer/args/ArgumentHandler.java |    38 +
 .../installer/args/ArgumentProcessor.java       |   397 +
 .../session/installer/args/ArgumentValues.java  |   222 +
 .../installer/args/URLArgumentHandler.java      |    77 +
 .../installer/args/UnknownArgumentHandler.java  |    36 +
 .../session/installer/args/UsageException.java  |    89 +
 .../internal/common/AbstractSessionCache.java   |   102 +
 .../session/internal/common/CacheProperty.java  |    65 +
 .../common/ClientServerSessionCache.java        |   186 +
 .../internal/common/PeerToPeerSessionCache.java |   184 +
 .../session/internal/common/SessionCache.java   |    68 +
 .../common/SessionExpirationCacheListener.java  |    53 +
 .../session/internal/filter/Constants.java      |    30 +
 .../internal/filter/DummySessionManager.java    |   132 +
 .../internal/filter/GemfireHttpSession.java     |   526 +
 .../filter/GemfireSessionException.java         |    41 +
 .../internal/filter/GemfireSessionManager.java  |   511 +
 .../internal/filter/ListenerEventType.java      |    75 +
 .../session/internal/filter/SessionManager.java |   110 +
 .../AbstractDeltaSessionAttributes.java         |   107 +
 .../attributes/AbstractSessionAttributes.java   |   188 +
 .../internal/filter/attributes/DeltaEvent.java  |   119 +
 .../DeltaQueuedSessionAttributes.java           |    94 +
 .../attributes/DeltaSessionAttributes.java      |    75 +
 .../attributes/ImmediateSessionAttributes.java  |    68 +
 .../attributes/QueuedSessionAttributes.java     |    65 +
 .../filter/attributes/SessionAttributes.java    |   120 +
 .../filter/util/NamedThreadFactory.java         |    68 +
 .../filter/util/ThreadLocalSession.java         |    39 +
 .../internal/filter/util/TypeAwareMap.java      |    50 +
 .../session/internal/jmx/SessionStatistics.java |    78 +
 .../internal/jmx/SessionStatisticsMXBean.java   |    30 +
 .../internal/filter/AbstractListener.java       |    57 +
 .../session/internal/filter/BasicServlet.java   |    52 +
 .../session/internal/filter/Callback.java       |    30 +
 .../internal/filter/CallbackServlet.java        |    91 +
 .../session/internal/filter/CommonTests.java    |   582 +
 .../HttpSessionAttributeListenerImpl.java       |    46 +
 .../filter/HttpSessionBindingListenerImpl.java  |    42 +
 .../filter/HttpSessionListenerImpl.java         |    41 +
 .../filter/HttpSessionListenerImpl2.java        |    43 +
 .../internal/filter/MyServletTester.java        |    38 +
 .../internal/filter/RendezvousManager.java      |    46 +
 .../ServletRequestAttributeListenerImpl.java    |    45 +
 .../filter/ServletRequestListenerImpl.java      |    36 +
 .../SessionReplicationIntegrationJUnitTest.java |  1558 ++
 .../filter/SessionReplicationJUnitTest.java     |    53 +
 .../SessionReplicationLocalCacheJUnitTest.java  |    54 +
 .../session/junit/ChildFirstClassLoader.java    |    86 +
 .../modules/session/junit/NamedRunner.java      |   120 +
 .../session/junit/PerTestClassLoaderRunner.java |   283 +
 .../junit/SeparateClassloaderTestRunner.java    |    56 +
 .../src/test/resources/log4j.properties         |    12 +
 extensions/geode-modules-tomcat7/build.gradle   |    54 +
 .../catalina/Tomcat7DeltaSessionManager.java    |   112 +
 .../session/Tomcat7SessionsJUnitTest.java       |    35 +
 .../test/resources/tomcat/conf/tomcat-users.xml |     3 +
 .../src/test/resources/tomcat/logs/.gitkeep     |     0
 .../src/test/resources/tomcat/temp/.gitkeep     |     0
 extensions/geode-modules/build.gradle           |    39 +
 .../gatewaydelta/AbstractGatewayDeltaEvent.java |    64 +
 .../modules/gatewaydelta/GatewayDelta.java      |    26 +
 .../gatewaydelta/GatewayDeltaCreateEvent.java   |    88 +
 .../gatewaydelta/GatewayDeltaDestroyEvent.java  |    82 +
 .../modules/gatewaydelta/GatewayDeltaEvent.java |    24 +
 ...tewayDeltaEventApplicationCacheListener.java |    67 +
 .../GatewayDeltaForwarderCacheListener.java     |   197 +
 .../session/bootstrap/AbstractCache.java        |   398 +
 .../session/bootstrap/ClientServerCache.java    |    74 +
 .../session/bootstrap/LifecycleTypeAdapter.java |    59 +
 .../session/bootstrap/PeerToPeerCache.java      |    85 +
 .../AbstractCacheLifecycleListener.java         |    68 +
 .../session/catalina/AbstractSessionCache.java  |   113 +
 .../ClientServerCacheLifecycleListener.java     |    26 +
 .../catalina/ClientServerSessionCache.java      |   252 +
 .../session/catalina/CommitSessionValve.java    |    68 +
 .../modules/session/catalina/DeltaSession.java  |   597 +
 .../session/catalina/DeltaSessionFacade.java    |    49 +
 .../session/catalina/DeltaSessionManager.java   |   992 +
 .../session/catalina/JvmRouteBinderValve.java   |   108 +
 .../session/catalina/LocalStrings.properties    |    16 +
 .../PeerToPeerCacheLifecycleListener.java       |    29 +
 .../catalina/PeerToPeerSessionCache.java        |   215 +
 .../modules/session/catalina/SessionCache.java  |    64 +
 .../session/catalina/SessionManager.java        |    48 +
 .../catalina/Tomcat6DeltaSessionManager.java    |    98 +
 .../callback/LocalSessionCacheLoader.java       |    45 +
 .../callback/LocalSessionCacheWriter.java       |    59 +
 .../SessionExpirationCacheListener.java         |    77 +
 .../internal/DeltaSessionAttributeEvent.java    |    25 +
 .../DeltaSessionAttributeEventBatch.java        |    88 +
 .../DeltaSessionDestroyAttributeEvent.java      |    73 +
 .../internal/DeltaSessionStatistics.java        |    88 +
 .../DeltaSessionUpdateAttributeEvent.java       |    83 +
 .../gemstone/gemfire/modules/util/Banner.java   |    59 +
 .../modules/util/BootstrappingFunction.java     |   188 +
 .../util/ClassLoaderObjectInputStream.java      |    40 +
 .../gemfire/modules/util/ContextMapper.java     |    53 +
 .../modules/util/CreateRegionFunction.java      |   245 +
 .../modules/util/DebugCacheListener.java        |    72 +
 .../gemfire/modules/util/ModuleStatistics.java  |    91 +
 .../modules/util/RegionConfiguration.java       |   308 +
 .../util/RegionConfigurationCacheListener.java  |   114 +
 .../gemfire/modules/util/RegionHelper.java      |   241 +
 .../modules/util/RegionSizeFunction.java        |    56 +
 .../gemfire/modules/util/RegionStatus.java      |    21 +
 .../modules/util/ResourceManagerValidator.java  |   166 +
 .../modules/util/SessionCustomExpiry.java       |    64 +
 .../TouchPartitionedRegionEntriesFunction.java  |   100 +
 .../TouchReplicatedRegionEntriesFunction.java   |    97 +
 .../main/resources/modules-version.properties   |     1 +
 .../gemfire/modules/session/Callback.java       |    30 +
 .../gemfire/modules/session/CommandServlet.java |    91 +
 .../gemfire/modules/session/EmbeddedTomcat.java |   193 +
 .../gemfire/modules/session/QueryCommand.java   |    34 +
 .../modules/session/TestSessionsBase.java       |   493 +
 .../session/Tomcat6SessionsJUnitTest.java       |    35 +
 .../com/gemstone/gemfire/modules/Event.hbm.xml  |    16 +
 .../com/gemstone/gemfire/modules/Person.hbm.xml |    21 +
 .../src/test/resources/log4j.properties         |    16 +
 .../test/resources/tomcat/conf/tomcat-users.xml |     3 +
 .../src/test/resources/tomcat/logs/.gitkeep     |     0
 .../src/test/resources/tomcat/temp/.gitkeep     |     0
 gemfire-assembly/build.gradle                   |   342 -
 gemfire-assembly/src/main/dist/DISCLAIMER       |     6 -
 gemfire-assembly/src/main/dist/LICENSE          |   429 -
 gemfire-assembly/src/main/dist/NOTICE           |   467 -
 gemfire-assembly/src/main/dist/bin/gfsh         |   152 -
 .../src/main/dist/bin/gfsh-completion.bash      |   103 -
 gemfire-assembly/src/main/dist/bin/gfsh.bat     |    87 -
 .../LocatorLauncherAssemblyJUnitTest.java       |   157 -
 .../management/internal/AgentUtilJUnitTest.java |   105 -
 .../LauncherLifecycleCommandsDUnitTest.java     |  1007 -
 .../LauncherLifecycleCommandsJUnitTest.java     |   625 -
 .../SharedConfigurationEndToEndDUnitTest.java   |   450 -
 gemfire-common/build.gradle                     |    20 -
 .../gemfire/annotations/Experimental.java       |    56 -
 .../annotations/ExperimentalJUnitTest.java      |   199 -
 .../ClassInExperimentalPackage.java             |    27 -
 .../experimentalpackage/package-info.java       |    27 -
 .../ClassInNonExperimentalPackage.java          |    27 -
 .../nonexperimentalpackage/package-info.java    |    24 -
 gemfire-core/build.gradle                       |   217 -
 .../internal/ra/GFConnectionFactoryImpl.java    |    66 -
 .../gemfire/internal/ra/GFConnectionImpl.java   |    71 -
 .../internal/ra/spi/JCALocalTransaction.java    |   236 -
 .../internal/ra/spi/JCAManagedConnection.java   |   299 -
 .../ra/spi/JCAManagedConnectionFactory.java     |   145 -
 .../ra/spi/JCAManagedConnectionMetaData.java    |    67 -
 gemfire-core/src/jca/ra.xml                     |    52 -
 .../com/gemstone/gemfire/CancelCriterion.java   |   109 -
 .../com/gemstone/gemfire/CancelException.java   |    64 -
 .../gemstone/gemfire/CanonicalInstantiator.java |    86 -
 .../com/gemstone/gemfire/CopyException.java     |    67 -
 .../java/com/gemstone/gemfire/CopyHelper.java   |   268 -
 .../com/gemstone/gemfire/DataSerializable.java  |   140 -
 .../com/gemstone/gemfire/DataSerializer.java    |  3565 ----
 .../main/java/com/gemstone/gemfire/Delta.java   |    66 -
 .../gemfire/DeltaSerializationException.java    |    59 -
 .../gemfire/ForcedDisconnectException.java      |    41 -
 .../gemstone/gemfire/GemFireCacheException.java |    50 -
 .../gemfire/GemFireCheckedException.java        |    90 -
 .../gemfire/GemFireConfigException.java         |    42 -
 .../com/gemstone/gemfire/GemFireException.java  |   149 -
 .../gemstone/gemfire/GemFireIOException.java    |    41 -
 .../gemstone/gemfire/GemFireRethrowable.java    |    47 -
 .../gemfire/IncompatibleSystemException.java    |    38 -
 .../java/com/gemstone/gemfire/Instantiator.java |   315 -
 .../gemstone/gemfire/InternalGemFireError.java  |   154 -
 .../gemfire/InternalGemFireException.java       |    56 -
 .../gemstone/gemfire/InvalidDeltaException.java |    63 -
 .../gemstone/gemfire/InvalidValueException.java |    42 -
 .../gemfire/InvalidVersionException.java        |    25 -
 .../com/gemstone/gemfire/LicenseException.java  |    54 -
 .../java/com/gemstone/gemfire/LogWriter.java    |   301 -
 .../com/gemstone/gemfire/NoSystemException.java |    48 -
 .../gemfire/OutOfOffHeapMemoryException.java    |    45 -
 .../gemfire/SerializationException.java         |    45 -
 .../gemstone/gemfire/StatisticDescriptor.java   |    82 -
 .../java/com/gemstone/gemfire/Statistics.java   |   446 -
 .../com/gemstone/gemfire/StatisticsFactory.java |   154 -
 .../com/gemstone/gemfire/StatisticsType.java    |    72 -
 .../gemstone/gemfire/StatisticsTypeFactory.java |   197 -
 .../gemfire/SystemConnectException.java         |    42 -
 .../com/gemstone/gemfire/SystemFailure.java     |  1239 --
 .../gemfire/SystemIsRunningException.java       |    46 -
 .../gemfire/ThreadInterruptedException.java     |    31 -
 .../com/gemstone/gemfire/ToDataException.java   |    42 -
 .../gemfire/UncreatedSystemException.java       |    48 -
 .../gemstone/gemfire/UnmodifiableException.java |    36 -
 .../gemfire/UnstartedSystemException.java       |    49 -
 .../com/gemstone/gemfire/admin/AdminConfig.java |   157 -
 .../gemfire/admin/AdminDistributedSystem.java   |   478 -
 .../admin/AdminDistributedSystemFactory.java    |   163 -
 .../gemstone/gemfire/admin/AdminException.java  |    90 -
 .../gemfire/admin/AdminXmlException.java        |    48 -
 .../java/com/gemstone/gemfire/admin/Alert.java  |    56 -
 .../com/gemstone/gemfire/admin/AlertLevel.java  |   174 -
 .../gemstone/gemfire/admin/AlertListener.java   |    30 -
 .../gemstone/gemfire/admin/BackupStatus.java    |    49 -
 .../admin/CacheDoesNotExistException.java       |    87 -
 .../gemfire/admin/CacheHealthConfig.java        |   157 -
 .../com/gemstone/gemfire/admin/CacheServer.java |    46 -
 .../gemfire/admin/CacheServerConfig.java        |    55 -
 .../com/gemstone/gemfire/admin/CacheVm.java     |    38 -
 .../gemstone/gemfire/admin/CacheVmConfig.java   |    54 -
 .../gemfire/admin/ConfigurationParameter.java   |    74 -
 .../gemfire/admin/DistributedSystemConfig.java  |   682 -
 .../admin/DistributedSystemHealthConfig.java    |    77 -
 .../gemfire/admin/DistributionLocator.java      |    47 -
 .../admin/DistributionLocatorConfig.java        |    90 -
 .../gemstone/gemfire/admin/GemFireHealth.java   |   234 -
 .../gemfire/admin/GemFireHealthConfig.java      |    58 -
 .../gemfire/admin/GemFireMemberStatus.java      |   709 -
 .../gemstone/gemfire/admin/ManagedEntity.java   |   125 -
 .../gemfire/admin/ManagedEntityConfig.java      |   100 -
 .../gemfire/admin/MemberHealthConfig.java       |   142 -
 .../admin/OperationCancelledException.java      |    48 -
 .../gemfire/admin/RegionNotFoundException.java  |    39 -
 .../gemfire/admin/RegionSubRegionSnapshot.java  |   193 -
 .../gemfire/admin/RuntimeAdminException.java    |    50 -
 .../com/gemstone/gemfire/admin/Statistic.java   |    66 -
 .../gemfire/admin/StatisticResource.java        |    86 -
 .../gemstone/gemfire/admin/SystemMember.java    |   148 -
 .../gemfire/admin/SystemMemberBridgeServer.java |   309 -
 .../gemfire/admin/SystemMemberCache.java        |   205 -
 .../gemfire/admin/SystemMemberCacheEvent.java   |    34 -
 .../admin/SystemMemberCacheListener.java        |    73 -
 .../gemfire/admin/SystemMemberCacheServer.java  |   309 -
 .../gemfire/admin/SystemMemberRegion.java       |   322 -
 .../gemfire/admin/SystemMemberRegionEvent.java  |    33 -
 .../gemfire/admin/SystemMemberType.java         |   146 -
 .../gemfire/admin/SystemMembershipEvent.java    |    41 -
 .../gemfire/admin/SystemMembershipListener.java |    62 -
 .../UnmodifiableConfigurationException.java     |    89 -
 .../admin/internal/AbstractHealthEvaluator.java |   185 -
 .../internal/AdminDistributedSystemImpl.java    |  2503 ---
 .../admin/internal/BackupStatusImpl.java        |    62 -
 .../admin/internal/CacheHealthConfigImpl.java   |    92 -
 .../admin/internal/CacheHealthEvaluator.java    |   324 -
 .../admin/internal/CacheServerConfigImpl.java   |   136 -
 .../gemfire/admin/internal/CacheServerImpl.java |   199 -
 .../internal/ConfigurationParameterImpl.java    |   281 -
 .../ConfigurationParameterListener.java         |    35 -
 .../DisabledManagedEntityController.java        |    92 -
 .../internal/DistributedSystemConfigImpl.java   |  1103 --
 .../DistributedSystemHealthConfigImpl.java      |    59 -
 .../DistributedSystemHealthEvaluator.java       |   172 -
 .../DistributedSystemHealthMonitor.java         |   437 -
 .../internal/DistributionLocatorConfigImpl.java |   192 -
 .../admin/internal/DistributionLocatorImpl.java |   331 -
 .../EnabledManagedEntityController.java         |   412 -
 .../admin/internal/FinishBackupRequest.java     |   168 -
 .../admin/internal/FinishBackupResponse.java    |    79 -
 .../admin/internal/FlushToDiskRequest.java      |    98 -
 .../admin/internal/FlushToDiskResponse.java     |    46 -
 .../admin/internal/GemFireHealthConfigImpl.java |    84 -
 .../admin/internal/GemFireHealthEvaluator.java  |   188 -
 .../admin/internal/GemFireHealthImpl.java       |   536 -
 .../gemfire/admin/internal/InetAddressUtil.java |   209 -
 .../admin/internal/InternalManagedEntity.java   |   106 -
 .../gemfire/admin/internal/LogCollator.java     |   137 -
 .../admin/internal/ManagedEntityConfigImpl.java |   263 -
 .../admin/internal/ManagedEntityConfigXml.java  |   170 -
 .../ManagedEntityConfigXmlGenerator.java        |   386 -
 .../internal/ManagedEntityConfigXmlParser.java  |   623 -
 .../admin/internal/ManagedEntityController.java |    74 -
 .../ManagedEntityControllerFactory.java         |    61 -
 .../admin/internal/ManagedSystemMemberImpl.java |   271 -
 .../admin/internal/MemberHealthConfigImpl.java  |    96 -
 .../admin/internal/MemberHealthEvaluator.java   |   242 -
 .../admin/internal/PrepareBackupRequest.java    |   133 -
 .../admin/internal/PrepareBackupResponse.java   |    82 -
 .../gemfire/admin/internal/StatisticImpl.java   |    97 -
 .../admin/internal/StatisticResourceImpl.java   |   182 -
 .../internal/SystemMemberBridgeServerImpl.java  |   234 -
 .../internal/SystemMemberCacheEventImpl.java    |    61 -
 .../SystemMemberCacheEventProcessor.java        |   148 -
 .../admin/internal/SystemMemberCacheImpl.java   |   313 -
 .../admin/internal/SystemMemberImpl.java        |   520 -
 .../internal/SystemMemberRegionEventImpl.java   |    63 -
 .../admin/internal/SystemMemberRegionImpl.java  |   381 -
 .../internal/SystemMembershipEventImpl.java     |    71 -
 .../internal/doc-files/config-hierarchy.fig     |   156 -
 .../admin/internal/doc-files/health-classes.fig |   233 -
 .../admin/internal/doc-files/health-classes.gif |   Bin 8973 -> 0 bytes
 .../gemfire/admin/internal/package.html         |    53 -
 .../com/gemstone/gemfire/admin/jmx/Agent.java   |   165 -
 .../gemstone/gemfire/admin/jmx/AgentConfig.java |   884 -
 .../gemfire/admin/jmx/AgentFactory.java         |    52 -
 .../internal/AdminDistributedSystemJmxImpl.java |  2341 ---
 .../admin/jmx/internal/AgentConfigImpl.java     |  1856 --
 .../gemfire/admin/jmx/internal/AgentImpl.java   |  1622 --
 .../admin/jmx/internal/AgentLauncher.java       |   889 -
 .../admin/jmx/internal/CacheServerJmxImpl.java  |   642 -
 .../admin/jmx/internal/ConfigAttributeInfo.java |    77 -
 .../internal/ConfigurationParameterJmxImpl.java |   170 -
 .../DistributedSystemHealthConfigJmxImpl.java   |   108 -
 .../internal/DistributionLocatorJmxImpl.java    |   186 -
 .../admin/jmx/internal/DynamicManagedBean.java  |   142 -
 .../internal/GemFireHealthConfigJmxImpl.java    |   223 -
 .../jmx/internal/GemFireHealthJmxImpl.java      |   179 -
 .../admin/jmx/internal/GenerateMBeanHTML.java   |   514 -
 .../gemfire/admin/jmx/internal/MBeanUtil.java   |   769 -
 .../admin/jmx/internal/MX4JModelMBean.java      |  1255 --
 .../jmx/internal/MX4JServerSocketFactory.java   |   160 -
 .../gemfire/admin/jmx/internal/MailManager.java |   333 -
 .../admin/jmx/internal/ManagedResource.java     |    78 -
 .../admin/jmx/internal/ManagedResourceType.java |   210 -
 .../jmx/internal/MemberInfoWithStatsMBean.java  |  1388 --
 .../admin/jmx/internal/RMIRegistryService.java  |   239 -
 .../jmx/internal/RMIRegistryServiceMBean.java   |    85 -
 .../jmx/internal/RefreshNotificationType.java   |   133 -
 .../jmx/internal/StatAlertNotification.java     |   162 -
 .../jmx/internal/StatAlertsAggregator.java      |   125 -
 .../jmx/internal/StatisticAttributeInfo.java    |    79 -
 .../jmx/internal/StatisticResourceJmxImpl.java  |   361 -
 .../SystemMemberBridgeServerJmxImpl.java        |   135 -
 .../jmx/internal/SystemMemberCacheJmxImpl.java  |   475 -
 .../admin/jmx/internal/SystemMemberJmx.java     |   508 -
 .../admin/jmx/internal/SystemMemberJmxImpl.java |   593 -
 .../jmx/internal/SystemMemberRegionJmxImpl.java |   140 -
 .../gemfire/admin/jmx/internal/package.html     |   166 -
 .../com/gemstone/gemfire/admin/jmx/package.html |    28 -
 .../com/gemstone/gemfire/admin/package.html     |    78 -
 .../gemfire/cache/AttributesFactory.java        |  2056 --
 .../gemfire/cache/AttributesMutator.java        |   224 -
 .../java/com/gemstone/gemfire/cache/Cache.java  |   457 -
 .../gemstone/gemfire/cache/CacheCallback.java   |    47 -
 .../gemfire/cache/CacheClosedException.java     |    77 -
 .../com/gemstone/gemfire/cache/CacheEvent.java  |   110 -
 .../gemstone/gemfire/cache/CacheException.java  |    70 -
 .../gemfire/cache/CacheExistsException.java     |    66 -
 .../gemstone/gemfire/cache/CacheFactory.java    |   392 -
 .../gemstone/gemfire/cache/CacheListener.java   |   174 -
 .../com/gemstone/gemfire/cache/CacheLoader.java |    64 -
 .../gemfire/cache/CacheLoaderException.java     |    66 -
 .../gemfire/cache/CacheRuntimeException.java    |    81 -
 .../gemstone/gemfire/cache/CacheStatistics.java |   130 -
 .../gemfire/cache/CacheTransactionManager.java  |   350 -
 .../com/gemstone/gemfire/cache/CacheWriter.java |   151 -
 .../gemfire/cache/CacheWriterException.java     |    70 -
 .../gemfire/cache/CacheXmlException.java        |    50 -
 .../gemstone/gemfire/cache/ClientSession.java   |   198 -
 .../gemfire/cache/CommitConflictException.java  |    57 -
 .../cache/CommitDistributionException.java      |    81 -
 .../cache/CommitIncompleteException.java        |    31 -
 .../gemfire/cache/CustomEvictionAttributes.java |    79 -
 .../gemstone/gemfire/cache/CustomExpiry.java    |    42 -
 .../com/gemstone/gemfire/cache/DataPolicy.java  |   266 -
 .../com/gemstone/gemfire/cache/Declarable.java  |    77 -
 .../gemfire/cache/DiskAccessException.java      |   141 -
 .../com/gemstone/gemfire/cache/DiskStore.java   |   216 -
 .../gemfire/cache/DiskStoreFactory.java         |   243 -
 .../gemfire/cache/DiskWriteAttributes.java      |   108 -
 .../cache/DiskWriteAttributesFactory.java       |   263 -
 .../DuplicatePrimaryPartitionException.java     |    65 -
 .../gemfire/cache/DynamicRegionFactory.java     |  1108 --
 .../gemfire/cache/DynamicRegionListener.java    |    70 -
 .../gemfire/cache/EntryDestroyedException.java  |    61 -
 .../com/gemstone/gemfire/cache/EntryEvent.java  |   167 -
 .../gemfire/cache/EntryExistsException.java     |    62 -
 .../gemfire/cache/EntryNotFoundException.java   |    51 -
 .../gemfire/cache/EntryNotFoundInRegion.java    |    50 -
 .../gemstone/gemfire/cache/EntryOperation.java  |    86 -
 .../gemstone/gemfire/cache/EvictionAction.java  |   115 -
 .../gemfire/cache/EvictionAlgorithm.java        |   151 -
 .../gemfire/cache/EvictionAttributes.java       |   494 -
 .../cache/EvictionAttributesMutator.java        |    40 -
 .../gemfire/cache/EvictionCriteria.java         |    58 -
 .../gemfire/cache/ExpirationAction.java         |   123 -
 .../gemfire/cache/ExpirationAttributes.java     |   144 -
 .../cache/FailedSynchronizationException.java   |    55 -
 .../gemfire/cache/FixedPartitionAttributes.java |   115 -
 .../gemfire/cache/FixedPartitionResolver.java   |    79 -
 .../cache/GatewayConfigurationException.java    |    45 -
 .../gemfire/cache/GatewayException.java         |    68 -
 .../gemstone/gemfire/cache/GemFireCache.java    |   262 -
 .../cache/IncompatibleVersionException.java     |    48 -
 .../gemstone/gemfire/cache/InterestPolicy.java  |   149 -
 .../cache/InterestRegistrationEvent.java        |    92 -
 .../cache/InterestRegistrationListener.java     |    84 -
 .../gemfire/cache/InterestResultPolicy.java     |   122 -
 .../gemstone/gemfire/cache/LoaderHelper.java    |    81 -
 .../com/gemstone/gemfire/cache/LossAction.java  |   149 -
 .../gemfire/cache/LowMemoryException.java       |    67 -
 .../gemfire/cache/MembershipAttributes.java     |   269 -
 .../com/gemstone/gemfire/cache/MirrorType.java  |   136 -
 .../cache/NoQueueServersAvailableException.java |    64 -
 ...NoSubscriptionServersAvailableException.java |    64 -
 .../com/gemstone/gemfire/cache/Operation.java   |  1010 -
 .../cache/OperationAbortedException.java        |    63 -
 .../gemfire/cache/PartitionAttributes.java      |   171 -
 .../cache/PartitionAttributesFactory.java       |   457 -
 .../gemfire/cache/PartitionResolver.java        |    84 -
 .../PartitionedRegionDistributionException.java |    46 -
 .../PartitionedRegionStorageException.java      |    96 -
 .../java/com/gemstone/gemfire/cache/Region.java |  2403 ---
 .../gemfire/cache/RegionAccessException.java    |   118 -
 .../gemfire/cache/RegionAttributes.java         |   490 -
 .../gemfire/cache/RegionDestroyedException.java |    52 -
 .../cache/RegionDistributionException.java      |   123 -
 .../com/gemstone/gemfire/cache/RegionEvent.java |    41 -
 .../gemfire/cache/RegionExistsException.java    |    65 -
 .../gemstone/gemfire/cache/RegionFactory.java   |   934 -
 .../gemfire/cache/RegionMembershipListener.java |    83 -
 .../cache/RegionReinitializedException.java     |    48 -
 .../gemfire/cache/RegionRoleException.java      |    63 -
 .../gemfire/cache/RegionRoleListener.java       |    54 -
 .../gemstone/gemfire/cache/RegionService.java   |   142 -
 .../gemstone/gemfire/cache/RegionShortcut.java  |   238 -
 .../cache/RemoteTransactionException.java       |    42 -
 .../gemstone/gemfire/cache/RequiredRoles.java   |   117 -
 .../gemfire/cache/ResourceException.java        |    61 -
 .../gemfire/cache/ResumptionAction.java         |   114 -
 .../com/gemstone/gemfire/cache/RoleEvent.java   |    39 -
 .../gemstone/gemfire/cache/RoleException.java   |    68 -
 .../java/com/gemstone/gemfire/cache/Scope.java  |   168 -
 .../gemfire/cache/SerializedCacheValue.java     |    53 -
 .../cache/StatisticsDisabledException.java      |    68 -
 .../gemfire/cache/SubscriptionAttributes.java   |   117 -
 .../SynchronizationCommitConflictException.java |    49 -
 .../gemfire/cache/TimeoutException.java         |    73 -
 ...TransactionDataNodeHasDepartedException.java |    42 -
 .../TransactionDataNotColocatedException.java   |    46 -
 .../TransactionDataRebalancedException.java     |    38 -
 .../gemfire/cache/TransactionEvent.java         |   114 -
 .../gemfire/cache/TransactionException.java     |    43 -
 .../gemstone/gemfire/cache/TransactionId.java   |    33 -
 .../cache/TransactionInDoubtException.java      |    42 -
 .../gemfire/cache/TransactionListener.java      |    66 -
 .../gemfire/cache/TransactionWriter.java        |    44 -
 .../cache/TransactionWriterException.java       |    45 -
 ...upportedOperationInTransactionException.java |    37 -
 .../cache/UnsupportedVersionException.java      |    44 -
 .../gemfire/cache/VersionException.java         |    50 -
 .../gemfire/cache/asyncqueue/AsyncEvent.java    |    42 -
 .../cache/asyncqueue/AsyncEventListener.java    |    76 -
 .../cache/asyncqueue/AsyncEventQueue.java       |   151 -
 .../asyncqueue/AsyncEventQueueFactory.java      |   191 -
 .../internal/AsyncEventQueueFactoryImpl.java    |   299 -
 .../internal/AsyncEventQueueImpl.java           |   205 -
 .../internal/AsyncEventQueueStats.java          |   186 -
 .../internal/ParallelAsyncEventQueueImpl.java   |   260 -
 .../internal/SerialAsyncEventQueueImpl.java     |   257 -
 .../client/AllConnectionsInUseException.java    |    61 -
 .../gemfire/cache/client/ClientCache.java       |   168 -
 .../cache/client/ClientCacheFactory.java        |   695 -
 .../cache/client/ClientNotReadyException.java   |    56 -
 .../cache/client/ClientRegionFactory.java       |   346 -
 .../cache/client/ClientRegionShortcut.java      |   108 -
 .../client/NoAvailableLocatorsException.java    |    59 -
 .../client/NoAvailableServersException.java     |    59 -
 .../com/gemstone/gemfire/cache/client/Pool.java |   251 -
 .../gemfire/cache/client/PoolFactory.java       |   477 -
 .../gemfire/cache/client/PoolManager.java       |    98 -
 .../client/ServerConnectivityException.java     |    63 -
 .../cache/client/ServerOperationException.java  |    86 -
 .../ServerRefusedConnectionException.java       |    41 -
 .../client/SubscriptionNotEnabledException.java |    63 -
 .../client/doc-files/example-client-cache.xml   |    46 -
 .../cache/client/internal/AbstractOp.java       |   436 -
 .../cache/client/internal/AddPDXEnumOp.java     |    98 -
 .../cache/client/internal/AddPDXTypeOp.java     |    98 -
 .../client/internal/AuthenticateUserOp.java     |   312 -
 .../internal/AutoConnectionSourceImpl.java      |   387 -
 .../client/internal/CacheServerLoadMessage.java |   108 -
 .../gemfire/cache/client/internal/ClearOp.java  |   106 -
 .../client/internal/ClientMetadataService.java  |   848 -
 .../client/internal/ClientPartitionAdvisor.java |   288 -
 .../internal/ClientRegionFactoryImpl.java       |   271 -
 .../cache/client/internal/ClientUpdater.java    |    36 -
 .../client/internal/CloseConnectionOp.java      |    95 -
 .../gemfire/cache/client/internal/CommitOp.java |   109 -
 .../cache/client/internal/Connection.java       |    85 -
 .../client/internal/ConnectionFactory.java      |    68 -
 .../client/internal/ConnectionFactoryImpl.java  |   334 -
 .../cache/client/internal/ConnectionImpl.java   |   339 -
 .../cache/client/internal/ConnectionSource.java |    77 -
 .../cache/client/internal/ConnectionStats.java  |  3292 ----
 .../cache/client/internal/ContainsKeyOp.java    |   102 -
 .../DataSerializerRecoveryListener.java         |   153 -
 .../cache/client/internal/DestroyOp.java        |   286 -
 .../cache/client/internal/DestroyRegionOp.java  |   104 -
 .../gemfire/cache/client/internal/Endpoint.java |   111 -
 .../cache/client/internal/EndpointManager.java  |   100 -
 .../client/internal/EndpointManagerImpl.java    |   308 -
 .../cache/client/internal/ExecutablePool.java   |   150 -
 .../client/internal/ExecuteFunctionHelper.java  |    30 -
 .../client/internal/ExecuteFunctionNoAckOp.java |   243 -
 .../client/internal/ExecuteFunctionOp.java      |   653 -
 .../internal/ExecuteRegionFunctionNoAckOp.java  |   227 -
 .../internal/ExecuteRegionFunctionOp.java       |   624 -
 .../ExecuteRegionFunctionSingleHopOp.java       |   500 -
 .../internal/ExplicitConnectionSourceImpl.java  |   277 -
 .../gemfire/cache/client/internal/GetAllOp.java |   242 -
 .../client/internal/GetClientPRMetaDataOp.java  |   171 -
 .../GetClientPartitionAttributesOp.java         |   177 -
 .../cache/client/internal/GetEntryOp.java       |    82 -
 .../cache/client/internal/GetEventValueOp.java  |   121 -
 .../client/internal/GetFunctionAttributeOp.java |    84 -
 .../gemfire/cache/client/internal/GetOp.java    |   245 -
 .../cache/client/internal/GetPDXEnumByIdOp.java |    94 -
 .../cache/client/internal/GetPDXEnumsOp.java    |   112 -
 .../client/internal/GetPDXIdForEnumOp.java      |   115 -
 .../client/internal/GetPDXIdForTypeOp.java      |   115 -
 .../cache/client/internal/GetPDXTypeByIdOp.java |    94 -
 .../cache/client/internal/GetPDXTypesOp.java    |   112 -
 .../internal/InstantiatorRecoveryListener.java  |   159 -
 .../cache/client/internal/InternalPool.java     |    43 -
 .../cache/client/internal/InvalidateOp.java     |   121 -
 .../gemfire/cache/client/internal/KeySetOp.java |   130 -
 .../cache/client/internal/LiveServerPinger.java |   117 -
 .../internal/LocatorDiscoveryCallback.java      |    47 -
 .../LocatorDiscoveryCallbackAdapter.java        |    36 -
 .../cache/client/internal/MakePrimaryOp.java    |    91 -
 .../gemfire/cache/client/internal/Op.java       |    43 -
 .../cache/client/internal/OpExecutorImpl.java   |   973 -
 .../internal/PdxRegistryRecoveryListener.java   |    90 -
 .../gemfire/cache/client/internal/PingOp.java   |    97 -
 .../gemfire/cache/client/internal/PoolImpl.java |  1522 --
 .../cache/client/internal/PrimaryAckOp.java     |   101 -
 .../cache/client/internal/ProxyCache.java       |   248 -
 .../client/internal/ProxyCacheCloseOp.java      |   124 -
 .../cache/client/internal/ProxyRegion.java      |   698 -
 .../gemfire/cache/client/internal/PutAllOp.java |   430 -
 .../gemfire/cache/client/internal/PutOp.java    |   553 -
 .../gemfire/cache/client/internal/QueryOp.java  |   203 -
 .../client/internal/QueueConnectionImpl.java    |   226 -
 .../cache/client/internal/QueueManager.java     |    57 -
 .../cache/client/internal/QueueManagerImpl.java |  1487 --
 .../cache/client/internal/QueueState.java       |    33 -
 .../cache/client/internal/QueueStateImpl.java   |   450 -
 .../cache/client/internal/ReadyForEventsOp.java |    91 -
 .../internal/RegisterDataSerializersOp.java     |   138 -
 .../internal/RegisterInstantiatorsOp.java       |   180 -
 .../client/internal/RegisterInterestListOp.java |   147 -
 .../client/internal/RegisterInterestOp.java     |   296 -
 .../internal/RegisterInterestTracker.java       |   419 -
 .../cache/client/internal/RemoveAllOp.java      |   391 -
 .../cache/client/internal/RollbackOp.java       |    99 -
 .../cache/client/internal/ServerBlackList.java  |   188 -
 .../cache/client/internal/ServerProxy.java      |    69 -
 .../client/internal/ServerRegionDataAccess.java |   143 -
 .../client/internal/ServerRegionProxy.java      |   878 -
 .../internal/SingleHopClientExecutor.java       |   415 -
 .../internal/SingleHopOperationCallable.java    |    83 -
 .../gemfire/cache/client/internal/SizeOp.java   |    92 -
 .../cache/client/internal/TXFailoverOp.java     |    93 -
 .../client/internal/TXSynchronizationOp.java    |   163 -
 .../internal/UnregisterInterestListOp.java      |   100 -
 .../client/internal/UnregisterInterestOp.java   |    98 -
 .../cache/client/internal/UserAttributes.java   |    59 -
 .../doc-files/ConnectionManagerImpl.dia         |   Bin 2034 -> 0 bytes
 .../doc-files/ConnectionManagerImpl.png         |   Bin 11825 -> 0 bytes
 .../client/internal/doc-files/PoolImpl.dia      |   Bin 3083 -> 0 bytes
 .../internal/doc-files/QueueManagerImpl.dia     |   Bin 2180 -> 0 bytes
 .../internal/doc-files/QueueManagerImpl.png     |   Bin 15075 -> 0 bytes
 .../doc-files/client_static_diagram.png         |   Bin 29430 -> 0 bytes
 .../locator/ClientConnectionRequest.java        |    68 -
 .../locator/ClientConnectionResponse.java       |    85 -
 .../locator/ClientReplacementRequest.java       |    75 -
 .../internal/locator/GetAllServersRequest.java  |    58 -
 .../internal/locator/GetAllServersResponse.java |    80 -
 .../internal/locator/LocatorListRequest.java    |    36 -
 .../internal/locator/LocatorListResponse.java   |    92 -
 .../internal/locator/LocatorStatusRequest.java  |    37 -
 .../internal/locator/LocatorStatusResponse.java |   321 -
 .../locator/QueueConnectionRequest.java         |    99 -
 .../locator/QueueConnectionResponse.java        |    87 -
 .../internal/locator/SerializationHelper.java   |   123 -
 .../internal/locator/ServerLocationRequest.java |    61 -
 .../locator/ServerLocationResponse.java         |    33 -
 .../locator/wan/LocatorMembershipListener.java  |    57 -
 .../gemfire/cache/client/internal/package.html  |    63 -
 .../pooling/ConnectionDestroyedException.java   |    48 -
 .../internal/pooling/ConnectionManager.java     |   132 -
 .../internal/pooling/ConnectionManagerImpl.java |  1587 --
 .../internal/pooling/PooledConnection.java      |   354 -
 .../gemstone/gemfire/cache/client/package.html  |    67 -
 .../gemfire/cache/control/RebalanceFactory.java |    66 -
 .../cache/control/RebalanceOperation.java       |    75 -
 .../gemfire/cache/control/RebalanceResults.java |   106 -
 .../gemfire/cache/control/ResourceManager.java  |   260 -
 .../gemstone/gemfire/cache/control/package.html |    23 -
 .../gemfire/cache/doc-files/architecture.fig    |   170 -
 .../gemfire/cache/doc-files/architecture.gif    |   Bin 9983 -> 0 bytes
 .../cache/doc-files/entry-life-cycle.fig        |    64 -
 .../cache/doc-files/entry-life-cycle.gif        |   Bin 3357 -> 0 bytes
 .../gemfire/cache/doc-files/example-cache.xml   |    98 -
 .../gemfire/cache/doc-files/example2-cache.xml  |    63 -
 .../gemfire/cache/doc-files/example3-cache.xml  |    60 -
 .../cache/doc-files/partitioned-regions.fig     |   267 -
 .../cache/doc-files/partitioned-regions.gif     |   Bin 9494 -> 0 bytes
 .../execute/EmtpyRegionFunctionException.java   |    64 -
 .../gemfire/cache/execute/Execution.java        |   224 -
 .../gemfire/cache/execute/Function.java         |   112 -
 .../gemfire/cache/execute/FunctionAdapter.java  |   124 -
 .../gemfire/cache/execute/FunctionContext.java  |    80 -
 .../cache/execute/FunctionException.java        |   129 -
 .../FunctionInvocationTargetException.java      |    93 -
 .../gemfire/cache/execute/FunctionService.java  |   371 -
 .../cache/execute/RegionFunctionContext.java    |    72 -
 .../gemfire/cache/execute/ResultCollector.java  |   136 -
 .../gemfire/cache/execute/ResultSender.java     |    93 -
 .../internal/FunctionServiceManager.java        |   460 -
 .../gemstone/gemfire/cache/execute/package.html |   162 -
 .../gemfire/cache/hdfs/HDFSIOException.java     |    53 -
 .../gemstone/gemfire/cache/hdfs/HDFSStore.java  |   343 -
 .../gemfire/cache/hdfs/HDFSStoreFactory.java    |   205 -
 .../gemfire/cache/hdfs/HDFSStoreMutator.java    |   197 -
 .../cache/hdfs/StoreExistsException.java        |    33 -
 .../cache/hdfs/internal/FailureTracker.java     |    97 -
 .../cache/hdfs/internal/FlushObserver.java      |    54 -
 .../hdfs/internal/HDFSBucketRegionQueue.java    |  1233 --
 .../cache/hdfs/internal/HDFSEntriesSet.java     |   329 -
 .../cache/hdfs/internal/HDFSEventListener.java  |   180 -
 .../hdfs/internal/HDFSEventQueueFilter.java     |    74 -
 .../hdfs/internal/HDFSGatewayEventImpl.java     |   181 -
 .../hdfs/internal/HDFSIntegrationUtil.java      |   118 -
 .../HDFSParallelGatewaySenderQueue.java         |   473 -
 .../hdfs/internal/HDFSStoreConfigHolder.java    |   560 -
 .../cache/hdfs/internal/HDFSStoreCreation.java  |   199 -
 .../hdfs/internal/HDFSStoreFactoryImpl.java     |    78 -
 .../cache/hdfs/internal/HDFSStoreImpl.java      |   639 -
 .../hdfs/internal/HDFSStoreMutatorImpl.java     |   200 -
 .../HDFSWriteOnlyStoreEventListener.java        |   185 -
 .../hdfs/internal/HoplogListenerForRegion.java  |    73 -
 .../cache/hdfs/internal/PersistedEventImpl.java |   203 -
 .../hdfs/internal/QueuedPersistentEvent.java    |    27 -
 .../hdfs/internal/SignalledFlushObserver.java   |   123 -
 .../internal/SortedHDFSQueuePersistedEvent.java |    87 -
 .../internal/SortedHoplogPersistedEvent.java    |   115 -
 .../UnsortedHDFSQueuePersistedEvent.java        |    77 -
 .../internal/UnsortedHoplogPersistedEvent.java  |    93 -
 .../cache/hdfs/internal/cardinality/Bits.java   |    54 -
 .../cardinality/CardinalityMergeException.java  |    42 -
 .../hdfs/internal/cardinality/HyperLogLog.java  |   313 -
 .../hdfs/internal/cardinality/IBuilder.java     |    41 -
 .../hdfs/internal/cardinality/ICardinality.java |    87 -
 .../hdfs/internal/cardinality/MurmurHash.java   |   261 -
 .../hdfs/internal/cardinality/RegisterSet.java  |   136 -
 .../hdfs/internal/hoplog/AbstractHoplog.java    |   357 -
 .../hoplog/AbstractHoplogOrganizer.java         |   430 -
 .../cache/hdfs/internal/hoplog/BloomFilter.java |    36 -
 .../hoplog/CloseTmpHoplogsTimerTask.java        |   109 -
 .../hdfs/internal/hoplog/CompactionStatus.java  |    73 -
 .../cache/hdfs/internal/hoplog/FlushStatus.java |    73 -
 .../internal/hoplog/HDFSCompactionManager.java  |   330 -
 .../internal/hoplog/HDFSFlushQueueArgs.java     |    94 -
 .../internal/hoplog/HDFSFlushQueueFunction.java |   287 -
 .../hoplog/HDFSForceCompactionArgs.java         |   108 -
 .../hoplog/HDFSForceCompactionFunction.java     |   130 -
 .../HDFSForceCompactionResultCollector.java     |   132 -
 .../hoplog/HDFSLastCompactionTimeFunction.java  |    57 -
 .../internal/hoplog/HDFSRegionDirector.java     |   480 -
 .../hdfs/internal/hoplog/HDFSStoreDirector.java |    79 -
 .../hoplog/HDFSUnsortedHoplogOrganizer.java     |   448 -
 .../hdfs/internal/hoplog/HFileSortedOplog.java  |   853 -
 .../hoplog/HdfsSortedOplogOrganizer.java        |  2007 --
 .../cache/hdfs/internal/hoplog/Hoplog.java      |   263 -
 .../hdfs/internal/hoplog/HoplogConfig.java      |    75 -
 .../hdfs/internal/hoplog/HoplogListener.java    |    47 -
 .../hdfs/internal/hoplog/HoplogOrganizer.java   |   123 -
 .../hdfs/internal/hoplog/HoplogSetIterator.java |   166 -
 .../hdfs/internal/hoplog/HoplogSetReader.java   |   114 -
 .../internal/hoplog/SequenceFileHoplog.java     |   396 -
 .../hoplog/mapred/AbstractGFRecordReader.java   |   106 -
 .../internal/hoplog/mapred/GFInputFormat.java   |    95 -
 .../internal/hoplog/mapred/GFOutputFormat.java  |    76 -
 .../mapreduce/AbstractGFRecordReader.java       |   140 -
 .../hoplog/mapreduce/GFInputFormat.java         |   124 -
 .../hdfs/internal/hoplog/mapreduce/GFKey.java   |    72 -
 .../hoplog/mapreduce/GFOutputFormat.java        |   199 -
 .../hoplog/mapreduce/HDFSSplitIterator.java     |   198 -
 .../internal/hoplog/mapreduce/HoplogUtil.java   |   464 -
 .../hoplog/mapreduce/RWSplitIterator.java       |    49 -
 .../hoplog/mapreduce/StreamSplitIterator.java   |    47 -
 .../org/apache/hadoop/io/SequenceFile.java      |  3726 ----
 .../operations/CloseCQOperationContext.java     |    65 -
 .../operations/DestroyOperationContext.java     |    63 -
 .../operations/ExecuteCQOperationContext.java   |    68 -
 .../ExecuteFunctionOperationContext.java        |    97 -
 .../GetDurableCQsOperationContext.java          |    60 -
 .../cache/operations/GetOperationContext.java   |    91 -
 .../operations/InterestOperationContext.java    |    84 -
 .../gemfire/cache/operations/InterestType.java  |   152 -
 .../operations/InvalidateOperationContext.java  |    64 -
 .../cache/operations/KeyOperationContext.java   |   125 -
 .../operations/KeySetOperationContext.java      |    97 -
 .../operations/KeyValueOperationContext.java    |   177 -
 .../cache/operations/OperationContext.java      |   587 -
 .../operations/PutAllOperationContext.java      |   407 -
 .../cache/operations/PutOperationContext.java   |   144 -
 .../cache/operations/QueryOperationContext.java |   172 -
 .../operations/RegionClearOperationContext.java |    51 -
 .../RegionCreateOperationContext.java           |    61 -
 .../RegionDestroyOperationContext.java          |    51 -
 .../operations/RegionOperationContext.java      |    87 -
 .../RegisterInterestOperationContext.java       |    72 -
 .../operations/RemoveAllOperationContext.java   |   101 -
 .../operations/StopCQOperationContext.java      |    66 -
 .../UnregisterInterestOperationContext.java     |    54 -
 .../internal/GetOperationContextImpl.java       |   124 -
 .../gemfire/cache/operations/package.html       |   107 -
 .../com/gemstone/gemfire/cache/package.html     |   608 -
 .../cache/partition/PartitionListener.java      |   132 -
 .../partition/PartitionListenerAdapter.java     |    50 -
 .../cache/partition/PartitionMemberInfo.java    |    74 -
 .../PartitionNotAvailableException.java         |    66 -
 .../cache/partition/PartitionRebalanceInfo.java |   150 -
 .../cache/partition/PartitionRegionHelper.java  |   552 -
 .../cache/partition/PartitionRegionInfo.java    |   113 -
 .../gemfire/cache/partition/package.html        |    23 -
 .../ConflictingPersistentDataException.java     |    57 -
 .../persistence/PartitionOfflineException.java  |    77 -
 .../gemfire/cache/persistence/PersistentID.java |    59 -
 .../PersistentReplicatesOfflineException.java   |    44 -
 .../persistence/RevokeFailedException.java      |    51 -
 .../RevokedPersistentDataException.java         |    58 -
 .../gemfire/cache/query/Aggregator.java         |    46 -
 .../cache/query/AmbiguousNameException.java     |    47 -
 .../gemfire/cache/query/CqAttributes.java       |    50 -
 .../cache/query/CqAttributesFactory.java        |   319 -
 .../cache/query/CqAttributesMutator.java        |    57 -
 .../gemfire/cache/query/CqClosedException.java  |    57 -
 .../gemstone/gemfire/cache/query/CqEvent.java   |    93 -
 .../gemfire/cache/query/CqException.java        |    57 -
 .../gemfire/cache/query/CqExistsException.java  |    53 -
 .../gemfire/cache/query/CqListener.java         |    59 -
 .../gemstone/gemfire/cache/query/CqQuery.java   |   155 -
 .../gemstone/gemfire/cache/query/CqResults.java |    51 -
 .../cache/query/CqServiceStatistics.java        |    70 -
 .../gemstone/gemfire/cache/query/CqState.java   |    55 -
 .../gemfire/cache/query/CqStatistics.java       |    53 -
 .../gemfire/cache/query/CqStatusListener.java   |    42 -
 .../cache/query/FunctionDomainException.java    |    36 -
 .../com/gemstone/gemfire/cache/query/Index.java |   112 -
 .../cache/query/IndexCreationException.java     |    46 -
 .../cache/query/IndexExistsException.java       |    52 -
 .../cache/query/IndexInvalidException.java      |    64 -
 .../cache/query/IndexMaintenanceException.java  |    66 -
 .../cache/query/IndexNameConflictException.java |    52 -
 .../gemfire/cache/query/IndexStatistics.java    |    76 -
 .../gemstone/gemfire/cache/query/IndexType.java |   106 -
 .../query/MultiIndexCreationException.java      |    82 -
 .../cache/query/NameNotFoundException.java      |    48 -
 .../cache/query/NameResolutionException.java    |    47 -
 .../query/ParameterCountInvalidException.java   |    38 -
 .../com/gemstone/gemfire/cache/query/Query.java |   328 -
 .../gemfire/cache/query/QueryException.java     |    66 -
 .../query/QueryExecutionLowMemoryException.java |    67 -
 .../query/QueryExecutionTimeoutException.java   |    62 -
 .../cache/query/QueryInvalidException.java      |    48 -
 .../query/QueryInvocationTargetException.java   |    54 -
 .../gemfire/cache/query/QueryService.java       |   852 -
 .../gemfire/cache/query/QueryStatistics.java    |    38 -
 .../cache/query/RegionNotFoundException.java    |    45 -
 .../gemfire/cache/query/SelectResults.java      |   122 -
 .../gemstone/gemfire/cache/query/Struct.java    |    59 -
 .../cache/query/TypeMismatchException.java      |    45 -
 .../query/internal/AbstractCompiledValue.java   |   323 -
 .../internal/AbstractGroupOrRangeJunction.java  |   596 -
 .../cache/query/internal/AllGroupJunction.java  |   276 -
 .../query/internal/AttributeDescriptor.java     |   420 -
 .../gemfire/cache/query/internal/Bag.java       |   726 -
 .../internal/CompiledAggregateFunction.java     |   185 -
 .../query/internal/CompiledBindArgument.java    |   100 -
 .../query/internal/CompiledComparison.java      |   877 -
 .../query/internal/CompiledConstruction.java    |    78 -
 .../cache/query/internal/CompiledFunction.java  |   117 -
 .../query/internal/CompiledGroupBySelect.java   |   522 -
 .../cache/query/internal/CompiledID.java        |    99 -
 .../cache/query/internal/CompiledIn.java        |   965 -
 .../query/internal/CompiledIndexOperation.java  |   183 -
 .../query/internal/CompiledIteratorDef.java     |   379 -
 .../cache/query/internal/CompiledJunction.java  |  1254 --
 .../cache/query/internal/CompiledLike.java      |   531 -
 .../cache/query/internal/CompiledLiteral.java   |    85 -
 .../cache/query/internal/CompiledNegation.java  |    79 -
 .../cache/query/internal/CompiledOperation.java |   331 -
 .../cache/query/internal/CompiledPath.java      |   177 -
 .../cache/query/internal/CompiledRegion.java    |   111 -
 .../cache/query/internal/CompiledSelect.java    |  1590 --
 .../query/internal/CompiledSortCriterion.java   |   320 -
 .../query/internal/CompiledUnaryMinus.java      |   102 -
 .../cache/query/internal/CompiledUndefined.java |   320 -
 .../cache/query/internal/CompiledValue.java     |   143 -
 .../query/internal/CompositeGroupJunction.java  |   555 -
 .../gemfire/cache/query/internal/CqEntry.java   |   112 -
 .../cache/query/internal/CqQueryVsdStats.java   |   342 -
 .../cache/query/internal/CqStateImpl.java       |   104 -
 .../internal/CumulativeNonDistinctResults.java  |   391 -
 .../cache/query/internal/DefaultQuery.java      |  1141 --
 .../query/internal/DefaultQueryService.java     |  1003 -
 .../cache/query/internal/DerivedInfo.java       |   306 -
 .../cache/query/internal/ExecutionContext.java  |   732 -
 .../gemfire/cache/query/internal/Filter.java    |   178 -
 .../gemfire/cache/query/internal/Functions.java |   206 -
 .../cache/query/internal/GroupJunction.java     |   193 -
 .../cache/query/internal/HashingStrategy.java   |    55 -
 .../gemfire/cache/query/internal/IndexInfo.java |    78 -
 .../internal/IndexTrackingQueryObserver.java    |   217 -
 .../cache/query/internal/IndexUpdater.java      |   123 -
 .../gemfire/cache/query/internal/Indexable.java |    55 -
 .../cache/query/internal/LinkedResultSet.java   |   145 -
 .../cache/query/internal/LinkedStructSet.java   |   367 -
 .../cache/query/internal/MapIndexable.java      |    26 -
 .../cache/query/internal/MethodDispatch.java    |   232 -
 .../cache/query/internal/NWayMergeResults.java  |   546 -
 .../gemfire/cache/query/internal/Negatable.java |    26 -
 .../gemfire/cache/query/internal/NullToken.java |    77 -
 .../cache/query/internal/ObjectIntHashMap.java  |  1141 --
 .../cache/query/internal/OrderByComparator.java |   237 -
 .../internal/OrderByComparatorUnmapped.java     |    90 -
 .../gemfire/cache/query/internal/Ordered.java   |    44 -
 .../cache/query/internal/OrganizedOperands.java |    55 -
 .../cache/query/internal/PRQueryTraceInfo.java  |   109 -
 .../gemfire/cache/query/internal/PathUtils.java |   269 -
 .../gemfire/cache/query/internal/PlanInfo.java  |    36 -
 .../cache/query/internal/ProxyQueryService.java |   451 -
 .../gemfire/cache/query/internal/QCompiler.java |   698 -
 .../gemfire/cache/query/internal/QRegion.java   |   539 -
 .../gemfire/cache/query/internal/QScope.java    |    92 -
 .../QueryExecutionCanceledException.java        |    63 -
 .../query/internal/QueryExecutionContext.java   |   232 -
 .../cache/query/internal/QueryExecutor.java     |    40 -
 .../cache/query/internal/QueryMonitor.java      |   361 -
 .../cache/query/internal/QueryObserver.java     |   338 -
 .../query/internal/QueryObserverAdapter.java    |   341 -
 .../query/internal/QueryObserverHolder.java     |    84 -
 .../cache/query/internal/QueryUtils.java        |  2079 --
 .../cache/query/internal/RangeJunction.java     |  1255 --
 .../cache/query/internal/ResultsBag.java        |   276 -
 .../ResultsCollectionCopyOnReadWrapper.java     |   228 -
 ...ResultsCollectionPdxDeserializerWrapper.java |   219 -
 .../internal/ResultsCollectionWrapper.java      |   664 -
 .../cache/query/internal/ResultsSet.java        |   150 -
 .../cache/query/internal/RuntimeIterator.java   |   338 -
 .../query/internal/SelectResultsComparator.java |    61 -
 .../cache/query/internal/SortedResultSet.java   |   134 -
 .../cache/query/internal/SortedResultsBag.java  |   260 -
 .../cache/query/internal/SortedStructBag.java   |   369 -
 .../cache/query/internal/SortedStructSet.java   |   385 -
 .../gemfire/cache/query/internal/StructBag.java |   474 -
 .../cache/query/internal/StructFields.java      |    42 -
 .../cache/query/internal/StructImpl.java        |   183 -
 .../gemfire/cache/query/internal/StructSet.java |   459 -
 .../gemfire/cache/query/internal/Support.java   |    95 -
 .../gemfire/cache/query/internal/Undefined.java |    87 -
 .../internal/aggregate/AbstractAggregator.java  |    47 -
 .../cache/query/internal/aggregate/Avg.java     |    50 -
 .../query/internal/aggregate/AvgBucketNode.java |    49 -
 .../query/internal/aggregate/AvgDistinct.java   |    43 -
 .../aggregate/AvgDistinctPRQueryNode.java       |    35 -
 .../internal/aggregate/AvgPRQueryNode.java      |    47 -
 .../cache/query/internal/aggregate/Count.java   |    49 -
 .../query/internal/aggregate/CountDistinct.java |    33 -
 .../aggregate/CountDistinctPRQueryNode.java     |    44 -
 .../internal/aggregate/CountPRQueryNode.java    |    48 -
 .../internal/aggregate/DistinctAggregator.java  |    56 -
 .../cache/query/internal/aggregate/MaxMin.java  |    68 -
 .../cache/query/internal/aggregate/Sum.java     |    48 -
 .../query/internal/aggregate/SumDistinct.java   |    35 -
 .../aggregate/SumDistinctPRQueryNode.java       |    46 -
 .../cache/query/internal/cq/ClientCQ.java       |    42 -
 .../cache/query/internal/cq/CqService.java      |   263 -
 .../query/internal/cq/CqServiceProvider.java    |    72 -
 .../query/internal/cq/InternalCqQuery.java      |    82 -
 .../query/internal/cq/MissingCqService.java     |   217 -
 .../internal/cq/MissingCqServiceStatistics.java |    52 -
 .../cache/query/internal/cq/ServerCQ.java       |    87 -
 .../query/internal/cq/spi/CqServiceFactory.java |    36 -
 .../query/internal/index/AbstractIndex.java     |  2401 ---
 .../query/internal/index/AbstractMapIndex.java  |   440 -
 .../internal/index/CompactMapRangeIndex.java    |   216 -
 .../query/internal/index/CompactRangeIndex.java |  1797 --
 .../query/internal/index/DummyQRegion.java      |   252 -
 .../index/FunctionalIndexCreationHelper.java    |   721 -
 .../cache/query/internal/index/HashIndex.java   |  1573 --
 .../query/internal/index/HashIndexSet.java      |   818 -
 .../query/internal/index/IMQException.java      |    59 -
 .../internal/index/IndexConcurrentHashSet.java  |    78 -
 .../query/internal/index/IndexCreationData.java |   166 -
 .../internal/index/IndexCreationHelper.java     |   113 -
 .../cache/query/internal/index/IndexData.java   |    72 -
 .../query/internal/index/IndexElemArray.java    |   333 -
 .../query/internal/index/IndexManager.java      |  1718 --
 .../query/internal/index/IndexProtocol.java     |   222 -
 .../cache/query/internal/index/IndexStats.java  |   223 -
 .../cache/query/internal/index/IndexStore.java  |   153 -
 .../cache/query/internal/index/IndexUtils.java  |   135 -
 .../index/IndexedExpressionEvaluator.java       |    52 -
 .../query/internal/index/MapIndexStore.java     |   336 -
 .../query/internal/index/MapRangeIndex.java     |   195 -
 .../query/internal/index/MemoryIndexStore.java  |   822 -
 .../query/internal/index/PartitionedIndex.java  |   656 -
 .../query/internal/index/PrimaryKeyIndex.java   |   392 -
 .../index/PrimaryKeyIndexCreationHelper.java    |   124 -
 .../cache/query/internal/index/RangeIndex.java  |  1686 --
 .../cache/query/internal/index/package.html     |   646 -
 .../gemfire/cache/query/internal/package.html   |    43 -
 .../query/internal/parse/ASTAggregateFunc.java  |    66 -
 .../cache/query/internal/parse/ASTAnd.java      |    39 -
 .../query/internal/parse/ASTCombination.java    |    46 -
 .../query/internal/parse/ASTCompareOp.java      |    38 -
 .../query/internal/parse/ASTConstruction.java   |    45 -
 .../query/internal/parse/ASTConversionExpr.java |    42 -
 .../cache/query/internal/parse/ASTDummy.java    |    39 -
 .../cache/query/internal/parse/ASTGroupBy.java  |    44 -
 .../cache/query/internal/parse/ASTHint.java     |    52 -
 .../query/internal/parse/ASTHintIdentifier.java |    52 -
 .../query/internal/parse/ASTIdentifier.java     |    42 -
 .../cache/query/internal/parse/ASTImport.java   |    57 -
 .../cache/query/internal/parse/ASTIn.java       |    43 -
 .../query/internal/parse/ASTIteratorDef.java    |    79 -
 .../cache/query/internal/parse/ASTLike.java     |    47 -
 .../cache/query/internal/parse/ASTLimit.java    |    41 -
 .../cache/query/internal/parse/ASTLiteral.java  |   232 -
 .../internal/parse/ASTMethodInvocation.java     |    68 -
 .../cache/query/internal/parse/ASTOr.java       |    38 -
 .../cache/query/internal/parse/ASTOrderBy.java  |    44 -
 .../query/internal/parse/ASTParameter.java      |    40 -
 .../cache/query/internal/parse/ASTPostfix.java  |    70 -
 .../query/internal/parse/ASTProjection.java     |    48 -
 .../query/internal/parse/ASTRegionPath.java     |    41 -
 .../cache/query/internal/parse/ASTSelect.java   |    68 -
 .../query/internal/parse/ASTSortCriterion.java  |    44 -
 .../cache/query/internal/parse/ASTTrace.java    |    41 -
 .../cache/query/internal/parse/ASTType.java     |    67 -
 .../cache/query/internal/parse/ASTTypeCast.java |    44 -
 .../cache/query/internal/parse/ASTUnary.java    |    65 -
 .../query/internal/parse/ASTUndefinedExpr.java  |    42 -
 .../query/internal/parse/ASTUnsupported.java    |    45 -
 .../cache/query/internal/parse/GemFireAST.java  |    61 -
 .../cache/query/internal/parse/OQLLexer.java    |  2265 ---
 .../internal/parse/OQLLexerTokenTypes.java      |   155 -
 .../query/internal/parse/OQLLexerTokenTypes.txt |   147 -
 .../cache/query/internal/parse/OQLParser.java   |  3833 ----
 .../cache/query/internal/parse/UtilParser.java  |    92 -
 .../cache/query/internal/parse/fixantlr.sh      |    52 -
 .../gemfire/cache/query/internal/parse/oql.g    |  1195 --
 .../internal/types/CollectionTypeImpl.java      |   126 -
 .../types/ExtendedNumericComparator.java        |    52 -
 .../cache/query/internal/types/MapTypeImpl.java |   100 -
 .../query/internal/types/NumericComparator.java |    96 -
 .../query/internal/types/ObjectTypeImpl.java    |   100 -
 .../query/internal/types/StructTypeImpl.java    |   160 -
 .../internal/types/TemporalComparator.java      |    77 -
 .../cache/query/internal/types/TypeUtils.java   |   476 -
 .../query/internal/utils/LimitIterator.java     |    63 -
 .../cache/query/internal/utils/PDXUtils.java    |    95 -
 .../gemstone/gemfire/cache/query/package.html   |   708 -
 .../cache/query/types/CollectionType.java       |    47 -
 .../gemfire/cache/query/types/MapType.java      |    42 -
 .../gemfire/cache/query/types/ObjectType.java   |    60 -
 .../gemfire/cache/query/types/StructType.java   |    52 -
 .../gemfire/cache/server/CacheServer.java       |   512 -
 .../cache/server/ClientSubscriptionConfig.java  |   148 -
 .../gemfire/cache/server/ServerLoad.java        |   187 -
 .../gemfire/cache/server/ServerLoadProbe.java   |    75 -
 .../cache/server/ServerLoadProbeAdapter.java    |    43 -
 .../gemfire/cache/server/ServerMetrics.java     |    53 -
 .../server/internal/ConnectionCountProbe.java   |    94 -
 .../cache/server/internal/LoadMonitor.java      |   242 -
 .../server/internal/ServerMetricsImpl.java      |    79 -
 .../gemstone/gemfire/cache/server/package.html  |    42 -
 .../cache/snapshot/CacheSnapshotService.java    |   149 -
 .../cache/snapshot/RegionSnapshotService.java   |   140 -
 .../gemfire/cache/snapshot/SnapshotFilter.java  |    45 -
 .../cache/snapshot/SnapshotIterator.java        |    62 -
 .../gemfire/cache/snapshot/SnapshotOptions.java |    62 -
 .../gemfire/cache/snapshot/SnapshotReader.java  |    58 -
 .../gemfire/cache/snapshot/package.html         |    54 -
 .../cache/util/BoundedLinkedHashMap.java        |    88 -
 .../cache/util/CacheListenerAdapter.java        |    67 -
 .../gemfire/cache/util/CacheWriterAdapter.java  |    54 -
 .../gemfire/cache/util/CqListenerAdapter.java   |    66 -
 .../gemstone/gemfire/cache/util/Gateway.java    |    53 -
 .../cache/util/GatewayConflictHelper.java       |    34 -
 .../cache/util/GatewayConflictResolver.java     |    48 -
 .../gemfire/cache/util/GatewayEvent.java        |    91 -
 .../gemfire/cache/util/ObjectSizer.java         |    83 -
 .../gemfire/cache/util/ObjectSizerImpl.java     |    35 -
 .../util/RegionMembershipListenerAdapter.java   |    44 -
 .../cache/util/RegionRoleListenerAdapter.java   |    40 -
 .../cache/util/TimestampedEntryEvent.java       |    40 -
 .../cache/util/TransactionListenerAdapter.java  |    43 -
 .../gemstone/gemfire/cache/util/package.html    |    31 -
 .../gemfire/cache/wan/EventSequenceID.java      |   104 -
 .../gemfire/cache/wan/GatewayEventFilter.java   |    64 -
 .../wan/GatewayEventSubstitutionFilter.java     |    40 -
 .../gemfire/cache/wan/GatewayQueueEvent.java    |    81 -
 .../gemfire/cache/wan/GatewayReceiver.java      |   174 -
 .../cache/wan/GatewayReceiverFactory.java       |   122 -
 .../gemfire/cache/wan/GatewaySender.java        |   415 -
 .../gemfire/cache/wan/GatewaySenderFactory.java |   239 -
 .../cache/wan/GatewayTransportFilter.java       |    27 -
 .../compression/CompressionException.java       |    43 -
 .../gemfire/compression/Compressor.java         |    48 -
 .../gemfire/compression/SnappyCompressor.java   |   110 -
 .../gemfire/distributed/AbstractLauncher.java   |   926 -
 .../distributed/ClientSocketFactory.java        |    47 -
 .../distributed/DistributedLockService.java     |   393 -
 .../gemfire/distributed/DistributedMember.java  |    80 -
 .../gemfire/distributed/DistributedSystem.java  |  2217 ---
 .../DistributedSystemDisconnectedException.java |    47 -
 .../distributed/DurableClientAttributes.java    |   147 -
 .../distributed/FutureCancelledException.java   |    47 -
 .../distributed/GatewayCancelledException.java  |    46 -
 .../distributed/LeaseExpiredException.java      |    38 -
 .../gemstone/gemfire/distributed/Locator.java   |   553 -
 .../gemfire/distributed/LocatorLauncher.java    |  2046 --
 .../distributed/LockNotHeldException.java       |    51 -
 .../LockServiceDestroyedException.java          |    51 -
 .../distributed/OplogCancelledException.java    |    47 -
 .../distributed/PoolCancelledException.java     |    47 -
 .../com/gemstone/gemfire/distributed/Role.java  |    56 -
 .../gemfire/distributed/ServerLauncher.java     |  2605 ---
 .../TXManagerCancelledException.java            |    47 -
 .../internal/AbstractDistributionConfig.java    |  3382 ----
 .../distributed/internal/AdminMessageType.java  |    23 -
 .../internal/AtomicLongWithTerminalState.java   |    67 -
 .../internal/CollectingReplyProcessor.java      |    56 -
 .../distributed/internal/ConflationKey.java     |    78 -
 .../gemfire/distributed/internal/DM.java        |   467 -
 .../gemfire/distributed/internal/DMStats.java   |   619 -
 .../gemfire/distributed/internal/DSClock.java   |   313 -
 .../internal/DirectReplyProcessor.java          |   172 -
 .../internal/DistributionAdvisee.java           |    93 -
 .../internal/DistributionAdvisor.java           |  1678 --
 .../internal/DistributionChannel.java           |   166 -
 .../internal/DistributionConfig.java            |  3690 ----
 .../internal/DistributionConfigImpl.java        |  3665 ----
 .../internal/DistributionConfigSnapshot.java    |    71 -
 .../internal/DistributionException.java         |    37 -
 .../internal/DistributionManager.java           |  4811 -----
 .../internal/DistributionMessage.java           |   711 -
 .../internal/DistributionMessageObserver.java   |    75 -
 .../distributed/internal/DistributionStats.java |  2051 --
 .../distributed/internal/FlowControlParams.java |   114 -
 .../FunctionExecutionPooledExecutor.java        |   311 -
 .../distributed/internal/HealthMonitor.java     |    46 -
 .../distributed/internal/HealthMonitorImpl.java |   148 -
 .../internal/HighPriorityAckedMessage.java      |   235 -
 .../HighPriorityDistributionMessage.java        |    31 -
 .../distributed/internal/IgnoredByManager.java  |    26 -
 .../internal/InternalDistributedSystem.java     |  3056 ---
 .../distributed/internal/InternalLocator.java   |  1488 --
 .../internal/LocatorLoadSnapshot.java           |   695 -
 .../distributed/internal/LocatorStats.java      |   245 -
 .../internal/LonerDistributionManager.java      |   997 -
 .../gemfire/distributed/internal/MQueue.java    |    32 -
 .../internal/MembershipListener.java            |    77 -
 .../distributed/internal/MessageFactory.java    |    56 -
 .../distributed/internal/MessageWithReply.java  |    43 -
 .../internal/OverflowQueueWithDMStats.java      |   174 -
 .../distributed/internal/PoolStatHelper.java    |    38 -
 .../internal/PooledDistributionMessage.java     |    34 -
 .../internal/PooledExecutorWithDMStats.java     |   234 -
 .../distributed/internal/ProcessorKeeper21.java |   129 -
 .../distributed/internal/ProductUseLog.java     |   147 -
 .../distributed/internal/ProfileListener.java   |    55 -
 .../distributed/internal/QueueStatHelper.java   |    42 -
 .../internal/ReliableReplyException.java        |    37 -
 .../internal/ReliableReplyProcessor21.java      |   116 -
 .../distributed/internal/ReplyException.java    |   201 -
 .../distributed/internal/ReplyMessage.java      |   364 -
 .../distributed/internal/ReplyProcessor21.java  |  1298 --
 .../distributed/internal/ReplySender.java       |    39 -
 .../distributed/internal/ResourceEvent.java     |    52 -
 .../internal/ResourceEventsListener.java        |    38 -
 .../internal/RuntimeDistributionConfigImpl.java |   162 -
 .../internal/SerialAckedMessage.java            |   159 -
 .../internal/SerialDistributionMessage.java     |    34 -
 .../SerialQueuedExecutorWithDMStats.java        |    51 -
 .../distributed/internal/ServerLocation.java    |   178 -
 .../distributed/internal/ServerLocator.java     |   486 -
 .../internal/SharedConfiguration.java           |   955 -
 .../distributed/internal/ShutdownMessage.java   |   121 -
 .../gemfire/distributed/internal/Sizeable.java  |    28 -
 .../distributed/internal/SizeableRunnable.java  |    39 -
 .../distributed/internal/StartupMessage.java    |   433 -
 .../internal/StartupMessageData.java            |   231 -
 .../internal/StartupMessageReplyProcessor.java  |   118 -
 .../distributed/internal/StartupOperation.java  |   136 -
 .../internal/StartupResponseMessage.java        |   294 -
 .../StartupResponseWithVersionMessage.java      |   108 -
 .../internal/ThrottledMemQueueStatHelper.java   |    49 -
 .../internal/ThrottledQueueStatHelper.java      |    39 -
 .../ThrottlingMemLinkedQueueWithDMStats.java    |   165 -
 .../internal/WaitForViewInstallation.java       |   126 -
 .../internal/WanLocatorDiscoverer.java          |    31 -
 .../deadlock/DLockDependencyMonitor.java        |   147 -
 .../internal/deadlock/DeadlockDetector.java     |   395 -
 .../internal/deadlock/Dependency.java           |    88 -
 .../internal/deadlock/DependencyGraph.java      |   340 -
 .../internal/deadlock/DependencyMonitor.java    |    45 -
 .../deadlock/DependencyMonitorManager.java      |   107 -
 .../deadlock/GemFireDeadlockDetector.java       |   142 -
 .../internal/deadlock/LocalLockInfo.java        |   101 -
 .../internal/deadlock/LocalThread.java          |   120 -
 .../deadlock/MessageDependencyMonitor.java      |   155 -
 .../internal/deadlock/ThreadReference.java      |    28 -
 .../internal/deadlock/UnsafeThreadLocal.java    |    92 -
 .../internal/direct/DirectChannel.java          |   939 -
 .../internal/direct/DirectChannelListener.java  |    38 -
 .../internal/direct/ShunnedMemberException.java |    34 -
 .../internal/distribution-overview.html         |    42 -
 .../internal/doc-files/config-classes.fig       |   138 -
 .../internal/doc-files/config-classes.gif       |   Bin 4205 -> 0 bytes
 .../doc-files/distribution-managers.fig         |    76 -
 .../doc-files/distribution-managers.gif         |   Bin 3267 -> 0 bytes
 .../internal/locks/Collaboration.java           |   454 -
 .../distributed/internal/locks/DLockBatch.java  |    46 -
 .../internal/locks/DLockBatchId.java            |    31 -
 .../internal/locks/DLockGrantor.java            |  3796 ----
 .../locks/DLockLessorDepartureHandler.java      |    35 -
 .../internal/locks/DLockQueryProcessor.java     |   519 -
 .../locks/DLockRecoverGrantorProcessor.java     |   460 -
 .../internal/locks/DLockReleaseProcessor.java   |   450 -
 .../internal/locks/DLockRemoteToken.java        |   235 -
 .../internal/locks/DLockRequestProcessor.java   |  1284 --
 .../internal/locks/DLockService.java            |  3367 ----
 .../distributed/internal/locks/DLockStats.java  |   887 -
 .../distributed/internal/locks/DLockToken.java  |   572 -
 .../internal/locks/DeposeGrantorProcessor.java  |   210 -
 .../internal/locks/DistributedLockStats.java    |   201 -
 .../internal/locks/DistributedMemberLock.java   |   297 -
 .../internal/locks/DummyDLockStats.java         |   180 -
 .../internal/locks/ElderInitProcessor.java      |   314 -
 .../distributed/internal/locks/ElderState.java  |   399 -
 .../distributed/internal/locks/GrantorInfo.java |    87 -
 .../internal/locks/GrantorRequestProcessor.java |   751 -
 .../locks/LockGrantorDestroyedException.java    |    51 -
 .../internal/locks/LockGrantorId.java           |   243 -
 .../locks/NonGrantorDestroyedProcessor.java     |   308 -
 .../internal/locks/RemoteThread.java            |    88 -
 .../internal/locks/doc-files/elder.fig          |    84 -
 .../internal/locks/doc-files/elder.jpg          |   Bin 55182 -> 0 bytes
 .../internal/locks/doc-files/turks.fig          |   128 -
 .../internal/locks/doc-files/turks.jpg          |   Bin 79859 -> 0 bytes
 .../distributed/internal/locks/package.html     |   313 -
 .../DistributedMembershipListener.java          |    86 -
 .../membership/InternalDistributedMember.java   |  1304 --
 .../internal/membership/InternalRole.java       |   169 -
 .../internal/membership/MemberAttributes.java   |   124 -
 .../internal/membership/MemberFactory.java      |   109 -
 .../internal/membership/MemberServices.java     |    90 -
 .../internal/membership/MembershipManager.java  |   326 -
 .../internal/membership/MembershipTestHook.java |    40 -
 .../internal/membership/NetMember.java          |    82 -
 .../internal/membership/NetView.java            |   613 -
 .../internal/membership/QuorumChecker.java      |    63 -
 .../internal/membership/gms/GMSMember.java      |   458 -
 .../membership/gms/GMSMemberFactory.java        |   133 -
 .../internal/membership/gms/GMSUtil.java        |   159 -
 .../internal/membership/gms/NetLocator.java     |    32 -
 .../internal/membership/gms/ServiceConfig.java  |   187 -
 .../internal/membership/gms/Services.java       |   387 -
 .../internal/membership/gms/SuspectMember.java  |    58 -
 .../membership/gms/auth/GMSAuthenticator.java   |   235 -
 .../membership/gms/fd/GMSHealthMonitor.java     |  1357 --
 .../gms/interfaces/Authenticator.java           |    27 -
 .../gms/interfaces/HealthMonitor.java           |    64 -
 .../membership/gms/interfaces/JoinLeave.java    |    67 -
 .../membership/gms/interfaces/Locator.java      |    32 -
 .../membership/gms/interfaces/Manager.java      |   120 -
 .../gms/interfaces/MessageHandler.java          |    30 -
 .../membership/gms/interfaces/Messenger.java    |    81 -
 .../membership/gms/interfaces/Service.java      |    83 -
 .../gms/locator/FindCoordinatorRequest.java     |   148 -
 .../gms/locator/FindCoordinatorResponse.java    |   161 -
 .../membership/gms/locator/GMSLocator.java      |   373 -
 .../membership/gms/locator/GetViewRequest.java  |    49 -
 .../membership/gms/locator/GetViewResponse.java |    64 -
 .../gms/locator/PeerLocatorRequest.java         |    25 -
 .../membership/gms/membership/GMSJoinLeave.java |  2272 ---
 .../membership/gms/messages/HasMemberID.java    |    25 -
 .../gms/messages/HeartbeatMessage.java          |    74 -
 .../gms/messages/HeartbeatRequestMessage.java   |    80 -
 .../gms/messages/InstallViewMessage.java        |   106 -
 .../gms/messages/JoinRequestMessage.java        |    97 -
 .../gms/messages/JoinResponseMessage.java       |   129 -
 .../gms/messages/LeaveRequestMessage.java       |    94 -
 .../gms/messages/NetworkPartitionMessage.java   |    44 -
 .../gms/messages/RemoveMemberMessage.java       |    96 -
 .../gms/messages/SuspectMembersMessage.java     |    91 -
 .../membership/gms/messages/SuspectRequest.java |    72 -
 .../membership/gms/messages/ViewAckMessage.java |   103 -
 .../gms/messenger/AddressManager.java           |   121 -
 .../membership/gms/messenger/GMSPingPonger.java |    65 -
 .../gms/messenger/GMSQuorumChecker.java         |   274 -
 .../membership/gms/messenger/JGAddress.java     |   221 -
 .../gms/messenger/JGroupsMessenger.java         |  1109 --
 .../membership/gms/messenger/StatRecorder.java  |   162 -
 .../membership/gms/messenger/Transport.java     |   163 -
 .../gms/mgr/GMSMembershipManager.java           |  2652 ---
 .../membership/gms/mgr/LocalViewMessage.java    |    85 -
 .../internal/membership/gms/package.html        |    57 -
 .../gemfire/distributed/internal/package.html   |    55 -
 .../internal/streaming/StreamingOperation.java  |   613 -
 .../internal/tcpserver/InfoRequest.java         |    41 -
 .../internal/tcpserver/InfoResponse.java        |    56 -
 .../internal/tcpserver/ShutdownRequest.java     |    39 -
 .../internal/tcpserver/ShutdownResponse.java    |    40 -
 .../internal/tcpserver/TcpClient.java           |   251 -
 .../internal/tcpserver/TcpHandler.java          |    61 -
 .../internal/tcpserver/TcpServer.java           |   546 -
 .../internal/tcpserver/VersionRequest.java      |    41 -
 .../internal/tcpserver/VersionResponse.java     |    54 -
 .../unsafe/RegisterSignalHandlerSupport.java    |    35 -
 .../gemstone/gemfire/distributed/package.html   |    37 -
 .../doc-files/data-serialization-exceptions.fig |   135 -
 .../doc-files/data-serialization-exceptions.gif |   Bin 3666 -> 0 bytes
 .../gemstone/gemfire/i18n/LogWriterI18n.java    |   420 -
 .../com/gemstone/gemfire/i18n/StringId.java     |   161 -
 .../gemfire/internal/AbstractConfig.java        |   429 -
 .../internal/AbstractStatisticsFactory.java     |   340 -
 .../gemfire/internal/ArchiveSplitter.java       |   522 -
 .../com/gemstone/gemfire/internal/Assert.java   |   177 -
 .../gemfire/internal/AvailablePort.java         |   588 -
 .../com/gemstone/gemfire/internal/Banner.java   |   172 -
 .../gemfire/internal/ByteArrayDataInput.java    |   458 -
 .../internal/ByteBufferOutputStream.java        |   102 -
 .../gemfire/internal/ByteBufferWriter.java      |    35 -
 .../gemfire/internal/ClassLoadUtil.java         |   124 -
 .../gemfire/internal/ClassPathLoader.java       |   726 -
 .../com/gemstone/gemfire/internal/Config.java   |   110 -
 .../gemstone/gemfire/internal/ConfigSource.java |   104 -
 .../gemfire/internal/ConnectionWatcher.java     |    41 -
 .../gemfire/internal/CopyOnWriteHashSet.java    |   177 -
 .../com/gemstone/gemfire/internal/DSCODE.java   |   416 -
 .../gemstone/gemfire/internal/DSFIDFactory.java |  1403 --
 .../internal/DSFIDNotFoundException.java        |    52 -
 .../internal/DataSerializableFixedID.java       |   912 -
 .../gemfire/internal/DistributionLocator.java   |   190 -
 .../internal/DummyStatisticsFactory.java        |   134 -
 .../gemfire/internal/DummyStatisticsImpl.java   |   199 -
 .../gemfire/internal/ExternalizableDSFID.java   |    43 -
 .../com/gemstone/gemfire/internal/FileUtil.java |   331 -
 .../gemfire/internal/GemFireStatSampler.java    |   507 -
 .../gemfire/internal/GemFireUtilLauncher.java   |   166 -
 .../gemfire/internal/GemFireVersion.java        |   681 -
 .../internal/GfeConsoleReaderFactory.java       |    87 -
 .../gemfire/internal/HeapDataOutputStream.java  |  1374 --
 .../gemfire/internal/HistogramStats.java        |    82 -
 .../gemfire/internal/HostStatHelper.java        |   289 -
 .../gemfire/internal/HostStatSampler.java       |   546 -
 .../InsufficientDiskSpaceException.java         |    54 -
 .../internal/InternalDataSerializer.java        |  4057 ----
 .../gemfire/internal/InternalEntity.java        |    30 -
 .../gemfire/internal/InternalInstantiator.java  |  1061 -
 .../InternalStatisticsDisabledException.java    |    70 -
 .../gemfire/internal/JarClassLoader.java        |   701 -
 .../gemstone/gemfire/internal/JarDeployer.java  |   639 -
 .../gemfire/internal/LinuxProcFsStatistics.java |   786 -
 .../gemfire/internal/LinuxProcessStats.java     |    79 -
 .../gemfire/internal/LinuxSystemStats.java      |   311 -
 .../gemfire/internal/LocalStatListener.java     |    41 -
 .../internal/LocalStatisticsFactory.java        |   101 -
 .../gemfire/internal/LocalStatisticsImpl.java   |   269 -
 .../gemstone/gemfire/internal/ManagerInfo.java  |   386 -
 .../gemfire/internal/MigrationClient.java       |   260 -
 .../gemfire/internal/MigrationServer.java       |   566 -
 .../gemstone/gemfire/internal/NanoTimer.java    |   186 -
 .../gemfire/internal/NullDataOutputStream.java  |   379 -
 .../gemstone/gemfire/internal/OSProcess.java    |   753 -
 .../gemfire/internal/OSXProcessStats.java       |    83 -
 .../gemfire/internal/OSXSystemStats.java        |   228 -
 .../gemfire/internal/ObjIdConcurrentMap.java    |  1366 --
 .../com/gemstone/gemfire/internal/ObjIdMap.java |   337 -
 .../internal/ObjToByteArraySerializer.java      |    35 -
 .../gemfire/internal/OneTaskOnlyExecutor.java   |   175 -
 .../gemfire/internal/OsStatisticsFactory.java   |    42 -
 .../gemfire/internal/PdxSerializerObject.java   |    33 -
 .../gemfire/internal/ProcessOutputReader.java   |   135 -
 .../gemstone/gemfire/internal/ProcessStats.java |    61 -
 .../gemstone/gemfire/internal/PureJavaMode.java |    80 -
 ...cheduledThreadPoolExecutorWithKeepAlive.java |   313 -
 .../com/gemstone/gemfire/internal/Sendable.java |    42 -
 .../gemfire/internal/SerializationVersions.java |    42 -
 .../com/gemstone/gemfire/internal/SetUtils.java |    68 -
 .../gemfire/internal/SharedLibrary.java         |   226 -
 .../gemfire/internal/SimpleStatSampler.java     |   114 -
 .../com/gemstone/gemfire/internal/SmHelper.java |   183 -
 .../gemstone/gemfire/internal/SocketCloser.java |   257 -
 .../gemfire/internal/SocketCreator.java         |  1364 --
 .../gemfire/internal/SocketIOWithTimeout.java   |   491 -
 .../gemfire/internal/SocketInputStream.java     |   181 -
 .../gemfire/internal/SocketInputWrapper.java    |    93 -
 .../gemfire/internal/SocketOutputStream.java    |   174 -
 .../gemstone/gemfire/internal/SocketUtils.java  |   220 -
 .../gemfire/internal/SolarisProcessStats.java   |   217 -
 .../gemfire/internal/SolarisSystemStats.java    |   428 -
 .../gemfire/internal/StatArchiveFormat.java     |   197 -
 .../gemfire/internal/StatArchiveReader.java     |  3338 ----
 .../gemfire/internal/StatArchiveWriter.java     |   748 -
 .../gemfire/internal/StatSamplerStats.java      |   123 -
 .../internal/StatisticDescriptorImpl.java       |   385 -
 .../gemfire/internal/StatisticsImpl.java        |   454 -
 .../gemfire/internal/StatisticsManager.java     |    79 -
 .../internal/StatisticsTypeFactoryImpl.java     |   141 -
 .../gemfire/internal/StatisticsTypeImpl.java    |   260 -
 .../gemfire/internal/StatisticsTypeXml.java     |   280 -
 .../gemstone/gemfire/internal/SystemAdmin.java  |  2305 ---
 .../gemfire/internal/SystemFailureTestHook.java |    48 -
 .../gemstone/gemfire/internal/SystemTimer.java  |   467 -
 .../gemfire/internal/UniqueIdGenerator.java     |   257 -
 .../com/gemstone/gemfire/internal/VMStats.java  |    87 -
 .../gemfire/internal/VMStatsContract.java       |    36 -
 .../internal/VMStatsContractFactory.java        |    60 -
 .../com/gemstone/gemfire/internal/Version.java  |   636 -
 .../internal/VersionedDataInputStream.java      |    67 -
 .../internal/VersionedDataOutputStream.java     |    57 -
 .../internal/VersionedDataSerializable.java     |    34 -
 .../gemfire/internal/VersionedDataStream.java   |    53 -
 .../gemfire/internal/VersionedObjectInput.java  |   245 -
 .../gemfire/internal/VersionedObjectOutput.java |   199 -
 .../gemfire/internal/WindowsProcessStats.java   |   160 -
 .../gemfire/internal/WindowsSystemStats.java    |   267 -
 .../internal/admin/AdminBridgeServer.java       |    33 -
 .../gemstone/gemfire/internal/admin/Alert.java  |    69 -
 .../gemfire/internal/admin/AlertListener.java   |    29 -
 .../gemfire/internal/admin/ApplicationVM.java   |    36 -
 .../gemfire/internal/admin/CacheCollector.java  |   277 -
 .../gemfire/internal/admin/CacheInfo.java       |   102 -
 .../gemfire/internal/admin/CacheSnapshot.java   |    34 -
 .../admin/ClientHealthMonitoringRegion.java     |   117 -
 .../internal/admin/ClientMembershipMessage.java |   187 -
 .../internal/admin/ClientStatsManager.java      |   263 -
 .../internal/admin/CompoundEntrySnapshot.java   |   201 -
 .../internal/admin/CompoundRegionSnapshot.java  |   387 -
 .../gemfire/internal/admin/DLockInfo.java       |    35 -
 .../gemfire/internal/admin/EntrySnapshot.java   |    29 -
 .../gemfire/internal/admin/EntryValueNode.java  |    53 -
 .../gemfire/internal/admin/GemFireVM.java       |   396 -
 .../gemfire/internal/admin/GfManagerAgent.java  |   112 -
 .../internal/admin/GfManagerAgentConfig.java    |    87 -
 .../internal/admin/GfManagerAgentFactory.java   |    42 -
 .../gemfire/internal/admin/GfObject.java        |    28 -
 .../gemfire/internal/admin/HealthListener.java  |    44 -
 .../internal/admin/JoinLeaveListener.java       |    27 -
 .../gemfire/internal/admin/ListenerIdMap.java   |   318 -
 .../gemfire/internal/admin/RegionSnapshot.java  |    31 -
 .../gemfire/internal/admin/SSLConfig.java       |   131 -
 .../gemfire/internal/admin/SnapshotClient.java  |    38 -
 .../gemstone/gemfire/internal/admin/Stat.java   |    44 -
 .../gemfire/internal/admin/StatAlert.java       |   140 -
 .../internal/admin/StatAlertDefinition.java     |   103 -
 .../internal/admin/StatAlertsManager.java       |   408 -
 .../gemfire/internal/admin/StatListener.java    |    43 -
 .../gemfire/internal/admin/StatResource.java    |    42 -
 .../gemfire/internal/admin/TransportConfig.java |    27 -
 .../admin/doc-files/class-hierarchy.fig         |   224 -
 .../admin/doc-files/class-hierarchy.gif         |   Bin 11971 -> 0 bytes
 .../gemfire/internal/admin/package.html         |    29 -
 .../admin/remote/AddHealthListenerRequest.java  |    89 -
 .../admin/remote/AddHealthListenerResponse.java |    76 -
 .../admin/remote/AddStatListenerRequest.java    |    85 -
 .../admin/remote/AddStatListenerResponse.java   |    79 -
 .../remote/AdminConsoleDisconnectMessage.java   |   125 -
 .../admin/remote/AdminConsoleMessage.java       |    83 -
 .../admin/remote/AdminFailureResponse.java      |    73 -
 .../remote/AdminMultipleReplyProcessor.java     |    91 -
 .../internal/admin/remote/AdminRegion.java      |   581 -
 .../admin/remote/AdminReplyProcessor.java       |   148 -
 .../internal/admin/remote/AdminRequest.java     |   193 -
 .../internal/admin/remote/AdminResponse.java    |    90 -
 .../internal/admin/remote/AdminWaiters.java     |   184 -
 .../admin/remote/AlertLevelChangeMessage.java   |    96 -
 .../admin/remote/AlertListenerMessage.java      |   147 -
 .../admin/remote/AlertsNotificationMessage.java |   110 -
 .../admin/remote/AppCacheSnapshotMessage.java   |   163 -
 .../admin/remote/BridgeServerRequest.java       |   202 -
 .../admin/remote/BridgeServerResponse.java      |   181 -
 .../admin/remote/CacheConfigRequest.java        |    88 -
 .../admin/remote/CacheConfigResponse.java       |   119 -
 .../internal/admin/remote/CacheDisplay.java     |    86 -
 .../internal/admin/remote/CacheInfoRequest.java |    73 -
 .../admin/remote/CacheInfoResponse.java         |    83 -
 .../admin/remote/CancelStatListenerRequest.java |    79 -
 .../remote/CancelStatListenerResponse.java      |    74 -
 .../internal/admin/remote/Cancellable.java      |    27 -
 .../admin/remote/CancellationMessage.java       |    70 -
 .../admin/remote/CancellationRegistry.java      |    95 -
 .../remote/ChangeRefreshIntervalMessage.java    |    98 -
 .../internal/admin/remote/CliLegacyMessage.java |    58 -
 .../admin/remote/ClientHealthStats.java         |   308 -
 .../internal/admin/remote/CompactRequest.java   |   145 -
 .../internal/admin/remote/CompactResponse.java  |    66 -
 .../admin/remote/DestroyEntryMessage.java       |   100 -
 .../admin/remote/DestroyRegionMessage.java      |    96 -
 .../admin/remote/DistributionLocatorId.java     |   394 -
 .../internal/admin/remote/DummyEntry.java       |    77 -
 .../admin/remote/DurableClientInfoRequest.java  |   109 -
 .../admin/remote/DurableClientInfoResponse.java |   108 -
 .../admin/remote/EntryValueNodeImpl.java        |   393 -
 .../admin/remote/FetchDistLockInfoRequest.java  |    68 -
 .../admin/remote/FetchDistLockInfoResponse.java |    93 -
 .../remote/FetchHealthDiagnosisRequest.java     |    91 -
 .../remote/FetchHealthDiagnosisResponse.java    |    92 -
 .../internal/admin/remote/FetchHostRequest.java |    70 -
 .../admin/remote/FetchHostResponse.java         |   173 -
 .../remote/FetchResourceAttributesRequest.java  |    70 -
 .../remote/FetchResourceAttributesResponse.java |    81 -
 .../admin/remote/FetchStatsRequest.java         |    72 -
 .../admin/remote/FetchStatsResponse.java        |   145 -
 .../admin/remote/FetchSysCfgRequest.java        |    76 -
 .../admin/remote/FetchSysCfgResponse.java       |    77 -
 .../remote/FlushAppCacheSnapshotMessage.java    |    69 -
 .../admin/remote/HealthListenerMessage.java     |    89 -
 .../remote/InspectionClasspathManager.java      |    90 -
 .../admin/remote/LicenseInfoRequest.java        |    72 -
 .../admin/remote/LicenseInfoResponse.java       |    79 -
 .../remote/MissingPersistentIDsRequest.java     |   141 -
 .../remote/MissingPersistentIDsResponse.java    |   115 -
 .../admin/remote/ObjectDetailsRequest.java      |   103 -
 .../admin/remote/ObjectDetailsResponse.java     |   155 -
 .../admin/remote/ObjectNamesRequest.java        |    89 -
 .../admin/remote/ObjectNamesResponse.java       |    98 -
 .../PrepareRevokePersistentIDRequest.java       |   127 -
 .../remote/RefreshMemberSnapshotRequest.java    |    74 -
 .../remote/RefreshMemberSnapshotResponse.java   |    95 -
 .../admin/remote/RegionAdminMessage.java        |    66 -
 .../admin/remote/RegionAdminRequest.java        |    74 -
 .../admin/remote/RegionAttributesRequest.java   |    74 -
 .../admin/remote/RegionAttributesResponse.java  |    75 -
 .../internal/admin/remote/RegionRequest.java    |   175 -
 .../internal/admin/remote/RegionResponse.java   |   149 -
 .../admin/remote/RegionSizeRequest.java         |    90 -
 .../admin/remote/RegionSizeResponse.java        |    96 -
 .../admin/remote/RegionStatisticsRequest.java   |    74 -
 .../admin/remote/RegionStatisticsResponse.java  |    75 -
 .../remote/RegionSubRegionSizeRequest.java      |    94 -
 .../remote/RegionSubRegionsSizeResponse.java    |   162 -
 .../internal/admin/remote/RemoteAlert.java      |   205 -
 .../admin/remote/RemoteApplicationVM.java       |    61 -
 .../admin/remote/RemoteBridgeServer.java        |   300 -
 .../internal/admin/remote/RemoteCacheInfo.java  |   192 -
 .../admin/remote/RemoteCacheStatistics.java     |    87 -
 .../internal/admin/remote/RemoteDLockInfo.java  |   115 -
 .../admin/remote/RemoteEntrySnapshot.java       |   131 -
 .../internal/admin/remote/RemoteGemFireVM.java  |   998 -
 .../admin/remote/RemoteGfManagerAgent.java      |  1489 --
 .../internal/admin/remote/RemoteObjectName.java |    95 -
 .../admin/remote/RemoteRegionAttributes.java    |   702 -
 .../admin/remote/RemoteRegionSnapshot.java      |   158 -
 .../internal/admin/remote/RemoteStat.java       |   118 -
 .../admin/remote/RemoteStatResource.java        |   154 -
 .../admin/remote/RemoteTransportConfig.java     |   376 -
 .../remote/RemoveHealthListenerRequest.java     |    80 -
 .../remote/RemoveHealthListenerResponse.java    |    67 -
 .../admin/remote/ResetHealthStatusRequest.java  |    80 -
 .../admin/remote/ResetHealthStatusResponse.java |    72 -
 .../admin/remote/RevokePersistentIDRequest.java |   103 -
 .../remote/RevokePersistentIDResponse.java      |    36 -
 .../admin/remote/RootRegionRequest.java         |    76 -
 .../admin/remote/RootRegionResponse.java        |   115 -
 .../remote/ShutdownAllGatewayHubsRequest.java   |    68 -
 .../admin/remote/ShutdownAllRequest.java        |   301 -
 .../admin/remote/ShutdownAllResponse.java       |    80 -
 .../admin/remote/SnapshotResultMessage.java     |    85 -
 .../remote/StatAlertsManagerAssignMessage.java  |   152 -
 .../admin/remote/StatListenerMessage.java       |   118 -
 .../admin/remote/StoreSysCfgRequest.java        |    81 -
 .../admin/remote/StoreSysCfgResponse.java       |    77 -
 .../internal/admin/remote/SubRegionRequest.java |    74 -
 .../admin/remote/SubRegionResponse.java         |   100 -
 .../internal/admin/remote/TailLogRequest.java   |    62 -
 .../internal/admin/remote/TailLogResponse.java  |   169 -
 .../remote/UpdateAlertDefinitionMessage.java    |   162 -
 .../admin/remote/VersionInfoRequest.java        |    73 -
 .../admin/remote/VersionInfoResponse.java       |    74 -
 .../admin/remote/VersionMismatchAlert.java      |    66 -
 .../gemfire/internal/admin/remote/package.html  |    41 -
 .../admin/statalerts/BaseDecoratorImpl.java     |   224 -
 .../statalerts/DummyStatisticInfoImpl.java      |   146 -
 .../admin/statalerts/FunctionDecoratorImpl.java |   133 -
 .../admin/statalerts/FunctionHelper.java        |   257 -
 .../statalerts/GaugeThresholdDecoratorImpl.java |   156 -
 .../statalerts/MultiAttrDefinitionImpl.java     |   207 -
 .../NumberThresholdDecoratorImpl.java           |   153 -
 .../statalerts/SingleAttrDefinitionImpl.java    |   213 -
 .../admin/statalerts/StatisticInfo.java         |    85 -
 .../admin/statalerts/StatisticInfoImpl.java     |   157 -
 .../cache/AbstractBucketRegionQueue.java        |   563 -
 .../internal/cache/AbstractCacheServer.java     |   407 -
 .../cache/AbstractDiskLRURegionEntry.java       |    42 -
 .../internal/cache/AbstractDiskRegion.java      |   992 -
 .../internal/cache/AbstractDiskRegionEntry.java |    76 -
 .../internal/cache/AbstractLRURegionEntry.java  |    46 -
 .../internal/cache/AbstractLRURegionMap.java    |   861 -
 .../cache/AbstractOplogDiskRegionEntry.java     |   173 -
 .../gemfire/internal/cache/AbstractRegion.java  |  2134 --
 .../internal/cache/AbstractRegionEntry.java     |  2243 ---
 .../internal/cache/AbstractRegionMap.java       |  4164 ----
 .../internal/cache/AbstractUpdateOperation.java |   338 -
 .../gemfire/internal/cache/AcceptHelper.java    |   101 -
 .../cache/AddCacheServerProfileMessage.java     |   161 -
 .../gemfire/internal/cache/BackupLock.java      |    91 -
 .../gemfire/internal/cache/BucketAdvisor.java   |  3002 ---
 .../gemfire/internal/cache/BucketDump.java      |   144 -
 .../internal/cache/BucketNotFoundException.java |    38 -
 .../cache/BucketPersistenceAdvisor.java         |   463 -
 .../gemfire/internal/cache/BucketRegion.java    |  2614 ---
 .../internal/cache/BucketRegionEvictior.java    |    63 -
 .../internal/cache/BucketRegionQueue.java       |   548 -
 .../internal/cache/BucketServerLocation.java    |    88 -
 .../internal/cache/BucketServerLocation66.java  |   113 -
 .../cache/BytesAndBitsForCompactor.java         |    94 -
 .../internal/cache/CacheClientStatus.java       |   101 -
 .../gemfire/internal/cache/CacheConfig.java     |   228 -
 .../cache/CacheDistributionAdvisee.java         |    58 -
 .../cache/CacheDistributionAdvisor.java         |  1260 --
 .../internal/cache/CacheLifecycleListener.java  |    37 -
 .../gemfire/internal/cache/CacheObserver.java   |   190 -
 .../internal/cache/CacheObserverAdapter.java    |   154 -
 .../internal/cache/CacheObserverHolder.java     |    78 -
 .../gemfire/internal/cache/CachePerfStats.java  |  1419 --
 .../internal/cache/CacheServerAdvisor.java      |   173 -
 .../gemfire/internal/cache/CacheServerImpl.java |   821 -
 .../internal/cache/CacheServerLauncher.java     |  1391 --
 .../gemfire/internal/cache/CacheService.java    |    42 -
 .../internal/cache/CacheStatisticsImpl.java     |   111 -
 .../internal/cache/CachedDeserializable.java    |   114 -
 .../cache/CachedDeserializableFactory.java      |   275 -
 .../internal/cache/ClientRegionEventImpl.java   |   117 -
 .../internal/cache/ClientServerObserver.java    |    99 -
 .../cache/ClientServerObserverAdapter.java      |   116 -
 .../cache/ClientServerObserverHolder.java       |    62 -
 .../cache/ClientSubscriptionConfigImpl.java     |   178 -
 .../internal/cache/CloseCacheMessage.java       |   116 -
 .../cache/ClusterConfigurationLoader.java       |   245 -
 .../internal/cache/ColocationHelper.java        |   569 -
 .../internal/cache/CommitReplyException.java    |    73 -
 .../internal/cache/CompactableOplog.java        |    37 -
 .../gemfire/internal/cache/Conflatable.java     |    76 -
 .../internal/cache/ControllerAdvisor.java       |   171 -
 .../internal/cache/CountingDataInputStream.java |   125 -
 .../internal/cache/CreateRegionProcessor.java   |   914 -
 .../internal/cache/CustomEntryExpiryTask.java   |    49 -
 .../cache/CustomEvictionAttributesImpl.java     |    36 -
 .../internal/cache/DataLocationException.java   |    43 -
 .../internal/cache/DestroyOperation.java        |   303 -
 .../cache/DestroyPartitionedRegionMessage.java  |   252 -
 .../internal/cache/DestroyRegionOperation.java  |   547 -
 .../gemfire/internal/cache/DestroyedEntry.java  |    85 -
 .../internal/cache/DirectReplyMessage.java      |    58 -
 .../gemfire/internal/cache/DirectoryHolder.java |   123 -
 .../internal/cache/DiskDirectoryStats.java      |   117 -
 .../gemfire/internal/cache/DiskEntry.java       |  2028 --
 .../gemstone/gemfire/internal/cache/DiskId.java |   730 -
 .../gemfire/internal/cache/DiskInitFile.java    |  2877 ---
 .../gemfire/internal/cache/DiskRegion.java      |   876 -
 .../gemfire/internal/cache/DiskRegionStats.java |   326 -
 .../internal/cache/DiskStoreAttributes.java     |   196 -
 .../gemfire/internal/cache/DiskStoreBackup.java |    98 -
 .../internal/cache/DiskStoreFactoryImpl.java    |   291 -
 .../gemfire/internal/cache/DiskStoreImpl.java   |  4873 -----
 .../internal/cache/DiskStoreMonitor.java        |   413 -
 .../internal/cache/DiskStoreObserver.java       |    63 -
 .../gemfire/internal/cache/DiskStoreStats.java  |   528 -
 .../gemfire/internal/cache/DiskStoreTask.java   |    27 -
 .../internal/cache/DiskWriteAttributesImpl.java |   564 -
 .../internal/cache/DistPeerTXStateStub.java     |   374 -
 .../cache/DistTXAdjunctCommitMessage.java       |    51 -
 .../internal/cache/DistTXCommitMessage.java     |   500 -
 .../cache/DistTXCoordinatorInterface.java       |    73 -
 .../internal/cache/DistTXPrecommitMessage.java  |   548 -
 .../internal/cache/DistTXRollbackMessage.java   |   507 -
 .../gemfire/internal/cache/DistTXState.java     |   746 -
 .../cache/DistTXStateOnCoordinator.java         |   416 -
 .../internal/cache/DistTXStateProxyImpl.java    |    48 -
 .../DistTXStateProxyImplOnCoordinator.java      |  1068 -
 .../cache/DistTXStateProxyImplOnDatanode.java   |   128 -
 .../cache/DistributedCacheOperation.java        |  1615 --
 .../cache/DistributedClearOperation.java        |   356 -
 .../cache/DistributedPutAllOperation.java       |  1384 --
 .../internal/cache/DistributedRegion.java       |  4303 -----
 ...stributedRegionFunctionStreamingMessage.java |   460 -
 .../cache/DistributedRemoveAllOperation.java    |  1097 --
 .../cache/DistributedTombstoneOperation.java    |   227 -
 .../internal/cache/DummyCachePerfStats.java     |   485 -
 .../internal/cache/DynamicRegionAttributes.java |    52 -
 .../cache/DynamicRegionFactoryImpl.java         |    44 -
 .../gemfire/internal/cache/EntriesMap.java      |   155 -
 .../gemfire/internal/cache/EntriesSet.java      |   294 -
 .../gemfire/internal/cache/EntryBits.java       |   128 -
 .../gemfire/internal/cache/EntryEventImpl.java  |  3135 ---
 .../gemfire/internal/cache/EntryExpiryTask.java |   358 -
 .../internal/cache/EntryOperationImpl.java      |   119 -
 .../gemfire/internal/cache/EntrySnapshot.java   |   285 -
 .../internal/cache/EnumListenerEvent.java       |   475 -
 .../gemfire/internal/cache/EventID.java         |   804 -
 .../internal/cache/EventStateHelper.java        |   196 -
 .../gemfire/internal/cache/EventTracker.java    |   811 -
 .../internal/cache/EvictionAttributesImpl.java  |   243 -
 .../gemfire/internal/cache/EvictorService.java  |   285 -
 .../internal/cache/ExpirationScheduler.java     |   106 -
 .../gemfire/internal/cache/ExpiryTask.java      |   540 -
 .../internal/cache/ExportDiskRegion.java        |    84 -
 .../gemfire/internal/cache/FilterProfile.java   |  2218 ---
 .../internal/cache/FilterRoutingInfo.java       |   519 -
 .../cache/FindDurableQueueProcessor.java        |   256 -
 .../internal/cache/FindRemoteTXMessage.java     |   281 -
 .../internal/cache/FindVersionTagOperation.java |   254 -
 .../cache/FixedPartitionAttributesImpl.java     |   156 -
 .../internal/cache/ForceReattemptException.java |   121 -
 .../cache/ForceableLinkedBlockingQueue.java     |   864 -
 .../FunctionStreamingOrderedReplyMessage.java   |    64 -
 .../cache/FunctionStreamingReplyMessage.java    |   145 -
 .../internal/cache/GatewayEventFilter.java      |    27 -
 .../internal/cache/GemFireCacheImpl.java        |  5467 ------
 .../internal/cache/GemfireCacheHelper.java      |    38 -
 .../gemfire/internal/cache/GridAdvisor.java     |   442 -
 .../gemfire/internal/cache/HARegion.java        |   618 -
 .../internal/cache/HDFSLRURegionMap.java        |   112 -
 .../gemfire/internal/cache/HDFSRegionMap.java   |    33 -
 .../internal/cache/HDFSRegionMapDelegate.java   |   541 -
 .../internal/cache/HDFSRegionMapImpl.java       |    75 -
 .../internal/cache/HasCachePerfStats.java       |    22 -
 .../internal/cache/IdentityArrayList.java       |   473 -
 .../gemfire/internal/cache/ImageState.java      |    89 -
 .../cache/InMemoryPersistentMemberView.java     |   136 -
 .../internal/cache/IncomingGatewayStatus.java   |    83 -
 .../internal/cache/InitialImageFlowControl.java |   253 -
 .../internal/cache/InitialImageOperation.java   |  4310 -----
 .../gemfire/internal/cache/InlineKeyHelper.java |    71 -
 .../gemfire/internal/cache/InterestEvent.java   |    68 -
 .../gemfire/internal/cache/InterestFilter.java  |    34 -
 .../cache/InterestRegistrationEventImpl.java    |   152 -
 .../gemfire/internal/cache/InternalCache.java   |    52 -
 .../internal/cache/InternalCacheEvent.java      |    87 -
 .../internal/cache/InternalDataView.java        |   255 -
 .../internal/cache/InternalRegionArguments.java |   337 -
 .../internal/cache/InvalidateOperation.java     |   236 -
 .../InvalidatePartitionedRegionMessage.java     |   102 -
 .../cache/InvalidateRegionOperation.java        |   108 -
 .../cache/JtaAfterCompletionMessage.java        |   128 -
 .../cache/JtaBeforeCompletionMessage.java       |    82 -
 .../gemfire/internal/cache/KeyInfo.java         |   129 -
 .../internal/cache/KeyWithRegionContext.java    |    71 -
 .../gemfire/internal/cache/ListOfDeltas.java    |   101 -
 .../internal/cache/LoaderHelperFactory.java     |    40 -
 .../internal/cache/LoaderHelperImpl.java        |   169 -
 .../gemfire/internal/cache/LocalDataSet.java    |   750 -
 .../gemfire/internal/cache/LocalRegion.java     | 12975 -------------
 .../internal/cache/LocalRegionDataView.java     |   273 -
 .../cache/MemberFunctionStreamingMessage.java   |   416 -
 .../cache/MinimumSystemRequirements.java        |    92 -
 .../cache/NetSearchExpirationCalculator.java    |    49 -
 .../gemstone/gemfire/internal/cache/Node.java   |   187 -
 .../internal/cache/NonLocalRegionEntry.java     |   579 -
 .../cache/NonLocalRegionEntryWithStats.java     |    86 -
 .../internal/cache/OffHeapRegionEntry.java      |    42 -
 .../cache/OfflineCompactionDiskRegion.java      |   124 -
 .../gemstone/gemfire/internal/cache/OpType.java |    59 -
 .../gemstone/gemfire/internal/cache/Oplog.java  |  7969 --------
 .../gemfire/internal/cache/OplogSet.java        |    34 -
 .../internal/cache/OrderedTombstoneMap.java     |   123 -
 .../gemfire/internal/cache/OverflowOplog.java   |  1613 --
 .../internal/cache/OverflowOplogSet.java        |   328 -
 .../internal/cache/PRContainsValueFunction.java |    60 -
 .../internal/cache/PRHARedundancyProvider.java  |  2384 ---
 .../internal/cache/PRQueryProcessor.java        |   658 -
 .../internal/cache/PRSystemPropertyGetter.java  |    70 -
 .../internal/cache/PartitionAttributesImpl.java |   828 -
 .../internal/cache/PartitionRegionConfig.java   |   477 -
 .../cache/PartitionRegionConfigValidator.java   |   511 -
 .../internal/cache/PartitionedRegion.java       | 11398 -----------
 .../PartitionedRegionBucketMgmtHelper.java      |    54 -
 .../cache/PartitionedRegionDataStore.java       |  3284 ----
 .../cache/PartitionedRegionDataView.java        |   142 -
 .../cache/PartitionedRegionException.java       |    48 -
 .../internal/cache/PartitionedRegionHelper.java |  1132 --
 .../cache/PartitionedRegionQueryEvaluator.java  |  1486 --
 .../internal/cache/PartitionedRegionStats.java  |  1267 --
 .../internal/cache/PartitionedRegionStatus.java |    86 -
 .../gemfire/internal/cache/PeerTXStateStub.java |   257 -
 .../internal/cache/PersistentOplogSet.java      |  1184 --
 .../internal/cache/PlaceHolderDiskRegion.java   |   207 -
 .../gemfire/internal/cache/PoolFactoryImpl.java |   529 -
 .../gemfire/internal/cache/PoolManagerImpl.java |   336 -
 .../gemfire/internal/cache/PoolStats.java       |   319 -
 .../cache/PreferBytesCachedDeserializable.java  |   157 -
 .../internal/cache/PrimaryBucketException.java  |    49 -
 .../cache/ProfileExchangeProcessor.java         |    41 -
 .../internal/cache/ProxyBucketRegion.java       |   657 -
 .../gemfire/internal/cache/ProxyRegionMap.java  |   794 -
 .../cache/PutAllPartialResultException.java     |   229 -
 .../gemfire/internal/cache/QueuedOperation.java |   196 -
 .../internal/cache/RegionClearedException.java  |    62 -
 .../gemfire/internal/cache/RegionEntry.java     |   519 -
 .../internal/cache/RegionEntryContext.java      |    41 -
 .../internal/cache/RegionEntryFactory.java      |    50 -
 .../gemfire/internal/cache/RegionEventImpl.java |   352 -
 .../internal/cache/RegionEvictorTask.java       |   144 -
 .../internal/cache/RegionExpiryTask.java        |   162 -
 .../internal/cache/RegionFactoryImpl.java       |    50 -
 .../internal/cache/RegionIdleExpiryTask.java    |    73 -
 .../gemfire/internal/cache/RegionListener.java  |    46 -
 .../gemfire/internal/cache/RegionMap.java       |   404 -
 .../internal/cache/RegionMapFactory.java        |    76 -
 .../gemfire/internal/cache/RegionQueue.java     |   158 -
 .../internal/cache/RegionQueueException.java    |    49 -
 .../gemfire/internal/cache/RegionStatus.java    |    88 -
 .../internal/cache/RegionTTLExpiryTask.java     |    75 -
 .../internal/cache/ReleaseClearLockMessage.java |   113 -
 .../cache/ReliableDistributionData.java         |    43 -
 .../internal/cache/ReliableMessageQueue.java    |    66 -
 .../cache/ReliableMessageQueueFactory.java      |    43 -
 .../cache/ReliableMessageQueueFactoryImpl.java  |   230 -
 .../cache/RemoteContainsKeyValueMessage.java    |   342 -
 .../internal/cache/RemoteDestroyMessage.java    |   745 -
 .../internal/cache/RemoteFetchEntryMessage.java |   386 -
 .../cache/RemoteFetchVersionMessage.java        |   261 -
 .../internal/cache/RemoteGetMessage.java        |   462 -
 .../internal/cache/RemoteInvalidateMessage.java |   439 -
 .../cache/RemoteOperationException.java         |   119 -
 .../internal/cache/RemoteOperationMessage.java  |   656 -
 .../RemoteOperationMessageWithDirectReply.java  |    85 -
 .../internal/cache/RemotePutAllMessage.java     |   549 -
 .../internal/cache/RemotePutMessage.java        |  1236 --
 .../internal/cache/RemoteRegionOperation.java   |   224 -
 .../internal/cache/RemoteRemoveAllMessage.java  |   531 -
 .../gemfire/internal/cache/RoleEventImpl.java   |    96 -
 .../cache/SearchLoadAndWriteProcessor.java      |  2802 ---
 .../internal/cache/SendQueueOperation.java      |   191 -
 .../internal/cache/SerializationHelper.java     |    24 -
 .../internal/cache/ServerPingMessage.java       |   136 -
 .../internal/cache/StateFlushOperation.java     |   783 -
 .../cache/StoreAllCachedDeserializable.java     |   159 -
 .../internal/cache/TXBucketRegionState.java     |    37 -
 .../gemfire/internal/cache/TXCommitMessage.java |  2478 ---
 .../gemfire/internal/cache/TXEntry.java         |   274 -
 .../gemfire/internal/cache/TXEntryState.java    |  2270 ---
 .../internal/cache/TXEntryStateFactory.java     |    38 -
 .../internal/cache/TXEntryUserAttrState.java    |    67 -
 .../gemfire/internal/cache/TXEvent.java         |   148 -
 .../internal/cache/TXFarSideCMTracker.java      |   360 -
 .../gemstone/gemfire/internal/cache/TXId.java   |   130 -
 .../gemfire/internal/cache/TXLockRequest.java   |   144 -
 .../gemfire/internal/cache/TXManagerImpl.java   |  1511 --
 .../gemfire/internal/cache/TXMessage.java       |   215 -
 .../internal/cache/TXRegionLockRequestImpl.java |   209 -
 .../gemfire/internal/cache/TXRegionState.java   |   629 -
 .../internal/cache/TXRemoteCommitMessage.java   |   320 -
 .../internal/cache/TXRemoteRollbackMessage.java |    88 -
 .../internal/cache/TXReservationMgr.java        |   154 -
 .../gemfire/internal/cache/TXRmtEvent.java      |   243 -
 .../gemfire/internal/cache/TXState.java         |  1839 --
 .../internal/cache/TXStateInterface.java        |   224 -
 .../gemfire/internal/cache/TXStateProxy.java    |    96 -
 .../internal/cache/TXStateProxyImpl.java        |  1036 -
 .../gemfire/internal/cache/TXStateStub.java     |   577 -
 .../cache/TXSynchronizationRunnable.java        |   160 -
 .../cache/TestHeapThresholdObserver.java        |    62 -
 .../cache/TimestampedEntryEventImpl.java        |    73 -
 .../gemstone/gemfire/internal/cache/Token.java  |   301 -
 .../internal/cache/TombstoneService.java        |  1007 -
 .../internal/cache/TransactionMessage.java      |    75 -
 .../gemfire/internal/cache/TxEntryFactory.java  |    35 -
 .../internal/cache/UnsharedImageState.java      |   293 -
 .../cache/UpdateAttributesProcessor.java        |   553 -
 .../cache/UpdateEntryVersionOperation.java      |   195 -
 .../gemfire/internal/cache/UpdateOperation.java |   629 -
 .../cache/UserSpecifiedDiskStoreAttributes.java |   191 -
 .../cache/UserSpecifiedRegionAttributes.java    |   624 -
 .../internal/cache/VMCachedDeserializable.java  |   263 -
 .../gemfire/internal/cache/VMLRURegionMap.java  |    65 -
 .../gemfire/internal/cache/VMRegionMap.java     |    39 -
 .../cache/VMStatsDiskLRURegionEntry.java        |    40 -
 .../cache/VMStatsDiskLRURegionEntryHeap.java    |    69 -
 .../VMStatsDiskLRURegionEntryHeapIntKey.java    |   345 -
 .../VMStatsDiskLRURegionEntryHeapLongKey.java   |   345 -
 .../VMStatsDiskLRURegionEntryHeapObjectKey.java |   338 -
 ...VMStatsDiskLRURegionEntryHeapStringKey1.java |   407 -
 ...VMStatsDiskLRURegionEntryHeapStringKey2.java |   448 -
 .../VMStatsDiskLRURegionEntryHeapUUIDKey.java   |   349 -
 .../cache/VMStatsDiskLRURegionEntryOffHeap.java |    69 -
 .../VMStatsDiskLRURegionEntryOffHeapIntKey.java |   394 -
 ...VMStatsDiskLRURegionEntryOffHeapLongKey.java |   394 -
 ...StatsDiskLRURegionEntryOffHeapObjectKey.java |   387 -
 ...tatsDiskLRURegionEntryOffHeapStringKey1.java |   456 -
 ...tatsDiskLRURegionEntryOffHeapStringKey2.java |   497 -
 ...VMStatsDiskLRURegionEntryOffHeapUUIDKey.java |   398 -
 .../internal/cache/VMStatsDiskRegionEntry.java  |    39 -
 .../cache/VMStatsDiskRegionEntryHeap.java       |    69 -
 .../cache/VMStatsDiskRegionEntryHeapIntKey.java |   248 -
 .../VMStatsDiskRegionEntryHeapLongKey.java      |   248 -
 .../VMStatsDiskRegionEntryHeapObjectKey.java    |   241 -
 .../VMStatsDiskRegionEntryHeapStringKey1.java   |   310 -
 .../VMStatsDiskRegionEntryHeapStringKey2.java   |   351 -
 .../VMStatsDiskRegionEntryHeapUUIDKey.java      |   252 -
 .../cache/VMStatsDiskRegionEntryOffHeap.java    |    69 -
 .../VMStatsDiskRegionEntryOffHeapIntKey.java    |   297 -
 .../VMStatsDiskRegionEntryOffHeapLongKey.java   |   297 -
 .../VMStatsDiskRegionEntryOffHeapObjectKey.java |   290 -
 ...VMStatsDiskRegionEntryOffHeapStringKey1.java |   359 -
 ...VMStatsDiskRegionEntryOffHeapStringKey2.java |   400 -
 .../VMStatsDiskRegionEntryOffHeapUUIDKey.java   |   301 -
 .../internal/cache/VMStatsLRURegionEntry.java   |    43 -
 .../cache/VMStatsLRURegionEntryHeap.java        |    69 -
 .../cache/VMStatsLRURegionEntryHeapIntKey.java  |   256 -
 .../cache/VMStatsLRURegionEntryHeapLongKey.java |   256 -
 .../VMStatsLRURegionEntryHeapObjectKey.java     |   249 -
 .../VMStatsLRURegionEntryHeapStringKey1.java    |   318 -
 .../VMStatsLRURegionEntryHeapStringKey2.java    |   359 -
 .../cache/VMStatsLRURegionEntryHeapUUIDKey.java |   260 -
 .../cache/VMStatsLRURegionEntryOffHeap.java     |    69 -
 .../VMStatsLRURegionEntryOffHeapIntKey.java     |   305 -
 .../VMStatsLRURegionEntryOffHeapLongKey.java    |   305 -
 .../VMStatsLRURegionEntryOffHeapObjectKey.java  |   298 -
 .../VMStatsLRURegionEntryOffHeapStringKey1.java |   367 -
 .../VMStatsLRURegionEntryOffHeapStringKey2.java |   408 -
 .../VMStatsLRURegionEntryOffHeapUUIDKey.java    |   309 -
 .../internal/cache/VMStatsRegionEntry.java      |    39 -
 .../internal/cache/VMStatsRegionEntryHeap.java  |    69 -
 .../cache/VMStatsRegionEntryHeapIntKey.java     |   175 -
 .../cache/VMStatsRegionEntryHeapLongKey.java    |   175 -
 .../cache/VMStatsRegionEntryHeapObjectKey.java  |   168 -
 .../cache/VMStatsRegionEntryHeapStringKey1.java |   237 -
 .../cache/VMStatsRegionEntryHeapStringKey2.java |   278 -
 .../cache/VMStatsRegionEntryHeapUUIDKey.java    |   179 -
 .../cache/VMStatsRegionEntryOffHeap.java        |    69 -
 .../cache/VMStatsRegionEntryOffHeapIntKey.java  |   224 -
 .../cache/VMStatsRegionEntryOffHeapLongKey.java |   224 -
 .../VMStatsRegionEntryOffHeapObjectKey.java     |   217 -
 .../VMStatsRegionEntryOffHeapStringKey1.java    |   286 -
 .../VMStatsRegionEntryOffHeapStringKey2.java    |   327 -
 .../cache/VMStatsRegionEntryOffHeapUUIDKey.java |   228 -
 .../cache/VMThinDiskLRURegionEntry.java         |    39 -
 .../cache/VMThinDiskLRURegionEntryHeap.java     |    69 -
 .../VMThinDiskLRURegionEntryHeapIntKey.java     |   280 -
 .../VMThinDiskLRURegionEntryHeapLongKey.java    |   280 -
 .../VMThinDiskLRURegionEntryHeapObjectKey.java  |   273 -
 .../VMThinDiskLRURegionEntryHeapStringKey1.java |   342 -
 .../VMThinDiskLRURegionEntryHeapStringKey2.java |   383 -
 .../VMThinDiskLRURegionEntryHeapUUIDKey.java    |   284 -
 .../cache/VMThinDiskLRURegionEntryOffHeap.java  |    69 -
 .../VMThinDiskLRURegionEntryOffHeapIntKey.java  |   329 -
 .../VMThinDiskLRURegionEntryOffHeapLongKey.java |   329 -
 ...MThinDiskLRURegionEntryOffHeapObjectKey.java |   322 -
 ...ThinDiskLRURegionEntryOffHeapStringKey1.java |   391 -
 ...ThinDiskLRURegionEntryOffHeapStringKey2.java |   432 -
 .../VMThinDiskLRURegionEntryOffHeapUUIDKey.java |   333 -
 .../internal/cache/VMThinDiskRegionEntry.java   |    41 -
 .../cache/VMThinDiskRegionEntryHeap.java        |    69 -
 .../cache/VMThinDiskRegionEntryHeapIntKey.java  |   182 -
 .../cache/VMThinDiskRegionEntryHeapLongKey.java |   182 -
 .../VMThinDiskRegionEntryHeapObjectKey.java     |   175 -
 .../VMThinDiskRegionEntryHeapStringKey1.java    |   244 -
 .../VMThinDiskRegionEntryHeapStringKey2.java    |   285 -
 .../cache/VMThinDiskRegionEntryHeapUUIDKey.java |   186 -
 .../cache/VMThinDiskRegionEntryOffHeap.java     |    69 -
 .../VMThinDiskRegionEntryOffHeapIntKey.java     |   231 -
 .../VMThinDiskRegionEntryOffHeapLongKey.java    |   231 -
 .../VMThinDiskRegionEntryOffHeapObjectKey.java  |   224 -
 .../VMThinDiskRegionEntryOffHeapStringKey1.java |   293 -
 .../VMThinDiskRegionEntryOffHeapStringKey2.java |   334 -
 .../VMThinDiskRegionEntryOffHeapUUIDKey.java    |   235 -
 .../internal/cache/VMThinLRURegionEntry.java    |    37 -
 .../cache/VMThinLRURegionEntryHeap.java         |    69 -
 .../cache/VMThinLRURegionEntryHeapIntKey.java   |   191 -
 .../cache/VMThinLRURegionEntryHeapLongKey.java  |   191 -
 .../VMThinLRURegionEntryHeapObjectKey.java      |   184 -
 .../VMThinLRURegionEntryHeapStringKey1.java     |   253 -
 .../VMThinLRURegionEntryHeapStringKey2.java     |   294 -
 .../cache/VMThinLRURegionEntryHeapUUIDKey.java  |   195 -
 .../cache/VMThinLRURegionEntryOffHeap.java      |    69 -
 .../VMThinLRURegionEntryOffHeapIntKey.java      |   240 -
 .../VMThinLRURegionEntryOffHeapLongKey.java     |   240 -
 .../VMThinLRURegionEntryOffHeapObjectKey.java   |   233 -
 .../VMThinLRURegionEntryOffHeapStringKey1.java  |   302 -
 .../VMThinLRURegionEntryOffHeapStringKey2.java  |   343 -
 .../VMThinLRURegionEntryOffHeapUUIDKey.java     |   244 -
 .../internal/cache/VMThinRegionEntry.java       |    35 -
 .../internal/cache/VMThinRegionEntryHeap.java   |    71 -
 .../cache/VMThinRegionEntryHeapIntKey.java      |   109 -
 .../cache/VMThinRegionEntryHeapLongKey.java     |   109 -
 .../cache/VMThinRegionEntryHeapObjectKey.java   |   102 -
 .../cache/VMThinRegionEntryHeapStringKey1.java  |   171 -
 .../cache/VMThinRegionEntryHeapStringKey2.java  |   212 -
 .../cache/VMThinRegionEntryHeapUUIDKey.java     |   113 -
 .../cache/VMThinRegionEntryOffHeap.java         |    71 -
 .../cache/VMThinRegionEntryOffHeapIntKey.java   |   158 -
 .../cache/VMThinRegionEntryOffHeapLongKey.java  |   158 -
 .../VMThinRegionEntryOffHeapObjectKey.java      |   151 -
 .../VMThinRegionEntryOffHeapStringKey1.java     |   220 -
 .../VMThinRegionEntryOffHeapStringKey2.java     |   261 -
 .../cache/VMThinRegionEntryOffHeapUUIDKey.java  |   162 -
 .../internal/cache/ValidatingDiskRegion.java    |   519 -
 .../internal/cache/ValueByteWrapper.java        |    70 -
 .../internal/cache/VersionTimestamp.java        |    47 -
 .../cache/VersionedStatsDiskLRURegionEntry.java |    33 -
 .../VersionedStatsDiskLRURegionEntryHeap.java   |    70 -
 ...sionedStatsDiskLRURegionEntryHeapIntKey.java |   430 -
 ...ionedStatsDiskLRURegionEntryHeapLongKey.java |   430 -
 ...nedStatsDiskLRURegionEntryHeapObjectKey.java |   423 -
 ...edStatsDiskLRURegionEntryHeapStringKey1.java |   492 -
 ...edStatsDiskLRURegionEntryHeapStringKey2.java |   533 -
 ...ionedStatsDiskLRURegionEntryHeapUUIDKey.java |   434 -
 ...VersionedStatsDiskLRURegionEntryOffHeap.java |    70 -
 ...nedStatsDiskLRURegionEntryOffHeapIntKey.java |   479 -
 ...edStatsDiskLRURegionEntryOffHeapLongKey.java |   479 -
 ...StatsDiskLRURegionEntryOffHeapObjectKey.java |   472 -
 ...tatsDiskLRURegionEntryOffHeapStringKey1.java |   541 -
 ...tatsDiskLRURegionEntryOffHeapStringKey2.java |   582 -
 ...edStatsDiskLRURegionEntryOffHeapUUIDKey.java |   483 -
 .../cache/VersionedStatsDiskRegionEntry.java    |    33 -
 .../VersionedStatsDiskRegionEntryHeap.java      |    70 -
 ...VersionedStatsDiskRegionEntryHeapIntKey.java |   333 -
 ...ersionedStatsDiskRegionEntryHeapLongKey.java |   333 -
 ...sionedStatsDiskRegionEntryHeapObjectKey.java |   326 -
 ...ionedStatsDiskRegionEntryHeapStringKey1.java |   395 -
 ...ionedStatsDiskRegionEntryHeapStringKey2.java |   436 -
 ...ersionedStatsDiskRegionEntryHeapUUIDKey.java |   337 -
 .../VersionedStatsDiskRegionEntryOffHeap.java   |    70 -
 ...sionedStatsDiskRegionEntryOffHeapIntKey.java |   382 -
 ...ionedStatsDiskRegionEntryOffHeapLongKey.java |   382 -
 ...nedStatsDiskRegionEntryOffHeapObjectKey.java |   375 -
 ...edStatsDiskRegionEntryOffHeapStringKey1.java |   444 -
 ...edStatsDiskRegionEntryOffHeapStringKey2.java |   485 -
 ...ionedStatsDiskRegionEntryOffHeapUUIDKey.java |   386 -
 .../cache/VersionedStatsLRURegionEntry.java     |    34 -
 .../cache/VersionedStatsLRURegionEntryHeap.java |    70 -
 .../VersionedStatsLRURegionEntryHeapIntKey.java |   341 -
 ...VersionedStatsLRURegionEntryHeapLongKey.java |   341 -
 ...rsionedStatsLRURegionEntryHeapObjectKey.java |   334 -
 ...sionedStatsLRURegionEntryHeapStringKey1.java |   403 -
 ...sionedStatsLRURegionEntryHeapStringKey2.java |   444 -
 ...VersionedStatsLRURegionEntryHeapUUIDKey.java |   345 -
 .../VersionedStatsLRURegionEntryOffHeap.java    |    70 -
 ...rsionedStatsLRURegionEntryOffHeapIntKey.java |   390 -
 ...sionedStatsLRURegionEntryOffHeapLongKey.java |   390 -
 ...onedStatsLRURegionEntryOffHeapObjectKey.java |   383 -
 ...nedStatsLRURegionEntryOffHeapStringKey1.java |   452 -
 ...nedStatsLRURegionEntryOffHeapStringKey2.java |   493 -
 ...sionedStatsLRURegionEntryOffHeapUUIDKey.java |   394 -
 .../cache/VersionedStatsRegionEntry.java        |    34 -
 .../cache/VersionedStatsRegionEntryHeap.java    |    69 -
 .../VersionedStatsRegionEntryHeapIntKey.java    |   260 -
 .../VersionedStatsRegionEntryHeapLongKey.java   |   260 -
 .../VersionedStatsRegionEntryHeapObjectKey.java |   253 -
 ...VersionedStatsRegionEntryHeapStringKey1.java |   322 -
 ...VersionedStatsRegionEntryHeapStringKey2.java |   363 -
 .../VersionedStatsRegionEntryHeapUUIDKey.java   |   264 -
 .../cache/VersionedStatsRegionEntryOffHeap.java |    69 -
 .../VersionedStatsRegionEntryOffHeapIntKey.java |   309 -
 ...VersionedStatsRegionEntryOffHeapLongKey.java |   309 -
 ...rsionedStatsRegionEntryOffHeapObjectKey.java |   302 -
 ...sionedStatsRegionEntryOffHeapStringKey1.java |   371 -
 ...sionedStatsRegionEntryOffHeapStringKey2.java |   412 -
 ...VersionedStatsRegionEntryOffHeapUUIDKey.java |   313 -
 .../cache/VersionedThinDiskLRURegionEntry.java  |    33 -
 .../VersionedThinDiskLRURegionEntryHeap.java    |    70 -
 ...rsionedThinDiskLRURegionEntryHeapIntKey.java |   365 -
 ...sionedThinDiskLRURegionEntryHeapLongKey.java |   365 -
 ...onedThinDiskLRURegionEntryHeapObjectKey.java |   358 -
 ...nedThinDiskLRURegionEntryHeapStringKey1.java |   427 -
 ...nedThinDiskLRURegionEntryHeapStringKey2.java |   468 -
 ...sionedThinDiskLRURegionEntryHeapUUIDKey.java |   369 -
 .../VersionedThinDiskLRURegionEntryOffHeap.java |    70 -
 ...onedThinDiskLRURegionEntryOffHeapIntKey.java |   414 -
 ...nedThinDiskLRURegionEntryOffHeapLongKey.java |   414 -
 ...dThinDiskLRURegionEntryOffHeapObjectKey.java |   407 -
 ...ThinDiskLRURegionEntryOffHeapStringKey1.java |   476 -
 ...ThinDiskLRURegionEntryOffHeapStringKey2.java |   517 -
 ...nedThinDiskLRURegionEntryOffHeapUUIDKey.java |   418 -
 .../cache/VersionedThinDiskRegionEntry.java     |    33 -
 .../cache/VersionedThinDiskRegionEntryHeap.java |    70 -
 .../VersionedThinDiskRegionEntryHeapIntKey.java |   267 -
 ...VersionedThinDiskRegionEntryHeapLongKey.java |   267 -
 ...rsionedThinDiskRegionEntryHeapObjectKey.java |   260 -
 ...sionedThinDiskRegionEntryHeapStringKey1.java |   329 -
 ...sionedThinDiskRegionEntryHeapStringKey2.java |   370 -
 ...VersionedThinDiskRegionEntryHeapUUIDKey.java |   271 -
 .../VersionedThinDiskRegionEntryOffHeap.java    |    70 -
 ...rsionedThinDiskRegionEntryOffHeapIntKey.java |   316 -
 ...sionedThinDiskRegionEntryOffHeapLongKey.java |   316 -
 ...onedThinDiskRegionEntryOffHeapObjectKey.java |   309 -
 ...nedThinDiskRegionEntryOffHeapStringKey1.java |   378 -
 ...nedThinDiskRegionEntryOffHeapStringKey2.java |   419 -
 ...sionedThinDiskRegionEntryOffHeapUUIDKey.java |   320 -
 .../cache/VersionedThinLRURegionEntry.java      |    38 -
 .../cache/VersionedThinLRURegionEntryHeap.java  |    69 -
 .../VersionedThinLRURegionEntryHeapIntKey.java  |   276 -
 .../VersionedThinLRURegionEntryHeapLongKey.java |   276 -
 ...ersionedThinLRURegionEntryHeapObjectKey.java |   269 -
 ...rsionedThinLRURegionEntryHeapStringKey1.java |   338 -
 ...rsionedThinLRURegionEntryHeapStringKey2.java |   379 -
 .../VersionedThinLRURegionEntryHeapUUIDKey.java |   280 -
 .../VersionedThinLRURegionEntryOffHeap.java     |    69 -
 ...ersionedThinLRURegionEntryOffHeapIntKey.java |   325 -
 ...rsionedThinLRURegionEntryOffHeapLongKey.java |   325 -
 ...ionedThinLRURegionEntryOffHeapObjectKey.java |   318 -
 ...onedThinLRURegionEntryOffHeapStringKey1.java |   387 -
 ...onedThinLRURegionEntryOffHeapStringKey2.java |   428 -
 ...rsionedThinLRURegionEntryOffHeapUUIDKey.java |   329 -
 .../cache/VersionedThinRegionEntry.java         |    33 -
 .../cache/VersionedThinRegionEntryHeap.java     |    69 -
 .../VersionedThinRegionEntryHeapIntKey.java     |   194 -
 .../VersionedThinRegionEntryHeapLongKey.java    |   194 -
 .../VersionedThinRegionEntryHeapObjectKey.java  |   187 -
 .../VersionedThinRegionEntryHeapStringKey1.java |   256 -
 .../VersionedThinRegionEntryHeapStringKey2.java |   297 -
 .../VersionedThinRegionEntryHeapUUIDKey.java    |   198 -
 .../cache/VersionedThinRegionEntryOffHeap.java  |    69 -
 .../VersionedThinRegionEntryOffHeapIntKey.java  |   243 -
 .../VersionedThinRegionEntryOffHeapLongKey.java |   243 -
 ...ersionedThinRegionEntryOffHeapObjectKey.java |   236 -
 ...rsionedThinRegionEntryOffHeapStringKey1.java |   305 -
 ...rsionedThinRegionEntryOffHeapStringKey2.java |   346 -
 .../VersionedThinRegionEntryOffHeapUUIDKey.java |   247 -
 .../internal/cache/WrappedCallbackArgument.java |   105 -
 .../cache/WrappedRegionMembershipListener.java  |   200 -
 .../CompressedCachedDeserializable.java         |   197 -
 .../SnappyCompressedCachedDeserializable.java   |    83 -
 .../internal/cache/control/FilterByPath.java    |    66 -
 .../cache/control/HeapMemoryMonitor.java        |   881 -
 .../cache/control/InternalResourceManager.java  |   620 -
 .../internal/cache/control/MemoryEvent.java     |    93 -
 .../cache/control/MemoryThresholds.java         |   282 -
 .../cache/control/OffHeapMemoryMonitor.java     |   562 -
 .../control/PartitionRebalanceDetailsImpl.java  |   159 -
 .../cache/control/RebalanceOperationImpl.java   |   263 -
 .../cache/control/RebalanceResultsImpl.java     |   104 -
 .../internal/cache/control/RegionFilter.java    |    27 -
 .../internal/cache/control/ResourceAdvisor.java |   475 -
 .../internal/cache/control/ResourceEvent.java   |    33 -
 .../cache/control/ResourceListener.java         |    33 -
 .../cache/control/ResourceManagerStats.java     |   607 -
 .../internal/cache/control/ResourceMonitor.java |    54 -
 .../gemfire/internal/cache/delta/Delta.java     |    57 -
 .../cache/doc-files/BucketAdvisor-state.png     |   Bin 39148 -> 0 bytes
 .../internal/cache/doc-files/eventmatrix.xls    |   Bin 24576 -> 0 bytes
 .../cache/doc-files/extensible-hashing.fig      |   159 -
 .../cache/doc-files/extensible-hashing.gif      |   Bin 6605 -> 0 bytes
 .../cache/doc-files/jcache-get-flow.fig         |   349 -
 .../cache/doc-files/jcache-get-flow.pdf         |   Bin 7519 -> 0 bytes
 .../cache/doc-files/jcache-put-flow.fig         |   359 -
 .../cache/doc-files/jcache-put-flow.pdf         |   Bin 7667 -> 0 bytes
 .../doc-files/jcache-update-message-flow.fig    |   334 -
 .../doc-files/jcache-update-message-flow.pdf    |   Bin 5937 -> 0 bytes
 .../cache/doc-files/partitioned-regions.fig     |   255 -
 .../cache/doc-files/partitioned-regions.gif     |   Bin 9273 -> 0 bytes
 .../internal/cache/doc-files/properties.html    |  3937 ----
 .../cache/doc-files/region-implementation.fig   |   262 -
 .../cache/execute/AbstractExecution.java        |   635 -
 .../cache/execute/BucketMovedException.java     |    57 -
 .../cache/execute/DefaultResultCollector.java   |   108 -
 .../DistributedRegionFunctionExecutor.java      |   444 -
 .../DistributedRegionFunctionResultSender.java  |   263 -
 .../DistributedRegionFunctionResultWaiter.java  |    60 -
 .../cache/execute/FunctionContextImpl.java      |   107 -
 .../execute/FunctionExecutionNodePruner.java    |   260 -
 .../cache/execute/FunctionRemoteContext.java    |   131 -
 .../cache/execute/FunctionServiceStats.java     |   440 -
 .../internal/cache/execute/FunctionStats.java   |   536 -
 .../FunctionStreamingResultCollector.java       |   636 -
 .../cache/execute/InternalExecution.java        |   112 -
 .../execute/InternalFunctionException.java      |    78 -
 ...ternalFunctionInvocationTargetException.java |    96 -
 .../cache/execute/InternalFunctionService.java  |   199 -
 .../execute/InternalRegionFunctionContext.java  |    84 -
 .../cache/execute/InternalResultSender.java     |    35 -
 .../cache/execute/LocalResultCollector.java     |    43 -
 .../cache/execute/LocalResultCollectorImpl.java |   212 -
 .../cache/execute/MemberFunctionExecutor.java   |   283 -
 .../execute/MemberFunctionResultSender.java     |   278 -
 .../execute/MemberFunctionResultWaiter.java     |    51 -
 .../cache/execute/MemberMappedArgument.java     |    74 -
 .../execute/MultiRegionFunctionContext.java     |    50 -
 .../execute/MultiRegionFunctionContextImpl.java |    56 -
 .../execute/MultiRegionFunctionExecutor.java    |   416 -
 .../MultiRegionFunctionResultWaiter.java        |    61 -
 .../internal/cache/execute/NoResult.java        |    79 -
 .../PartitionedRegionFunctionExecutor.java      |   378 -
 .../PartitionedRegionFunctionResultSender.java  |   340 -
 .../PartitionedRegionFunctionResultWaiter.java  |   125 -
 .../execute/RegionFunctionContextImpl.java      |   160 -
 .../cache/execute/ServerFunctionExecutor.java   |   428 -
 .../execute/ServerRegionFunctionExecutor.java   |   501 -
 .../ServerToClientFunctionResultSender.java     |   319 -
 .../ServerToClientFunctionResultSender65.java   |   289 -
 .../execute/StreamingFunctionOperation.java     |   127 -
 .../cache/execute/util/CommitFunction.java      |   142 -
 .../util/FindRestEnabledServersFunction.java    |    83 -
 .../execute/util/NestedTransactionFunction.java |   117 -
 .../cache/execute/util/RollbackFunction.java    |   137 -
 .../internal/cache/extension/Extensible.java    |    43 -
 .../internal/cache/extension/Extension.java     |    53 -
 .../cache/extension/ExtensionPoint.java         |    65 -
 .../cache/extension/SimpleExtensionPoint.java   |    85 -
 .../internal/cache/ha/HAContainerMap.java       |   203 -
 .../internal/cache/ha/HAContainerRegion.java    |   170 -
 .../internal/cache/ha/HAContainerWrapper.java   |    47 -
 .../internal/cache/ha/HARegionQueue.java        |  4226 ----
 .../cache/ha/HARegionQueueAttributes.java       |   109 -
 .../internal/cache/ha/HARegionQueueStats.java   |   411 -
 .../internal/cache/ha/QueueRemovalMessage.java  |   240 -
 .../internal/cache/ha/ThreadIdentifier.java     |   330 -
 .../cache/locks/TXLessorDepartureHandler.java   |   102 -
 .../internal/cache/locks/TXLockBatch.java       |   148 -
 .../gemfire/internal/cache/locks/TXLockId.java  |    35 -
 .../internal/cache/locks/TXLockIdImpl.java      |   140 -
 .../internal/cache/locks/TXLockService.java     |   161 -
 .../internal/cache/locks/TXLockServiceImpl.java |   278 -
 .../internal/cache/locks/TXLockToken.java       |    95 -
 .../locks/TXLockUpdateParticipantsMessage.java  |   186 -
 .../locks/TXOriginatorRecoveryProcessor.java    |   312 -
 .../locks/TXRecoverGrantorMessageProcessor.java |   157 -
 .../cache/locks/TXRegionLockRequest.java        |    39 -
 .../gemfire/internal/cache/lru/EnableLRU.java   |   122 -
 .../gemfire/internal/cache/lru/HeapEvictor.java |   492 -
 .../cache/lru/HeapLRUCapacityController.java    |   335 -
 .../internal/cache/lru/HeapLRUStatistics.java   |    68 -
 .../internal/cache/lru/LRUAlgorithm.java        |   352 -
 .../cache/lru/LRUCapacityController.java        |   356 -
 .../internal/cache/lru/LRUClockNode.java        |    45 -
 .../gemfire/internal/cache/lru/LRUEntry.java    |    32 -
 .../internal/cache/lru/LRUMapCallbacks.java     |    61 -
 .../internal/cache/lru/LRUStatistics.java       |   210 -
 .../cache/lru/MemLRUCapacityController.java     |   545 -
 .../internal/cache/lru/NewLIFOClockHand.java    |    98 -
 .../internal/cache/lru/NewLRUClockHand.java     |   468 -
 .../internal/cache/lru/OffHeapEvictor.java      |    97 -
 .../gemfire/internal/cache/lru/Sizeable.java    |    63 -
 .../operations/ContainsKeyOperationContext.java |    52 -
 .../gemfire/internal/cache/package.html         |   241 -
 .../AllBucketProfilesUpdateMessage.java         |   170 -
 .../partitioned/BecomePrimaryBucketMessage.java |   332 -
 .../internal/cache/partitioned/Bucket.java      |    80 -
 .../cache/partitioned/BucketBackupMessage.java  |   137 -
 .../cache/partitioned/BucketCountLoadProbe.java |    75 -
 .../partitioned/BucketProfileUpdateMessage.java |   192 -
 .../cache/partitioned/BucketSizeMessage.java    |   286 -
 .../partitioned/ContainsKeyValueMessage.java    |   348 -
 .../cache/partitioned/CreateBucketMessage.java  |   371 -
 .../partitioned/CreateMissingBucketsTask.java   |    70 -
 .../partitioned/DeposePrimaryBucketMessage.java |   285 -
 .../cache/partitioned/DestroyMessage.java       |   621 -
 .../DestroyRegionOnDataStoreMessage.java        |   118 -
 .../partitioned/DumpAllPRConfigMessage.java     |    77 -
 .../cache/partitioned/DumpB2NRegion.java        |   343 -
 .../cache/partitioned/DumpBucketsMessage.java   |   111 -
 .../partitioned/EndBucketCreationMessage.java   |   149 -
 .../partitioned/FetchBulkEntriesMessage.java    |   670 -
 .../cache/partitioned/FetchEntriesMessage.java  |   659 -
 .../cache/partitioned/FetchEntryMessage.java    |   431 -
 .../cache/partitioned/FetchKeysMessage.java     |   574 -
 .../FetchPartitionDetailsMessage.java           |   397 -
 .../cache/partitioned/FlushMessage.java         |   154 -
 .../internal/cache/partitioned/GetMessage.java  |   669 -
 .../partitioned/IdentityRequestMessage.java     |   342 -
 .../partitioned/IdentityUpdateMessage.java      |   167 -
 .../cache/partitioned/IndexCreationMsg.java     |   687 -
 .../cache/partitioned/InterestEventMessage.java |   284 -
 .../cache/partitioned/InternalPRInfo.java       |    44 -
 .../partitioned/InternalPartitionDetails.java   |    45 -
 .../cache/partitioned/InvalidateMessage.java    |   409 -
 .../internal/cache/partitioned/LoadProbe.java   |    33 -
 .../internal/cache/partitioned/LockObject.java  |    42 -
 .../partitioned/ManageBackupBucketMessage.java  |   437 -
 .../cache/partitioned/ManageBucketMessage.java  |   419 -
 .../cache/partitioned/MoveBucketMessage.java    |   324 -
 .../cache/partitioned/OfflineMemberDetails.java |    48 -
 .../partitioned/OfflineMemberDetailsImpl.java   |    79 -
 .../cache/partitioned/PREntriesIterator.java    |    44 -
 .../PRFunctionStreamingResultCollector.java     |   436 -
 .../internal/cache/partitioned/PRLoad.java      |   154 -
 .../PRLocallyDestroyedException.java            |    40 -
 .../cache/partitioned/PRSanityCheckMessage.java |   164 -
 .../cache/partitioned/PRTombstoneMessage.java   |   182 -
 .../PRUpdateEntryVersionMessage.java            |   295 -
 .../partitioned/PartitionMemberInfoImpl.java    |   167 -
 .../cache/partitioned/PartitionMessage.java     |   849 -
 .../PartitionMessageWithDirectReply.java        |   141 -
 .../partitioned/PartitionRegionInfoImpl.java    |   139 -
 ...rtitionedRegionFunctionStreamingMessage.java |   205 -
 .../partitioned/PartitionedRegionObserver.java  |    44 -
 .../PartitionedRegionObserverAdapter.java       |    47 -
 .../PartitionedRegionObserverHolder.java        |    63 -
 .../PartitionedRegionRebalanceOp.java           |   913 -
 .../partitioned/PrimaryRequestMessage.java      |   238 -
 .../cache/partitioned/PutAllPRMessage.java      |   912 -
 .../internal/cache/partitioned/PutMessage.java  |  1380 --
 .../cache/partitioned/QueryMessage.java         |   326 -
 .../cache/partitioned/RecoveryRunnable.java     |    86 -
 .../RedundancyAlreadyMetException.java          |    42 -
 .../cache/partitioned/RedundancyLogger.java     |   395 -
 .../cache/partitioned/RegionAdvisor.java        |  1965 --
 .../partitioned/RemoteFetchKeysMessage.java     |   489 -
 .../cache/partitioned/RemoteSizeMessage.java    |   363 -
 .../cache/partitioned/RemoveAllPRMessage.java   |   823 -
 .../cache/partitioned/RemoveBucketMessage.java  |   323 -
 .../cache/partitioned/RemoveIndexesMessage.java |   545 -
 .../internal/cache/partitioned/SizeMessage.java |   379 -
 .../cache/partitioned/SizedBasedLoadProbe.java  |    83 -
 .../StreamingPartitionOperation.java            |   471 -
 .../partitioned/rebalance/BucketOperator.java   |   101 -
 .../rebalance/CompositeDirector.java            |   127 -
 .../rebalance/ExplicitMoveDirector.java         |    99 -
 .../partitioned/rebalance/FPRDirector.java      |    79 -
 .../partitioned/rebalance/MoveBuckets.java      |    63 -
 .../partitioned/rebalance/MovePrimaries.java    |    63 -
 .../partitioned/rebalance/MovePrimariesFPR.java |   105 -
 .../rebalance/ParallelBucketOperator.java       |   167 -
 .../rebalance/PartitionedRegionLoadModel.java   |  1640 --
 .../rebalance/PercentageMoveDirector.java       |   165 -
 .../rebalance/RebalanceDirector.java            |    79 -
 .../rebalance/RebalanceDirectorAdapter.java     |    39 -
 .../rebalance/RemoveOverRedundancy.java         |    82 -
 .../rebalance/SatisfyRedundancy.java            |    92 -
 .../rebalance/SatisfyRedundancyFPR.java         |    90 -
 .../rebalance/SimulatedBucketOperator.java      |    55 -
 .../cache/persistence/BackupInspector.java      |   345 -
 .../cache/persistence/BackupManager.java        |   369 -
 .../cache/persistence/BytesAndBits.java         |    51 -
 .../cache/persistence/CanonicalIdHolder.java    |   101 -
 .../CreatePersistentRegionProcessor.java        |    58 -
 .../cache/persistence/DiskExceptionHandler.java |    38 -
 .../persistence/DiskInitFileInterpreter.java    |   148 -
 .../cache/persistence/DiskInitFileParser.java   |   652 -
 .../cache/persistence/DiskRecoveryStore.java    |    64 -
 .../cache/persistence/DiskRegionView.java       |   109 -
 .../cache/persistence/DiskStoreFilter.java      |    57 -
 .../internal/cache/persistence/DiskStoreID.java |   167 -
 .../persistence/MembershipFlushRequest.java     |   141 -
 .../persistence/MembershipViewRequest.java      |   254 -
 .../internal/cache/persistence/OplogType.java   |    32 -
 .../cache/persistence/PRPersistentConfig.java   |    74 -
 .../cache/persistence/PersistenceAdvisor.java   |   190 -
 .../persistence/PersistenceAdvisorImpl.java     |  1300 --
 .../persistence/PersistenceObserverHolder.java  |   102 -
 .../cache/persistence/PersistentMemberID.java   |   171 -
 .../persistence/PersistentMemberManager.java    |   270 -
 .../persistence/PersistentMemberPattern.java    |   229 -
 .../persistence/PersistentMemberState.java      |    41 -
 .../cache/persistence/PersistentMemberView.java |   150 -
 .../persistence/PersistentMembershipView.java   |   112 -
 .../persistence/PersistentStateListener.java    |    38 -
 .../PersistentStateQueryMessage.java            |   308 -
 .../PersistentStateQueryResults.java            |    57 -
 .../PrepareNewPersistentMemberMessage.java      |   168 -
 .../RemovePersistentMemberMessage.java          |   182 -
 .../cache/persistence/RestoreScript.java        |   223 -
 .../persistence/UninterruptibleFileChannel.java |    29 -
 .../UninterruptibleRandomAccessFile.java        |   251 -
 .../persistence/query/CloseableIterator.java    |    33 -
 .../persistence/query/IdentityExtractor.java    |    26 -
 .../cache/persistence/query/IndexMap.java       |   187 -
 .../cache/persistence/query/ResultBag.java      |    60 -
 .../cache/persistence/query/ResultList.java     |    58 -
 .../cache/persistence/query/ResultMap.java      |   124 -
 .../cache/persistence/query/ResultSet.java      |    60 -
 .../persistence/query/SortKeyExtractor.java     |    21 -
 .../query/TemporaryResultSetFactory.java        |    79 -
 .../persistence/query/mock/ByteComparator.java  |    86 -
 .../mock/CachedDeserializableComparator.java    |    54 -
 .../persistence/query/mock/IndexMapImpl.java    |   278 -
 .../persistence/query/mock/ItrAdapter.java      |    62 -
 .../query/mock/NaturalComparator.java           |    33 -
 .../cache/persistence/query/mock/Pair.java      |    72 -
 .../persistence/query/mock/PairComparator.java  |    46 -
 .../persistence/query/mock/ResultListImpl.java  |    55 -
 .../query/mock/ReverseComparator.java           |    40 -
 .../query/mock/SortedResultBagImpl.java         |    64 -
 .../query/mock/SortedResultMapImpl.java         |   184 -
 .../query/mock/SortedResultSetImpl.java         |    52 -
 .../persistence/soplog/ByteComparator.java      |    56 -
 .../persistence/soplog/CursorIterator.java      |    82 -
 .../soplog/DelegatingSerializedComparator.java  |    38 -
 .../soplog/HFileStoreStatistics.java            |   205 -
 .../persistence/soplog/KeyValueIterator.java    |    43 -
 .../soplog/SortedOplogStatistics.java           |   505 -
 .../cache/persistence/soplog/SortedReader.java  |   256 -
 .../persistence/soplog/TrackedReference.java    |   154 -
 .../region/entry/RegionEntryFactoryBuilder.java |   103 -
 .../snapshot/CacheSnapshotServiceImpl.java      |   130 -
 .../internal/cache/snapshot/ClientExporter.java |   229 -
 .../cache/snapshot/ExportedRegistry.java        |   104 -
 .../internal/cache/snapshot/FlowController.java |   350 -
 .../internal/cache/snapshot/GFSnapshot.java     |   417 -
 .../internal/cache/snapshot/LocalExporter.java  |    58 -
 .../snapshot/RegionSnapshotServiceImpl.java     |   565 -
 .../cache/snapshot/SnapshotFileMapper.java      |    93 -
 .../cache/snapshot/SnapshotOptionsImpl.java     |   124 -
 .../internal/cache/snapshot/SnapshotPacket.java |   270 -
 .../cache/snapshot/WindowedExporter.java        |   401 -
 .../gemfire/internal/cache/tier/Acceptor.java   |   115 -
 .../internal/cache/tier/BatchException.java     |    72 -
 .../internal/cache/tier/CachedRegionHelper.java |   109 -
 .../internal/cache/tier/ClientHandShake.java    |    46 -
 .../gemfire/internal/cache/tier/Command.java    |    36 -
 .../internal/cache/tier/ConnectionProxy.java    |    35 -
 .../internal/cache/tier/InterestType.java       |    64 -
 .../cache/tier/InternalClientMembership.java    |   626 -
 .../internal/cache/tier/MessageType.java        |   569 -
 .../gemfire/internal/cache/tier/package.html    |    23 -
 .../cache/tier/sockets/AcceptorImpl.java        |  1872 --
 .../cache/tier/sockets/BaseCommand.java         |  1625 --
 .../cache/tier/sockets/BaseCommandQuery.java    |   578 -
 .../cache/tier/sockets/CacheClientNotifier.java |  2743 ---
 .../tier/sockets/CacheClientNotifierStats.java  |   295 -
 .../cache/tier/sockets/CacheClientProxy.java    |  3110 ---
 .../tier/sockets/CacheClientProxyStats.java     |   405 -
 .../cache/tier/sockets/CacheClientUpdater.java  |  2007 --
 .../cache/tier/sockets/CacheServerHelper.java   |   187 -
 .../cache/tier/sockets/CacheServerStats.java    |  1148 --
 .../cache/tier/sockets/ChunkedMessage.java      |   376 -
 .../tier/sockets/ClientBlacklistProcessor.java  |   174 -
 .../sockets/ClientDataSerializerMessage.java    |   256 -
 .../cache/tier/sockets/ClientHealthMonitor.java |   972 -
 .../tier/sockets/ClientInstantiatorMessage.java |   230 -
 .../tier/sockets/ClientInterestMessageImpl.java |   274 -
 .../tier/sockets/ClientMarkerMessageImpl.java   |   127 -
 .../cache/tier/sockets/ClientMessage.java       |    46 -
 .../tier/sockets/ClientPingMessageImpl.java     |   111 -
 .../tier/sockets/ClientProxyMembershipID.java   |   623 -
 .../tier/sockets/ClientTombstoneMessage.java    |   188 -
 .../cache/tier/sockets/ClientUpdateMessage.java |   188 -
 .../tier/sockets/ClientUpdateMessageImpl.java   |  1725 --
 .../cache/tier/sockets/ClientUserAuths.java     |   201 -
 .../cache/tier/sockets/CommandInitializer.java  |   342 -
 .../cache/tier/sockets/ConnectionListener.java  |    55 -
 .../tier/sockets/ConnectionListenerAdapter.java |    38 -
 .../cache/tier/sockets/HAEventWrapper.java      |   435 -
 .../internal/cache/tier/sockets/HandShake.java  |  1934 --
 .../tier/sockets/InterestResultPolicyImpl.java  |    59 -
 .../internal/cache/tier/sockets/Message.java    |  1190 --
 .../cache/tier/sockets/MessageStats.java        |    29 -
 .../cache/tier/sockets/ObjectPartList.java      |   273 -
 .../cache/tier/sockets/ObjectPartList651.java   |   166 -
 .../internal/cache/tier/sockets/Part.java       |   457 -
 .../RemoveClientFromBlacklistMessage.java       |   114 -
 .../tier/sockets/SerializedObjectPartList.java  |   132 -
 .../cache/tier/sockets/ServerConnection.java    |  2077 --
 .../tier/sockets/ServerHandShakeProcessor.java  |   464 -
 .../cache/tier/sockets/ServerQueueStatus.java   |   132 -
 .../tier/sockets/ServerResponseMatrix.java      |   141 -
 .../tier/sockets/UnregisterAllInterest.java     |    50 -
 .../cache/tier/sockets/UserAuthAttributes.java  |    81 -
 .../cache/tier/sockets/VersionedObjectList.java |   753 -
 .../cache/tier/sockets/command/AddPdxEnum.java  |    73 -
 .../cache/tier/sockets/command/AddPdxType.java  |    78 -
 .../cache/tier/sockets/command/ClearRegion.java |   150 -
 .../cache/tier/sockets/command/ClientReady.java |    76 -
 .../tier/sockets/command/CloseConnection.java   |    77 -
 .../tier/sockets/command/CommitCommand.java     |   142 -
 .../cache/tier/sockets/command/ContainsKey.java |   145 -
 .../tier/sockets/command/ContainsKey66.java     |   162 -
 .../tier/sockets/command/CreateRegion.java      |   137 -
 .../cache/tier/sockets/command/Default.java     |    52 -
 .../cache/tier/sockets/command/Destroy.java     |   219 -
 .../cache/tier/sockets/command/Destroy65.java   |   340 -
 .../cache/tier/sockets/command/Destroy70.java   |   118 -
 .../tier/sockets/command/DestroyRegion.java     |   175 -
 .../tier/sockets/command/ExecuteFunction.java   |   242 -
 .../tier/sockets/command/ExecuteFunction65.java |   273 -
 .../tier/sockets/command/ExecuteFunction66.java |   431 -
 .../tier/sockets/command/ExecuteFunction70.java |   144 -
 .../sockets/command/ExecuteRegionFunction.java  |   270 -
 .../command/ExecuteRegionFunction61.java        |   292 -
 .../command/ExecuteRegionFunction65.java        |   400 -
 .../command/ExecuteRegionFunction66.java        |   436 -
 .../command/ExecuteRegionFunctionSingleHop.java |   420 -
 .../sockets/command/GatewayReceiverCommand.java |   805 -
 .../cache/tier/sockets/command/Get70.java       |   531 -
 .../cache/tier/sockets/command/GetAll.java      |   260 -
 .../cache/tier/sockets/command/GetAll651.java   |   284 -
 .../cache/tier/sockets/command/GetAll70.java    |   293 -
 .../cache/tier/sockets/command/GetAllForRI.java |    52 -
 .../sockets/command/GetAllWithCallback.java     |   285 -
 .../command/GetClientPRMetadataCommand.java     |   114 -
 .../command/GetClientPRMetadataCommand66.java   |   105 -
 .../GetClientPartitionAttributesCommand.java    |   141 -
 .../GetClientPartitionAttributesCommand66.java  |   158 -
 .../cache/tier/sockets/command/GetEntry70.java  |    77 -
 .../tier/sockets/command/GetEntryCommand.java   |    64 -
 .../sockets/command/GetFunctionAttribute.java   |    81 -
 .../tier/sockets/command/GetPDXEnumById.java    |    73 -
 .../tier/sockets/command/GetPDXIdForEnum.java   |    74 -
 .../tier/sockets/command/GetPDXIdForType.java   |    75 -
 .../tier/sockets/command/GetPDXTypeById.java    |    73 -
 .../tier/sockets/command/GetPdxEnums70.java     |    68 -
 .../tier/sockets/command/GetPdxTypes70.java     |    67 -
 .../cache/tier/sockets/command/Invalid.java     |    49 -
 .../cache/tier/sockets/command/Invalidate.java  |   249 -
 .../tier/sockets/command/Invalidate70.java      |   107 -
 .../cache/tier/sockets/command/KeySet.java      |   193 -
 .../cache/tier/sockets/command/MakePrimary.java |    66 -
 .../tier/sockets/command/ManagementCommand.java |    39 -
 .../cache/tier/sockets/command/PeriodicAck.java |    79 -
 .../cache/tier/sockets/command/Ping.java        |    93 -
 .../cache/tier/sockets/command/Put.java         |   261 -
 .../cache/tier/sockets/command/Put61.java       |   319 -
 .../cache/tier/sockets/command/Put65.java       |   539 -
 .../cache/tier/sockets/command/Put70.java       |   126 -
 .../cache/tier/sockets/command/PutAll.java      |   268 -
 .../cache/tier/sockets/command/PutAll70.java    |   380 -
 .../cache/tier/sockets/command/PutAll80.java    |   469 -
 .../sockets/command/PutAllWithCallback.java     |    53 -
 .../sockets/command/PutUserCredentials.java     |    81 -
 .../cache/tier/sockets/command/Query.java       |   107 -
 .../cache/tier/sockets/command/Query651.java    |   137 -
 .../command/RegisterDataSerializers.java        |   114 -
 .../sockets/command/RegisterInstantiators.java  |   148 -
 .../tier/sockets/command/RegisterInterest.java  |   245 -
 .../sockets/command/RegisterInterest61.java     |   282 -
 .../sockets/command/RegisterInterestList.java   |   253 -
 .../sockets/command/RegisterInterestList61.java |   265 -
 .../sockets/command/RegisterInterestList66.java |   267 -
 .../cache/tier/sockets/command/RemoveAll.java   |   404 -
 .../tier/sockets/command/RemoveUserAuth.java    |    84 -
 .../cache/tier/sockets/command/Request.java     |   278 -
 .../tier/sockets/command/RequestEventValue.java |   176 -
 .../tier/sockets/command/RollbackCommand.java   |    90 -
 .../cache/tier/sockets/command/Size.java        |   167 -
 .../tier/sockets/command/TXFailoverCommand.java |   132 -
 .../command/TXSynchronizationCommand.java       |   209 -
 .../sockets/command/UnregisterInterest.java     |   152 -
 .../sockets/command/UnregisterInterestList.java |   171 -
 .../command/UpdateClientNotification.java       |    79 -
 .../doc-files/communication-architecture.fig    |   158 -
 .../doc-files/communication-architecture.gif    |   Bin 5485 -> 0 bytes
 .../internal/cache/tier/sockets/package.html    |    23 -
 .../cache/tx/AbstractPeerTXRegionStub.java      |    56 -
 .../internal/cache/tx/ClientTXRegionStub.java   |   158 -
 .../internal/cache/tx/ClientTXStateStub.java    |   292 -
 .../cache/tx/DistClientTXStateStub.java         |   140 -
 .../internal/cache/tx/DistTxEntryEvent.java     |   288 -
 .../internal/cache/tx/DistTxKeyInfo.java        |    54 -
 .../cache/tx/DistributedTXRegionStub.java       |   255 -
 .../cache/tx/PartitionedTXRegionStub.java       |   535 -
 .../gemfire/internal/cache/tx/TXRegionStub.java |    65 -
 .../cache/tx/TransactionalOperation.java        |   111 -
 .../cache/versions/CompactVersionHolder.java    |   105 -
 .../ConcurrentCacheModificationException.java   |    41 -
 .../cache/versions/DiskRegionVersionVector.java |   103 -
 .../internal/cache/versions/DiskVersionTag.java |    83 -
 .../internal/cache/versions/RVVException.java   |   207 -
 .../internal/cache/versions/RVVExceptionB.java  |   296 -
 .../internal/cache/versions/RVVExceptionT.java  |   283 -
 .../cache/versions/RegionVersionHolder.java     |   789 -
 .../cache/versions/RegionVersionVector.java     |  1531 --
 .../cache/versions/VMRegionVersionVector.java   |   101 -
 .../internal/cache/versions/VMVersionTag.java   |    74 -
 .../internal/cache/versions/VersionHolder.java  |    57 -
 .../internal/cache/versions/VersionSource.java  |    43 -
 .../internal/cache/versions/VersionStamp.java   |    93 -
 .../internal/cache/versions/VersionTag.java     |   548 -
 .../internal/cache/vmotion/VMotionObserver.java |    44 -
 .../cache/vmotion/VMotionObserverAdapter.java   |    49 -
 .../cache/vmotion/VMotionObserverHolder.java    |    57 -
 .../cache/wan/AbstractGatewaySender.java        |  1331 --
 .../AbstractGatewaySenderEventProcessor.java    |  1353 --
 .../AsyncEventQueueConfigurationException.java  |    73 -
 .../internal/cache/wan/BatchException70.java    |   108 -
 .../cache/wan/DistributedSystemListener.java    |    32 -
 .../cache/wan/GatewayEventFilterImpl.java       |    45 -
 .../cache/wan/GatewayReceiverException.java     |    69 -
 .../cache/wan/GatewayReceiverStats.java         |   278 -
 .../cache/wan/GatewaySenderAdvisor.java         |   747 -
 .../cache/wan/GatewaySenderAttributes.java      |   200 -
 .../GatewaySenderConfigurationException.java    |    49 -
 .../wan/GatewaySenderEventCallbackArgument.java |   201 -
 .../GatewaySenderEventCallbackDispatcher.java   |   203 -
 .../cache/wan/GatewaySenderEventDispatcher.java |    35 -
 .../cache/wan/GatewaySenderEventImpl.java       |  1286 --
 .../cache/wan/GatewaySenderException.java       |    63 -
 .../internal/cache/wan/GatewaySenderStats.java  |   744 -
 .../cache/wan/InternalGatewaySenderFactory.java |    38 -
 .../cache/wan/TransportFilterServerSocket.java  |    40 -
 .../cache/wan/TransportFilterSocket.java        |    78 -
 .../cache/wan/TransportFilterSocketFactory.java |    41 -
 .../internal/cache/wan/WANServiceProvider.java  |    76 -
 .../BucketRegionQueueUnavailableException.java  |    35 -
 ...rentParallelGatewaySenderEventProcessor.java |   376 -
 .../ConcurrentParallelGatewaySenderQueue.java   |   229 -
 .../ParallelGatewaySenderEventProcessor.java    |   245 -
 .../parallel/ParallelGatewaySenderQueue.java    |  1886 --
 .../ParallelQueueBatchRemovalMessage.java       |   279 -
 .../parallel/ParallelQueueRemovalMessage.java   |   282 -
 .../cache/wan/parallel/RREventIDResolver.java   |    54 -
 .../cache/wan/serial/BatchDestroyOperation.java |   243 -
 ...urrentSerialGatewaySenderEventProcessor.java |   386 -
 .../SerialGatewaySenderEventProcessor.java      |   848 -
 .../wan/serial/SerialGatewaySenderQueue.java    |  1300 --
 .../serial/SerialSecondaryGatewayListener.java  |   100 -
 .../internal/cache/wan/spi/WANFactory.java      |    37 -
 .../cache/xmlcache/AbstractXmlParser.java       |    95 -
 .../cache/xmlcache/AsyncEventQueueCreation.java |   222 -
 .../cache/xmlcache/BindingCreation.java         |    61 -
 .../internal/cache/xmlcache/CacheCreation.java  |  1690 --
 .../cache/xmlcache/CacheServerCreation.java     |   257 -
 .../CacheTransactionManagerCreation.java        |   145 -
 .../internal/cache/xmlcache/CacheXml.java       |  1056 -
 .../cache/xmlcache/CacheXmlGenerator.java       |  2850 ---
 .../internal/cache/xmlcache/CacheXmlParser.java |  3795 ----
 .../xmlcache/CacheXmlPropertyResolver.java      |   147 -
 .../CacheXmlPropertyResolverHelper.java         |   152 -
 .../cache/xmlcache/CacheXmlVersion.java         |   132 -
 .../cache/xmlcache/ClientCacheCreation.java     |   306 -
 .../cache/xmlcache/ClientHaQueueCreation.java   |   100 -
 .../internal/cache/xmlcache/Declarable2.java    |    39 -
 .../cache/xmlcache/DefaultEntityResolver2.java  |    75 -
 .../xmlcache/DiskStoreAttributesCreation.java   |   314 -
 .../cache/xmlcache/FunctionServiceCreation.java |    53 -
 .../cache/xmlcache/GatewayReceiverCreation.java |   190 -
 .../cache/xmlcache/GeodeEntityResolver.java     |    58 -
 .../cache/xmlcache/IndexCreationData.java       |   144 -
 .../ParallelAsyncEventQueueCreation.java        |   119 -
 .../xmlcache/ParallelGatewaySenderCreation.java |   123 -
 .../cache/xmlcache/PivotalEntityResolver.java   |    58 -
 .../cache/xmlcache/PropertyResolver.java        |    57 -
 .../xmlcache/RegionAttributesCreation.java      |  1671 --
 .../internal/cache/xmlcache/RegionCreation.java |   969 -
 .../cache/xmlcache/ResourceManagerCreation.java |   215 -
 .../xmlcache/SerialAsyncEventQueueCreation.java |   115 -
 .../xmlcache/SerialGatewaySenderCreation.java   |   115 -
 .../cache/xmlcache/SerializerCreation.java      |   108 -
 .../internal/cache/xmlcache/XmlGenerator.java   |    62 -
 .../cache/xmlcache/XmlGeneratorUtils.java       |   151 -
 .../internal/cache/xmlcache/XmlParser.java      |    58 -
 .../internal/cache/xmlcache/package.html        |    32 -
 .../gemfire/internal/concurrent/AL.java         |   127 -
 .../internal/concurrent/AtomicLong5.java        |    48 -
 .../gemfire/internal/concurrent/Atomics.java    |    67 -
 .../concurrent/CompactConcurrentHashSet2.java   |  2514 ---
 .../internal/concurrent/ConcurrentHashSet.java  |    89 -
 .../gemfire/internal/concurrent/LI.java         |    95 -
 .../internal/concurrent/MapCallback.java        |   269 -
 .../internal/concurrent/MapCallbackAdapter.java |   140 -
 .../gemfire/internal/concurrent/MapResult.java  |    43 -
 .../internal/datasource/AbstractDataSource.java |   241 -
 .../internal/datasource/AbstractPoolCache.java  |   553 -
 .../ClientConnectionFactoryWrapper.java         |    54 -
 .../internal/datasource/ConfigProperty.java     |    65 -
 .../ConfiguredDataSourceProperties.java         |   288 -
 .../ConnectionEventListenerAdaptor.java         |    76 -
 .../datasource/ConnectionPoolCache.java         |    52 -
 .../datasource/ConnectionPoolCacheImpl.java     |   104 -
 .../internal/datasource/ConnectionProvider.java |    50 -
 .../datasource/ConnectionProviderException.java |    67 -
 .../datasource/DataSourceCreateException.java   |    62 -
 .../internal/datasource/DataSourceFactory.java  |   374 -
 .../datasource/DataSourceResources.java         |    49 -
 .../FacetsJCAConnectionManagerImpl.java         |   269 -
 .../datasource/GemFireBasicDataSource.java      |   150 -
 .../datasource/GemFireConnPooledDataSource.java |   225 -
 .../GemFireConnectionPoolManager.java           |   108 -
 .../GemFireTransactionDataSource.java           |   264 -
 .../datasource/JCAConnectionManagerImpl.java    |   220 -
 .../datasource/ManagedPoolCacheImpl.java        |   104 -
 .../internal/datasource/PoolException.java      |    55 -
 .../internal/datasource/TranxPoolCacheImpl.java |   102 -
 .../gemfire/internal/doc-files/cs-maps.fig      |   150 -
 .../gemfire/internal/doc-files/cs-maps.gif      |   Bin 5951 -> 0 bytes
 .../gemfire/internal/doc-files/ds-map.fig       |   105 -
 .../gemfire/internal/doc-files/ds-map.gif       |   Bin 4867 -> 0 bytes
 .../internal/doc-files/merge-log-files.fig      |   153 -
 .../internal/doc-files/merge-log-files.gif      |   Bin 2646 -> 0 bytes
 .../i18n/AbstractStringIdResourceBundle.java    |   156 -
 .../gemfire/internal/i18n/LocalizedStrings.java |  2161 ---
 .../internal/i18n/ParentLocalizedStrings.java   |  2399 ---
 .../gemfire/internal/i18n/StringId.java         |    58 -
 .../internal/io/CompositeOutputStream.java      |   176 -
 .../internal/io/CompositePrintStream.java       |    79 -
 .../gemfire/internal/io/TeeOutputStream.java    |    93 -
 .../gemfire/internal/io/TeePrintStream.java     |    45 -
 .../gemfire/internal/jndi/ContextImpl.java      |   779 -
 .../jndi/InitialContextFactoryImpl.java         |   102 -
 .../gemfire/internal/jndi/JNDIInvoker.java      |   401 -
 .../gemfire/internal/jndi/NameParserImpl.java   |    55 -
 .../gemfire/internal/jta/GlobalTransaction.java |   732 -
 .../gemfire/internal/jta/TransactionImpl.java   |   270 -
 .../internal/jta/TransactionManagerImpl.java    |   867 -
 .../gemfire/internal/jta/TransactionUtils.java  |    59 -
 .../internal/jta/UserTransactionImpl.java       |   145 -
 .../gemstone/gemfire/internal/jta/XidImpl.java  |    94 -
 .../gemfire/internal/lang/ClassUtils.java       |   131 -
 .../gemstone/gemfire/internal/lang/Filter.java  |    30 -
 .../gemfire/internal/lang/InOutParameter.java   |   102 -
 .../gemfire/internal/lang/Initable.java         |    36 -
 .../gemfire/internal/lang/Initializer.java      |    46 -
 .../internal/lang/MutableIdentifiable.java      |    39 -
 .../gemfire/internal/lang/ObjectUtils.java      |   192 -
 .../gemfire/internal/lang/Orderable.java        |    41 -
 .../gemstone/gemfire/internal/lang/Ordered.java |    44 -
 .../gemfire/internal/lang/StringUtils.java      |   716 -
 .../gemfire/internal/lang/SystemUtils.java      |   244 -
 .../gemfire/internal/lang/ThreadUtils.java      |   131 -
 .../gemfire/internal/logging/DateFormatter.java |    94 -
 .../internal/logging/DebugLogWriter.java        |   126 -
 .../internal/logging/GemFireFormatter.java      |   104 -
 .../internal/logging/GemFireHandler.java        |    81 -
 .../gemfire/internal/logging/GemFireLevel.java  |    78 -
 .../internal/logging/InternalLogWriter.java     |   134 -
 .../internal/logging/LocalLogWriter.java        |    95 -
 .../gemfire/internal/logging/LogConfig.java     |    53 -
 .../gemfire/internal/logging/LogFileParser.java |   513 -
 .../gemfire/internal/logging/LogService.java    |   279 -
 .../internal/logging/LogWriterFactory.java      |   109 -
 .../gemfire/internal/logging/LogWriterImpl.java |  1051 -
 .../internal/logging/LoggingThreadGroup.java    |   347 -
 .../internal/logging/ManagerLogWriter.java      |   692 -
 .../gemfire/internal/logging/MergeLogFiles.java |  1008 -
 .../gemfire/internal/logging/PureLogWriter.java |   283 -
 .../logging/SecurityLocalLogWriter.java         |    87 -
 .../internal/logging/SecurityLogConfig.java     |    66 -
 .../internal/logging/SecurityLogWriter.java     |    80 -
 .../logging/SecurityManagerLogWriter.java       |    73 -
 .../gemfire/internal/logging/SortLogFile.java   |   149 -
 .../internal/logging/StandardErrorPrinter.java  |    43 -
 .../internal/logging/StandardOutputPrinter.java |    43 -
 .../internal/logging/log4j/AlertAppender.java   |   351 -
 .../internal/logging/log4j/AppenderContext.java |    80 -
 .../internal/logging/log4j/ConfigLocator.java   |    85 -
 .../internal/logging/log4j/Configurator.java    |   205 -
 .../internal/logging/log4j/FastLogger.java      |    79 -
 .../internal/logging/log4j/GemFireLogger.java   |   923 -
 .../logging/log4j/LocalizedMessage.java         |    81 -
 .../internal/logging/log4j/LogMarker.java       |    98 -
 .../logging/log4j/LogWriterAppender.java        |   212 -
 .../logging/log4j/LogWriterAppenders.java       |   299 -
 .../internal/logging/log4j/LogWriterLogger.java |  2035 --
 .../logging/log4j/ThreadIdPatternConverter.java |    61 -
 .../gemfire/internal/memcached/Command.java     |   501 -
 .../internal/memcached/CommandProcessor.java    |    42 -
 .../internal/memcached/ConnectionHandler.java   |    93 -
 .../gemfire/internal/memcached/KeyWrapper.java  |    95 -
 .../gemfire/internal/memcached/Reply.java       |   121 -
 .../internal/memcached/RequestReader.java       |   291 -
 .../internal/memcached/ResponseStatus.java      |    64 -
 .../internal/memcached/ValueWrapper.java        |   146 -
 .../memcached/commands/AbstractCommand.java     |   223 -
 .../internal/memcached/commands/AddCommand.java |    90 -
 .../memcached/commands/AddQCommand.java         |    30 -
 .../memcached/commands/AppendCommand.java       |    92 -
 .../memcached/commands/AppendQCommand.java      |    29 -
 .../internal/memcached/commands/CASCommand.java |    76 -
 .../memcached/commands/ClientError.java         |    39 -
 .../memcached/commands/DecrementCommand.java    |   173 -
 .../memcached/commands/DecrementQCommand.java   |    29 -
 .../memcached/commands/DeleteCommand.java       |   101 -
 .../memcached/commands/DeleteQCommand.java      |    29 -
 .../memcached/commands/FlushAllCommand.java     |   119 -
 .../memcached/commands/FlushAllQCommand.java    |    29 -
 .../internal/memcached/commands/GATCommand.java |    29 -
 .../memcached/commands/GATQCommand.java         |    29 -
 .../internal/memcached/commands/GetCommand.java |   224 -
 .../memcached/commands/GetKCommand.java         |    30 -
 .../memcached/commands/GetKQCommand.java        |    30 -
 .../memcached/commands/GetQCommand.java         |    38 -
 .../memcached/commands/IncrementCommand.java    |   170 -
 .../memcached/commands/IncrementQCommand.java   |    29 -
 .../memcached/commands/NoOpCommand.java         |    40 -
 .../memcached/commands/NotSupportedCommand.java |    41 -
 .../memcached/commands/PrependCommand.java      |    88 -
 .../memcached/commands/PrependQCommand.java     |    29 -
 .../memcached/commands/QuitCommand.java         |    56 -
 .../memcached/commands/QuitQCommand.java        |    29 -
 .../memcached/commands/ReplaceCommand.java      |   102 -
 .../memcached/commands/ReplaceQCommand.java     |    29 -
 .../internal/memcached/commands/SetCommand.java |    90 -
 .../memcached/commands/SetQCommand.java         |    30 -
 .../memcached/commands/StatsCommand.java        |    50 -
 .../memcached/commands/StorageCommand.java      |   218 -
 .../memcached/commands/TouchCommand.java        |   104 -
 .../memcached/commands/VerbosityCommand.java    |    48 -
 .../memcached/commands/VersionCommand.java      |    49 -
 .../modules/util/RegionConfiguration.java       |   293 -
 .../gemfire/internal/net/SocketUtils.java       |    76 -
 .../internal/offheap/AbstractStoredObject.java  |   107 -
 .../internal/offheap/ByteArrayMemoryChunk.java  |    77 -
 .../internal/offheap/ByteBufferMemoryChunk.java |    90 -
 .../gemfire/internal/offheap/Chunk.java         |   792 -
 .../gemfire/internal/offheap/ChunkFactory.java  |    51 -
 .../gemfire/internal/offheap/ChunkType.java     |    30 -
 .../internal/offheap/ChunkWithHeapForm.java     |    40 -
 .../gemfire/internal/offheap/DataAsAddress.java |   131 -
 .../gemfire/internal/offheap/DataType.java      |   269 -
 ...DisconnectingOutOfOffHeapMemoryListener.java |    77 -
 .../gemfire/internal/offheap/Fragment.java      |   139 -
 .../internal/offheap/FreeListManager.java       |   821 -
 .../gemfire/internal/offheap/GemFireChunk.java  |    47 -
 .../internal/offheap/GemFireChunkFactory.java   |    52 -
 .../internal/offheap/GemFireChunkSlice.java     |    44 -
 .../internal/offheap/LifecycleListener.java     |    98 -
 .../internal/offheap/MemoryAllocator.java       |    64 -
 .../gemfire/internal/offheap/MemoryBlock.java   |    71 -
 .../internal/offheap/MemoryBlockNode.java       |   170 -
 .../gemfire/internal/offheap/MemoryChunk.java   |    47 -
 .../offheap/MemoryChunkWithRefCount.java        |    34 -
 .../internal/offheap/MemoryInspector.java       |    43 -
 .../internal/offheap/MemoryInspectorImpl.java   |    99 -
 .../internal/offheap/MemoryUsageListener.java   |    27 -
 .../offheap/OffHeapCachedDeserializable.java    |   142 -
 .../gemfire/internal/offheap/OffHeapHelper.java |   133 -
 .../internal/offheap/OffHeapMemoryStats.java    |    54 -
 .../offheap/OffHeapRegionEntryHelper.java       |   418 -
 .../internal/offheap/OffHeapStorage.java        |   394 -
 .../offheap/OutOfOffHeapMemoryListener.java     |    44 -
 .../internal/offheap/RefCountChangeInfo.java    |   130 -
 .../internal/offheap/ReferenceCountHelper.java  |   254 -
 .../gemfire/internal/offheap/Releasable.java    |    31 -
 .../offheap/SimpleMemoryAllocatorImpl.java      |   625 -
 .../gemfire/internal/offheap/StoredObject.java  |    95 -
 .../internal/offheap/SyncChunkStack.java        |   141 -
 .../internal/offheap/UnsafeMemoryChunk.java     |   223 -
 .../offheap/annotations/OffHeapIdentifier.java  |    69 -
 .../internal/offheap/annotations/Released.java  |    49 -
 .../internal/offheap/annotations/Retained.java  |    51 -
 .../offheap/annotations/Unretained.java         |    51 -
 .../com/gemstone/gemfire/internal/package.html  |    45 -
 .../internal/process/AttachProcessUtils.java    |    57 -
 .../process/BlockingProcessStreamReader.java    |    73 -
 ...usterConfigurationNotAvailableException.java |    31 -
 .../process/ConnectionFailedException.java      |    50 -
 .../internal/process/ControlFileWatchdog.java   |   158 -
 .../process/ControlNotificationHandler.java     |    32 -
 .../internal/process/ControllableProcess.java   |   132 -
 .../process/FileAlreadyExistsException.java     |    52 -
 .../process/FileControllerParameters.java       |    33 -
 .../internal/process/FileProcessController.java |   162 -
 .../process/LocalProcessController.java         |   478 -
 .../internal/process/LocalProcessLauncher.java  |   128 -
 .../process/MBeanControllerParameters.java      |    37 -
 .../process/MBeanInvocationFailedException.java |    50 -
 .../process/MBeanProcessController.java         |   391 -
 .../internal/process/NativeProcessUtils.java    |    53 -
 .../process/NonBlockingProcessStreamReader.java |   101 -
 .../gemfire/internal/process/PidFile.java       |   169 -
 .../process/PidUnavailableException.java        |    51 -
 .../internal/process/ProcessController.java     |    61 -
 .../process/ProcessControllerFactory.java       |   102 -
 .../process/ProcessControllerParameters.java    |    30 -
 .../process/ProcessLauncherContext.java         |   176 -
 .../internal/process/ProcessStreamReader.java   |   265 -
 .../ProcessTerminatedAbnormallyException.java   |    90 -
 .../gemfire/internal/process/ProcessType.java   |    69 -
 .../gemfire/internal/process/ProcessUtils.java  |   195 -
 .../gemfire/internal/process/StartupStatus.java |    63 -
 .../internal/process/StartupStatusListener.java |    30 -
 .../UnableToControlProcessException.java        |    51 -
 .../AbstractSignalNotificationHandler.java      |   179 -
 .../gemfire/internal/process/signal/Signal.java |   128 -
 .../internal/process/signal/SignalEvent.java    |    53 -
 .../internal/process/signal/SignalListener.java |    34 -
 .../internal/process/signal/SignalType.java     |    44 -
 .../internal/redis/ByteArrayWrapper.java        |   181 -
 .../internal/redis/ByteToCommandDecoder.java    |   189 -
 .../gemstone/gemfire/internal/redis/Coder.java  |   517 -
 .../gemfire/internal/redis/Command.java         |   150 -
 .../gemfire/internal/redis/DoubleWrapper.java   |    79 -
 .../internal/redis/ExecutionHandlerContext.java |   380 -
 .../gemfire/internal/redis/Executor.java        |    38 -
 .../gemfire/internal/redis/Extendable.java      |    33 -
 .../redis/RedisCommandParserException.java      |    45 -
 .../internal/redis/RedisCommandType.java        |  2345 ---
 .../gemfire/internal/redis/RedisConstants.java  |   202 -
 .../gemfire/internal/redis/RedisDataType.java   |   118 -
 .../redis/RedisDataTypeMismatchException.java   |    39 -
 .../internal/redis/RegionCreationException.java |    39 -
 .../gemfire/internal/redis/RegionProvider.java  |   553 -
 .../redis/executor/AbstractExecutor.java        |   139 -
 .../redis/executor/AbstractScanExecutor.java    |    47 -
 .../internal/redis/executor/AuthExecutor.java   |    54 -
 .../internal/redis/executor/DBSizeExecutor.java |    31 -
 .../internal/redis/executor/DelExecutor.java    |    55 -
 .../internal/redis/executor/EchoExecutor.java   |    40 -
 .../internal/redis/executor/ExistsExecutor.java |    49 -
 .../redis/executor/ExpirationExecutor.java      |    41 -
 .../redis/executor/ExpireAtExecutor.java        |    93 -
 .../internal/redis/executor/ExpireExecutor.java |    93 -
 .../redis/executor/FlushAllExecutor.java        |    49 -
 .../internal/redis/executor/KeysExecutor.java   |    70 -
 .../internal/redis/executor/ListQuery.java      |    53 -
 .../redis/executor/PExpireAtExecutor.java       |    32 -
 .../redis/executor/PExpireExecutor.java         |    32 -
 .../internal/redis/executor/PTTLExecutor.java   |    33 -
 .../redis/executor/PersistExecutor.java         |    52 -
 .../internal/redis/executor/PingExecutor.java   |    31 -
 .../internal/redis/executor/QuitExecutor.java   |    31 -
 .../internal/redis/executor/ScanExecutor.java   |   144 -
 .../redis/executor/ShutDownExecutor.java        |    28 -
 .../internal/redis/executor/SortedSetQuery.java |   204 -
 .../internal/redis/executor/TTLExecutor.java    |    77 -
 .../internal/redis/executor/TimeExecutor.java   |    51 -
 .../internal/redis/executor/TypeExecutor.java   |    48 -
 .../internal/redis/executor/UnkownExecutor.java |    31 -
 .../redis/executor/hash/HDelExecutor.java       |    67 -
 .../redis/executor/hash/HExistsExecutor.java    |    66 -
 .../redis/executor/hash/HGetAllExecutor.java    |    63 -
 .../redis/executor/hash/HGetExecutor.java       |    62 -
 .../redis/executor/hash/HIncrByExecutor.java    |   109 -
 .../executor/hash/HIncrByFloatExecutor.java     |    99 -
 .../redis/executor/hash/HKeysExecutor.java      |    63 -
 .../redis/executor/hash/HLenExecutor.java       |    57 -
 .../redis/executor/hash/HMGetExecutor.java      |    72 -
 .../redis/executor/hash/HMSetExecutor.java      |    62 -
 .../redis/executor/hash/HScanExecutor.java      |   163 -
 .../redis/executor/hash/HSetExecutor.java       |    78 -
 .../redis/executor/hash/HSetNXExecutor.java     |    33 -
 .../redis/executor/hash/HValsExecutor.java      |    62 -
 .../redis/executor/hash/HashExecutor.java       |    39 -
 .../internal/redis/executor/hll/Bits.java       |    65 -
 .../executor/hll/CardinalityMergeException.java |    42 -
 .../redis/executor/hll/HllExecutor.java         |    38 -
 .../redis/executor/hll/HyperLogLog.java         |   360 -
 .../redis/executor/hll/HyperLogLogPlus.java     |  1068 -
 .../internal/redis/executor/hll/IBuilder.java   |    41 -
 .../redis/executor/hll/ICardinality.java        |    89 -
 .../internal/redis/executor/hll/MurmurHash.java |   234 -
 .../redis/executor/hll/PFAddExecutor.java       |    65 -
 .../redis/executor/hll/PFCountExecutor.java     |    68 -
 .../redis/executor/hll/PFMergeExecutor.java     |    72 -
 .../redis/executor/hll/RegisterSet.java         |   126 -
 .../internal/redis/executor/hll/Varint.java     |   241 -
 .../redis/executor/list/LIndexExecutor.java     |   118 -
 .../redis/executor/list/LInsertExecutor.java    |    29 -
 .../redis/executor/list/LLenExecutor.java       |    58 -
 .../redis/executor/list/LPopExecutor.java       |    34 -
 .../redis/executor/list/LPushExecutor.java      |    34 -
 .../redis/executor/list/LPushXExecutor.java     |    34 -
 .../redis/executor/list/LRangeExecutor.java     |   113 -
 .../redis/executor/list/LRemExecutor.java       |   116 -
 .../redis/executor/list/LSetExecutor.java       |   108 -
 .../redis/executor/list/LTrimExecutor.java      |   124 -
 .../redis/executor/list/ListExecutor.java       |   150 -
 .../redis/executor/list/PopExecutor.java        |   150 -
 .../redis/executor/list/PushExecutor.java       |    54 -
 .../redis/executor/list/PushXExecutor.java      |    59 -
 .../redis/executor/list/RPopExecutor.java       |    34 -
 .../redis/executor/list/RPushExecutor.java      |    34 -
 .../redis/executor/list/RPushXExecutor.java     |    34 -
 .../redis/executor/set/SAddExecutor.java        |    60 -
 .../redis/executor/set/SCardExecutor.java       |    55 -
 .../redis/executor/set/SDiffExecutor.java       |    46 -
 .../redis/executor/set/SDiffStoreExecutor.java  |    33 -
 .../redis/executor/set/SInterExecutor.java      |    49 -
 .../redis/executor/set/SInterStoreExecutor.java |    34 -
 .../redis/executor/set/SIsMemberExecutor.java   |    62 -
 .../redis/executor/set/SMembersExecutor.java    |    56 -
 .../redis/executor/set/SMoveExecutor.java       |    72 -
 .../redis/executor/set/SPopExecutor.java        |    61 -
 .../redis/executor/set/SRandMemberExecutor.java |    96 -
 .../redis/executor/set/SRemExecutor.java        |    63 -
 .../redis/executor/set/SScanExecutor.java       |   154 -
 .../redis/executor/set/SUnionExecutor.java      |    51 -
 .../redis/executor/set/SUnionStoreExecutor.java |    34 -
 .../redis/executor/set/SetExecutor.java         |    23 -
 .../redis/executor/set/SetOpExecutor.java       |   109 -
 .../executor/sortedset/SortedSetExecutor.java   |    41 -
 .../redis/executor/sortedset/ZAddExecutor.java  |    88 -
 .../redis/executor/sortedset/ZCardExecutor.java |    54 -
 .../executor/sortedset/ZCountExecutor.java      |   145 -
 .../executor/sortedset/ZIncrByExecutor.java     |    77 -
 .../executor/sortedset/ZLexCountExecutor.java   |   143 -
 .../executor/sortedset/ZRangeByLexExecutor.java |   209 -
 .../sortedset/ZRangeByScoreExecutor.java        |   209 -
 .../executor/sortedset/ZRangeExecutor.java      |   125 -
 .../redis/executor/sortedset/ZRankExecutor.java |    98 -
 .../redis/executor/sortedset/ZRemExecutor.java  |    64 -
 .../sortedset/ZRemRangeByLexExecutor.java       |   153 -
 .../sortedset/ZRemRangeByRankExecutor.java      |   121 -
 .../sortedset/ZRemRangeByScoreExecutor.java     |   143 -
 .../sortedset/ZRevRangeByScoreExecutor.java     |    33 -
 .../executor/sortedset/ZRevRangeExecutor.java   |    34 -
 .../executor/sortedset/ZRevRankExecutor.java    |    32 -
 .../redis/executor/sortedset/ZScanExecutor.java |   161 -
 .../executor/sortedset/ZScoreExecutor.java      |    59 -
 .../redis/executor/string/AppendExecutor.java   |    69 -
 .../redis/executor/string/BitCountExecutor.java |    97 -
 .../redis/executor/string/BitOpExecutor.java    |   153 -
 .../redis/executor/string/BitPosExecutor.java   |   134 -
 .../redis/executor/string/DecrByExecutor.java   |   110 -
 .../redis/executor/string/DecrExecutor.java     |    95 -
 .../redis/executor/string/GetBitExecutor.java   |    82 -
 .../redis/executor/string/GetExecutor.java      |    51 -
 .../redis/executor/string/GetRangeExecutor.java |    98 -
 .../redis/executor/string/GetSetExecutor.java   |    59 -
 .../redis/executor/string/IncrByExecutor.java   |   107 -
 .../executor/string/IncrByFloatExecutor.java    |   122 -
 .../redis/executor/string/IncrExecutor.java     |    91 -
 .../redis/executor/string/MGetExecutor.java     |    73 -
 .../redis/executor/string/MSetExecutor.java     |    64 -
 .../redis/executor/string/MSetNXExecutor.java   |    88 -
 .../redis/executor/string/PSetEXExecutor.java   |    34 -
 .../redis/executor/string/SetBitExecutor.java   |   106 -
 .../redis/executor/string/SetEXExecutor.java    |    88 -
 .../redis/executor/string/SetExecutor.java      |   154 -
 .../redis/executor/string/SetNXExecutor.java    |    60 -
 .../redis/executor/string/SetRangeExecutor.java |    96 -
 .../redis/executor/string/StringExecutor.java   |    45 -
 .../redis/executor/string/StrlenExecutor.java   |    56 -
 .../executor/transactions/DiscardExecutor.java  |    42 -
 .../executor/transactions/ExecExecutor.java     |    88 -
 .../executor/transactions/MultiExecutor.java    |    47 -
 .../transactions/TransactionExecutor.java       |    23 -
 .../executor/transactions/UnwatchExecutor.java  |    31 -
 .../executor/transactions/WatchExecutor.java    |    31 -
 .../redis/org/apache/hadoop/fs/GlobPattern.java |   164 -
 .../internal/security/AuthorizeRequest.java     |   769 -
 .../internal/security/AuthorizeRequestPP.java   |   250 -
 .../security/FilterPostAuthorization.java       |   235 -
 .../security/FilterPreAuthorization.java        |   160 -
 .../internal/security/ObjectWithAuthz.java      |    69 -
 .../gemfire/internal/security/package.html      |    25 -
 .../internal/sequencelog/EntryLogger.java       |   210 -
 .../gemfire/internal/sequencelog/GraphType.java |    60 -
 .../internal/sequencelog/MembershipLogger.java  |    47 -
 .../internal/sequencelog/MessageLogger.java     |    40 -
 .../internal/sequencelog/RegionLogger.java      |    88 -
 .../internal/sequencelog/SequenceLogger.java    |    63 -
 .../sequencelog/SequenceLoggerImpl.java         |   149 -
 .../internal/sequencelog/Transition.java        |    88 -
 .../gemfire/internal/sequencelog/io/Filter.java |    32 -
 .../sequencelog/io/GemfireLogConverter.java     |   251 -
 .../internal/sequencelog/io/GraphReader.java    |    90 -
 .../sequencelog/io/InputStreamReader.java       |   103 -
 .../sequencelog/io/OutputStreamAppender.java    |   117 -
 .../internal/sequencelog/model/Edge.java        |   111 -
 .../internal/sequencelog/model/Graph.java       |   105 -
 .../internal/sequencelog/model/GraphID.java     |    95 -
 .../sequencelog/model/GraphReaderCallback.java  |    37 -
 .../internal/sequencelog/model/GraphSet.java    |   165 -
 .../internal/sequencelog/model/Vertex.java      |   124 -
 .../visualization/text/TextDisplay.java         |    85 -
 .../gemfire/internal/shared/NativeCalls.java    |   633 -
 .../internal/shared/NativeCallsJNAImpl.java     |  1217 --
 .../internal/shared/NativeErrorException.java   |    43 -
 .../gemfire/internal/shared/OSType.java         |    93 -
 .../internal/shared/StringPrintWriter.java      |   236 -
 .../internal/shared/TCPSocketOptions.java       |    48 -
 .../internal/size/CachingSingleObjectSizer.java |    51 -
 .../size/InstrumentationSingleObjectSizer.java  |    42 -
 .../gemfire/internal/size/ObjectGraphSizer.java |   252 -
 .../gemfire/internal/size/ObjectTraverser.java  |   205 -
 .../internal/size/ReflectionObjectSizer.java    |    94 -
 .../size/ReflectionSingleObjectSizer.java       |   183 -
 .../internal/size/SingleObjectSizer.java        |    28 -
 .../internal/size/SizeClassOnceObjectSizer.java |    96 -
 .../gemfire/internal/size/SizeOfUtil0.java      |    33 -
 .../internal/size/WellKnownClassSizer.java      |    60 -
 .../internal/statistics/CounterMonitor.java     |    58 -
 .../internal/statistics/GaugeMonitor.java       |    53 -
 .../statistics/IgnoreResourceException.java     |    65 -
 .../MapBasedStatisticsNotification.java         |    88 -
 .../internal/statistics/ResourceInstance.java   |   120 -
 .../internal/statistics/ResourceType.java       |    70 -
 .../internal/statistics/SampleCollector.java    |   786 -
 .../internal/statistics/SampleHandler.java      |    72 -
 .../internal/statistics/SimpleStatisticId.java  |    67 -
 .../statistics/StatArchiveDescriptor.java       |   134 -
 .../internal/statistics/StatArchiveHandler.java |   676 -
 .../statistics/StatArchiveHandlerConfig.java    |    67 -
 .../internal/statistics/StatMonitorHandler.java |   336 -
 .../internal/statistics/StatisticId.java        |    39 -
 .../statistics/StatisticNotFoundException.java  |    62 -
 .../internal/statistics/StatisticsListener.java |    27 -
 .../internal/statistics/StatisticsMonitor.java  |   166 -
 .../statistics/StatisticsNotification.java      |    66 -
 .../internal/statistics/StatisticsSampler.java  |    57 -
 .../internal/statistics/ValueMonitor.java       |   133 -
 .../gemfire/internal/statistics/package.html    |    31 -
 .../stats50/Atomic50StatisticsImpl.java         |   497 -
 .../gemfire/internal/stats50/VMStats50.java     |   703 -
 .../gemfire/internal/tcp/BaseMsgStreamer.java   |    65 -
 .../gemstone/gemfire/internal/tcp/Buffers.java  |   170 -
 .../internal/tcp/ByteBufferInputStream.java     |  1022 -
 .../gemfire/internal/tcp/ConnectExceptions.java |    93 -
 .../gemfire/internal/tcp/Connection.java        |  4153 ----
 .../internal/tcp/ConnectionException.java       |    38 -
 .../gemfire/internal/tcp/ConnectionTable.java   |  1428 --
 .../gemfire/internal/tcp/DirectReplySender.java |   105 -
 .../tcp/ImmutableByteBufferInputStream.java     |    85 -
 .../internal/tcp/MemberShunnedException.java    |    50 -
 .../gemfire/internal/tcp/MsgDestreamer.java     |   536 -
 .../gemfire/internal/tcp/MsgIdGenerator.java    |    54 -
 .../gemfire/internal/tcp/MsgOutputStream.java   |   427 -
 .../gemfire/internal/tcp/MsgReader.java         |   129 -
 .../gemfire/internal/tcp/MsgStreamer.java       |  1004 -
 .../gemfire/internal/tcp/MsgStreamerList.java   |   169 -
 .../gemfire/internal/tcp/NIOMsgReader.java      |   113 -
 .../gemfire/internal/tcp/OioMsgReader.java      |    43 -
 .../internal/tcp/ReenteredConnectException.java |    51 -
 .../gemfire/internal/tcp/ServerDelegate.java    |    47 -
 .../gemfire/internal/tcp/TCPConduit.java        |  1207 --
 .../tcp/VersionedByteBufferInputStream.java     |    79 -
 .../internal/tcp/VersionedMsgStreamer.java      |    60 -
 .../gemstone/gemfire/internal/tcp/package.html  |   138 -
 .../internal/util/AbortableTaskService.java     |   174 -
 .../gemfire/internal/util/ArrayUtils.java       |   369 -
 .../gemfire/internal/util/BlobHelper.java       |   195 -
 .../gemfire/internal/util/Breadcrumbs.java      |   265 -
 .../gemstone/gemfire/internal/util/Bytes.java   |   259 -
 .../gemfire/internal/util/Callable.java         |    48 -
 .../gemfire/internal/util/CollectionUtils.java  |   282 -
 .../gemfire/internal/util/DebuggerSupport.java  |    65 -
 .../gemfire/internal/util/DelayedAction.java    |    65 -
 .../com/gemstone/gemfire/internal/util/Hex.java |    57 -
 .../gemstone/gemfire/internal/util/IOUtils.java |   347 -
 .../internal/util/JavaCommandBuilder.java       |   123 -
 .../gemfire/internal/util/LogFileUtils.java     |   178 -
 .../internal/util/ObjectIntProcedure.java       |    30 -
 .../gemfire/internal/util/PasswordUtil.java     |   132 -
 .../gemfire/internal/util/PluckStacks.java      |   523 -
 .../internal/util/SingletonCallable.java        |    87 -
 .../gemfire/internal/util/SingletonValue.java   |   318 -
 .../internal/util/StackTraceCollector.java      |   169 -
 .../gemfire/internal/util/StopWatch.java        |    80 -
 .../internal/util/SunAPINotFoundException.java  |    46 -
 .../gemfire/internal/util/TransformUtils.java   |   132 -
 .../gemfire/internal/util/Transformer.java      |    33 -
 .../gemfire/internal/util/Versionable.java      |    37 -
 .../internal/util/VersionedArrayList.java       |   346 -
 .../util/concurrent/CopyOnWriteHashMap.java     |   209 -
 .../util/concurrent/CopyOnWriteWeakHashMap.java |    98 -
 .../CustomEntryConcurrentHashMap.java           |  2679 ---
 .../internal/util/concurrent/FutureResult.java  |    93 -
 .../util/concurrent/ReentrantSemaphore.java     |   161 -
 .../util/concurrent/SemaphoreReadWriteLock.java |   217 -
 .../util/concurrent/StoppableCondition.java     |   113 -
 .../concurrent/StoppableCountDownLatch.java     |    98 -
 .../concurrent/StoppableCountDownOrUpLatch.java |   211 -
 .../concurrent/StoppableNonReentrantLock.java   |    92 -
 .../util/concurrent/StoppableReadWriteLock.java |    35 -
 .../util/concurrent/StoppableReentrantLock.java |   131 -
 .../StoppableReentrantReadWriteLock.java        |   244 -
 .../internal/util/doc-files/call-stack.fig      |    34 -
 .../internal/util/doc-files/class-loaders.fig   |    49 -
 .../lang/AttachAPINotFoundException.java        |    67 -
 .../com/gemstone/gemfire/lang/Identifiable.java |    40 -
 .../management/AlreadyRunningException.java     |    46 -
 .../management/AsyncEventQueueMXBean.java       |   118 -
 .../gemfire/management/CacheServerMXBean.java   |   405 -
 .../gemfire/management/ClientHealthStatus.java  |   346 -
 .../gemfire/management/ClientQueueDetail.java   |   165 -
 .../DependenciesNotFoundException.java          |    58 -
 .../gemfire/management/DiskBackupResult.java    |    68 -
 .../gemfire/management/DiskBackupStatus.java    |    73 -
 .../gemfire/management/DiskMetrics.java         |   124 -
 .../gemfire/management/DiskStoreMXBean.java     |   221 -
 .../DistributedLockServiceMXBean.java           |    66 -
 .../management/DistributedRegionMXBean.java     |   317 -
 .../management/DistributedSystemMXBean.java     |   696 -
 .../management/EvictionAttributesData.java      |   112 -
 .../FixedPartitionAttributesData.java           |    95 -
 .../management/GatewayReceiverMXBean.java       |   216 -
 .../gemfire/management/GatewaySenderMXBean.java |   257 -
 .../gemfire/management/GemFireProperties.java   |  1589 --
 .../gemfire/management/JMXNotificationType.java |   208 -
 .../management/JMXNotificationUserData.java     |    46 -
 .../gemstone/gemfire/management/JVMMetrics.java |   151 -
 .../gemfire/management/LocatorMXBean.java       |    76 -
 .../gemfire/management/LockServiceMXBean.java   |    89 -
 .../gemfire/management/ManagementException.java |    88 -
 .../gemfire/management/ManagementService.java   |   427 -
 .../gemfire/management/ManagerMXBean.java       |    90 -
 .../gemfire/management/MemberMXBean.java        |   866 -
 .../management/MembershipAttributesData.java    |   113 -
 .../gemfire/management/NetworkMetrics.java      |    59 -
 .../gemstone/gemfire/management/OSMetrics.java  |   231 -
 .../management/PartitionAttributesData.java     |   146 -
 .../management/PersistentMemberDetails.java     |    68 -
 .../management/RegionAttributesData.java        |   438 -
 .../gemfire/management/RegionMXBean.java        |   360 -
 .../gemfire/management/ServerLoadData.java      |    93 -
 .../gemfire/management/cli/CliMetaData.java     |   104 -
 .../cli/CommandProcessingException.java         |   125 -
 .../gemfire/management/cli/CommandService.java  |   205 -
 .../management/cli/CommandServiceException.java |    68 -
 .../management/cli/CommandStatement.java        |    58 -
 .../gemfire/management/cli/ConverterHint.java   |    52 -
 .../gemstone/gemfire/management/cli/Result.java |   130 -
 .../gemfire/management/cli/package.html         |    23 -
 .../gemfire/management/internal/AgentUtil.java  |   131 -
 .../management/internal/AlertDetails.java       |   162 -
 .../management/internal/ArrayConverter.java     |    82 -
 .../internal/BaseManagementService.java         |   185 -
 .../internal/CollectionConverter.java           |   110 -
 .../management/internal/CompositeConverter.java |   146 -
 .../management/internal/EnumConverter.java      |    50 -
 .../management/internal/FederatingManager.java  |   626 -
 .../internal/FederationComponent.java           |   306 -
 .../management/internal/FilterChain.java        |    59 -
 .../management/internal/FilterParam.java        |    71 -
 .../management/internal/IdentityConverter.java  |    47 -
 .../management/internal/JettyHelper.java        |   228 -
 .../management/internal/JmxManagerAdvisee.java  |   149 -
 .../management/internal/JmxManagerAdvisor.java  |   384 -
 .../management/internal/JmxManagerLocator.java  |   241 -
 .../internal/JmxManagerLocatorRequest.java      |   118 -
 .../internal/JmxManagerLocatorResponse.java     |   104 -
 .../management/internal/LocalFilterChain.java   |    63 -
 .../management/internal/LocalManager.java       |   466 -
 .../management/internal/MBeanJMXAdapter.java    |   621 -
 .../management/internal/MBeanProxyFactory.java  |   355 -
 .../internal/MBeanProxyInfoRepository.java      |   171 -
 .../internal/MBeanProxyInvocationHandler.java   |   546 -
 .../internal/MXBeanProxyInvocationHandler.java  |   260 -
 .../management/internal/ManagementAgent.java    |   526 -
 .../internal/ManagementCacheListener.java       |   122 -
 .../internal/ManagementConstants.java           |   187 -
 .../management/internal/ManagementFunction.java |   173 -
 .../internal/ManagementMembershipListener.java  |    94 -
 .../internal/ManagementResourceRepo.java        |   262 -
 .../management/internal/ManagementStrings.java  |   153 -
 .../gemfire/management/internal/Manager.java    |    90 -
 .../internal/ManagerStartupMessage.java         |    76 -
 .../management/internal/MemberMessenger.java    |   105 -
 .../internal/MonitoringRegionCacheListener.java |   116 -
 .../internal/NotificationBroadCasterProxy.java  |    38 -
 .../internal/NotificationCacheListener.java     |   120 -
 .../management/internal/NotificationHub.java    |   206 -
 .../internal/NotificationHubClient.java         |    77 -
 .../management/internal/NotificationKey.java    |    66 -
 .../gemfire/management/internal/OpenMethod.java |   190 -
 .../management/internal/OpenTypeConverter.java  |  1018 -
 .../management/internal/OpenTypeUtil.java       |   117 -
 .../gemfire/management/internal/ProxyInfo.java  |    83 -
 .../management/internal/ProxyInterface.java     |    40 -
 .../management/internal/ProxyListener.java      |   137 -
 .../management/internal/RemoteFilterChain.java  |    95 -
 .../gemfire/management/internal/RestAgent.java  |   344 -
 .../gemfire/management/internal/SSLUtil.java    |    82 -
 .../management/internal/StringBasedFilter.java  |   122 -
 .../internal/SystemManagementService.java       |   845 -
 .../management/internal/TableConverter.java     |   102 -
 .../internal/beans/AggregateHandler.java        |    92 -
 .../internal/beans/AsyncEventQueueMBean.java    |   113 -
 .../beans/AsyncEventQueueMBeanBridge.java       |   121 -
 .../internal/beans/BeanUtilFuncs.java           |   393 -
 .../internal/beans/CacheServerBridge.java       |   772 -
 .../internal/beans/CacheServerMBean.java        |   317 -
 .../internal/beans/DiskRegionBridge.java        |   138 -
 .../internal/beans/DiskStoreMBean.java          |   182 -
 .../internal/beans/DiskStoreMBeanBridge.java    |   288 -
 .../beans/DistributedLockServiceBridge.java     |   227 -
 .../beans/DistributedLockServiceMBean.java      |    68 -
 .../internal/beans/DistributedRegionBridge.java |   683 -
 .../internal/beans/DistributedRegionMBean.java  |   330 -
 .../internal/beans/DistributedSystemBridge.java |  1890 --
 .../internal/beans/DistributedSystemMBean.java  |   461 -
 .../internal/beans/GatewayReceiverMBean.java    |   220 -
 .../beans/GatewayReceiverMBeanBridge.java       |   224 -
 .../internal/beans/GatewaySenderMBean.java      |   226 -
 .../beans/GatewaySenderMBeanBridge.java         |   293 -
 .../internal/beans/HDFSRegionBridge.java        |   174 -
 .../management/internal/beans/LocatorMBean.java |    79 -
 .../internal/beans/LocatorMBeanBridge.java      |   157 -
 .../internal/beans/LockServiceMBean.java        |    94 -
 .../internal/beans/LockServiceMBeanBridge.java  |   129 -
 .../internal/beans/MBeanAggregator.java         |   435 -
 .../internal/beans/ManagementAdapter.java       |  1134 --
 .../internal/beans/ManagementListener.java      |   215 -
 .../management/internal/beans/ManagerMBean.java |    71 -
 .../internal/beans/ManagerMBeanBridge.java      |    80 -
 .../management/internal/beans/MemberMBean.java  |   685 -
 .../internal/beans/MemberMBeanBridge.java       |  1993 --
 .../internal/beans/MetricsCalculator.java       |   138 -
 .../internal/beans/PartitionedRegionBridge.java |   317 -
 .../internal/beans/QueryDataFunction.java       |   613 -
 .../management/internal/beans/RegionMBean.java  |   323 -
 .../internal/beans/RegionMBeanBridge.java       |   599 -
 .../beans/RegionMBeanCompositeDataFactory.java  |   229 -
 .../internal/beans/SequenceNumber.java          |    50 -
 .../management/internal/beans/ServerBridge.java |   184 -
 .../stats/AggregateRegionStatsMonitor.java      |   298 -
 .../internal/beans/stats/GCStatsMonitor.java    |    94 -
 .../GatewayReceiverClusterStatsMonitor.java     |    80 -
 .../stats/GatewaySenderClusterStatsMonitor.java |    93 -
 .../stats/IntegerStatsDeltaAggregator.java      |    93 -
 .../beans/stats/LongStatsDeltaAggregator.java   |    92 -
 .../internal/beans/stats/MBeanStatsMonitor.java |   120 -
 .../beans/stats/MemberClusterStatsMonitor.java  |   255 -
 .../beans/stats/MemberLevelDiskMonitor.java     |   311 -
 .../beans/stats/RegionClusterStatsMonitor.java  |   475 -
 .../beans/stats/ServerClusterStatsMonitor.java  |    86 -
 .../internal/beans/stats/StatType.java          |    29 -
 .../internal/beans/stats/StatsAggregator.java   |   305 -
 .../beans/stats/StatsAverageLatency.java        |    55 -
 .../internal/beans/stats/StatsKey.java          |   355 -
 .../internal/beans/stats/StatsLatency.java      |    70 -
 .../internal/beans/stats/StatsRate.java         |    92 -
 .../internal/beans/stats/VMStatsMonitor.java    |   129 -
 .../cli/AbstractCliAroundInterceptor.java       |   133 -
 .../internal/cli/CliAroundInterceptor.java      |    36 -
 .../management/internal/cli/CliUtil.java        |   758 -
 .../management/internal/cli/CommandManager.java |   632 -
 .../management/internal/cli/CommandRequest.java |   134 -
 .../internal/cli/CommandResponse.java           |   350 -
 .../internal/cli/CommandResponseBuilder.java    |    88 -
 .../internal/cli/CommandResponseWriter.java     |    66 -
 .../internal/cli/GfshParseResult.java           |   102 -
 .../management/internal/cli/GfshParser.java     |  1520 --
 .../management/internal/cli/Launcher.java       |   315 -
 .../management/internal/cli/LogWrapper.java     |   440 -
 .../internal/cli/MultipleValueAdapter.java      |    39 -
 .../internal/cli/MultipleValueConverter.java    |    60 -
 .../internal/cli/annotation/CliArgument.java    |    88 -
 .../cli/commands/AbstractCommandsSupport.java   |   197 -
 .../internal/cli/commands/ClientCommands.java   |   333 -
 .../internal/cli/commands/ConfigCommands.java   |   490 -
 .../CreateAlterDestroyRegionCommands.java       |  1206 --
 .../internal/cli/commands/DataCommands.java     |  1404 --
 .../internal/cli/commands/DeployCommands.java   |   352 -
 .../cli/commands/DiskStoreCommands.java         |  1466 --
 .../cli/commands/DurableClientCommands.java     |   437 -
 ...ExportImportSharedConfigurationCommands.java |   297 -
 .../internal/cli/commands/FunctionCommands.java |   648 -
 .../internal/cli/commands/GfshHelpCommands.java |   111 -
 .../internal/cli/commands/IndexCommands.java    |   683 -
 .../cli/commands/LauncherLifecycleCommands.java |  2816 ---
 .../internal/cli/commands/MemberCommands.java   |   209 -
 .../cli/commands/MiscellaneousCommands.java     |  2135 --
 .../internal/cli/commands/PDXCommands.java      |   291 -
 .../internal/cli/commands/QueueCommands.java    |   286 -
 .../internal/cli/commands/RegionCommands.java   |   498 -
 .../internal/cli/commands/ShellCommands.java    |  1114 --
 .../internal/cli/commands/StatusCommands.java   |    96 -
 .../internal/cli/commands/WanCommands.java      |  1296 --
 .../cli/commands/dto/RegionAttributesInfo.java  |   164 -
 .../cli/commands/dto/RegionDetails.java         |   231 -
 .../cli/commands/dto/RegionMemberDetails.java   |   199 -
 .../cli/converters/BooleanConverter.java        |    54 -
 .../ClusterMemberIdNameConverter.java           |    80 -
 .../converters/ConnectionEndpointConverter.java |   145 -
 .../internal/cli/converters/DirConverter.java   |   174 -
 .../cli/converters/DirPathConverter.java        |   143 -
 .../cli/converters/DiskStoreNameConverter.java  |    93 -
 .../internal/cli/converters/EnumConverter.java  |    67 -
 .../cli/converters/FilePathConverter.java       |   136 -
 .../cli/converters/FilePathStringConverter.java |   132 -
 .../converters/GatewayReceiverIdsConverter.java |    73 -
 .../converters/GatewaySenderIdConverter.java    |    81 -
 .../internal/cli/converters/HelpConverter.java  |    73 -
 .../cli/converters/HintTopicConverter.java      |    74 -
 .../cli/converters/IndexTypeConverter.java      |    57 -
 .../LocatorDiscoveryConfigConverter.java        |    80 -
 .../cli/converters/LocatorIdNameConverter.java  |    79 -
 .../cli/converters/LogLevelConverter.java       |    64 -
 .../cli/converters/MemberGroupConverter.java    |    83 -
 .../cli/converters/MemberIdNameConverter.java   |    82 -
 .../cli/converters/RegionPathConverter.java     |   100 -
 .../cli/converters/StringArrayConverter.java    |    59 -
 .../cli/converters/StringListConverter.java     |    60 -
 .../cli/domain/AsyncEventQueueDetails.java      |    77 -
 .../internal/cli/domain/CacheServerInfo.java    |    72 -
 .../cli/domain/ConnectToLocatorResult.java      |    56 -
 .../internal/cli/domain/DataCommandRequest.java |   214 -
 .../internal/cli/domain/DataCommandResult.java  |   904 -
 .../internal/cli/domain/DiskStoreDetails.java   |   692 -
 .../cli/domain/DurableCqNamesResult.java        |    64 -
 .../cli/domain/EvictionAttributesInfo.java      |   100 -
 .../domain/FixedPartitionAttributesInfo.java    |    70 -
 .../internal/cli/domain/IndexDetails.java       |   330 -
 .../internal/cli/domain/IndexInfo.java          |   103 -
 .../cli/domain/MemberConfigurationInfo.java     |   118 -
 .../internal/cli/domain/MemberInformation.java  |   202 -
 .../internal/cli/domain/MemberResult.java       |   114 -
 .../cli/domain/PartitionAttributesInfo.java     |   171 -
 .../cli/domain/RegionAttributesInfo.java        |   492 -
 .../internal/cli/domain/RegionDescription.java  |   247 -
 .../cli/domain/RegionDescriptionPerMember.java  |   137 -
 .../internal/cli/domain/RegionInformation.java  |   157 -
 .../cli/domain/StackTracesPerMember.java        |    39 -
 .../cli/domain/SubscriptionQueueSizeResult.java |    51 -
 .../cli/exceptions/CliCommandException.java     |    65 -
 .../exceptions/CliCommandInvalidException.java  |    33 -
 .../CliCommandMultiModeOptionException.java     |    48 -
 .../CliCommandNotAvailableException.java        |    33 -
 .../exceptions/CliCommandOptionException.java   |    53 -
 ...CommandOptionHasMultipleValuesException.java |    33 -
 .../CliCommandOptionInvalidException.java       |    34 -
 .../CliCommandOptionMissingException.java       |    35 -
 .../CliCommandOptionNotApplicableException.java |    36 -
 ...liCommandOptionValueConversionException.java |    36 -
 .../CliCommandOptionValueException.java         |    42 -
 .../CliCommandOptionValueMissingException.java  |    36 -
 .../internal/cli/exceptions/CliException.java   |    21 -
 .../exceptions/CreateSubregionException.java    |    41 -
 .../cli/exceptions/ExceptionGenerator.java      |    46 -
 .../cli/exceptions/ExceptionHandler.java        |   106 -
 .../cli/exceptions/IndexNotFoundException.java  |    35 -
 .../functions/AlterRuntimeConfigFunction.java   |    96 -
 .../cli/functions/ChangeLogLevelFunction.java   |    96 -
 .../cli/functions/CliFunctionResult.java        |   248 -
 .../functions/CloseDurableClientFunction.java   |    77 -
 .../cli/functions/CloseDurableCqFunction.java   |    79 -
 .../cli/functions/ContunuousQueryFunction.java  |   152 -
 .../CreateAsyncEventQueueFunction.java          |   183 -
 .../functions/CreateDefinedIndexesFunction.java |    91 -
 .../cli/functions/CreateDiskStoreFunction.java  |    91 -
 .../cli/functions/CreateIndexFunction.java      |   100 -
 .../cli/functions/DataCommandFunction.java      |  1048 -
 .../internal/cli/functions/DeployFunction.java  |   115 -
 .../functions/DescribeDiskStoreFunction.java    |   259 -
 .../functions/DescribeHDFSStoreFunction.java    |    87 -
 .../cli/functions/DestroyDiskStoreFunction.java |   103 -
 .../cli/functions/DestroyIndexFunction.java     |   122 -
 .../cli/functions/ExportConfigFunction.java     |   132 -
 .../cli/functions/ExportDataFunction.java       |    74 -
 .../ExportSharedConfigurationFunction.java      |    72 -
 .../FetchRegionAttributesFunction.java          |   144 -
 .../FetchSharedConfigurationStatusFunction.java |    54 -
 .../functions/GarbageCollectionFunction.java    |    93 -
 .../GatewayReceiverCreateFunction.java          |   226 -
 .../functions/GatewayReceiverFunctionArgs.java  |    80 -
 .../functions/GatewaySenderCreateFunction.java  |   219 -
 .../functions/GatewaySenderFunctionArgs.java    |   144 -
 .../GetMemberConfigInformationFunction.java     |   213 -
 .../functions/GetMemberInformationFunction.java |   150 -
 .../functions/GetRegionDescriptionFunction.java |    62 -
 .../cli/functions/GetRegionsFunction.java       |    75 -
 .../cli/functions/GetStackTracesFunction.java   |    54 -
 .../GetSubscriptionQueueSizeFunction.java       |   101 -
 .../cli/functions/ImportDataFunction.java       |    70 -
 ...ortSharedConfigurationArtifactsFunction.java |    77 -
 .../functions/ListAsyncEventQueuesFunction.java |   109 -
 .../cli/functions/ListDeployedFunction.java     |   106 -
 .../cli/functions/ListDiskStoresFunction.java   |    85 -
 .../functions/ListDurableCqNamesFunction.java   |    99 -
 .../cli/functions/ListFunctionFunction.java     |   115 -
 .../cli/functions/ListIndexFunction.java        |    74 -
 .../LoadSharedConfigurationFunction.java        |    65 -
 .../internal/cli/functions/LogFileFunction.java |   298 -
 .../cli/functions/MemberRegionFunction.java     |    85 -
 .../cli/functions/MembersForRegionFunction.java |    96 -
 .../internal/cli/functions/NetstatFunction.java |   272 -
 .../cli/functions/RebalanceFunction.java        |   124 -
 .../cli/functions/RegionAlterFunction.java      |   344 -
 .../cli/functions/RegionCreateFunction.java     |   415 -
 .../cli/functions/RegionDestroyFunction.java    |    85 -
 .../cli/functions/RegionFunctionArgs.java       |   764 -
 .../cli/functions/ShutDownFunction.java         |    87 -
 .../cli/functions/UndeployFunction.java         |   133 -
 .../cli/functions/UnregisterFunction.java       |    76 -
 .../cli/functions/UserFunctionExecution.java    |   227 -
 .../management/internal/cli/help/CliTopic.java  |   131 -
 .../internal/cli/help/format/Block.java         |    45 -
 .../internal/cli/help/format/DataNode.java      |    51 -
 .../internal/cli/help/format/Help.java          |    47 -
 .../internal/cli/help/format/NewHelp.java       |    55 -
 .../internal/cli/help/format/Row.java           |    30 -
 .../internal/cli/help/utils/FormatOutput.java   |    35 -
 .../internal/cli/help/utils/HelpUtils.java      |   418 -
 .../internal/cli/i18n/CliStrings.java           |  2231 ---
 .../internal/cli/json/GfJsonArray.java          |   242 -
 .../internal/cli/json/GfJsonException.java      |    37 -
 .../internal/cli/json/GfJsonObject.java         |   393 -
 .../management/internal/cli/json/TypedJson.java |   820 -
 .../internal/cli/modes/CommandModes.java        |   155 -
 .../cli/multistep/CLIMultiStepHelper.java       |   400 -
 .../internal/cli/multistep/CLIRemoteStep.java   |    35 -
 .../internal/cli/multistep/CLIStep.java         |    34 -
 .../cli/multistep/CLIStepExecption.java         |    38 -
 .../cli/multistep/MultiStepCommand.java         |    34 -
 .../internal/cli/parser/Argument.java           |    76 -
 .../internal/cli/parser/AvailabilityTarget.java |   107 -
 .../internal/cli/parser/CommandTarget.java      |   188 -
 .../internal/cli/parser/GfshMethodTarget.java   |   134 -
 .../internal/cli/parser/GfshOptionParser.java   |    40 -
 .../internal/cli/parser/MethodParameter.java    |    42 -
 .../management/internal/cli/parser/Option.java  |   223 -
 .../internal/cli/parser/OptionSet.java          |   132 -
 .../internal/cli/parser/Parameter.java          |   119 -
 .../internal/cli/parser/ParserUtils.java        |   190 -
 .../internal/cli/parser/SyntaxConstants.java    |    37 -
 .../cli/parser/jopt/JoptOptionParser.java       |   300 -
 .../preprocessor/EnclosingCharacters.java       |    35 -
 .../cli/parser/preprocessor/Preprocessor.java   |   140 -
 .../parser/preprocessor/PreprocessorUtils.java  |   338 -
 .../internal/cli/parser/preprocessor/Stack.java |    55 -
 .../cli/parser/preprocessor/TrimmedInput.java   |    47 -
 .../cli/remote/CommandExecutionContext.java     |   127 -
 .../internal/cli/remote/CommandProcessor.java   |   166 -
 .../cli/remote/CommandStatementImpl.java        |   100 -
 .../cli/remote/MemberCommandService.java        |    84 -
 .../cli/remote/RemoteExecutionStrategy.java     |   169 -
 .../internal/cli/remote/WrapperThreadLocal.java |    42 -
 .../internal/cli/result/AbstractResultData.java |   340 -
 .../cli/result/CliJsonSerializable.java         |    45 -
 .../cli/result/CliJsonSerializableFactory.java  |    48 -
 .../cli/result/CliJsonSerializableIds.java      |    34 -
 .../internal/cli/result/CommandResult.java      |   661 -
 .../cli/result/CommandResultException.java      |    39 -
 .../cli/result/CompositeResultData.java         |   361 -
 .../internal/cli/result/ErrorResultData.java    |   104 -
 .../internal/cli/result/FileResult.java         |   117 -
 .../internal/cli/result/InfoResultData.java     |    91 -
 .../internal/cli/result/ObjectResultData.java   |    88 -
 .../internal/cli/result/ResultBuilder.java      |   475 -
 .../internal/cli/result/ResultData.java         |    53 -
 .../cli/result/ResultDataException.java         |    35 -
 .../internal/cli/result/TableBuilder.java       |   475 -
 .../internal/cli/result/TableBuilderHelper.java |   176 -
 .../internal/cli/result/TabularResultData.java  |   174 -
 .../management/internal/cli/shell/Gfsh.java     |  1259 --
 .../internal/cli/shell/GfshConfig.java          |   253 -
 .../cli/shell/GfshExecutionStrategy.java        |   294 -
 .../cli/shell/JMXConnectionException.java       |    56 -
 .../cli/shell/JMXInvocationException.java       |    42 -
 .../internal/cli/shell/JmxOperationInvoker.java |   478 -
 .../internal/cli/shell/MultiCommandHelper.java  |    70 -
 .../internal/cli/shell/OperationInvoker.java    |   135 -
 .../internal/cli/shell/jline/ANSIBuffer.java    |   433 -
 .../internal/cli/shell/jline/ANSIHandler.java   |   113 -
 .../cli/shell/jline/CygwinMinttyTerminal.java   |    56 -
 .../internal/cli/shell/jline/GfshHistory.java   |    63 -
 .../shell/jline/GfshUnsupportedTerminal.java    |    33 -
 .../cli/shell/unsafe/GfshSignalHandler.java     |    85 -
 .../internal/cli/util/CLIConsoleBufferUtil.java |    37 -
 .../internal/cli/util/CauseFinder.java          |   214 -
 .../cli/util/ClasspathScanLoadHelper.java       |   258 -
 .../internal/cli/util/CommandStringBuilder.java |   105 -
 .../internal/cli/util/CommentSkipHelper.java    |    78 -
 .../internal/cli/util/ConnectionEndpoint.java   |    73 -
 .../internal/cli/util/DiskStoreCompacter.java   |   134 -
 .../cli/util/DiskStoreNotFoundException.java    |    49 -
 .../internal/cli/util/DiskStoreUpgrader.java    |   130 -
 .../internal/cli/util/DiskStoreValidater.java   |    60 -
 .../cli/util/EvictionAttributesInfo.java        |    63 -
 .../cli/util/FixedPartitionAttributesInfo.java  |    65 -
 .../internal/cli/util/GfshConsoleReader.java    |    90 -
 .../cli/util/HDFSStoreNotFoundException.java    |    47 -
 .../cli/util/JConsoleNotFoundException.java     |    47 -
 .../management/internal/cli/util/JsonUtil.java  |   606 -
 .../internal/cli/util/MemberInformation.java    |   157 -
 .../cli/util/MemberNotFoundException.java       |    49 -
 .../management/internal/cli/util/MergeLogs.java |    87 -
 .../internal/cli/util/ReadWriteFile.java        |   232 -
 .../cli/util/RegionAttributesDefault.java       |    90 -
 .../cli/util/RegionAttributesNames.java         |    89 -
 .../internal/cli/util/RegionPath.java           |   128 -
 .../cli/util/VisualVmNotFoundException.java     |    48 -
 .../SharedConfigurationWriter.java              |   180 -
 .../callbacks/ConfigurationChangeListener.java  |    59 -
 .../configuration/domain/CacheElement.java      |   253 -
 .../configuration/domain/Configuration.java     |   207 -
 .../domain/ConfigurationChangeResult.java       |   126 -
 .../domain/SharedConfigurationStatus.java       |    26 -
 .../configuration/domain/XmlEntity.java         |   551 -
 .../configuration/functions/AddJarFunction.java |    67 -
 .../functions/AddXmlEntityFunction.java         |    60 -
 .../functions/DeleteJarFunction.java            |    68 -
 .../functions/DeleteXmlEntityFunction.java      |    65 -
 .../functions/GetAllJarsFunction.java           |    67 -
 .../functions/ModifyPropertiesFunction.java     |    65 -
 .../handlers/ConfigurationRequestHandler.java   |    85 -
 ...SharedConfigurationStatusRequestHandler.java |    65 -
 .../messages/ConfigurationRequest.java          |   128 -
 .../messages/ConfigurationResponse.java         |   174 -
 .../SharedConfigurationStatusRequest.java       |    44 -
 .../SharedConfigurationStatusResponse.java      |    78 -
 .../configuration/utils/DtdResolver.java        |    92 -
 .../configuration/utils/XmlConstants.java       |    56 -
 .../internal/configuration/utils/XmlUtils.java  |   685 -
 .../internal/configuration/utils/ZipUtils.java  |   122 -
 .../internal/messages/CompactRequest.java       |   174 -
 .../internal/messages/CompactResponse.java      |    70 -
 .../internal/security/AccessControl.java        |    57 -
 .../internal/security/AccessControlContext.java |    49 -
 .../internal/security/AccessControlMXBean.java  |    29 -
 .../internal/security/CLIOperationContext.java  |   186 -
 .../internal/security/JMXOperationContext.java  |   262 -
 .../internal/security/JSONAuthorization.java    |   292 -
 .../internal/security/MBeanServerWrapper.java   |   343 -
 .../security/ManagementInterceptor.java         |   385 -
 .../management/internal/security/Resource.java  |    33 -
 .../internal/security/ResourceConstants.java    |   161 -
 .../internal/security/ResourceOperation.java    |    40 -
 .../security/ResourceOperationContext.java      |   436 -
 .../unsafe/ReadOpFileAccessController.java      |    63 -
 .../controllers/AbstractCommandsController.java |   711 -
 .../AbstractMultiPartCommandsController.java    |    78 -
 .../controllers/ClientCommandsController.java   |    60 -
 .../controllers/ClusterCommandsController.java  |    49 -
 .../controllers/ConfigCommandsController.java   |   222 -
 .../web/controllers/DataCommandsController.java |   251 -
 .../controllers/DeployCommandsController.java   |   110 -
 .../DiskStoreCommandsController.java            |   184 -
 .../DurableClientCommandsController.java        |   158 -
 .../controllers/FunctionCommandsController.java |   147 -
 .../controllers/IndexCommandsController.java    |   172 -
 .../LauncherLifecycleCommandsController.java    |    55 -
 .../controllers/MemberCommandsController.java   |    78 -
 .../MiscellaneousCommandsController.java        |   275 -
 .../web/controllers/PdxCommandsController.java  |   122 -
 .../controllers/QueueCommandsController.java    |   133 -
 .../controllers/RegionCommandsController.java   |   332 -
 .../controllers/ShellCommandsController.java    |   286 -
 .../web/controllers/WanCommandsController.java  |   403 -
 .../EnvironmentVariablesHandlerInterceptor.java |   179 -
 .../support/MemberMXBeanAdapter.java            |   660 -
 .../management/internal/web/domain/Link.java    |   161 -
 .../internal/web/domain/LinkIndex.java          |   140 -
 .../web/domain/QueryParameterSource.java        |    63 -
 .../internal/web/http/ClientHttpRequest.java    |   451 -
 .../internal/web/http/HttpHeader.java           |   100 -
 .../internal/web/http/HttpMethod.java           |    36 -
 .../SerializableObjectHttpMessageConverter.java |   103 -
 .../web/http/support/SimpleHttpRequester.java   |   237 -
 .../internal/web/io/MultipartFileAdapter.java   |    68 -
 .../web/io/MultipartFileResourceAdapter.java    |    68 -
 .../web/shell/AbstractHttpOperationInvoker.java |   820 -
 .../web/shell/HttpOperationInvoker.java         |    31 -
 .../web/shell/MBeanAccessException.java         |    45 -
 .../RestApiCallForCommandNotFoundException.java |    44 -
 .../web/shell/RestHttpOperationInvoker.java     |   438 -
 .../web/shell/SimpleHttpOperationInvoker.java   |   162 -
 .../shell/support/HttpInvocationHandler.java    |    95 -
 .../shell/support/HttpMBeanProxyFactory.java    |    41 -
 .../internal/web/util/ConvertUtils.java         |   132 -
 .../management/internal/web/util/UriUtils.java  |   257 -
 .../management/membership/ClientMembership.java |    67 -
 .../membership/ClientMembershipEvent.java       |    51 -
 .../membership/ClientMembershipListener.java    |    48 -
 .../ClientMembershipListenerAdapter.java        |    52 -
 .../management/membership/MembershipEvent.java  |    42 -
 .../membership/MembershipListener.java          |    53 -
 .../UniversalMembershipListenerAdapter.java     |   384 -
 .../gemstone/gemfire/management/package.html    |    24 -
 .../memcached/GemFireMemcachedServer.java       |   284 -
 .../main/java/com/gemstone/gemfire/package.html |    86 -
 .../com/gemstone/gemfire/pdx/FieldType.java     |   158 -
 .../com/gemstone/gemfire/pdx/JSONFormatter.java |   630 -
 .../gemfire/pdx/JSONFormatterException.java     |    47 -
 .../gemfire/pdx/NonPortableClassException.java  |    34 -
 .../gemfire/pdx/PdxConfigurationException.java  |    41 -
 .../pdx/PdxFieldAlreadyExistsException.java     |    46 -
 .../pdx/PdxFieldDoesNotExistException.java      |    42 -
 .../pdx/PdxFieldTypeMismatchException.java      |    46 -
 .../gemfire/pdx/PdxInitializationException.java |    51 -
 .../com/gemstone/gemfire/pdx/PdxInstance.java   |   202 -
 .../gemfire/pdx/PdxInstanceFactory.java         |   472 -
 .../com/gemstone/gemfire/pdx/PdxReader.java     |   265 -
 .../pdx/PdxRegistryMismatchException.java       |    37 -
 .../gemstone/gemfire/pdx/PdxSerializable.java   |    71 -
 .../gemfire/pdx/PdxSerializationException.java  |    53 -
 .../com/gemstone/gemfire/pdx/PdxSerializer.java |    94 -
 .../gemstone/gemfire/pdx/PdxUnreadFields.java   |    42 -
 .../com/gemstone/gemfire/pdx/PdxWriter.java     |   479 -
 .../pdx/ReflectionBasedAutoSerializer.java      |   561 -
 .../gemfire/pdx/WritablePdxInstance.java        |    44 -
 .../pdx/internal/AutoSerializableManager.java   |  2304 ---
 .../pdx/internal/CheckTypeRegistryState.java    |   110 -
 .../pdx/internal/ClientTypeRegistration.java    |   418 -
 .../gemfire/pdx/internal/ComparableEnum.java    |    24 -
 .../pdx/internal/ConvertableToBytes.java        |    23 -
 .../gemstone/gemfire/pdx/internal/DataSize.java |    49 -
 .../gemfire/pdx/internal/DefaultPdxField.java   |    40 -
 .../gemstone/gemfire/pdx/internal/EnumId.java   |    96 -
 .../gemstone/gemfire/pdx/internal/EnumInfo.java |   333 -
 .../pdx/internal/FieldNotFoundInPdxVersion.java |    27 -
 .../gemfire/pdx/internal/InternalPdxReader.java |    85 -
 .../pdx/internal/LonerTypeRegistration.java     |   186 -
 .../pdx/internal/NullTypeRegistration.java      |   120 -
 .../gemstone/gemfire/pdx/internal/PdxField.java |   259 -
 .../gemfire/pdx/internal/PdxInputStream.java    |   439 -
 .../gemfire/pdx/internal/PdxInstanceEnum.java   |   183 -
 .../pdx/internal/PdxInstanceFactoryImpl.java    |   270 -
 .../gemfire/pdx/internal/PdxInstanceImpl.java   |   646 -
 .../pdx/internal/PdxInstanceInputStream.java    |   115 -
 .../gemfire/pdx/internal/PdxOutputStream.java   |   242 -
 .../gemfire/pdx/internal/PdxReaderImpl.java     |   904 -
 .../gemfire/pdx/internal/PdxString.java         |   210 -
 .../gemstone/gemfire/pdx/internal/PdxType.java  |   495 -
 .../gemfire/pdx/internal/PdxUnreadData.java     |   118 -
 .../gemfire/pdx/internal/PdxWriterImpl.java     |   910 -
 .../pdx/internal/PeerTypeRegistration.java      |   776 -
 .../pdx/internal/TrackingPdxReaderImpl.java     |   354 -
 .../gemfire/pdx/internal/TypeRegistration.java  |   102 -
 .../gemfire/pdx/internal/TypeRegistry.java      |   525 -
 .../gemfire/pdx/internal/UnreadPdxType.java     |    73 -
 .../internal/WeakConcurrentIdentityHashMap.java |   137 -
 .../pdx/internal/WritablePdxInstanceImpl.java   |   288 -
 .../gemfire/pdx/internal/json/JsonHelper.java   |   182 -
 .../pdx/internal/json/PdxInstanceHelper.java    |   195 -
 .../pdx/internal/json/PdxListHelper.java        |   190 -
 .../gemfire/pdx/internal/json/PdxToJSON.java    |   322 -
 .../pdx/internal/unsafe/UnsafeWrapper.java      |   188 -
 .../java/com/gemstone/gemfire/pdx/package.html  |   112 -
 .../com/gemstone/gemfire/ra/GFConnection.java   |    27 -
 .../gemfire/ra/GFConnectionFactory.java         |    29 -
 .../gemfire/redis/GemFireRedisServer.java       |   717 -
 .../gemfire/security/AccessControl.java         |    95 -
 .../gemfire/security/AuthInitialize.java        |    88 -
 .../security/AuthenticationFailedException.java |    54 -
 .../AuthenticationRequiredException.java        |    54 -
 .../gemfire/security/Authenticator.java         |    87 -
 .../security/GemFireSecurityException.java      |    55 -
 .../security/NotAuthorizedException.java        |    63 -
 .../com/gemstone/gemfire/security/package.html  |    39 -
 .../message/GemFireParameterizedMessage.java    |   554 -
 .../GemFireParameterizedMessageFactory.java     |    54 -
 .../src/main/java/external-overview.html        |    43 -
 .../src/main/java/internal-overview.html        |    26 -
 .../gemfire/cache/cache-8.1.xsd                 |  1512 --
 .../gemfire/cache/cache-9.0.xsd                 |  1519 --
 .../services/org.xml.sax.ext.EntityResolver2    |     2 -
 .../gemstone/gemfire/admin/doc-files/ds4_0.dtd  |   176 -
 .../gemstone/gemfire/admin/doc-files/ds5_0.dtd  |   168 -
 .../internal/doc-files/mbeans-descriptors.dtd   |   232 -
 .../gemfire/admin/jmx/mbeans-descriptors.xml    |  1435 --
 .../gemfire/cache/doc-files/cache3_0.dtd        |   296 -
 .../gemfire/cache/doc-files/cache4_0.dtd        |   392 -
 .../gemfire/cache/doc-files/cache4_1.dtd        |   485 -
 .../gemfire/cache/doc-files/cache5_0.dtd        |   519 -
 .../gemfire/cache/doc-files/cache5_1.dtd        |   534 -
 .../gemfire/cache/doc-files/cache5_5.dtd        |   651 -
 .../gemfire/cache/doc-files/cache5_7.dtd        |   776 -
 .../gemfire/cache/doc-files/cache5_8.dtd        |   794 -
 .../gemfire/cache/doc-files/cache6_0.dtd        |   862 -
 .../gemfire/cache/doc-files/cache6_1.dtd        |   871 -
 .../gemfire/cache/doc-files/cache6_5.dtd        |   949 -
 .../gemfire/cache/doc-files/cache6_6.dtd        |  1006 -
 .../gemfire/cache/doc-files/cache7_0.dtd        |  1087 --
 .../gemfire/cache/doc-files/cache8_0.dtd        |  1107 --
 .../membership/gms/messenger/jgroups-config.xml |    72 -
 .../membership/gms/messenger/jgroups-mcast.xml  |    98 -
 .../internal/i18n/StringIdResourceBundle_ja.txt |  3811 ----
 .../internal/logging/log4j/log4j2-legacy.xml    |    17 -
 .../gemstone/gemfire/internal/privatekey.ser    |   Bin 756 -> 0 bytes
 .../com/gemstone/gemfire/internal/publickey.ser |   Bin 1029 -> 0 bytes
 .../tools/gfsh/app/windowsbindings.properties   |    83 -
 .../internal/cli/commands/support/gfmon.html    |    28 -
 .../management/internal/cli/modes/commands.json |     3 -
 .../management/internal/cli/modes/connect.json  |    29 -
 .../internal/cli/modes/stopserver.json          |    29 -
 .../com/gemstone/gemfire/statisticsType.dtd     |    87 -
 gemfire-core/src/main/resources/log4j2-cli.xml  |    17 -
 gemfire-core/src/main/resources/log4j2.xml      |    23 -
 .../batterytest/greplogs/ExpectedStrings.java   |   188 -
 .../java/batterytest/greplogs/LogConsumer.java  |   290 -
 .../src/test/java/cacheRunner/Portfolio.java    |   129 -
 .../src/test/java/cacheRunner/Position.java     |    74 -
 .../src/test/java/com/company/app/Customer.java |    37 -
 .../src/test/java/com/company/app/DBLoader.java |    64 -
 .../com/company/app/OrdersCacheListener.java    |    52 -
 .../java/com/company/data/DatabaseLoader.java   |    43 -
 .../java/com/company/data/MyDeclarable.java     |    33 -
 .../src/test/java/com/company/data/MySizer.java |    40 -
 .../com/company/data/MyTransactionListener.java |    39 -
 .../src/test/java/com/examples/LinkNode.java    |    78 -
 .../src/test/java/com/examples/SuperClass.java  |    93 -
 .../src/test/java/com/examples/TestObject.java  |    55 -
 .../src/test/java/com/examples/ds/Address.java  |    23 -
 .../src/test/java/com/examples/ds/Company.java  |    43 -
 .../java/com/examples/ds/CompanySerializer.java |    67 -
 .../src/test/java/com/examples/ds/Employee.java |    53 -
 .../com/examples/ds/PutDataSerializables.java   |    55 -
 .../src/test/java/com/examples/ds/User.java     |    58 -
 .../com/examples/snapshot/MyDataSerializer.java |    63 -
 .../java/com/examples/snapshot/MyObject.java    |    69 -
 .../snapshot/MyObjectDataSerializable.java      |    45 -
 .../java/com/examples/snapshot/MyObjectPdx.java |    33 -
 .../snapshot/MyObjectPdxSerializable.java       |    42 -
 .../com/examples/snapshot/MyPdxSerializer.java  |    64 -
 .../java/com/gemstone/gemfire/AppObject.java    |    24 -
 .../com/gemstone/gemfire/CopyJUnitTest.java     |   575 -
 .../com/gemstone/gemfire/DeltaTestImpl.java     |   397 -
 .../gemfire/DiskInstantiatorsJUnitTest.java     |   183 -
 .../com/gemstone/gemfire/GemFireTestCase.java   |    92 -
 .../java/com/gemstone/gemfire/Invariant.java    |    32 -
 .../com/gemstone/gemfire/InvariantResult.java   |    28 -
 .../com/gemstone/gemfire/JUnitTestSetup.java    |   143 -
 .../gemfire/JtaNoninvolvementJUnitTest.java     |   180 -
 .../gemfire/LocalStatisticsJUnitTest.java       |    50 -
 .../com/gemstone/gemfire/LonerDMJUnitTest.java  |   196 -
 .../gemstone/gemfire/StatisticsTestCase.java    |   388 -
 .../gemfire/StatisticsTypeJUnitTest.java        |    77 -
 .../gemfire/SystemFailureJUnitTest.java         |    60 -
 .../com/gemstone/gemfire/TXExpiryJUnitTest.java |   420 -
 .../java/com/gemstone/gemfire/TXJUnitTest.java  |  6825 -------
 .../com/gemstone/gemfire/TXWriterJUnitTest.java |   241 -
 .../gemstone/gemfire/TXWriterOOMEJUnitTest.java |    78 -
 .../com/gemstone/gemfire/TXWriterTestCase.java  |   152 -
 .../gemstone/gemfire/TestDataSerializer.java    |   117 -
 .../com/gemstone/gemfire/TimingTestCase.java    |    77 -
 .../com/gemstone/gemfire/UnitTestDoclet.java    |   264 -
 .../gemstone/gemfire/admin/AdminTestHelper.java |    45 -
 .../BindDistributedSystemJUnitTest.java         |    97 -
 .../internal/CacheHealthEvaluatorJUnitTest.java |   208 -
 .../internal/DistributedSystemTestCase.java     |    67 -
 .../admin/internal/HealthEvaluatorTestCase.java |    76 -
 .../MemberHealthEvaluatorJUnitTest.java         |   102 -
 .../cache/AttributesFactoryJUnitTest.java       |   420 -
 .../gemfire/cache/Bug36619JUnitTest.java        |    77 -
 .../gemfire/cache/Bug42039JUnitTest.java        |    96 -
 .../gemfire/cache/Bug52289JUnitTest.java        |    89 -
 .../gemfire/cache/CacheListenerJUnitTest.java   |   336 -
 .../cache/CacheRegionClearStatsDUnitTest.java   |   248 -
 .../gemstone/gemfire/cache/ClientHelper.java    |    73 -
 .../cache/ClientServerTimeSyncDUnitTest.java    |   203 -
 .../cache/ConnectionPoolAndLoaderDUnitTest.java |   489 -
 .../cache/ConnectionPoolFactoryJUnitTest.java   |   424 -
 .../gemfire/cache/OperationJUnitTest.java       |   933 -
 .../gemfire/cache/PoolManagerJUnitTest.java     |   135 -
 .../gemstone/gemfire/cache/ProxyJUnitTest.java  |  1169 --
 .../gemfire/cache/RegionFactoryJUnitTest.java   |  1195 --
 .../gemfire/cache/RoleExceptionJUnitTest.java   |   139 -
 .../SerialAsyncEventQueueImplJUnitTest.java     |    62 -
 .../client/ClientCacheFactoryJUnitTest.java     |   343 -
 .../client/ClientRegionFactoryJUnitTest.java    |   532 -
 .../ClientServerRegisterInterestsDUnitTest.java |   256 -
 .../internal/AutoConnectionSourceDUnitTest.java |   598 -
 .../AutoConnectionSourceImplJUnitTest.java      |   398 -
 .../CacheServerSSLConnectionDUnitTest.java      |   424 -
 .../internal/ConnectionPoolImplJUnitTest.java   |   260 -
 .../internal/LocatorLoadBalancingDUnitTest.java |   499 -
 .../cache/client/internal/LocatorTestBase.java  |   365 -
 .../internal/OpExecutorImplJUnitTest.java       |   664 -
 .../client/internal/QueueManagerJUnitTest.java  |   674 -
 .../internal/SSLNoClientAuthDUnitTest.java      |   277 -
 .../internal/ServerBlackListJUnitTest.java      |   123 -
 .../locator/LocatorStatusResponseJUnitTest.java |    77 -
 .../pooling/ConnectionManagerJUnitTest.java     |   878 -
 .../SignalledFlushObserverJUnitTest.java        |    97 -
 .../SortedListForAsyncQueueJUnitTest.java       |   565 -
 .../management/MXMemoryPoolListenerExample.java |   206 -
 .../management/MemoryThresholdsDUnitTest.java   |  2333 ---
 .../MemoryThresholdsOffHeapDUnitTest.java       |  1826 --
 .../management/ResourceManagerDUnitTest.java    |  1841 --
 .../ExceptionHandlingJUnitTest.java             |   177 -
 .../mapInterface/MapFunctionalJUnitTest.java    |   170 -
 .../mapInterface/PutAllGlobalLockJUnitTest.java |   109 -
 .../PutOperationContextJUnitTest.java           |   264 -
 .../GetOperationContextImplJUnitTest.java       |   291 -
 .../PartitionRegionHelperDUnitTest.java         |   742 -
 .../BaseLineAndCompareQueryPerfJUnitTest.java   |   537 -
 .../query/Bug32947ValueConstraintJUnitTest.java |   127 -
 .../gemfire/cache/query/BugJUnitTest.java       |   570 -
 .../gemfire/cache/query/CacheUtils.java         |   398 -
 .../cache/query/PdxStringQueryJUnitTest.java    |   727 -
 .../gemstone/gemfire/cache/query/PerfQuery.java |   330 -
 .../gemfire/cache/query/QueryJUnitTest.java     |   457 -
 .../cache/query/QueryServiceJUnitTest.java      |   252 -
 .../gemfire/cache/query/QueryTestUtils.java     |  1640 --
 .../cache/query/QueryTestUtilsJUnitTest.java    |   134 -
 .../gemfire/cache/query/RegionJUnitTest.java    |   226 -
 .../cache/query/TypedIteratorJUnitTest.java     |   133 -
 .../com/gemstone/gemfire/cache/query/Utils.java |    57 -
 .../query/cq/dunit/CqQueryTestListener.java     |   398 -
 .../gemfire/cache/query/data/Address.java       |    51 -
 .../gemstone/gemfire/cache/query/data/City.java |    57 -
 .../cache/query/data/CollectionHolder.java      |    90 -
 .../cache/query/data/ComparableWrapper.java     |    70 -
 .../gemfire/cache/query/data/Country.java       |   100 -
 .../gemstone/gemfire/cache/query/data/Data.java |    47 -
 .../gemfire/cache/query/data/District.java      |    65 -
 .../gemfire/cache/query/data/Employee.java      |    72 -
 .../gemfire/cache/query/data/Inventory.java     |   127 -
 .../gemfire/cache/query/data/Keywords.java      |    90 -
 .../gemfire/cache/query/data/Manager.java       |    43 -
 .../gemfire/cache/query/data/Numbers.java       |    52 -
 .../gemfire/cache/query/data/PhoneNo.java       |    42 -
 .../gemfire/cache/query/data/Portfolio.java     |   314 -
 .../gemfire/cache/query/data/PortfolioData.java |   154 -
 .../gemfire/cache/query/data/PortfolioNoDS.java |   240 -
 .../gemfire/cache/query/data/PortfolioPdx.java  |   311 -
 .../gemfire/cache/query/data/Position.java      |   166 -
 .../gemfire/cache/query/data/PositionNoDS.java  |   130 -
 .../gemfire/cache/query/data/PositionPdx.java   |   182 -
 .../query/data/ProhibitedSecurityQuote.java     |    66 -
 .../gemfire/cache/query/data/Quote.java         |   114 -
 .../gemfire/cache/query/data/Restricted.java    |    80 -
 .../cache/query/data/SecurityMaster.java        |   262 -
 .../gemfire/cache/query/data/State.java         |    81 -
 .../gemfire/cache/query/data/Street.java        |    38 -
 .../gemfire/cache/query/data/Student.java       |    77 -
 .../gemfire/cache/query/data/Vehicle.java       |    39 -
 .../gemfire/cache/query/data/Village.java       |    55 -
 .../query/dunit/CloseCacheAuthorization.java    |    62 -
 .../query/dunit/CompactRangeIndexDUnitTest.java |   204 -
 .../cache/query/dunit/CqTimeTestListener.java   |   266 -
 .../cache/query/dunit/GroupByDUnitImpl.java     |   328 -
 .../dunit/GroupByPartitionedQueryDUnitTest.java |   110 -
 .../query/dunit/GroupByQueryDUnitTest.java      |   189 -
 .../cache/query/dunit/HashIndexDUnitTest.java   |   132 -
 .../cache/query/dunit/HelperTestCase.java       |   267 -
 .../dunit/NonDistinctOrderByDUnitImpl.java      |   266 -
 .../NonDistinctOrderByPartitionedDUnitTest.java |   154 -
 .../query/dunit/PdxStringQueryDUnitTest.java    |  1987 --
 .../dunit/QueryAPITestPartitionResolver.java    |    44 -
 .../cache/query/dunit/QueryAuthorization.java   |    70 -
 .../dunit/QueryDataInconsistencyDUnitTest.java  |   580 -
 .../dunit/QueryIndexUsingXMLDUnitTest.java      |   993 -
 .../QueryParamsAuthorizationDUnitTest.java      |   111 -
 .../QueryUsingFunctionContextDUnitTest.java     |  1048 -
 .../query/dunit/QueryUsingPoolDUnitTest.java    |  2588 ---
 .../cache/query/dunit/RemoteQueryDUnitTest.java |  1502 --
 ...esourceManagerWithQueryMonitorDUnitTest.java |  1166 --
 .../query/dunit/SelectStarQueryDUnitTest.java   |  1625 --
 .../cache/query/facets/lang/Address.java        |    60 -
 .../gemfire/cache/query/facets/lang/Course.java |    91 -
 .../cache/query/facets/lang/Department.java     |    96 -
 .../query/facets/lang/DerivedEmployee.java      |    29 -
 .../cache/query/facets/lang/Employee.java       |   140 -
 .../cache/query/facets/lang/Faculty.java        |   134 -
 .../cache/query/facets/lang/G_Student.java      |    66 -
 .../gemfire/cache/query/facets/lang/Person.java |    96 -
 .../cache/query/facets/lang/Student.java        |   103 -
 .../cache/query/facets/lang/UG_Student.java     |    66 -
 .../gemfire/cache/query/facets/lang/Utils.java  |   134 -
 .../ComparisonOperatorsJUnitTest.java           |   185 -
 .../query/functional/ConstantsJUnitTest.java    |   109 -
 .../query/functional/CountStarJUnitTest.java    |   686 -
 .../CustomerOptimizationsJUnitTest.java         |  1386 --
 .../DistinctAndNonDistinctQueryJUnitTest.java   |   154 -
 ...ctResultsWithDupValuesInRegionJUnitTest.java |   481 -
 .../query/functional/FunctionJUnitTest.java     |   315 -
 .../functional/GroupByPartitionedJUnitTest.java |    50 -
 .../functional/GroupByReplicatedJUnitTest.java  |    39 -
 .../cache/query/functional/GroupByTestImpl.java |  1010 -
 .../query/functional/GroupByTestInterface.java  |    58 -
 .../query/functional/INOperatorJUnitTest.java   |   471 -
 .../functional/IUM6Bug32345ReJUnitTest.java     |   224 -
 .../cache/query/functional/IUMJUnitTest.java    |   237 -
 .../IUMRCompositeIteratorJUnitTest.java         |   251 -
 .../IUMRMultiIndexesMultiRegionJUnitTest.java   |  1274 --
 .../IUMRShuffleIteratorsJUnitTest.java          |   489 -
 .../functional/IUMRSingleRegionJUnitTest.java   |   901 -
 ...ependentOperandsInWhereClause2JUnitTest.java |   200 -
 .../IndexCreationDeadLockJUnitTest.java         |   309 -
 .../functional/IndexCreationJUnitTest.java      |  1088 --
 .../IndexMaintenanceAsynchJUnitTest.java        |   178 -
 .../functional/IndexOnEntrySetJUnitTest.java    |   335 -
 .../functional/IndexOperatorJUnitTest.java      |   225 -
 .../IndexPrimaryKeyUsageJUnitTest.java          |   335 -
 .../IndexUsageInNestedQueryJUnitTest.java       |   152 -
 .../IndexUsageWithAliasAsProjAtrbt.java         |   177 -
 ...IndexUsageWithAliasAsProjAtrbtJUnitTest.java |   185 -
 .../IndexUseMultFrmSnglCondJUnitTest.java       |   274 -
 ...ndexWithSngleFrmAndMultCondQryJUnitTest.java |  1354 --
 .../functional/IteratorTypeDefEmpJUnitTest.java |    87 -
 .../functional/IteratorTypeDefJUnitTest.java    |   163 -
 .../IteratorTypeDefaultTypesJUnitTest.java      |   426 -
 .../functional/IumMultConditionJUnitTest.java   |   231 -
 .../functional/JavaSerializationJUnitTest.java  |    68 -
 .../functional/LikePredicateJUnitTest.java      |  2386 ---
 .../query/functional/LimitClauseJUnitTest.java  |  1850 --
 .../functional/LogicalOperatorsJUnitTest.java   |   201 -
 .../cache/query/functional/MiscJUnitTest.java   |   726 -
 .../functional/MultiIndexCreationJUnitTest.java |   385 -
 .../MultiRegionIndexUsageJUnitTest.java         |   903 -
 .../functional/MultipleRegionsJUnitTest.java    |   109 -
 .../NegativeNumberQueriesJUnitTest.java         |   127 -
 .../query/functional/NestedQueryJUnitTest.java  |   511 -
 .../NonDistinctOrderByPartitionedJUnitTest.java |   260 -
 .../NonDistinctOrderByReplicatedJUnitTest.java  |   411 -
 .../NonDistinctOrderByTestImplementation.java   |  1545 --
 .../query/functional/NumericQueryJUnitTest.java |   337 -
 .../functional/OrderByPartitionedJUnitTest.java |   667 -
 .../functional/OrderByReplicatedJUnitTest.java  |   836 -
 .../functional/OrderByTestImplementation.java   |  1184 --
 .../functional/ParameterBindingJUnitTest.java   |   174 -
 .../PdxGroupByPartitionedJUnitTest.java         |    40 -
 .../PdxGroupByReplicatedJUnitTest.java          |    37 -
 .../query/functional/PdxGroupByTestImpl.java    |  1025 -
 .../query/functional/PdxOrderByJUnitTest.java   |   357 -
 .../functional/QRegionInterfaceJUnitTest.java   |   164 -
 .../QueryREUpdateInProgressJUnitTest.java       |   436 -
 .../functional/QueryUndefinedJUnitTest.java     |   286 -
 .../functional/ReservedKeywordsJUnitTest.java   |    82 -
 .../ResultsDataSerializabilityJUnitTest.java    |   144 -
 .../query/functional/SelectToDateJUnitTest.java |   263 -
 .../functional/StructMemberAccessJUnitTest.java |   287 -
 .../query/functional/StructSetOrResultsSet.java |   456 -
 .../query/functional/TestNewFunctionSSorRS.java |   129 -
 .../CompiledAggregateFunctionJUnitTest.java     |   200 -
 .../CompiledGroupBySelectJUnitTest.java         |   161 -
 .../query/internal/CompiledInJUnitTest.java     |   460 -
 .../CompiledJunctionInternalsJUnitTest.java     |  3481 ----
 .../internal/CopyOnReadQueryJUnitTest.java      |   418 -
 .../internal/ExecutionContextJUnitTest.java     |   405 -
 .../query/internal/IndexManagerJUnitTest.java   |   182 -
 .../internal/NWayMergeResultsJUnitTest.java     |   551 -
 .../internal/OrderByComparatorJUnitTest.java    |   206 -
 .../internal/ProjectionAttributeJUnitTest.java  |   241 -
 .../query/internal/QCompilerJUnitTest.java      |   451 -
 ...ueryFromClauseCanonicalizationJUnitTest.java |   264 -
 .../QueryObjectSerializationJUnitTest.java      |   151 -
 .../QueryObserverCallbackJUnitTest.java         |   424 -
 .../query/internal/QueryTraceJUnitTest.java     |   449 -
 .../query/internal/QueryUtilsJUnitTest.java     |   308 -
 .../query/internal/ResultsBagJUnitTest.java     |   314 -
 .../ResultsBagLimitBehaviourJUnitTest.java      |   585 -
 .../ResultsCollectionWrapperLimitJUnitTest.java |   367 -
 .../SelectResultsComparatorJUnitTest.java       |    91 -
 .../StructBagLimitBehaviourJUnitTest.java       |   129 -
 .../query/internal/StructSetJUnitTest.java      |    77 -
 .../internal/aggregate/AggregatorJUnitTest.java |   215 -
 ...syncIndexUpdaterThreadShutdownJUnitTest.java |   123 -
 .../index/AsynchIndexMaintenanceJUnitTest.java  |   261 -
 .../CompactRangeIndexIndexMapJUnitTest.java     |   187 -
 .../index/CompactRangeIndexJUnitTest.java       |   481 -
 ...rrentIndexInitOnOverflowRegionDUnitTest.java |   468 -
 ...ndexOperationsOnOverflowRegionDUnitTest.java |   724 -
 ...pdateWithInplaceObjectModFalseDUnitTest.java |   714 -
 ...ConcurrentIndexUpdateWithoutWLDUnitTest.java |   800 -
 .../index/CopyOnReadIndexDUnitTest.java         |   652 -
 .../index/CopyOnReadIndexJUnitTest.java         |   457 -
 .../DeclarativeIndexCreationJUnitTest.java      |   123 -
 .../query/internal/index/EquijoinDUnitTest.java |   437 -
 .../internal/index/HashIndexJUnitTest.java      |  1592 --
 .../internal/index/HashIndexSetJUnitTest.java   |   504 -
 .../index/IndexCreationInternalsJUnitTest.java  |   214 -
 .../internal/index/IndexElemArrayJUnitTest.java |   137 -
 .../internal/index/IndexHintJUnitTest.java      |   506 -
 .../query/internal/index/IndexJUnitTest.java    |    97 -
 .../index/IndexMaintainceJUnitTest.java         |   513 -
 .../index/IndexMaintenanceJUnitTest.java        |  1439 --
 .../index/IndexStatisticsJUnitTest.java         |   862 -
 .../IndexTrackingQueryObserverDUnitTest.java    |   329 -
 .../IndexTrackingQueryObserverJUnitTest.java    |   172 -
 .../query/internal/index/IndexUseJUnitTest.java |  1890 --
 .../IndexedMergeEquiJoinScenariosJUnitTest.java |   604 -
 ...itializeIndexEntryDestroyQueryDUnitTest.java |   455 -
 .../internal/index/MapIndexStoreJUnitTest.java  |   339 -
 .../MapRangeIndexMaintenanceJUnitTest.java      |   389 -
 .../index/MemoryIndexStoreJUnitTest.java        |   396 -
 ...exStoreWithInplaceModificationJUnitTest.java |    54 -
 .../index/MultiIndexCreationDUnitTest.java      |   201 -
 .../NewDeclarativeIndexCreationJUnitTest.java   |   173 -
 .../PartitionedRegionEquijoinDUnitTest.java     |   130 -
 .../index/PdxCopyOnReadQueryJUnitTest.java      |    77 -
 ...gRegionCreationIndexUpdateTypeJUnitTest.java |    98 -
 .../index/PutAllWithIndexPerfDUnitTest.java     |   216 -
 .../internal/index/RangeIndexAPIJUnitTest.java  |   422 -
 .../PRBasicIndexCreationDUnitTest.java          |  1050 -
 .../PRBasicIndexCreationDeadlockDUnitTest.java  |   235 -
 .../PRBasicMultiIndexCreationDUnitTest.java     |  1065 -
 .../partitioned/PRBasicQueryDUnitTest.java      |   273 -
 .../PRBasicRemoveIndexDUnitTest.java            |   142 -
 .../PRColocatedEquiJoinDUnitTest.java           |  1722 --
 .../partitioned/PRIndexStatisticsJUnitTest.java |   704 -
 .../partitioned/PRInvalidQueryDUnitTest.java    |   133 -
 .../partitioned/PRInvalidQueryJUnitTest.java    |   127 -
 .../partitioned/PRQueryCacheCloseDUnitTest.java |   341 -
 .../PRQueryCacheClosedJUnitTest.java            |   260 -
 .../query/partitioned/PRQueryDUnitHelper.java   |  3048 ---
 .../query/partitioned/PRQueryDUnitTest.java     |  1228 --
 .../query/partitioned/PRQueryJUnitTest.java     |   188 -
 .../partitioned/PRQueryNumThreadsJUnitTest.java |   165 -
 .../query/partitioned/PRQueryPerfDUnitTest.java |   505 -
 .../PRQueryRegionCloseDUnitTest.java            |   211 -
 .../PRQueryRegionClosedJUnitTest.java           |   257 -
 .../PRQueryRegionDestroyedDUnitTest.java        |   225 -
 .../PRQueryRegionDestroyedJUnitTest.java        |   254 -
 .../PRQueryRemoteNodeExceptionDUnitTest.java    |   786 -
 .../gemfire/cache/query/transaction/Person.java |    57 -
 .../query/transaction/QueryAndJtaJUnitTest.java |   479 -
 .../internal/ConnectionCountProbeJUnitTest.java |    51 -
 .../cache/snapshot/CacheSnapshotJUnitTest.java  |   128 -
 .../snapshot/ParallelSnapshotDUnitTest.java     |   197 -
 .../gemfire/cache/snapshot/RegionGenerator.java |   125 -
 .../cache/snapshot/RegionSnapshotJUnitTest.java |   294 -
 .../snapshot/SnapshotByteArrayDUnitTest.java    |   138 -
 .../cache/snapshot/SnapshotDUnitTest.java       |   224 -
 .../snapshot/SnapshotPerformanceDUnitTest.java  |   167 -
 .../cache/snapshot/SnapshotTestCase.java        |    92 -
 .../cache/snapshot/WanSnapshotJUnitTest.java    |    98 -
 .../cache/util/PasswordUtilJUnitTest.java       |    41 -
 .../gemfire/cache30/Bug34387DUnitTest.java      |   174 -
 .../gemfire/cache30/Bug34948DUnitTest.java      |   148 -
 .../gemfire/cache30/Bug35214DUnitTest.java      |   214 -
 .../gemfire/cache30/Bug38013DUnitTest.java      |   141 -
 .../gemfire/cache30/Bug38741DUnitTest.java      |   414 -
 .../gemfire/cache30/Bug40255JUnitTest.java      |   143 -
 .../gemfire/cache30/Bug40662JUnitTest.java      |    90 -
 .../gemfire/cache30/Bug44418JUnitTest.java      |   173 -
 .../gemfire/cache30/CacheCloseDUnitTest.java    |   104 -
 .../gemfire/cache30/CacheListenerTestCase.java  |   428 -
 .../gemfire/cache30/CacheLoaderTestCase.java    |   330 -
 .../gemfire/cache30/CacheLogRollDUnitTest.java  |   455 -
 .../gemfire/cache30/CacheMapTxnDUnitTest.java   |   534 -
 ...cheRegionsReliablityStatsCheckDUnitTest.java |   136 -
 .../cache30/CacheSerializableRunnable.java      |   114 -
 .../cache30/CacheStatisticsDUnitTest.java       |   515 -
 .../gemstone/gemfire/cache30/CacheTestCase.java |   653 -
 .../gemfire/cache30/CacheWriterTestCase.java    |   507 -
 .../cache30/CacheXMLPartitionResolver.java      |    78 -
 .../gemfire/cache30/CacheXml30DUnitTest.java    |   827 -
 .../gemfire/cache30/CacheXml40DUnitTest.java    |   150 -
 .../gemfire/cache30/CacheXml41DUnitTest.java    |   643 -
 .../gemfire/cache30/CacheXml45DUnitTest.java    |   398 -
 .../gemfire/cache30/CacheXml51DUnitTest.java    |   351 -
 .../gemfire/cache30/CacheXml55DUnitTest.java    |    53 -
 .../gemfire/cache30/CacheXml57DUnitTest.java    |   658 -
 .../gemfire/cache30/CacheXml58DUnitTest.java    |   505 -
 .../gemfire/cache30/CacheXml60DUnitTest.java    |   336 -
 .../gemfire/cache30/CacheXml61DUnitTest.java    |   125 -
 .../gemfire/cache30/CacheXml65DUnitTest.java    |  1159 --
 .../gemfire/cache30/CacheXml66DUnitTest.java    |   376 -
 .../gemfire/cache30/CacheXml70DUnitTest.java    |   289 -
 .../gemfire/cache30/CacheXml80DUnitTest.java    |   297 -
 .../gemfire/cache30/CacheXml81DUnitTest.java    |   158 -
 .../gemfire/cache30/CacheXml90DUnitTest.java    |   234 -
 .../gemfire/cache30/CacheXmlTestCase.java       |   157 -
 .../cache30/CachedAllEventsDUnitTest.java       |   111 -
 .../gemfire/cache30/CallbackArgDUnitTest.java   |   185 -
 .../cache30/CertifiableTestCacheListener.java   |   148 -
 .../cache30/ClearMultiVmCallBkDUnitTest.java    |   249 -
 .../gemfire/cache30/ClearMultiVmDUnitTest.java  |   469 -
 .../cache30/ClientMembershipDUnitTest.java      |  1669 --
 .../ClientMembershipSelectorDUnitTest.java      |    32 -
 .../ClientRegisterInterestDUnitTest.java        |   429 -
 ...ClientRegisterInterestSelectorDUnitTest.java |    32 -
 .../cache30/ClientServerCCEDUnitTest.java       |   633 -
 .../gemfire/cache30/ClientServerTestCase.java   |   391 -
 .../ConcurrentLeaveDuringGIIDUnitTest.java      |   216 -
 ...ibutedNoAckAsyncOverflowRegionDUnitTest.java |    61 -
 ...iskDistributedNoAckAsyncRegionDUnitTest.java |    53 -
 .../DiskDistributedNoAckRegionTestCase.java     |    42 -
 ...ributedNoAckSyncOverflowRegionDUnitTest.java |    63 -
 .../gemfire/cache30/DiskRegionDUnitTest.java    |  1636 --
 .../gemfire/cache30/DiskRegionTestImpl.java     |   247 -
 .../cache30/DistAckMapMethodsDUnitTest.java     |   707 -
 ...istributedAckOverflowRegionCCEDUnitTest.java |    82 -
 ...tedAckOverflowRegionCCEOffHeapDUnitTest.java |    82 -
 ...tributedAckPersistentRegionCCEDUnitTest.java |   228 -
 ...dAckPersistentRegionCCEOffHeapDUnitTest.java |    82 -
 .../DistributedAckRegionCCEDUnitTest.java       |   694 -
 ...DistributedAckRegionCCEOffHeapDUnitTest.java |    82 -
 ...istributedAckRegionCompressionDUnitTest.java |    72 -
 .../cache30/DistributedAckRegionDUnitTest.java  |   140 -
 .../DistributedAckRegionOffHeapDUnitTest.java   |    82 -
 .../DistributedMulticastRegionDUnitTest.java    |   212 -
 .../DistributedNoAckRegionCCEDUnitTest.java     |   586 -
 ...stributedNoAckRegionCCEOffHeapDUnitTest.java |    82 -
 .../DistributedNoAckRegionDUnitTest.java        |   311 -
 .../DistributedNoAckRegionOffHeapDUnitTest.java |    82 -
 .../gemfire/cache30/DynamicRegionDUnitTest.java |   288 -
 .../gemfire/cache30/GlobalLockingDUnitTest.java |   391 -
 .../cache30/GlobalRegionCCEDUnitTest.java       |   245 -
 .../GlobalRegionCCEOffHeapDUnitTest.java        |    82 -
 .../gemfire/cache30/GlobalRegionDUnitTest.java  |   417 -
 .../cache30/GlobalRegionOffHeapDUnitTest.java   |    89 -
 .../cache30/LRUEvictionControllerDUnitTest.java |   488 -
 .../gemfire/cache30/LocalRegionDUnitTest.java   |   264 -
 .../MemLRUEvictionControllerDUnitTest.java      |   276 -
 .../gemfire/cache30/MultiVMRegionTestCase.java  |  9177 ---------
 .../gemfire/cache30/MyGatewayEventFilter1.java  |    61 -
 .../gemfire/cache30/MyGatewayEventFilter2.java  |    66 -
 .../cache30/MyGatewayTransportFilter1.java      |    53 -
 .../cache30/MyGatewayTransportFilter2.java      |    55 -
 .../OffHeapLRUEvictionControllerDUnitTest.java  |    80 -
 .../PRBucketSynchronizationDUnitTest.java       |   306 -
 .../PartitionedRegionCompressionDUnitTest.java  |    70 -
 .../cache30/PartitionedRegionDUnitTest.java     |   554 -
 ...tionedRegionMembershipListenerDUnitTest.java |   150 -
 .../PartitionedRegionOffHeapDUnitTest.java      |    81 -
 .../cache30/PreloadedRegionTestCase.java        |   102 -
 .../gemfire/cache30/ProxyDUnitTest.java         |   546 -
 .../cache30/PutAllCallBkRemoteVMDUnitTest.java  |   401 -
 .../cache30/PutAllCallBkSingleVMDUnitTest.java  |   321 -
 .../gemfire/cache30/PutAllMultiVmDUnitTest.java |   366 -
 .../gemfire/cache30/QueueMsgDUnitTest.java      |   312 -
 .../cache30/RRSynchronizationDUnitTest.java     |   269 -
 .../gemfire/cache30/ReconnectDUnitTest.java     |  1173 --
 .../ReconnectedCacheServerDUnitTest.java        |    68 -
 .../cache30/RegionAttributesTestCase.java       |   266 -
 .../cache30/RegionExpirationDUnitTest.java      |   276 -
 .../RegionMembershipListenerDUnitTest.java      |   420 -
 .../RegionReliabilityDistAckDUnitTest.java      |    39 -
 .../RegionReliabilityDistNoAckDUnitTest.java    |    39 -
 .../RegionReliabilityGlobalDUnitTest.java       |    39 -
 .../RegionReliabilityListenerDUnitTest.java     |   209 -
 .../cache30/RegionReliabilityTestCase.java      |  1450 --
 .../gemfire/cache30/RegionTestCase.java         |  4101 ----
 .../gemfire/cache30/ReliabilityTestCase.java    |    59 -
 .../cache30/RemoveAllMultiVmDUnitTest.java      |   300 -
 .../gemfire/cache30/RequiredRolesDUnitTest.java |   440 -
 .../cache30/RolePerformanceDUnitTest.java       |   189 -
 .../gemfire/cache30/SearchAndLoadDUnitTest.java |  1017 -
 .../gemfire/cache30/SlowRecDUnitTest.java       |  1467 --
 .../gemfire/cache30/TXDistributedDUnitTest.java |  1527 --
 .../gemfire/cache30/TXOrderDUnitTest.java       |   434 -
 .../cache30/TXRestrictionsDUnitTest.java        |   100 -
 .../gemfire/cache30/TestCacheCallback.java      |   102 -
 .../gemfire/cache30/TestCacheListener.java      |   222 -
 .../gemfire/cache30/TestCacheLoader.java        |    45 -
 .../gemfire/cache30/TestCacheWriter.java        |   131 -
 .../gemfire/cache30/TestDiskRegion.java         |   257 -
 .../gemstone/gemfire/cache30/TestHeapLRU.java   |    90 -
 .../gemfire/cache30/TestPdxSerializer.java      |    69 -
 .../cache30/TestTransactionListener.java        |    93 -
 .../gemfire/cache30/TestTransactionWriter.java  |    44 -
 .../AnalyzeSerializablesJUnitTest.java          |   325 -
 .../codeAnalysis/ClassAndMethodDetails.java     |   154 -
 .../gemfire/codeAnalysis/ClassAndMethods.java   |    50 -
 .../codeAnalysis/ClassAndVariableDetails.java   |   108 -
 .../gemfire/codeAnalysis/ClassAndVariables.java |    64 -
 .../codeAnalysis/CompiledClassUtils.java        |   433 -
 .../codeAnalysis/decode/CompiledAttribute.java  |    46 -
 .../codeAnalysis/decode/CompiledClass.java      |   276 -
 .../codeAnalysis/decode/CompiledCode.java       |    70 -
 .../codeAnalysis/decode/CompiledField.java      |   116 -
 .../codeAnalysis/decode/CompiledMethod.java     |   153 -
 .../gemfire/codeAnalysis/decode/cp/Cp.java      |    78 -
 .../gemfire/codeAnalysis/decode/cp/CpClass.java |    42 -
 .../codeAnalysis/decode/cp/CpDouble.java        |    40 -
 .../codeAnalysis/decode/cp/CpFieldref.java      |    33 -
 .../gemfire/codeAnalysis/decode/cp/CpFloat.java |    31 -
 .../codeAnalysis/decode/cp/CpInteger.java       |    31 -
 .../decode/cp/CpInterfaceMethodref.java         |    24 -
 .../codeAnalysis/decode/cp/CpInvokeDynamic.java |    33 -
 .../gemfire/codeAnalysis/decode/cp/CpLong.java  |    39 -
 .../codeAnalysis/decode/cp/CpMethodHandle.java  |    33 -
 .../codeAnalysis/decode/cp/CpMethodType.java    |    31 -
 .../codeAnalysis/decode/cp/CpMethodref.java     |    25 -
 .../codeAnalysis/decode/cp/CpNameAndType.java   |    27 -
 .../codeAnalysis/decode/cp/CpString.java        |    25 -
 .../gemfire/codeAnalysis/decode/cp/CpUtf8.java  |   133 -
 .../AbstractLauncherIntegrationJUnitTest.java   |    71 -
 .../distributed/AbstractLauncherJUnitTest.java  |   300 -
 .../AbstractLauncherJUnitTestCase.java          |   255 -
 .../AbstractLauncherServiceStatusJUnitTest.java |   265 -
 .../AbstractLocatorLauncherJUnitTestCase.java   |   106 -
 .../AbstractServerLauncherJUnitTestCase.java    |    94 -
 .../gemfire/distributed/AuthInitializer.java    |    45 -
 .../distributed/DistributedMemberDUnitTest.java |   432 -
 .../DistributedSystemConnectPerf.java           |   135 -
 .../distributed/DistributedSystemDUnitTest.java |   406 -
 .../DistributedSystemIntegrationJUnitTest.java  |    91 -
 .../distributed/DistributedSystemJUnitTest.java |    78 -
 .../distributed/DistributedTestSuite.java       |    36 -
 .../distributed/HostedLocatorsDUnitTest.java    |   195 -
 .../LauncherMemberMXBeanJUnitTest.java          |   153 -
 .../gemfire/distributed/LauncherTestSuite.java  |    48 -
 .../gemfire/distributed/LocatorDUnitTest.java   |  1910 --
 .../gemfire/distributed/LocatorJUnitTest.java   |   200 -
 .../LocatorLauncherIntegrationJUnitTest.java    |   248 -
 .../distributed/LocatorLauncherJUnitTest.java   |   322 -
 .../LocatorLauncherLocalFileJUnitTest.java      |    52 -
 .../LocatorLauncherLocalJUnitTest.java          |   843 -
 .../LocatorLauncherRemoteFileJUnitTest.java     |   219 -
 .../LocatorLauncherRemoteJUnitTest.java         |  1005 -
 .../distributed/LocatorStateJUnitTest.java      |   208 -
 .../gemfire/distributed/MyAuthenticator.java    |    54 -
 .../gemfire/distributed/MyPrincipal.java        |    29 -
 .../gemfire/distributed/RoleDUnitTest.java      |   170 -
 .../ServerLauncherIntegrationJUnitTest.java     |   312 -
 .../distributed/ServerLauncherJUnitTest.java    |   809 -
 .../ServerLauncherLocalFileJUnitTest.java       |    55 -
 .../ServerLauncherLocalJUnitTest.java           |  1076 --
 .../ServerLauncherRemoteFileJUnitTest.java      |   223 -
 .../ServerLauncherRemoteJUnitTest.java          |  1428 --
 .../ServerLauncherWithSpringJUnitTest.java      |    99 -
 .../distributed/SystemAdminDUnitTest.java       |   125 -
 .../AtomicLongWithTerminalStateJUnitTest.java   |    41 -
 .../distributed/internal/Bug40751DUnitTest.java |   138 -
 .../ConsoleDistributionManagerDUnitTest.java    |   442 -
 .../distributed/internal/DateMessage.java       |    98 -
 .../internal/DistributionAdvisorDUnitTest.java  |    98 -
 .../internal/DistributionManagerDUnitTest.java  |   579 -
 .../InternalDistributedSystemJUnitTest.java     |   831 -
 .../gemfire/distributed/internal/LDM.java       |    71 -
 .../internal/LocatorLoadSnapshotJUnitTest.java  |   384 -
 .../internal/ProduceDateMessages.java           |    53 -
 .../internal/ProductUseLogDUnitTest.java        |   108 -
 .../internal/ProductUseLogJUnitTest.java        |    86 -
 .../internal/ServerLocatorJUnitTest.java        |    74 -
 .../internal/SharedConfigurationJUnitTest.java  |    57 -
 .../internal/StartupMessageDataJUnitTest.java   |   296 -
 .../deadlock/DeadlockDetectorJUnitTest.java     |   333 -
 .../deadlock/DependencyGraphJUnitTest.java      |    87 -
 .../GemFireDeadlockDetectorDUnitTest.java       |   243 -
 .../deadlock/UnsafeThreadLocalJUnitTest.java    |    61 -
 .../internal/locks/CollaborationJUnitTest.java  |   617 -
 .../internal/locks/DLockGrantorHelper.java      |    98 -
 .../locks/DLockReentrantLockJUnitTest.java      |    84 -
 .../membership/MembershipJUnitTest.java         |   364 -
 .../internal/membership/NetViewJUnitTest.java   |   269 -
 .../membership/gms/GMSMemberJUnitTest.java      |   164 -
 .../membership/gms/MembershipManagerHelper.java |   171 -
 .../gms/auth/GMSAuthenticatorJUnitTest.java     |   316 -
 .../gms/fd/GMSHealthMonitorJUnitTest.java       |   638 -
 .../locator/GMSLocatorRecoveryJUnitTest.java    |   186 -
 .../gms/membership/GMSJoinLeaveJUnitTest.java   |  1215 --
 .../gms/membership/StatRecorderJUnitTest.java   |   227 -
 .../messenger/GMSQuorumCheckerJUnitTest.java    |   359 -
 .../membership/gms/messenger/InterceptUDP.java  |   109 -
 .../messenger/JGroupsMessengerJUnitTest.java    |   881 -
 .../gms/mgr/GMSMembershipManagerJUnitTest.java  |   436 -
 .../StreamingOperationManyDUnitTest.java        |   223 -
 .../StreamingOperationOneDUnitTest.java         |   182 -
 .../TcpServerBackwardCompatDUnitTest.java       |   257 -
 .../internal/tcpserver/TcpServerJUnitTest.java  |   221 -
 .../support/DistributedSystemAdapter.java       |   258 -
 .../gemfire/disttx/CacheMapDistTXDUnitTest.java |    65 -
 .../gemfire/disttx/DistTXDebugDUnitTest.java    |  1018 -
 .../disttx/DistTXDistributedTestSuite.java      |    42 -
 .../gemfire/disttx/DistTXExpiryJUnitTest.java   |    57 -
 .../gemfire/disttx/DistTXJUnitTest.java         |    96 -
 .../disttx/DistTXManagerImplJUnitTest.java      |    54 -
 .../gemfire/disttx/DistTXOrderDUnitTest.java    |    55 -
 .../disttx/DistTXPersistentDebugDUnitTest.java  |   132 -
 .../DistTXReleasesOffHeapOnCloseJUnitTest.java  |    53 -
 .../disttx/DistTXRestrictionsDUnitTest.java     |    46 -
 .../disttx/DistTXWithDeltaDUnitTest.java        |    38 -
 .../gemfire/disttx/DistTXWriterJUnitTest.java   |    56 -
 .../disttx/DistTXWriterOOMEJUnitTest.java       |    57 -
 .../disttx/DistributedTransactionDUnitTest.java |  2202 ---
 .../gemfire/disttx/PRDistTXDUnitTest.java       |    65 -
 .../gemfire/disttx/PRDistTXJUnitTest.java       |    92 -
 .../disttx/PRDistTXWithVersionsDUnitTest.java   |    66 -
 ...entPartitionedRegionWithDistTXDUnitTest.java |    46 -
 .../internal/AbstractConfigJUnitTest.java       |   114 -
 .../gemfire/internal/ArrayEqualsJUnitTest.java  |   193 -
 .../gemfire/internal/AvailablePortHelper.java   |   133 -
 .../internal/AvailablePortJUnitTest.java        |    75 -
 ...wardCompatibilitySerializationDUnitTest.java |   300 -
 .../gemfire/internal/Bug49856JUnitTest.java     |    85 -
 .../gemfire/internal/Bug51616JUnitTest.java     |    61 -
 .../gemfire/internal/ByteArrayData.java         |    73 -
 .../gemstone/gemfire/internal/ClassBuilder.java |   291 -
 .../ClassNotFoundExceptionDUnitTest.java        |   244 -
 .../internal/ClassPathLoaderJUnitTest.java      |  1262 --
 .../internal/CopyOnWriteHashSetJUnitTest.java   |   103 -
 .../internal/DataSerializableJUnitTest.java     |  3671 ----
 .../gemfire/internal/FileUtilJUnitTest.java     |    87 -
 .../internal/GemFireStatSamplerJUnitTest.java   |   618 -
 .../GemFireVersionIntegrationJUnitTest.java     |    54 -
 .../internal/GemFireVersionJUnitTest.java       |   102 -
 .../internal/HeapDataOutputStreamJUnitTest.java |   154 -
 .../gemfire/internal/InlineKeyJUnitTest.java    |   173 -
 .../gemfire/internal/JSSESocketJUnitTest.java   |   247 -
 .../internal/JarClassLoaderJUnitTest.java       |   828 -
 .../gemfire/internal/JarDeployerDUnitTest.java  |   747 -
 .../com/gemstone/gemfire/internal/JavaExec.java |    69 -
 .../gemfire/internal/LineWrapUnitJUnitTest.java |    52 -
 .../gemstone/gemfire/internal/LongBuffer.java   |    96 -
 .../gemfire/internal/NanoTimerJUnitTest.java    |   134 -
 .../gemfire/internal/ObjIdMapJUnitTest.java     |   256 -
 .../internal/OneTaskOnlyDecoratorJUnitTest.java |   165 -
 .../internal/PdxDeleteFieldDUnitTest.java       |   213 -
 .../internal/PdxDeleteFieldJUnitTest.java       |   214 -
 .../gemfire/internal/PdxRenameDUnitTest.java    |   217 -
 .../gemfire/internal/PdxRenameJUnitTest.java    |   164 -
 .../PutAllOperationContextJUnitTest.java        |   197 -
 .../internal/SSLConfigIntegrationJUnitTest.java |    51 -
 .../gemfire/internal/SSLConfigJUnitTest.java    |  1233 --
 ...hreadPoolExecutorWithKeepAliveJUnitTest.java |   342 -
 .../internal/SimpleStatSamplerJUnitTest.java    |   358 -
 .../gemfire/internal/SocketCloserJUnitTest.java |   195 -
 .../internal/SocketCloserWithWaitJUnitTest.java |    38 -
 .../StatArchiveWriterReaderJUnitTest.java       |  1735 --
 .../gemfire/internal/StatSamplerJUnitTest.java  |   361 -
 .../gemfire/internal/StatSamplerTestCase.java   |   185 -
 .../internal/UniqueIdGeneratorJUnitTest.java    |    68 -
 .../internal/cache/AbstractRegionJUnitTest.java |   513 -
 .../internal/cache/AbstractRegionMapTest.java   |   186 -
 .../gemfire/internal/cache/BackupDUnitTest.java |   743 -
 .../gemfire/internal/cache/BackupJUnitTest.java |   435 -
 .../internal/cache/Bug33359DUnitTest.java       |   160 -
 .../internal/cache/Bug33726DUnitTest.java       |   161 -
 .../internal/cache/Bug33726JUnitTest.java       |   134 -
 .../Bug34179TooManyFilesOpenJUnitTest.java      |   130 -
 .../internal/cache/Bug34583JUnitTest.java       |   101 -
 .../internal/cache/Bug37241DUnitTest.java       |   233 -
 .../internal/cache/Bug37244JUnitTest.java       |   279 -
 .../internal/cache/Bug37377DUnitTest.java       |   380 -
 .../internal/cache/Bug37500JUnitTest.java       |   184 -
 .../internal/cache/Bug39079DUnitTest.java       |   411 -
 .../internal/cache/Bug40299DUnitTest.java       |   304 -
 .../internal/cache/Bug40632DUnitTest.java       |   148 -
 .../internal/cache/Bug41091DUnitTest.java       |   174 -
 .../internal/cache/Bug41733DUnitTest.java       |   216 -
 .../internal/cache/Bug41957DUnitTest.java       |   161 -
 .../internal/cache/Bug42055DUnitTest.java       |    88 -
 .../internal/cache/Bug45164DUnitTest.java       |   104 -
 .../internal/cache/Bug45934DUnitTest.java       |   134 -
 .../internal/cache/Bug47667DUnitTest.java       |    87 -
 .../internal/cache/Bug48182JUnitTest.java       |   200 -
 .../internal/cache/CacheAdvisorDUnitTest.java   |   281 -
 .../cache/CacheLifecycleListenerJUnitTest.java  |   324 -
 .../internal/cache/CacheServiceJUnitTest.java   |    59 -
 .../cache/ChunkValueWrapperJUnitTest.java       |   188 -
 .../internal/cache/ClearDAckDUnitTest.java      |   286 -
 .../internal/cache/ClearGlobalDUnitTest.java    |   214 -
 ...ssagesRegionCreationAndDestroyJUnitTest.java |   173 -
 .../cache/ClientServerGetAllDUnitTest.java      |   817 -
 ...ServerInvalidAndDestroyedEntryDUnitTest.java |   514 -
 .../ClientServerTransactionCCEDUnitTest.java    |   108 -
 .../cache/ClientServerTransactionDUnitTest.java |  3389 ----
 .../cache/ComplexDiskRegionJUnitTest.java       |   169 -
 .../ConcurrentDestroySubRegionDUnitTest.java    |   173 -
 ...entFlushingAndRegionOperationsJUnitTest.java |   641 -
 .../cache/ConcurrentMapLocalJUnitTest.java      |   105 -
 .../cache/ConcurrentMapOpsDUnitTest.java        |  1238 --
 .../ConcurrentRegionOperationsJUnitTest.java    |   925 -
 ...rentRollingAndRegionOperationsJUnitTest.java |   996 -
 .../internal/cache/ConflationJUnitTest.java     |   409 -
 .../cache/ConnectDisconnectDUnitTest.java       |   185 -
 .../cache/CustomerIDPartitionResolver.java      |    86 -
 .../internal/cache/DeltaFaultInDUnitTest.java   |   145 -
 .../cache/DeltaPropagationDUnitTest.java        |  1515 --
 .../cache/DeltaPropagationStatsDUnitTest.java   |   626 -
 .../internal/cache/DeltaSizingDUnitTest.java    |   265 -
 .../gemfire/internal/cache/DiskIFJUnitTest.java |   796 -
 .../gemfire/internal/cache/DiskIdJUnitTest.java |   238 -
 .../internal/cache/DiskInitFileJUnitTest.java   |   113 -
 .../cache/DiskOfflineCompactionJUnitTest.java   |   826 -
 .../internal/cache/DiskOldAPIsJUnitTest.java    |   437 -
 ...iskRandomOperationsAndRecoveryJUnitTest.java |   715 -
 .../cache/DiskRegByteArrayDUnitTest.java        |   270 -
 .../cache/DiskRegCacheXmlJUnitTest.java         |   299 -
 .../DiskRegCachexmlGeneratorJUnitTest.java      |   302 -
 .../internal/cache/DiskRegCbkChkJUnitTest.java  |   118 -
 .../DiskRegOplogSwtchingAndRollerJUnitTest.java |  1021 -
 .../cache/DiskRegRecoveryJUnitTest.java         |  1495 --
 .../cache/DiskRegionAsyncRecoveryJUnitTest.java |   538 -
 ...RegionChangingRegionAttributesJUnitTest.java |   143 -
 .../cache/DiskRegionClearJUnitTest.java         |   288 -
 .../internal/cache/DiskRegionHelperFactory.java |   263 -
 .../DiskRegionIllegalArguementsJUnitTest.java   |   281 -
 ...iskRegionIllegalCacheXMLvaluesJUnitTest.java |   146 -
 .../internal/cache/DiskRegionJUnitTest.java     |  3141 ---
 .../internal/cache/DiskRegionProperties.java    |   222 -
 .../internal/cache/DiskRegionTestingBase.java   |   404 -
 .../cache/DiskStoreFactoryJUnitTest.java        |   450 -
 .../cache/DiskWriteAttributesJUnitTest.java     |   223 -
 ...DistrbutedRegionProfileOffHeapDUnitTest.java |   252 -
 .../cache/DistributedCacheTestCase.java         |   473 -
 .../cache/EnumListenerEventJUnitTest.java       |    73 -
 .../internal/cache/EventTrackerDUnitTest.java   |   418 -
 .../internal/cache/EvictionDUnitTest.java       |   247 -
 .../cache/EvictionObjectSizerDUnitTest.java     |   358 -
 .../internal/cache/EvictionStatsDUnitTest.java  |   557 -
 .../internal/cache/EvictionTestBase.java        |   578 -
 .../internal/cache/FaultingInJUnitTest.java     |   236 -
 .../cache/FixedPRSinglehopDUnitTest.java        |   893 -
 .../internal/cache/GIIDeltaDUnitTest.java       |  2632 ---
 .../internal/cache/GIIFlowControlDUnitTest.java |   455 -
 .../internal/cache/GridAdvisorDUnitTest.java    |  1081 --
 .../internal/cache/HABug36773DUnitTest.java     |   370 -
 .../HAOverflowMemObjectSizerDUnitTest.java      |   302 -
 .../cache/IncrementalBackupDUnitTest.java       |  1104 --
 .../cache/InterruptClientServerDUnitTest.java   |   252 -
 .../internal/cache/InterruptDiskJUnitTest.java  |   135 -
 ...InterruptsConserveSocketsFalseDUnitTest.java |    37 -
 .../internal/cache/InterruptsDUnitTest.java     |   213 -
 .../internal/cache/IteratorDUnitTest.java       |   104 -
 .../LIFOEvictionAlgoEnabledRegionJUnitTest.java |   343 -
 ...victionAlgoMemoryEnabledRegionJUnitTest.java |   436 -
 .../internal/cache/MapClearGIIDUnitTest.java    |   286 -
 .../internal/cache/MapInterface2JUnitTest.java  |   281 -
 .../internal/cache/MapInterfaceJUnitTest.java   |   301 -
 .../internal/cache/MockCacheService.java        |    24 -
 .../internal/cache/MockCacheServiceImpl.java    |    39 -
 .../MultipleOplogsRollingFeatureJUnitTest.java  |   257 -
 .../cache/NetSearchMessagingDUnitTest.java      |   442 -
 .../cache/OffHeapEvictionDUnitTest.java         |   135 -
 .../cache/OffHeapEvictionStatsDUnitTest.java    |    88 -
 .../gemfire/internal/cache/OffHeapTestUtil.java |    64 -
 .../cache/OfflineSnapshotJUnitTest.java         |   137 -
 .../gemfire/internal/cache/OldVLJUnitTest.java  |    92 -
 .../cache/OldValueImporterTestBase.java         |   181 -
 .../cache/OplogEntryIdMapJUnitTest.java         |    99 -
 .../cache/OplogEntryIdSetJUnitTest.java         |    83 -
 .../gemfire/internal/cache/OplogJUnitTest.java  |  4034 ----
 .../internal/cache/OplogRVVJUnitTest.java       |   173 -
 .../cache/OrderedTombstoneMapJUnitTest.java     |    59 -
 .../cache/P2PDeltaPropagationDUnitTest.java     |   614 -
 .../internal/cache/PRBadToDataDUnitTest.java    |   109 -
 .../cache/PRConcurrentMapOpsJUnitTest.java      |   231 -
 .../cache/PRDataStoreMemoryJUnitTest.java       |   154 -
 .../PRDataStoreMemoryOffHeapJUnitTest.java      |    51 -
 .../gemfire/internal/cache/PRTXJUnitTest.java   |   150 -
 .../cache/PartitionAttributesImplJUnitTest.java |   543 -
 .../cache/PartitionListenerDUnitTest.java       |   203 -
 ...dRegionAPIConserveSocketsFalseDUnitTest.java |    45 -
 .../cache/PartitionedRegionAPIDUnitTest.java    |  1512 --
 .../PartitionedRegionAsSubRegionDUnitTest.java  |   337 -
 ...gionBucketCreationDistributionDUnitTest.java |  1543 --
 .../PartitionedRegionCacheCloseDUnitTest.java   |   297 -
 ...rtitionedRegionCacheLoaderForRootRegion.java |    62 -
 ...artitionedRegionCacheLoaderForSubRegion.java |    65 -
 ...rtitionedRegionCacheXMLExampleDUnitTest.java |   134 -
 .../PartitionedRegionCreationDUnitTest.java     |   914 -
 .../PartitionedRegionCreationJUnitTest.java     |   548 -
 .../cache/PartitionedRegionDUnitTestCase.java   |   531 -
 .../PartitionedRegionDataStoreJUnitTest.java    |   260 -
 ...rtitionedRegionDelayedRecoveryDUnitTest.java |   310 -
 .../PartitionedRegionDestroyDUnitTest.java      |   309 -
 .../PartitionedRegionEntryCountDUnitTest.java   |   149 -
 .../PartitionedRegionEvictionDUnitTest.java     |  1762 --
 .../cache/PartitionedRegionHADUnitTest.java     |   506 -
 ...onedRegionHAFailureAndRecoveryDUnitTest.java |   535 -
 .../cache/PartitionedRegionHelperJUnitTest.java |    48 -
 .../PartitionedRegionInvalidateDUnitTest.java   |   212 -
 ...artitionedRegionLocalMaxMemoryDUnitTest.java |   318 -
 ...nedRegionLocalMaxMemoryOffHeapDUnitTest.java |    73 -
 .../PartitionedRegionMultipleDUnitTest.java     |   600 -
 ...rtitionedRegionOffHeapEvictionDUnitTest.java |    94 -
 .../cache/PartitionedRegionPRIDDUnitTest.java   |   270 -
 .../cache/PartitionedRegionQueryDUnitTest.java  |  1160 --
 ...artitionedRegionQueryEvaluatorJUnitTest.java |   307 -
 ...artitionedRegionRedundancyZoneDUnitTest.java |   165 -
 ...tionedRegionSerializableObjectJUnitTest.java |   178 -
 .../PartitionedRegionSingleHopDUnitTest.java    |  2386 ---
 ...RegionSingleHopWithServerGroupDUnitTest.java |  1738 --
 ...onedRegionSingleNodeOperationsJUnitTest.java |  1542 --
 .../cache/PartitionedRegionSizeDUnitTest.java   |   609 -
 .../cache/PartitionedRegionStatsDUnitTest.java  |   649 -
 .../cache/PartitionedRegionStatsJUnitTest.java  |   534 -
 .../cache/PartitionedRegionTestHelper.java      |   337 -
 .../PartitionedRegionTestUtilsDUnitTest.java    |   576 -
 .../PartitionedRegionWithSameNameDUnitTest.java |   924 -
 .../PersistentPartitionedRegionJUnitTest.java   |   225 -
 .../internal/cache/PutAllDAckDUnitTest.java     |   228 -
 .../internal/cache/PutAllGlobalDUnitTest.java   |   296 -
 .../cache/RegionEntryFlagsJUnitTest.java        |    97 -
 .../internal/cache/RegionListenerJUnitTest.java |    63 -
 .../cache/RemotePutReplyMessageJUnitTest.java   |    53 -
 .../cache/RemoteTransactionCCEDUnitTest.java    |    35 -
 .../cache/RemoteTransactionDUnitTest.java       |  4322 -----
 .../internal/cache/RemoveAllDAckDUnitTest.java  |   173 -
 .../internal/cache/RemoveDAckDUnitTest.java     |   201 -
 .../internal/cache/RemoveGlobalDUnitTest.java   |   250 -
 .../internal/cache/RunCacheInOldGemfire.java    |   188 -
 .../cache/SimpleDiskRegionJUnitTest.java        |   390 -
 .../internal/cache/SingleHopStatsDUnitTest.java |   549 -
 .../internal/cache/SizingFlagDUnitTest.java     |  1039 -
 .../internal/cache/SnapshotTestUtil.java        |    47 -
 .../internal/cache/SystemFailureDUnitTest.java  |   877 -
 .../internal/cache/TXManagerImplJUnitTest.java  |   334 -
 .../cache/TXReservationMgrJUnitTest.java        |   150 -
 .../gemfire/internal/cache/TestDelta.java       |    96 -
 .../internal/cache/TestHelperForHydraTests.java |    32 -
 .../internal/cache/TestNonSizerObject.java      |    63 -
 .../internal/cache/TestObjectSizerImpl.java     |    72 -
 .../gemfire/internal/cache/TestUtils.java       |    32 -
 .../cache/TombstoneCreationJUnitTest.java       |   231 -
 .../cache/TransactionsWithDeltaDUnitTest.java   |   376 -
 .../internal/cache/UnitTestValueHolder.java     |    43 -
 .../gemfire/internal/cache/UnzipUtil.java       |    84 -
 .../internal/cache/UpdateVersionJUnitTest.java  |   407 -
 .../gemfire/internal/cache/VLJUnitTest.java     |   130 -
 .../cache/control/FilterByPathJUnitTest.java    |    96 -
 .../cache/control/MemoryMonitorJUnitTest.java   |   762 -
 .../control/MemoryMonitorOffHeapJUnitTest.java  |   338 -
 .../control/MemoryThresholdsJUnitTest.java      |   152 -
 .../control/RebalanceOperationDUnitTest.java    |  3269 ----
 .../control/TestMemoryThresholdListener.java    |   169 -
 ...skRegOverflowAsyncGetInMemPerfJUnitTest.java |   136 -
 ...iskRegOverflowAsyncJUnitPerformanceTest.java |   167 -
 ...lowSyncGetInMemPerfJUnitPerformanceTest.java |   129 -
 ...DiskRegOverflowSyncJUnitPerformanceTest.java |   169 -
 ...egionOverflowAsyncRollingOpLogJUnitTest.java |   225 -
 ...RegionOverflowSyncRollingOpLogJUnitTest.java |   223 -
 .../DiskRegionPerfJUnitPerformanceTest.java     |   570 -
 .../DiskRegionPersistOnlySyncJUnitTest.java     |   234 -
 ...DiskRegionRollOpLogJUnitPerformanceTest.java |   638 -
 ...ltiThreadedOplogPerJUnitPerformanceTest.java |   216 -
 .../cache/execute/Bug51193DUnitTest.java        |   247 -
 .../ClientServerFunctionExecutionDUnitTest.java |   952 -
 .../execute/ColocationFailoverDUnitTest.java    |   531 -
 .../cache/execute/CustomResultCollector.java    |    50 -
 .../execute/CustomerIDPartitionResolver.java    |    82 -
 ...ributedRegionFunctionExecutionDUnitTest.java |  1657 --
 .../FunctionExecution_ExceptionDUnitTest.java   |   646 -
 .../execute/FunctionServiceStatsDUnitTest.java  |  1364 --
 .../cache/execute/LocalDataSetDUnitTest.java    |   390 -
 .../cache/execute/LocalDataSetFunction.java     |    90 -
 .../execute/LocalDataSetIndexingDUnitTest.java  |   303 -
 .../LocalFunctionExecutionDUnitTest.java        |   185 -
 .../MemberFunctionExecutionDUnitTest.java       |   682 -
 .../MultiRegionFunctionExecutionDUnitTest.java  |   298 -
 .../execute/MyFunctionExecutionException.java   |    59 -
 .../cache/execute/MyTransactionFunction.java    |   517 -
 .../OnGroupsFunctionExecutionDUnitTest.java     |  1246 --
 ...ntServerFunctionExecutionNoAckDUnitTest.java |   254 -
 ...tServerRegionFunctionExecutionDUnitTest.java |  1672 --
 ...egionFunctionExecutionFailoverDUnitTest.java |   579 -
 ...onFunctionExecutionNoSingleHopDUnitTest.java |  1273 --
 ...onExecutionSelectorNoSingleHopDUnitTest.java |  1231 --
 ...gionFunctionExecutionSingleHopDUnitTest.java |  1219 --
 .../cache/execute/PRClientServerTestBase.java   |   872 -
 .../cache/execute/PRColocationDUnitTest.java    |  2737 ---
 .../execute/PRCustomPartitioningDUnitTest.java  |   575 -
 .../execute/PRFunctionExecutionDUnitTest.java   |  3215 ---
 .../PRFunctionExecutionTimeOutDUnitTest.java    |   885 -
 ...ctionExecutionWithResultSenderDUnitTest.java |   663 -
 .../execute/PRPerformanceTestDUnitTest.java     |   425 -
 .../cache/execute/PRTransactionDUnitTest.java   |   765 -
 .../PRTransactionWithVersionsDUnitTest.java     |    29 -
 .../internal/cache/execute/PerfFunction.java    |    69 -
 .../internal/cache/execute/PerfTxFunction.java  |    74 -
 .../cache/execute/PerformanceTestFunction.java  |    74 -
 .../execute/SingleHopGetAllPutAllDUnitTest.java |   200 -
 .../internal/cache/execute/TestFunction.java    |   150 -
 .../internal/cache/execute/data/CustId.java     |    72 -
 .../internal/cache/execute/data/Customer.java   |    77 -
 .../internal/cache/execute/data/Order.java      |    65 -
 .../internal/cache/execute/data/OrderId.java    |    82 -
 .../internal/cache/execute/data/Shipment.java   |    65 -
 .../internal/cache/execute/data/ShipmentId.java |    89 -
 .../SimpleExtensionPointJUnitTest.java          |   215 -
 .../extension/mock/AbstractMockExtension.java   |    61 -
 .../mock/AbstractMockExtensionXmlGenerator.java |    41 -
 .../mock/AlterMockCacheExtensionFunction.java   |    90 -
 .../mock/AlterMockRegionExtensionFunction.java  |   104 -
 .../mock/CreateMockCacheExtensionFunction.java  |    86 -
 .../mock/CreateMockRegionExtensionFunction.java |   101 -
 .../mock/DestroyMockCacheExtensionFunction.java |    89 -
 .../DestroyMockRegionExtensionFunction.java     |    99 -
 .../extension/mock/MockCacheExtension.java      |    53 -
 .../mock/MockCacheExtensionXmlGenerator.java    |    57 -
 .../extension/mock/MockExtensionCommands.java   |   228 -
 .../extension/mock/MockExtensionXmlParser.java  |   102 -
 .../extension/mock/MockRegionExtension.java     |    47 -
 .../mock/MockRegionExtensionXmlGenerator.java   |    57 -
 ...gionFunctionFunctionInvocationException.java |    60 -
 .../functions/DistributedRegionFunction.java    |    97 -
 .../cache/functions/LocalDataSetFunction.java   |    89 -
 .../internal/cache/functions/TestFunction.java  |  1148 --
 .../ha/BlockingHARQAddOperationJUnitTest.java   |   239 -
 .../cache/ha/BlockingHARQStatsJUnitTest.java    |    77 -
 .../cache/ha/BlockingHARegionJUnitTest.java     |   480 -
 .../ha/BlockingHARegionQueueJUnitTest.java      |   213 -
 .../cache/ha/Bug36853EventsExpiryDUnitTest.java |   307 -
 .../internal/cache/ha/Bug48571DUnitTest.java    |   262 -
 .../internal/cache/ha/Bug48879DUnitTest.java    |   221 -
 .../internal/cache/ha/ConflatableObject.java    |   221 -
 .../cache/ha/EventIdOptimizationDUnitTest.java  |   595 -
 .../cache/ha/EventIdOptimizationJUnitTest.java  |   253 -
 .../internal/cache/ha/FailoverDUnitTest.java    |   345 -
 .../internal/cache/ha/HABugInPutDUnitTest.java  |   185 -
 .../internal/cache/ha/HAClearDUnitTest.java     |   662 -
 .../cache/ha/HAConflationDUnitTest.java         |   447 -
 .../internal/cache/ha/HADuplicateDUnitTest.java |   333 -
 .../cache/ha/HAEventIdPropagationDUnitTest.java |   880 -
 .../internal/cache/ha/HAExpiryDUnitTest.java    |   285 -
 .../internal/cache/ha/HAGIIBugDUnitTest.java    |   418 -
 .../internal/cache/ha/HAGIIDUnitTest.java       |   473 -
 .../gemfire/internal/cache/ha/HAHelper.java     |    51 -
 .../cache/ha/HARQAddOperationJUnitTest.java     |  1203 --
 .../cache/ha/HARQueueNewImplDUnitTest.java      |  1372 --
 .../internal/cache/ha/HARegionDUnitTest.java    |   406 -
 .../internal/cache/ha/HARegionJUnitTest.java    |   222 -
 .../cache/ha/HARegionQueueDUnitTest.java        |  1150 --
 .../cache/ha/HARegionQueueJUnitTest.java        |  2153 ---
 .../ha/HARegionQueueStartStopJUnitTest.java     |   133 -
 .../cache/ha/HARegionQueueStatsJUnitTest.java   |   504 -
 .../cache/ha/HASlowReceiverDUnitTest.java       |   294 -
 .../ha/OperationsPropagationDUnitTest.java      |   504 -
 .../internal/cache/ha/PutAllDUnitTest.java      |   598 -
 .../internal/cache/ha/StatsBugDUnitTest.java    |   375 -
 .../cache/ha/TestBlockingHARegionQueue.java     |   129 -
 .../cache/ha/ThreadIdentifierJUnitTest.java     |   116 -
 .../cache/locks/TXLockServiceDUnitTest.java     |   736 -
 .../internal/cache/lru/LRUClockJUnitTest.java   |   519 -
 .../cache/partitioned/Bug39356DUnitTest.java    |   236 -
 .../cache/partitioned/Bug43684DUnitTest.java    |   343 -
 .../cache/partitioned/Bug47388DUnitTest.java    |   292 -
 .../cache/partitioned/Bug51400DUnitTest.java    |   208 -
 .../partitioned/ElidedPutAllDUnitTest.java      |   123 -
 .../OfflineMembersDetailsJUnitTest.java         |    59 -
 .../partitioned/PartitionResolverDUnitTest.java |   411 -
 .../PartitionedRegionLoadModelJUnitTest.java    |  1560 --
 .../PartitionedRegionLoaderWriterDUnitTest.java |   228 -
 ...rtitionedRegionMetaDataCleanupDUnitTest.java |   193 -
 .../partitioned/PersistPRKRFDUnitTest.java      |   234 -
 ...tentColocatedPartitionedRegionDUnitTest.java |  1597 --
 .../PersistentPartitionedRegionDUnitTest.java   |  2227 ---
 ...tentPartitionedRegionOldConfigDUnitTest.java |    51 -
 .../PersistentPartitionedRegionTestBase.java    |   807 -
 ...rtitionedRegionWithTransactionDUnitTest.java |   185 -
 .../PutPutReplyMessageJUnitTest.java            |    54 -
 .../cache/partitioned/ShutdownAllDUnitTest.java |   847 -
 ...treamingPartitionOperationManyDUnitTest.java |   250 -
 ...StreamingPartitionOperationOneDUnitTest.java |   233 -
 .../fixed/CustomerFixedPartitionResolver.java   |   113 -
 .../fixed/FixedPartitioningDUnitTest.java       |  1695 --
 .../fixed/FixedPartitioningTestBase.java        |  1407 --
 ...ngWithColocationAndPersistenceDUnitTest.java |  1436 --
 .../cache/partitioned/fixed/MyDate1.java        |    72 -
 .../cache/partitioned/fixed/MyDate2.java        |    52 -
 .../cache/partitioned/fixed/MyDate3.java        |    72 -
 .../fixed/QuarterPartitionResolver.java         |   142 -
 .../SingleHopQuarterPartitionResolver.java      |   173 -
 .../persistence/BackupInspectorJUnitTest.java   |   236 -
 .../PersistentRVVRecoveryDUnitTest.java         |  1006 -
 .../PersistentRecoveryOrderDUnitTest.java       |  1843 --
 ...rsistentRecoveryOrderOldConfigDUnitTest.java |    66 -
 .../PersistentReplicatedTestBase.java           |   240 -
 .../TemporaryResultSetFactoryJUnitTest.java     |   136 -
 .../RegionEntryFactoryBuilderJUnitTest.java     |    85 -
 .../GFSnapshotJUnitPerformanceTest.java         |   158 -
 .../internal/cache/tier/Bug40396DUnitTest.java  |   214 -
 .../tier/sockets/AcceptorImplJUnitTest.java     |   276 -
 ...mpatibilityHigherVersionClientDUnitTest.java |   258 -
 .../cache/tier/sockets/Bug36269DUnitTest.java   |   228 -
 .../cache/tier/sockets/Bug36457DUnitTest.java   |   216 -
 .../cache/tier/sockets/Bug36805DUnitTest.java   |   248 -
 .../cache/tier/sockets/Bug36829DUnitTest.java   |   175 -
 .../cache/tier/sockets/Bug36995DUnitTest.java   |   265 -
 .../cache/tier/sockets/Bug37210DUnitTest.java   |   296 -
 .../cache/tier/sockets/Bug37805DUnitTest.java   |   141 -
 .../CacheServerMaxConnectionsJUnitTest.java     |   225 -
 ...heServerSelectorMaxConnectionsJUnitTest.java |    35 -
 .../cache/tier/sockets/CacheServerTestUtil.java |   646 -
 .../CacheServerTransactionsDUnitTest.java       |   855 -
 ...acheServerTransactionsSelectorDUnitTest.java |    35 -
 .../tier/sockets/ClearPropagationDUnitTest.java |   488 -
 .../tier/sockets/ClientConflationDUnitTest.java |   540 -
 .../sockets/ClientHealthMonitorJUnitTest.java   |   261 -
 .../ClientHealthMonitorSelectorJUnitTest.java   |    35 -
 .../sockets/ClientInterestNotifyDUnitTest.java  |   651 -
 .../tier/sockets/ClientServerMiscDUnitTest.java |  1394 --
 .../ClientServerMiscSelectorDUnitTest.java      |    36 -
 .../cache/tier/sockets/ConflationDUnitTest.java |   920 -
 .../tier/sockets/ConnectionProxyJUnitTest.java  |   857 -
 .../DataSerializerPropogationDUnitTest.java     |  1394 --
 .../cache/tier/sockets/DeltaEOFException.java   |   113 -
 .../DestroyEntryPropagationDUnitTest.java       |   511 -
 .../sockets/DurableClientBug39997DUnitTest.java |   126 -
 .../DurableClientQueueSizeDUnitTest.java        |   434 -
 .../DurableClientReconnectAutoDUnitTest.java    |    59 -
 .../DurableClientReconnectDUnitTest.java        |   763 -
 .../sockets/DurableClientStatsDUnitTest.java    |   395 -
 .../sockets/DurableRegistrationDUnitTest.java   |   870 -
 .../sockets/DurableResponseMatrixDUnitTest.java |   526 -
 .../sockets/EventIDVerificationDUnitTest.java   |   508 -
 .../EventIDVerificationInP2PDUnitTest.java      |   334 -
 .../cache/tier/sockets/FaultyDelta.java         |   162 -
 .../FilterProfileIntegrationJUnitTest.java      |   110 -
 .../tier/sockets/FilterProfileJUnitTest.java    |   412 -
 .../ForceInvalidateEvictionDUnitTest.java       |   401 -
 ...ForceInvalidateOffHeapEvictionDUnitTest.java |    65 -
 .../cache/tier/sockets/HABug36738DUnitTest.java |   196 -
 .../sockets/HAInterestDistributedTestCase.java  |    31 -
 .../tier/sockets/HAInterestPart1DUnitTest.java  |   213 -
 .../tier/sockets/HAInterestPart2DUnitTest.java  |   376 -
 .../cache/tier/sockets/HAInterestTestCase.java  |  1021 -
 .../sockets/HAStartupAndFailoverDUnitTest.java  |   742 -
 .../internal/cache/tier/sockets/HaHelper.java   |    33 -
 .../InstantiatorPropagationDUnitTest.java       |  1775 --
 .../tier/sockets/InterestListDUnitTest.java     |  1215 --
 .../sockets/InterestListEndpointDUnitTest.java  |   503 -
 .../InterestListEndpointPRDUnitTest.java        |    42 -
 .../InterestListEndpointSelectorDUnitTest.java  |    35 -
 .../sockets/InterestListFailoverDUnitTest.java  |   322 -
 .../sockets/InterestListRecoveryDUnitTest.java  |   517 -
 .../sockets/InterestRegrListenerDUnitTest.java  |   469 -
 .../sockets/InterestResultPolicyDUnitTest.java  |   395 -
 .../sockets/NewRegionAttributesDUnitTest.java   |   491 -
 .../tier/sockets/ObjectPartListJUnitTest.java   |   130 -
 .../tier/sockets/RedundancyLevelJUnitTest.java  |   130 -
 .../sockets/RedundancyLevelPart1DUnitTest.java  |   542 -
 .../sockets/RedundancyLevelPart2DUnitTest.java  |   540 -
 .../sockets/RedundancyLevelPart3DUnitTest.java  |   249 -
 .../tier/sockets/RedundancyLevelTestBase.java   |   657 -
 .../tier/sockets/RegionCloseDUnitTest.java      |   246 -
 ...erInterestBeforeRegionCreationDUnitTest.java |   280 -
 .../sockets/RegisterInterestKeysDUnitTest.java  |   248 -
 .../RegisterInterestKeysPRDUnitTest.java        |    41 -
 .../sockets/ReliableMessagingDUnitTest.java     |   440 -
 .../internal/cache/tier/sockets/TestFilter.java |    58 -
 .../sockets/UnregisterInterestDUnitTest.java    |   342 -
 .../sockets/UpdatePropagationDUnitTest.java     |   603 -
 .../sockets/UpdatePropagationPRDUnitTest.java   |    40 -
 .../VerifyEventIDGenerationInP2PDUnitTest.java  |   188 -
 ...UpdatesFromNonInterestEndPointDUnitTest.java |   257 -
 .../tier/sockets/command/CommitCommandTest.java |    61 -
 .../cache/versions/RVVExceptionJUnitTest.java   |    48 -
 .../versions/RegionVersionHolder2JUnitTest.java |   178 -
 .../versions/RegionVersionHolderJUnitTest.java  |  1894 --
 .../RegionVersionHolderRandomJUnitTest.java     |   191 -
 ...RegionVersionHolderSmallBitSetJUnitTest.java |    46 -
 .../versions/RegionVersionVectorJUnitTest.java  |   546 -
 .../cache/wan/AsyncEventQueueTestBase.java      |  1671 --
 .../cache/wan/CustomAsyncEventListener.java     |    57 -
 .../gemfire/internal/cache/wan/Filter70.java    |    63 -
 .../cache/wan/MyAsyncEventListener.java         |    53 -
 .../cache/wan/MyAsyncEventListener2.java        |    98 -
 .../cache/wan/MyDistributedSystemListener.java  |    65 -
 .../cache/wan/MyGatewaySenderEventListener.java |    77 -
 .../wan/MyGatewaySenderEventListener2.java      |    77 -
 .../cache/wan/MyGatewayTransportFilter1.java    |    57 -
 .../cache/wan/MyGatewayTransportFilter2.java    |    56 -
 .../cache/wan/MyGatewayTransportFilter3.java    |    56 -
 .../cache/wan/MyGatewayTransportFilter4.java    |    56 -
 .../internal/cache/wan/QueueListener.java       |    79 -
 .../asyncqueue/AsyncEventListenerDUnitTest.java |  1922 --
 .../AsyncEventListenerOffHeapDUnitTest.java     |    33 -
 .../AsyncEventQueueStatsDUnitTest.java          |   320 -
 .../AsyncEventQueueValidationsJUnitTest.java    |    82 -
 .../ConcurrentAsyncEventQueueDUnitTest.java     |   336 -
 ...ncurrentAsyncEventQueueOffHeapDUnitTest.java |    32 -
 .../CommonParallelAsyncEventQueueDUnitTest.java |    61 -
 ...ParallelAsyncEventQueueOffHeapDUnitTest.java |    32 -
 .../ParallelGatewaySenderQueueJUnitTest.java    |    87 -
 ...ialGatewaySenderEventProcessorJUnitTest.java |    42 -
 .../xmlcache/AbstractXmlParserJUnitTest.java    |   168 -
 .../cache/xmlcache/CacheCreationJUnitTest.java  |   209 -
 .../cache/xmlcache/CacheXmlParserJUnitTest.java |   169 -
 .../xmlcache/CacheXmlVersionJUnitTest.java      |    75 -
 .../PivotalEntityResolverJUnitTest.java         |   145 -
 .../cache/xmlcache/RegionCreationJUnitTest.java |    57 -
 .../xmlcache/XmlGeneratorUtilsJUnitTest.java    |   250 -
 .../classpathloaderjunittest/DoesExist.java     |    21 -
 .../CompressionCacheConfigDUnitTest.java        |   190 -
 .../CompressionCacheListenerDUnitTest.java      |   362 -
 ...ompressionCacheListenerOffHeapDUnitTest.java |    76 -
 .../CompressionRegionConfigDUnitTest.java       |   527 -
 .../CompressionRegionFactoryDUnitTest.java      |   148 -
 .../CompressionRegionOperationsDUnitTest.java   |   541 -
 ...ressionRegionOperationsOffHeapDUnitTest.java |    69 -
 .../compression/CompressionStatsDUnitTest.java  |   681 -
 .../compression/SnappyCompressorJUnitTest.java  |    76 -
 .../datasource/AbstractPoolCacheJUnitTest.java  |   251 -
 .../internal/datasource/CleanUpJUnitTest.java   |   126 -
 .../ConnectionPoolCacheImplJUnitTest.java       |   213 -
 .../datasource/ConnectionPoolingJUnitTest.java  |   339 -
 .../datasource/DataSourceFactoryJUnitTest.java  |   115 -
 .../internal/datasource/RestartJUnitTest.java   |    82 -
 .../internal/i18n/BasicI18nJUnitTest.java       |   407 -
 .../io/CompositeOutputStreamJUnitTest.java      |   453 -
 .../gemfire/internal/jndi/ContextJUnitTest.java |   440 -
 .../internal/jta/BlockingTimeOutJUnitTest.java  |   311 -
 .../gemfire/internal/jta/CacheUtils.java        |   226 -
 .../internal/jta/DataSourceJTAJUnitTest.java    |  1024 -
 .../internal/jta/ExceptionJUnitTest.java        |   126 -
 .../jta/GlobalTransactionJUnitTest.java         |   254 -
 .../gemstone/gemfire/internal/jta/JTAUtils.java |   386 -
 .../internal/jta/JtaIntegrationJUnitTest.java   |   134 -
 .../gemstone/gemfire/internal/jta/SyncImpl.java |    39 -
 .../internal/jta/TransactionImplJUnitTest.java  |   109 -
 .../jta/TransactionManagerImplJUnitTest.java    |   298 -
 .../jta/TransactionTimeOutJUnitTest.java        |   333 -
 .../jta/UserTransactionImplJUnitTest.java       |   130 -
 .../internal/jta/dunit/CommitThread.java        |   176 -
 .../internal/jta/dunit/ExceptionsDUnitTest.java |   316 -
 .../jta/dunit/IdleTimeOutDUnitTest.java         |   345 -
 .../jta/dunit/LoginTimeOutDUnitTest.java        |   348 -
 .../jta/dunit/MaxPoolSizeDUnitTest.java         |   315 -
 .../internal/jta/dunit/RollbackThread.java      |   176 -
 .../jta/dunit/TransactionTimeOutDUnitTest.java  |   502 -
 .../dunit/TxnManagerMultiThreadDUnitTest.java   |   522 -
 .../internal/jta/dunit/TxnTimeOutDUnitTest.java |   311 -
 .../internal/jta/functional/CacheJUnitTest.java |  1199 --
 .../jta/functional/TestXACacheLoader.java       |   104 -
 .../internal/lang/ClassUtilsJUnitTest.java      |   165 -
 .../internal/lang/InOutParameterJUnitTest.java  |    74 -
 .../internal/lang/InitializerJUnitTest.java     |    75 -
 .../internal/lang/ObjectUtilsJUnitTest.java     |   189 -
 .../internal/lang/StringUtilsJUnitTest.java     |   351 -
 .../internal/lang/SystemUtilsJUnitTest.java     |   101 -
 .../internal/lang/ThreadUtilsJUnitTest.java     |   214 -
 .../DistributedSystemLogFileJUnitTest.java      |  1505 --
 .../logging/LocatorLogFileJUnitTest.java        |   125 -
 .../logging/LogServiceIntegrationJUnitTest.java |   223 -
 .../LogServiceIntegrationTestSupport.java       |    40 -
 .../internal/logging/LogServiceJUnitTest.java   |   120 -
 .../LogWriterDisabledPerformanceTest.java       |    64 -
 .../logging/LogWriterImplJUnitTest.java         |    83 -
 .../logging/LogWriterPerformanceTest.java       |   127 -
 .../logging/LoggingIntegrationTestSuite.java    |    35 -
 .../logging/LoggingPerformanceTestCase.java     |   200 -
 .../internal/logging/LoggingUnitTestSuite.java  |    42 -
 .../logging/MergeLogFilesJUnitTest.java         |   247 -
 .../gemfire/internal/logging/NullLogWriter.java |   146 -
 .../internal/logging/SortLogFileJUnitTest.java  |   115 -
 .../internal/logging/TestLogWriterFactory.java  |   134 -
 .../logging/log4j/AlertAppenderJUnitTest.java   |   257 -
 .../logging/log4j/ConfigLocatorJUnitTest.java   |   222 -
 .../log4j/FastLoggerIntegrationJUnitTest.java   |   575 -
 .../logging/log4j/FastLoggerJUnitTest.java      |   178 -
 .../FastLoggerWithDefaultConfigJUnitTest.java   |    90 -
 .../log4j/LocalizedMessageJUnitTest.java        |    64 -
 .../log4j/Log4J2DisabledPerformanceTest.java    |    73 -
 .../logging/log4j/Log4J2PerformanceTest.java    |   151 -
 .../log4j/Log4jIntegrationTestSuite.java        |    28 -
 .../logging/log4j/Log4jUnitTestSuite.java       |    32 -
 .../log4j/LogWriterAppenderJUnitTest.java       |   224 -
 .../LogWriterLoggerDisabledPerformanceTest.java |    72 -
 .../log4j/LogWriterLoggerPerformanceTest.java   |   150 -
 .../internal/net/SocketUtilsJUnitTest.java      |   130 -
 .../offheap/AbstractStoredObjectTestBase.java   |   203 -
 .../offheap/ByteArrayMemoryChunkJUnitTest.java  |    30 -
 .../offheap/ChunkWithHeapFormJUnitTest.java     |    64 -
 .../offheap/DataAsAddressJUnitTest.java         |   368 -
 .../internal/offheap/DataTypeJUnitTest.java     |   913 -
 .../DirectByteBufferMemoryChunkJUnitTest.java   |    33 -
 ...tingOutOfOffHeapMemoryListenerJUnitTest.java |   100 -
 .../offheap/FreeListOffHeapRegionJUnitTest.java |    46 -
 .../offheap/GemFireChunkFactoryJUnitTest.java   |   129 -
 .../internal/offheap/GemFireChunkJUnitTest.java |   921 -
 .../offheap/GemFireChunkSliceJUnitTest.java     |    72 -
 .../HeapByteBufferMemoryChunkJUnitTest.java     |    33 -
 .../internal/offheap/InlineKeyJUnitTest.java    |   185 -
 .../offheap/LifecycleListenerJUnitTest.java     |   230 -
 .../offheap/MemoryChunkJUnitTestBase.java       |   290 -
 .../internal/offheap/MemoryChunkTestSuite.java  |    32 -
 .../offheap/MemoryInspectorImplJUnitTest.java   |   142 -
 .../offheap/NullOffHeapMemoryStats.java         |   114 -
 .../offheap/NullOutOfOffHeapMemoryListener.java |    39 -
 .../offheap/OffHeapHelperJUnitTest.java         |   314 -
 .../internal/offheap/OffHeapIndexJUnitTest.java |    92 -
 .../internal/offheap/OffHeapRegionBase.java     |   593 -
 .../OffHeapRegionEntryHelperJUnitTest.java      |   870 -
 .../offheap/OffHeapStorageJUnitTest.java        |   285 -
 .../offheap/OffHeapValidationJUnitTest.java     |   540 -
 .../OffHeapWriteObjectAsByteArrayJUnitTest.java |   115 -
 .../OldFreeListOffHeapRegionJUnitTest.java      |    47 -
 .../offheap/OutOfOffHeapMemoryDUnitTest.java    |   304 -
 .../offheap/RefCountChangeInfoJUnitTest.java    |   207 -
 ...moryAllocatorFillPatternIntegrationTest.java |   246 -
 ...mpleMemoryAllocatorFillPatternJUnitTest.java |   183 -
 .../offheap/SimpleMemoryAllocatorJUnitTest.java |   675 -
 .../internal/offheap/StoredObjectTestSuite.java |    33 -
 .../offheap/SyncChunkStackJUnitTest.java        |   289 -
 .../TxReleasesOffHeapOnCloseJUnitTest.java      |    63 -
 .../offheap/UnsafeMemoryChunkJUnitTest.java     |    87 -
 .../BlockingProcessStreamReaderJUnitTest.java   |   480 -
 ...leProcessControllerIntegrationJUnitTest.java |   155 -
 .../LocalProcessControllerJUnitTest.java        |   119 -
 .../process/LocalProcessLauncherDUnitTest.java  |   148 -
 .../process/LocalProcessLauncherJUnitTest.java  |   182 -
 ...NonBlockingProcessStreamReaderJUnitTest.java |   411 -
 .../internal/process/PidFileJUnitTest.java      |   274 -
 .../ProcessControllerFactoryJUnitTest.java      |   159 -
 .../process/ProcessStreamReaderTestCase.java    |   238 -
 .../gemfire/internal/process/mbean/Process.java |    60 -
 .../internal/process/mbean/ProcessMBean.java    |    28 -
 ...tractSignalNotificationHandlerJUnitTest.java |   460 -
 .../internal/size/ObjectSizerJUnitTest.java     |    89 -
 .../internal/size/ObjectTraverserJUnitTest.java |   122 -
 .../internal/size/ObjectTraverserPerf.java      |   100 -
 .../size/SizeClassOnceObjectSizerJUnitTest.java |    70 -
 .../gemfire/internal/size/SizeTestUtil.java     |    33 -
 .../size/WellKnownClassSizerJUnitTest.java      |    62 -
 .../internal/statistics/DummyStatistics.java    |   209 -
 .../statistics/SampleCollectorJUnitTest.java    |   347 -
 .../statistics/StatMonitorHandlerJUnitTest.java |   256 -
 .../statistics/StatisticsDUnitTest.java         |   949 -
 .../statistics/StatisticsMonitorJUnitTest.java  |   227 -
 .../internal/statistics/TestSampleHandler.java  |   177 -
 .../statistics/TestStatArchiveWriter.java       |    60 -
 .../statistics/TestStatisticsManager.java       |    42 -
 .../statistics/TestStatisticsSampler.java       |    59 -
 .../statistics/ValueMonitorJUnitTest.java       |   374 -
 .../internal/stats50/AtomicStatsJUnitTest.java  |   128 -
 .../internal/tcp/ConnectionJUnitTest.java       |    88 -
 .../util/AbortableTaskServiceJUnitTest.java     |   199 -
 .../internal/util/ArrayUtilsJUnitTest.java      |   179 -
 .../gemfire/internal/util/BytesJUnitTest.java   |   116 -
 .../internal/util/CollectionUtilsJUnitTest.java |   487 -
 .../internal/util/DelayedActionJUnitTest.java   |    56 -
 .../gemfire/internal/util/IOUtilsJUnitTest.java |   315 -
 .../gemfire/internal/util/SerializableImpl.java |    38 -
 .../util/SerializableImplWithValue.java         |    57 -
 .../gemfire/internal/util/Valuable.java         |    40 -
 .../CompactConcurrentHashSetJUnitTest.java      |   103 -
 .../ConcurrentHashMapIteratorJUnitTest.java     |   124 -
 .../concurrent/CopyOnWriteHashMapJUnitTest.java |   505 -
 .../concurrent/ReentrantSemaphoreJUnitTest.java |   112 -
 .../SemaphoreReadWriteLockJUnitTest.java        |   185 -
 .../cm/ConcurrentHashMapJUnitTest.java          |   631 -
 .../concurrent/cm/CountedMapLoopsJUnitTest.java |   225 -
 .../concurrent/cm/IntMapCheckJUnitTest.java     |   618 -
 .../util/concurrent/cm/LoopHelpers.java         |   219 -
 .../util/concurrent/cm/MapCheckJUnitTest.java   |   631 -
 .../util/concurrent/cm/MapLoopsJUnitTest.java   |   230 -
 .../util/concurrent/cm/RLJBarJUnitTest.java     |   197 -
 .../concurrent/cm/StringMapLoopsJUnitTest.java  |   240 -
 .../management/CacheManagementDUnitTest.java    |   949 -
 .../management/ClientHealthStatsDUnitTest.java  |   446 -
 .../gemfire/management/CompositeStats.java      |   103 -
 .../gemfire/management/CompositeTestMBean.java  |    65 -
 .../gemfire/management/CompositeTestMXBean.java |    33 -
 .../management/CompositeTypeTestDUnitTest.java  |   170 -
 .../gemfire/management/CustomMBean.java         |    76 -
 .../gemfire/management/CustomMXBean.java        |    36 -
 .../management/DLockManagementDUnitTest.java    |   473 -
 .../DataBrowserJSONValidationJUnitTest.java     |   350 -
 .../management/DiskManagementDUnitTest.java     |   728 -
 .../management/DistributedSystemDUnitTest.java  |   894 -
 .../management/LocatorManagementDUnitTest.java  |   353 -
 .../gemstone/gemfire/management/MBeanUtil.java  |   550 -
 .../gemfire/management/ManagementTestBase.java  |   760 -
 .../MemberMBeanAttributesDUnitTest.java         |   270 -
 .../management/OffHeapManagementDUnitTest.java  |   978 -
 .../gemfire/management/QueryDataDUnitTest.java  |   873 -
 .../management/RegionManagementDUnitTest.java   |  1450 --
 .../gemfire/management/TypedJsonJUnitTest.java  |   288 -
 ...ersalMembershipListenerAdapterDUnitTest.java |  2171 ---
 .../stats/AsyncEventQueueStatsJUnitTest.java    |    66 -
 .../bean/stats/CacheServerStatsJUnitTest.java   |   167 -
 .../bean/stats/DiskStatsJUnitTest.java          |   122 -
 .../stats/DistributedSystemStatsDUnitTest.java  |   108 -
 .../stats/DistributedSystemStatsJUnitTest.java  |   122 -
 .../bean/stats/GatewayMBeanBridgeJUnitTest.java |   108 -
 .../stats/GatewayReceiverStatsJUnitTest.java    |   207 -
 .../bean/stats/MBeanStatsTestCase.java          |    86 -
 .../bean/stats/MemberLevelStatsJUnitTest.java   |   581 -
 .../bean/stats/RegionStatsJUnitTest.java        |   271 -
 .../bean/stats/StatsRateJUnitTest.java          |   191 -
 .../internal/JettyHelperJUnitTest.java          |    80 -
 .../cli/ClasspathScanLoadHelperJUnitTest.java   |    92 -
 .../internal/cli/CliUtilDUnitTest.java          |   435 -
 .../internal/cli/CommandManagerJUnitTest.java   |   340 -
 .../cli/CommandSeparatorEscapeJUnitTest.java    |   138 -
 .../internal/cli/DataCommandJsonJUnitTest.java  |    61 -
 .../internal/cli/GfshParserJUnitTest.java       |  1162 --
 .../management/internal/cli/HeadlessGfsh.java   |   374 -
 .../internal/cli/HeadlessGfshJUnitTest.java     |    86 -
 .../management/internal/cli/ResultHandler.java  |    23 -
 .../internal/cli/TableBuilderJUnitTest.java     |   314 -
 .../cli/annotations/CliArgumentJUnitTest.java   |   214 -
 .../AbstractCommandsSupportJUnitTest.java       |   404 -
 .../cli/commands/CliCommandTestBase.java        |   565 -
 .../cli/commands/ConfigCommandsDUnitTest.java   |   502 -
 ...eateAlterDestroyRegionCommandsDUnitTest.java |  1150 --
 .../cli/commands/DeployCommandsDUnitTest.java   |   480 -
 .../commands/DiskStoreCommandsDUnitTest.java    |  1157 --
 .../commands/DiskStoreCommandsJUnitTest.java    |   405 -
 .../cli/commands/FunctionCommandsDUnitTest.java |   595 -
 .../commands/GemfireDataCommandsDUnitTest.java  |  2088 --
 ...WithCacheLoaderDuringCacheMissDUnitTest.java |   374 -
 .../HTTPServiceSSLSupportJUnitTest.java         |   158 -
 .../cli/commands/IndexCommandsDUnitTest.java    |   815 -
 .../cli/commands/IndexCommandsJUnitTest.java    |   208 -
 ...stAndDescribeDiskStoreCommandsDUnitTest.java |   194 -
 .../ListAndDescribeRegionDUnitTest.java         |   321 -
 .../cli/commands/ListIndexCommandDUnitTest.java |   669 -
 .../cli/commands/MemberCommandsDUnitTest.java   |   288 -
 .../MiscellaneousCommandsDUnitTest.java         |   498 -
 ...laneousCommandsExportLogsPart1DUnitTest.java |   140 -
 ...laneousCommandsExportLogsPart2DUnitTest.java |   144 -
 ...laneousCommandsExportLogsPart3DUnitTest.java |   151 -
 ...laneousCommandsExportLogsPart4DUnitTest.java |   137 -
 .../cli/commands/QueueCommandsDUnitTest.java    |   392 -
 .../SharedConfigurationCommandsDUnitTest.java   |   341 -
 .../cli/commands/ShellCommandsDUnitTest.java    |   367 -
 .../cli/commands/ShowDeadlockDUnitTest.java     |   274 -
 .../cli/commands/ShowMetricsDUnitTest.java      |   345 -
 .../cli/commands/ShowStackTraceDUnitTest.java   |   150 -
 .../cli/commands/UserCommandsDUnitTest.java     |   164 -
 .../RegionPathConverterJUnitTest.java           |    82 -
 .../internal/cli/domain/AbstractImpl.java       |    21 -
 .../management/internal/cli/domain/Impl1.java   |    21 -
 .../management/internal/cli/domain/Impl12.java  |    21 -
 .../internal/cli/domain/Interface1.java         |    21 -
 .../internal/cli/domain/Interface2.java         |    21 -
 .../management/internal/cli/domain/Stock.java   |    37 -
 .../management/internal/cli/dto/Car.java        |    75 -
 .../management/internal/cli/dto/Key1.java       |    67 -
 .../management/internal/cli/dto/Key2.java       |    64 -
 .../internal/cli/dto/ObjectWithCharAttr.java    |    60 -
 .../management/internal/cli/dto/Value1.java     |    97 -
 .../management/internal/cli/dto/Value2.java     |    90 -
 .../functions/DataCommandFunctionJUnitTest.java |   132 -
 .../DescribeDiskStoreFunctionJUnitTest.java     |  1676 --
 .../ListDiskStoresFunctionJUnitTest.java        |   328 -
 .../functions/ListIndexFunctionJUnitTest.java   |   435 -
 .../cli/parser/ParserUtilsJUnitTest.java        |    82 -
 .../preprocessor/PreprocessorJUnitTest.java     |   302 -
 .../PreprocessorUtilsJUnitTest.java             |   127 -
 .../cli/shell/GfshConfigInitFileJUnitTest.java  |   186 -
 .../shell/GfshExecutionStrategyJUnitTest.java   |   144 -
 .../cli/shell/GfshHistoryJUnitTest.java         |    89 -
 .../cli/shell/GfshInitFileJUnitTest.java        |   476 -
 .../SharedConfigurationDUnitTest.java           |   443 -
 .../configuration/ZipUtilsJUnitTest.java        |    96 -
 .../domain/CacheElementJUnitTest.java           |   144 -
 .../utils/XmlUtilsAddNewNodeJUnitTest.java      |   415 -
 .../configuration/utils/XmlUtilsJUnitTest.java  |   248 -
 .../internal/pulse/TestClientIdsDUnitTest.java  |   301 -
 .../internal/pulse/TestFunctionsDUnitTest.java  |   113 -
 .../internal/pulse/TestHeapDUnitTest.java       |   109 -
 .../internal/pulse/TestLocatorsDUnitTest.java   |    88 -
 .../pulse/TestSubscriptionsDUnitTest.java       |   307 -
 ...rDistributedSystemMXBeanIntegrationTest.java |    50 -
 ...horizeOperationForMBeansIntegrationTest.java |   325 -
 ...erationForRegionCommandsIntegrationTest.java |   136 -
 ...tionCodesForDataCommandsIntegrationTest.java |   101 -
 ...tionCodesForDistributedSystemMXBeanTest.java |    76 -
 .../ReadOpFileAccessControllerJUnitTest.java    |   201 -
 .../WanCommandsControllerJUnitTest.java         |   140 -
 .../gemfire/management/model/EmptyObject.java   |    24 -
 .../gemstone/gemfire/management/model/Item.java |    95 -
 .../gemfire/management/model/Order.java         |    88 -
 .../gemfire/management/model/SubOrder.java      |    30 -
 .../DomainObjectsAsValuesJUnitTest.java         |   129 -
 .../GemcachedBinaryClientJUnitTest.java         |   148 -
 .../GemcachedDevelopmentJUnitTest.java          |   265 -
 .../gemfire/memcached/IntegrationJUnitTest.java |    94 -
 .../gemfire/pdx/AutoSerializableJUnitTest.java  |  1401 --
 .../gemfire/pdx/ByteSourceJUnitTest.java        |   752 -
 .../ClientsWithVersioningRetryDUnitTest.java    |   513 -
 .../com/gemstone/gemfire/pdx/DSInsidePdx.java   |   109 -
 .../pdx/DistributedSystemIdDUnitTest.java       |   157 -
 .../com/gemstone/gemfire/pdx/DomainObject.java  |   106 -
 .../gemstone/gemfire/pdx/DomainObjectBad.java   |    25 -
 .../gemfire/pdx/DomainObjectClassLoadable.java  |    27 -
 .../gemfire/pdx/DomainObjectPdxAuto.java        |   192 -
 ...DomainObjectPdxAutoNoDefaultConstructor.java |    63 -
 .../java/com/gemstone/gemfire/pdx/Employee.java |    92 -
 .../pdx/JSONPdxClientServerDUnitTest.java       |   629 -
 .../com/gemstone/gemfire/pdx/NestedPdx.java     |   114 -
 .../gemfire/pdx/NonDelegatingLoader.java        |    66 -
 .../OffHeapByteBufferByteSourceJUnitTest.java   |    52 -
 .../gemfire/pdx/OffHeapByteSourceJUnitTest.java |    65 -
 .../pdx/PDXAsyncEventQueueDUnitTest.java        |   154 -
 .../gemfire/pdx/PdxAttributesJUnitTest.java     |   250 -
 .../gemfire/pdx/PdxClientServerDUnitTest.java   |   799 -
 .../pdx/PdxDeserializationDUnitTest.java        |   413 -
 .../pdx/PdxFormatterPutGetJUnitTest.java        |   208 -
 .../com/gemstone/gemfire/pdx/PdxInsideDS.java   |   107 -
 .../pdx/PdxInstanceFactoryJUnitTest.java        |  1210 --
 .../gemfire/pdx/PdxInstanceJUnitTest.java       |   396 -
 .../gemfire/pdx/PdxSerializableDUnitTest.java   |   196 -
 .../gemfire/pdx/PdxSerializableJUnitTest.java   |  2171 ---
 .../gemfire/pdx/PdxStringJUnitTest.java         |   167 -
 .../gemfire/pdx/PdxTypeExportDUnitTest.java     |   130 -
 .../gemfire/pdx/SeparateClassloaderPdx.java     |    43 -
 .../com/gemstone/gemfire/pdx/SimpleClass.java   |    83 -
 .../com/gemstone/gemfire/pdx/SimpleClass1.java  |   151 -
 .../com/gemstone/gemfire/pdx/SimpleClass2.java  |    32 -
 .../gemfire/pdx/TestObjectForPdxFormatter.java  |  1003 -
 .../gemfire/pdx/VersionClassLoader.java         |    98 -
 .../gemstone/gemfire/redis/AuthJUnitTest.java   |   160 -
 .../gemfire/redis/ConcurrentStartTest.java      |    98 -
 .../gemstone/gemfire/redis/HashesJUnitTest.java |   191 -
 .../gemstone/gemfire/redis/ListsJUnitTest.java  |   254 -
 .../gemfire/redis/RedisDistDUnitTest.java       |   258 -
 .../gemstone/gemfire/redis/SetsJUnitTest.java   |   258 -
 .../gemfire/redis/SortedSetsJUnitTest.java      |   430 -
 .../gemfire/redis/StringsJunitTest.java         |   312 -
 .../web/controllers/AddFreeItemToOrders.java    |   153 -
 .../rest/internal/web/controllers/Customer.java |   109 -
 .../internal/web/controllers/DateTimeUtils.java |    40 -
 .../rest/internal/web/controllers/Gender.java   |    30 -
 .../internal/web/controllers/GetAllEntries.java |    68 -
 .../web/controllers/GetDeliveredOrders.java     |   106 -
 .../internal/web/controllers/GetRegions.java    |    76 -
 .../web/controllers/GetValueForKey.java         |    77 -
 .../rest/internal/web/controllers/Item.java     |   160 -
 .../rest/internal/web/controllers/Order.java    |   189 -
 .../rest/internal/web/controllers/Person.java   |   185 -
 .../web/controllers/PutKeyFunction.java         |    63 -
 .../web/controllers/RestAPITestBase.java        |   123 -
 .../internal/web/controllers/RestTestUtils.java |   120 -
 .../security/ClientAuthenticationDUnitTest.java |   967 -
 .../ClientAuthenticationPart2DUnitTest.java     |    88 -
 .../security/ClientAuthorizationDUnitTest.java  |   797 -
 .../security/ClientAuthorizationTestBase.java   |  1388 --
 .../security/ClientMultiUserAuthzDUnitTest.java |   535 -
 .../DeltaClientAuthorizationDUnitTest.java      |   337 -
 .../DeltaClientPostAuthorizationDUnitTest.java  |   542 -
 .../security/P2PAuthenticationDUnitTest.java    |   623 -
 .../gemfire/security/SecurityTestUtil.java      |  1875 --
 .../com/gemstone/gemfire/test/dunit/Assert.java |    66 -
 .../gemfire/test/dunit/AsyncInvocation.java     |   216 -
 .../gemstone/gemfire/test/dunit/DUnitEnv.java   |    78 -
 .../gemfire/test/dunit/DebuggerUtils.java       |    52 -
 .../gemfire/test/dunit/DistributedTestCase.java |   532 -
 .../test/dunit/DistributedTestUtils.java        |   167 -
 .../com/gemstone/gemfire/test/dunit/Host.java   |   213 -
 .../gemfire/test/dunit/IgnoredException.java    |   200 -
 .../com/gemstone/gemfire/test/dunit/Invoke.java |   160 -
 .../com/gemstone/gemfire/test/dunit/Jitter.java |    87 -
 .../gemfire/test/dunit/LogWriterUtils.java      |   111 -
 .../gemfire/test/dunit/NetworkUtils.java        |    69 -
 .../gemfire/test/dunit/RMIException.java        |   170 -
 .../gemfire/test/dunit/RepeatableRunnable.java  |    31 -
 .../test/dunit/SerializableCallable.java        |    70 -
 .../test/dunit/SerializableCallableIF.java      |    26 -
 .../test/dunit/SerializableRunnable.java        |    91 -
 .../test/dunit/SerializableRunnableIF.java      |    25 -
 .../test/dunit/StoppableWaitCriterion.java      |    35 -
 .../gemfire/test/dunit/ThreadUtils.java         |   155 -
 .../com/gemstone/gemfire/test/dunit/VM.java     |  1357 --
 .../com/gemstone/gemfire/test/dunit/Wait.java   |   204 -
 .../gemfire/test/dunit/WaitCriterion.java       |    33 -
 .../dunit/rules/DistributedDisconnectRule.java  |   121 -
 .../rules/DistributedExternalResource.java      |    58 -
 .../DistributedRestoreSystemProperties.java     |    74 -
 .../gemfire/test/dunit/rules/RemoteInvoker.java |    39 -
 .../test/dunit/standalone/BounceResult.java     |    36 -
 .../gemfire/test/dunit/standalone/ChildVM.java  |    81 -
 .../test/dunit/standalone/DUnitLauncher.java    |   464 -
 .../test/dunit/standalone/ProcessManager.java   |   259 -
 .../test/dunit/standalone/RemoteDUnitVM.java    |   143 -
 .../test/dunit/standalone/RemoteDUnitVMIF.java  |    36 -
 .../dunit/standalone/StandAloneDUnitEnv.java    |    74 -
 .../test/dunit/tests/BasicDUnitTest.java        |   158 -
 .../tests/GetDefaultDiskStoreNameDUnitTest.java |    67 -
 .../dunit/tests/GetTestMethodNameDUnitTest.java |    54 -
 .../gemfire/test/dunit/tests/VMDUnitTest.java   |   241 -
 .../gemfire/test/golden/ExecutableProcess.java  |    24 -
 .../gemfire/test/golden/FailOutputTestCase.java |    52 -
 .../golden/FailWithErrorInOutputJUnitTest.java  |    47 -
 .../FailWithExtraLineInOutputJUnitTest.java     |    76 -
 ...WithLineMissingFromEndOfOutputJUnitTest.java |    75 -
 ...hLineMissingFromMiddleOfOutputJUnitTest.java |    74 -
 .../FailWithLoggerErrorInOutputJUnitTest.java   |    46 -
 .../FailWithLoggerFatalInOutputJUnitTest.java   |    46 -
 .../FailWithLoggerWarnInOutputJUnitTest.java    |    46 -
 .../golden/FailWithProblemInOutputTestCase.java |    61 -
 .../golden/FailWithSevereInOutputJUnitTest.java |    47 -
 ...hTimeoutOfWaitForOutputToMatchJUnitTest.java |    68 -
 .../FailWithWarningInOutputJUnitTest.java       |    47 -
 .../gemfire/test/golden/GoldenComparator.java   |   142 -
 .../test/golden/GoldenStringComparator.java     |    39 -
 .../gemfire/test/golden/GoldenTestCase.java     |   157 -
 .../golden/GoldenTestFrameworkTestSuite.java    |    43 -
 .../gemfire/test/golden/PassJUnitTest.java      |    86 -
 .../golden/PassWithExpectedErrorJUnitTest.java  |    47 -
 .../golden/PassWithExpectedProblemTestCase.java |    91 -
 .../golden/PassWithExpectedSevereJUnitTest.java |    47 -
 .../PassWithExpectedWarningJUnitTest.java       |    47 -
 .../test/golden/RegexGoldenComparator.java      |    37 -
 .../test/golden/StringGoldenComparator.java     |    37 -
 .../gemfire/test/golden/log4j2-test.xml         |    18 -
 .../gemfire/test/process/MainLauncher.java      |    48 -
 .../test/process/MainLauncherJUnitTest.java     |   159 -
 .../gemfire/test/process/OutputFormatter.java   |    37 -
 .../test/process/ProcessOutputReader.java       |    89 -
 .../test/process/ProcessStreamReader.java       |    74 -
 .../process/ProcessTestFrameworkTestSuite.java  |    28 -
 .../gemfire/test/process/ProcessWrapper.java    |   464 -
 .../test/process/ProcessWrapperJUnitTest.java   |    72 -
 .../gemstone/gemfire/util/JSR166TestCase.java   |   482 -
 .../gemstone/gemfire/util/test/TestUtil.java    |    65 -
 .../com/gemstone/persistence/admin/Logger.java  |   278 -
 .../gemstone/persistence/logging/Formatter.java |    41 -
 .../gemstone/persistence/logging/Handler.java   |    98 -
 .../com/gemstone/persistence/logging/Level.java |   128 -
 .../gemstone/persistence/logging/LogRecord.java |   185 -
 .../gemstone/persistence/logging/Logger.java    |   566 -
 .../persistence/logging/SimpleFormatter.java    |    77 -
 .../persistence/logging/StreamHandler.java      |    61 -
 .../test/java/com/gemstone/sequence/Arrow.java  |   124 -
 .../java/com/gemstone/sequence/Lifeline.java    |    98 -
 .../com/gemstone/sequence/LifelineState.java    |   114 -
 .../java/com/gemstone/sequence/LineMapper.java  |    36 -
 .../com/gemstone/sequence/SequenceDiagram.java  |   315 -
 .../com/gemstone/sequence/SequencePanel.java    |    83 -
 .../com/gemstone/sequence/StateColorMap.java    |    66 -
 .../java/com/gemstone/sequence/TimeAxis.java    |   122 -
 .../com/gemstone/sequence/ZoomingPanel.java     |   188 -
 .../sequence/gemfire/DefaultLineMapper.java     |    42 -
 .../gemfire/GemfireSequenceDisplay.java         |   336 -
 .../sequence/gemfire/HydraLineMapper.java       |   135 -
 .../sequence/gemfire/SelectGraphDialog.java     |   155 -
 .../com/main/MyDistributedSystemListener.java   |   115 -
 .../com/main/WANBootStrapping_Site1_Add.java    |   122 -
 .../com/main/WANBootStrapping_Site1_Remove.java |    75 -
 .../com/main/WANBootStrapping_Site2_Add.java    |   107 -
 .../com/main/WANBootStrapping_Site2_Remove.java |    73 -
 gemfire-core/src/test/java/hydra/GsRandom.java  |   311 -
 .../test/java/hydra/HydraRuntimeException.java  |    33 -
 gemfire-core/src/test/java/hydra/Log.java       |   219 -
 .../src/test/java/hydra/LogVersionHelper.java   |    45 -
 .../src/test/java/hydra/MethExecutor.java       |   393 -
 .../src/test/java/hydra/MethExecutorResult.java |   186 -
 .../src/test/java/hydra/SchedulingOrder.java    |    36 -
 .../src/test/java/hydra/log/AnyLogWriter.java   |   555 -
 .../java/hydra/log/CircularOutputStream.java    |   131 -
 .../parReg/query/unittest/NewPortfolio.java     |   272 -
 .../java/parReg/query/unittest/Position.java    |   162 -
 .../src/test/java/perffmwk/Formatter.java       |   147 -
 .../java/security/AuthzCredentialGenerator.java |   462 -
 .../test/java/security/CredentialGenerator.java |   343 -
 .../security/DummyAuthzCredentialGenerator.java |   145 -
 .../java/security/DummyCredentialGenerator.java |    94 -
 .../security/LdapUserCredentialGenerator.java   |   160 -
 .../java/security/PKCSCredentialGenerator.java  |   112 -
 .../java/security/SSLCredentialGenerator.java   |   117 -
 .../UserPasswordWithExtraPropsAuthInit.java     |    77 -
 .../security/XmlAuthzCredentialGenerator.java   |   264 -
 .../templates/security/DummyAuthenticator.java  |    87 -
 .../templates/security/DummyAuthorization.java  |   118 -
 .../security/FunctionSecurityPrmsHolder.java    |    55 -
 .../security/LdapUserAuthenticator.java         |   117 -
 .../java/templates/security/PKCSAuthInit.java   |   133 -
 .../templates/security/PKCSAuthenticator.java   |   167 -
 .../java/templates/security/PKCSPrincipal.java  |    42 -
 .../security/UserPasswordAuthInit.java          |    84 -
 .../templates/security/UsernamePrincipal.java   |    46 -
 .../templates/security/XmlAuthorization.java    |   675 -
 .../templates/security/XmlErrorHandler.java     |    82 -
 .../src/test/java/util/TestException.java       |    35 -
 ...gemstone.gemfire.internal.cache.CacheService |     1 -
 ...ne.gemfire.internal.cache.xmlcache.XmlParser |     5 -
 ...org.springframework.shell.core.CommandMarker |     8 -
 .../ClientCacheFactoryJUnitTest_single_pool.xml |    30 -
 .../cache/client/internal/cacheserver.cer       |   Bin 782 -> 0 bytes
 .../cache/client/internal/cacheserver.keystore  |   Bin 1253 -> 0 bytes
 .../client/internal/cacheserver.truststore      |   Bin 844 -> 0 bytes
 .../gemfire/cache/client/internal/client.cer    |   Bin 782 -> 0 bytes
 .../cache/client/internal/client.keystore       |   Bin 1251 -> 0 bytes
 .../cache/client/internal/client.truststore     |   Bin 846 -> 0 bytes
 .../cache/client/internal/default.keystore      |   Bin 1115 -> 0 bytes
 .../cache/client/internal/trusted.keystore      |   Bin 1078 -> 0 bytes
 .../gemfire/cache/query/dunit/IndexCreation.xml |   131 -
 .../functional/index-creation-with-eviction.xml |    56 -
 .../index-creation-without-eviction.xml         |    67 -
 .../functional/index-recovery-overflow.xml      |    57 -
 .../query/internal/index/cachequeryindex.xml    |   125 -
 .../internal/index/cachequeryindexwitherror.xml |   134 -
 .../cache/query/partitioned/PRIndexCreation.xml |    44 -
 .../gemfire/cache30/attributesUnordered.xml     |    39 -
 .../com/gemstone/gemfire/cache30/badFloat.xml   |    30 -
 .../com/gemstone/gemfire/cache30/badInt.xml     |    33 -
 .../gemfire/cache30/badKeyConstraintClass.xml   |    31 -
 .../com/gemstone/gemfire/cache30/badScope.xml   |    30 -
 .../com/gemstone/gemfire/cache30/bug44710.xml   |    31 -
 .../gemfire/cache30/callbackNotDeclarable.xml   |    34 -
 .../gemfire/cache30/callbackWithException.xml   |    34 -
 .../com/gemstone/gemfire/cache30/coLocation.xml |    31 -
 .../gemstone/gemfire/cache30/coLocation3.xml    |    31 -
 .../com/gemstone/gemfire/cache30/ewtest.xml     |    68 -
 .../cache30/examples_3_0/example-cache.xml      |    87 -
 .../cache30/examples_4_0/example-cache.xml      |    94 -
 .../gemfire/cache30/loaderNotLoader.xml         |    33 -
 .../com/gemstone/gemfire/cache30/malformed.xml  |    29 -
 .../gemfire/cache30/namedAttributes.xml         |    59 -
 .../gemfire/cache30/partitionedRegion.xml       |    39 -
 .../gemfire/cache30/partitionedRegion51.xml     |    31 -
 .../gemstone/gemfire/cache30/sameRootRegion.xml |    37 -
 .../gemstone/gemfire/cache30/sameSubregion.xml  |    42 -
 .../gemfire/cache30/unknownNamedAttributes.xml  |    30 -
 .../gemfire/codeAnalysis/excludedClasses.txt    |   115 -
 .../gemstone/gemfire/codeAnalysis/openBugs.txt  |    23 -
 .../sanctionedDataSerializables.txt             |  2172 ---
 .../codeAnalysis/sanctionedSerializables.txt    |   829 -
 .../internal/SharedConfigurationJUnitTest.xml   |    23 -
 ...st_testWriteAfterSamplingBegins_expected.gfs |   Bin 1970 -> 0 bytes
 ...est_testWriteWhenSamplingBegins_expected.gfs |   Bin 1933 -> 0 bytes
 .../internal/cache/BackupJUnitTest.cache.xml    |    23 -
 .../internal/cache/DiskRegCacheXmlJUnitTest.xml |   233 -
 .../cache/PartitionRegionCacheExample1.xml      |    43 -
 .../cache/PartitionRegionCacheExample2.xml      |    42 -
 .../incorrect_bytes_threshold.xml               |    35 -
 .../faultyDiskXMLsForTesting/incorrect_dir.xml  |    35 -
 .../incorrect_dir_size.xml                      |    35 -
 .../incorrect_max_oplog_size.xml                |    35 -
 .../incorrect_roll_oplogs_value.xml             |    35 -
 .../incorrect_sync_value.xml                    |    35 -
 .../incorrect_time_interval.xml                 |    35 -
 .../mixed_diskstore_diskdir.xml                 |    38 -
 .../mixed_diskstore_diskwriteattrs.xml          |    38 -
 .../tier/sockets/RedundancyLevelJUnitTest.xml   |    38 -
 ...testDTDFallbackWithNonEnglishLocal.cache.xml |    23 -
 .../gemstone/gemfire/internal/jta/cachejta.xml  |   273 -
 .../domain/CacheElementJUnitTest.xml            |     7 -
 ...dNewNodeJUnitTest.testAddNewNodeNewNamed.xml |    25 -
 ...ewNodeJUnitTest.testAddNewNodeNewUnnamed.xml |    27 -
 ...itTest.testAddNewNodeNewUnnamedExtension.xml |    25 -
 ...NodeJUnitTest.testAddNewNodeReplaceNamed.xml |    22 -
 ...deJUnitTest.testAddNewNodeReplaceUnnamed.xml |    24 -
 ...st.testAddNewNodeReplaceUnnamedExtension.xml |    24 -
 ...sAddNewNodeJUnitTest.testDeleteNodeNamed.xml |    21 -
 ...ddNewNodeJUnitTest.testDeleteNodeUnnamed.xml |    23 -
 ...JUnitTest.testDeleteNodeUnnamedExtension.xml |    23 -
 .../utils/XmlUtilsAddNewNodeJUnitTest.xml       |    24 -
 ...Test.testBuildSchemaLocationMapAttribute.xml |    10 -
 ...testBuildSchemaLocationMapEmptyAttribute.xml |     8 -
 ...ationMapMapOfStringListOfStringAttribute.xml |    10 -
 ....testBuildSchemaLocationMapNullAttribute.xml |     7 -
 ...XmlUtilsJUnitTest.testQuerySingleElement.xml |    24 -
 .../management/internal/security/auth1.json     |    14 -
 .../management/internal/security/auth2.json     |    21 -
 .../management/internal/security/auth3.json     |    25 -
 .../internal/security/testInheritRole.json      |    40 -
 .../security/testSimpleUserAndRole.json         |    14 -
 .../testUserAndRoleRegionServerGroup.json       |    16 -
 .../internal/security/testUserMultipleRole.json |    20 -
 .../gemstone/gemfire/pdx/jsonStrings/array.txt  |    22 -
 .../gemfire/pdx/jsonStrings/attachment.txt      |    11 -
 .../gemfire/pdx/jsonStrings/attachment2.txt     |    13 -
 .../gemstone/gemfire/pdx/jsonStrings/book.txt   |    17 -
 .../gemstone/gemfire/pdx/jsonStrings/image.txt  |    13 -
 .../gemstone/gemfire/pdx/jsonStrings/json1.txt  |    22 -
 .../gemstone/gemfire/pdx/jsonStrings/json10.txt |    20 -
 .../gemstone/gemfire/pdx/jsonStrings/json11.txt |    33 -
 .../gemstone/gemfire/pdx/jsonStrings/json12.txt |    32 -
 .../gemstone/gemfire/pdx/jsonStrings/json13.txt |    42 -
 .../gemstone/gemfire/pdx/jsonStrings/json14.txt |    15 -
 .../gemstone/gemfire/pdx/jsonStrings/json15.txt |     1 -
 .../gemstone/gemfire/pdx/jsonStrings/json16.txt |    31 -
 .../gemfire/pdx/jsonStrings/json16_2.txt        |    31 -
 .../gemstone/gemfire/pdx/jsonStrings/json17.txt |    27 -
 .../gemstone/gemfire/pdx/jsonStrings/json18.txt |    71 -
 .../gemstone/gemfire/pdx/jsonStrings/json19.txt |    18 -
 .../gemstone/gemfire/pdx/jsonStrings/json2.txt  |    11 -
 .../gemstone/gemfire/pdx/jsonStrings/json20.txt |    36 -
 .../gemstone/gemfire/pdx/jsonStrings/json21.txt |    36 -
 .../gemstone/gemfire/pdx/jsonStrings/json22.txt |    36 -
 .../gemstone/gemfire/pdx/jsonStrings/json23.txt |    23 -
 .../gemstone/gemfire/pdx/jsonStrings/json24.txt |    15 -
 .../gemstone/gemfire/pdx/jsonStrings/json25.txt |    33 -
 .../gemstone/gemfire/pdx/jsonStrings/json26.txt |    13 -
 .../gemstone/gemfire/pdx/jsonStrings/json27.txt |    25 -
 .../gemstone/gemfire/pdx/jsonStrings/json28.txt |    84 -
 .../gemstone/gemfire/pdx/jsonStrings/json29.txt |    11 -
 .../gemstone/gemfire/pdx/jsonStrings/json3.txt  |    26 -
 .../gemstone/gemfire/pdx/jsonStrings/json31.txt |     9 -
 .../gemstone/gemfire/pdx/jsonStrings/json4.txt  |    88 -
 .../gemstone/gemfire/pdx/jsonStrings/json5.txt  |    27 -
 .../gemstone/gemfire/pdx/jsonStrings/json6.txt  |    11 -
 .../gemstone/gemfire/pdx/jsonStrings/json7.txt  |    32 -
 .../gemstone/gemfire/pdx/jsonStrings/json8.txt  |    53 -
 .../gemstone/gemfire/pdx/jsonStrings/json9.txt  |    77 -
 .../gemfire/pdx/jsonStrings/jsonMongo.txt       |    10 -
 .../pdx/jsonStrings/jsonMongoSingleQuote.tx0    |    10 -
 .../gemfire/pdx/jsonStrings/jsonProductdb.txt   |    33 -
 .../gemfire/pdx/jsonStrings/json_google.txt     |    33 -
 .../gemfire/pdx/jsonStrings/jsoncustomer.txt    |    24 -
 .../gemfire/pdx/jsonStrings/jsonemptyobject.txo |    44 -
 .../gemfire/pdx/jsonStrings/jsonemptyobject.txt |    23 -
 .../gemfire/pdx/jsonStrings/jsonfacebook.txt    |    45 -
 .../gemfire/pdx/jsonStrings/jsonfeed.txt        |    33 -
 .../gemfire/pdx/jsonStrings/jsonfeed2.txt       |    47 -
 .../gemfire/pdx/jsonStrings/jsonflicker.txt     |    21 -
 .../gemfire/pdx/jsonStrings/jsoniphone.txt      |    78 -
 .../pdx/jsonStrings/jsonsolrwithcomment.tx0     |    29 -
 .../pdx/jsonStrings/jsonsolrwithcomment.txt     |    29 -
 .../gemfire/pdx/jsonStrings/jsontwitter1.txt    |   430 -
 .../gemfire/pdx/jsonStrings/jsontwitter2.txt    |   574 -
 .../gemfire/pdx/jsonStrings/jsontwitter3.txt    |    70 -
 .../gemfire/pdx/jsonStrings/jsonutf.tx0         |     2 -
 .../gemfire/pdx/jsonStrings/jsonyahoo.txt       |    11 -
 .../gemfire/pdx/jsonStrings/jsonyoutube.txt     |    54 -
 .../gemfire/pdx/jsonStrings/linkden1.txt        |    16 -
 .../gemstone/gemfire/pdx/jsonStrings/odata.txt  |    16 -
 .../gemstone/gemfire/pdx/jsonStrings/odata2.txt |    18 -
 .../jsonStrings/unquoteJsonStrings/json1.txt    |    31 -
 .../gemfire/pdx/jsonStrings/weather.txt         |     1 -
 .../gemfire/test/golden/log4j2-test.xml         |    18 -
 .../src/test/resources/jta/cachejta.xml         |   273 -
 .../src/test/resources/lib/authz-dummy.xml      |   126 -
 .../src/test/resources/lib/authz-ldap.xml       |    85 -
 .../resources/lib/authz-multiUser-dummy.xml     |   106 -
 .../test/resources/lib/authz-multiUser-ldap.xml |    83 -
 .../test/resources/lib/keys/gemfire1.keystore   |   Bin 1536 -> 0 bytes
 .../test/resources/lib/keys/gemfire10.keystore  |   Bin 1546 -> 0 bytes
 .../test/resources/lib/keys/gemfire11.keystore  |   Bin 1546 -> 0 bytes
 .../test/resources/lib/keys/gemfire2.keystore   |   Bin 1536 -> 0 bytes
 .../test/resources/lib/keys/gemfire3.keystore   |   Bin 1536 -> 0 bytes
 .../test/resources/lib/keys/gemfire4.keystore   |   Bin 1536 -> 0 bytes
 .../test/resources/lib/keys/gemfire5.keystore   |   Bin 1536 -> 0 bytes
 .../test/resources/lib/keys/gemfire6.keystore   |   Bin 1536 -> 0 bytes
 .../test/resources/lib/keys/gemfire7.keystore   |   Bin 1536 -> 0 bytes
 .../test/resources/lib/keys/gemfire8.keystore   |   Bin 1536 -> 0 bytes
 .../test/resources/lib/keys/gemfire9.keystore   |   Bin 1536 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire1.keystore    |   Bin 1426 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire10.keystore   |   Bin 1434 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire11.keystore   |   Bin 1434 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire2.keystore    |   Bin 1434 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire3.keystore    |   Bin 1426 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire4.keystore    |   Bin 1434 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire5.keystore    |   Bin 1434 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire6.keystore    |   Bin 1434 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire7.keystore    |   Bin 1426 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire8.keystore    |   Bin 1434 -> 0 bytes
 .../resources/lib/keys/ibm/gemfire9.keystore    |   Bin 1426 -> 0 bytes
 .../test/resources/lib/keys/ibm/publickeyfile   |   Bin 4535 -> 0 bytes
 .../src/test/resources/lib/keys/publickeyfile   |   Bin 4535 -> 0 bytes
 .../resources/spring/spring-gemfire-context.xml |    42 -
 .../src/test/resources/ssl/trusted.keystore     |   Bin 1176 -> 0 bytes
 .../src/test/resources/ssl/untrusted.keystore   |   Bin 1181 -> 0 bytes
 .../resources/templates/security/authz5_5.dtd   |   105 -
 .../resources/templates/security/authz6_0.dtd   |   110 -
 gemfire-cq/build.gradle                         |    23 -
 .../cache/client/internal/CloseCQOp.java        |    72 -
 .../cache/client/internal/CreateCQOp.java       |   163 -
 .../cache/client/internal/CreateCQWithIROp.java |    92 -
 .../cache/client/internal/GetDurableCQsOp.java  |   135 -
 .../client/internal/ServerCQProxyImpl.java      |   111 -
 .../gemfire/cache/client/internal/StopCQOp.java |    72 -
 .../cache/query/internal/cq/ClientCQImpl.java   |   615 -
 .../internal/cq/CqAttributesMutatorImpl.java    |    68 -
 .../cache/query/internal/cq/CqConflatable.java  |   223 -
 .../cache/query/internal/cq/CqEventImpl.java    |   162 -
 .../cache/query/internal/cq/CqListenerImpl.java |    56 -
 .../cache/query/internal/cq/CqQueryImpl.java    |   383 -
 .../query/internal/cq/CqServiceFactoryImpl.java |    69 -
 .../cache/query/internal/cq/CqServiceImpl.java  |  2087 --
 .../internal/cq/CqServiceStatisticsImpl.java    |   100 -
 .../query/internal/cq/CqServiceVsdStats.java    |   411 -
 .../query/internal/cq/CqStatisticsImpl.java     |    75 -
 .../cache/query/internal/cq/ServerCQImpl.java   |   655 -
 .../tier/sockets/command/BaseCQCommand.java     |    59 -
 .../cache/tier/sockets/command/CloseCQ.java     |   131 -
 .../cache/tier/sockets/command/ExecuteCQ.java   |   168 -
 .../cache/tier/sockets/command/ExecuteCQ61.java |   220 -
 .../cache/tier/sockets/command/GetCQStats.java  |   100 -
 .../tier/sockets/command/GetDurableCQs.java     |   143 -
 .../cache/tier/sockets/command/MonitorCQ.java   |   100 -
 .../cache/tier/sockets/command/StopCQ.java      |   135 -
 ...cache.query.internal.cq.spi.CqServiceFactory |    15 -
 .../gemfire/cache/query/cq/CQJUnitTest.java     |   150 -
 .../cache/query/cq/dunit/CqDataDUnitTest.java   |  1168 --
 .../dunit/CqDataOptimizedExecuteDUnitTest.java  |    55 -
 .../cq/dunit/CqDataUsingPoolDUnitTest.java      |  1574 --
 ...qDataUsingPoolOptimizedExecuteDUnitTest.java |    54 -
 .../cache/query/cq/dunit/CqPerfDUnitTest.java   |  1049 -
 .../cq/dunit/CqPerfUsingPoolDUnitTest.java      |  1009 -
 .../cache/query/cq/dunit/CqQueryDUnitTest.java  |  4009 ----
 .../dunit/CqQueryOptimizedExecuteDUnitTest.java |   314 -
 .../cq/dunit/CqQueryUsingPoolDUnitTest.java     |  3328 ----
 ...QueryUsingPoolOptimizedExecuteDUnitTest.java |    50 -
 .../cq/dunit/CqResultSetUsingPoolDUnitTest.java |  1144 --
 ...ltSetUsingPoolOptimizedExecuteDUnitTest.java |   235 -
 .../cache/query/cq/dunit/CqStateDUnitTest.java  |   138 -
 .../cache/query/cq/dunit/CqStatsDUnitTest.java  |   445 -
 .../dunit/CqStatsOptimizedExecuteDUnitTest.java |    50 -
 .../cq/dunit/CqStatsUsingPoolDUnitTest.java     |   456 -
 ...StatsUsingPoolOptimizedExecuteDUnitTest.java |    50 -
 .../query/cq/dunit/CqTimeTestListener.java      |   266 -
 .../PartitionedRegionCqQueryDUnitTest.java      |  1792 --
 ...dRegionCqQueryOptimizedExecuteDUnitTest.java |   248 -
 .../query/cq/dunit/PrCqUsingPoolDUnitTest.java  |  2033 --
 .../PrCqUsingPoolOptimizedExecuteDUnitTest.java |    50 -
 .../cache/query/dunit/PdxQueryCQDUnitTest.java  |   706 -
 .../cache/query/dunit/PdxQueryCQTestBase.java   |   496 -
 .../dunit/QueryIndexUpdateRIDUnitTest.java      |   823 -
 .../query/dunit/QueryMonitorDUnitTest.java      |  1300 --
 .../cache/snapshot/ClientSnapshotDUnitTest.java |   286 -
 .../AnalyzeCQSerializablesJUnitTest.java        |    79 -
 .../cache/PRDeltaPropagationDUnitTest.java      |  1215 --
 .../internal/cache/PutAllCSDUnitTest.java       |  4426 -----
 .../cache/RemoteCQTransactionDUnitTest.java     |  1119 --
 .../internal/cache/ha/CQListGIIDUnitTest.java   |   821 -
 .../cache/ha/HADispatcherDUnitTest.java         |   696 -
 .../sockets/ClientToServerDeltaDUnitTest.java   |  1040 -
 .../DeltaPropagationWithCQDUnitTest.java        |   344 -
 ...ToRegionRelationCQRegistrationDUnitTest.java |   784 -
 .../sockets/DurableClientCrashDUnitTest.java    |    99 -
 .../sockets/DurableClientNetDownDUnitTest.java  |    79 -
 .../sockets/DurableClientSimpleDUnitTest.java   |  3409 ----
 .../tier/sockets/DurableClientTestCase.java     |  2100 --
 .../CacheServerManagementDUnitTest.java         |   575 -
 .../cli/commands/ClientCommandsDUnitTest.java   |  1446 --
 .../DurableClientCommandsDUnitTest.java         |   436 -
 .../internal/pulse/TestCQDUnitTest.java         |   147 -
 .../internal/pulse/TestClientsDUnitTest.java    |   108 -
 .../internal/pulse/TestServerDUnitTest.java     |    98 -
 .../ClientAuthorizationTwoDUnitTest.java        |   243 -
 .../security/ClientAuthzObjectModDUnitTest.java |   417 -
 .../ClientCQPostAuthorizationDUnitTest.java     |   528 -
 .../ClientPostAuthorizationDUnitTest.java       |   397 -
 .../gemfire/security/MultiuserAPIDUnitTest.java |   392 -
 .../MultiuserDurableCQAuthzDUnitTest.java       |   491 -
 .../gemfire/codeAnalysis/excludedClasses.txt    |     2 -
 .../gemstone/gemfire/codeAnalysis/openBugs.txt  |    21 -
 .../sanctionedDataSerializables.txt             |     4 -
 .../codeAnalysis/sanctionedSerializables.txt    |     1 -
 .../tier/sockets/durablecq-client-cache.xml     |    37 -
 .../tier/sockets/durablecq-server-cache.xml     |    32 -
 .../java/joptsimple/AbstractOptionSpec.java     |   127 -
 .../joptsimple/AlternativeLongOptionSpec.java   |    54 -
 .../joptsimple/ArgumentAcceptingOptionSpec.java |   349 -
 .../src/main/java/joptsimple/ArgumentList.java  |    59 -
 .../java/joptsimple/BuiltinHelpFormatter.java   |   149 -
 .../src/main/java/joptsimple/HelpFormatter.java |    45 -
 .../IllegalOptionSpecificationException.java    |    52 -
 .../MissingRequiredOptionException.java         |    52 -
 .../MultipleArgumentsForOptionException.java    |    52 -
 .../java/joptsimple/NoArgumentOptionSpec.java   |    82 -
 .../OptionArgumentConversionException.java      |    63 -
 .../main/java/joptsimple/OptionDescriptor.java  |    94 -
 .../main/java/joptsimple/OptionException.java   |   111 -
 .../OptionMissingRequiredArgumentException.java |    52 -
 .../src/main/java/joptsimple/OptionParser.java  |   568 -
 .../main/java/joptsimple/OptionParserState.java |    81 -
 .../src/main/java/joptsimple/OptionSet.java     |   309 -
 .../src/main/java/joptsimple/OptionSpec.java    |    98 -
 .../main/java/joptsimple/OptionSpecBuilder.java |    96 -
 .../java/joptsimple/OptionSpecTokenizer.java    |   127 -
 .../joptsimple/OptionalArgumentOptionSpec.java  |    69 -
 .../src/main/java/joptsimple/ParserRules.java   |    84 -
 .../joptsimple/RequiredArgumentOptionSpec.java  |    54 -
 .../joptsimple/UnrecognizedOptionException.java |    52 -
 .../joptsimple/ValueConversionException.java    |    54 -
 .../main/java/joptsimple/ValueConverter.java    |    58 -
 .../joptsimple/internal/AbbreviationMap.java    |   233 -
 .../main/java/joptsimple/internal/Classes.java  |    74 -
 .../main/java/joptsimple/internal/Column.java   |   133 -
 .../internal/ColumnWidthCalculator.java         |    41 -
 .../java/joptsimple/internal/ColumnarData.java  |   163 -
 .../ConstructorInvokingValueConverter.java      |    58 -
 .../internal/MethodInvokingValueConverter.java  |    60 -
 .../main/java/joptsimple/internal/Objects.java  |    46 -
 .../java/joptsimple/internal/Reflection.java    |   143 -
 .../internal/ReflectionException.java           |    39 -
 .../main/java/joptsimple/internal/Strings.java  |   117 -
 .../java/joptsimple/util/DateConverter.java     |   104 -
 .../main/java/joptsimple/util/KeyValuePair.java |    83 -
 .../main/java/joptsimple/util/RegexMatcher.java |    88 -
 gemfire-json/src/main/java/org/json/CDL.java    |   279 -
 gemfire-json/src/main/java/org/json/Cookie.java |   169 -
 .../src/main/java/org/json/CookieList.java      |    90 -
 gemfire-json/src/main/java/org/json/HTTP.java   |   163 -
 .../src/main/java/org/json/HTTPTokener.java     |    77 -
 .../src/main/java/org/json/JSONArray.java       |   906 -
 .../src/main/java/org/json/JSONException.java   |    28 -
 gemfire-json/src/main/java/org/json/JSONML.java |   467 -
 .../src/main/java/org/json/JSONObject.java      |  1611 --
 .../src/main/java/org/json/JSONString.java      |    18 -
 .../src/main/java/org/json/JSONStringer.java    |    78 -
 .../src/main/java/org/json/JSONTokener.java     |   446 -
 .../src/main/java/org/json/JSONWriter.java      |   327 -
 gemfire-json/src/main/java/org/json/XML.java    |   508 -
 .../src/main/java/org/json/XMLTokener.java      |   365 -
 gemfire-junit/build.gradle                      |    21 -
 .../gemfire/test/junit/ConditionalIgnore.java   |    49 -
 .../gemfire/test/junit/IgnoreCondition.java     |    32 -
 .../gemfire/test/junit/IgnoreUntil.java         |    49 -
 .../com/gemstone/gemfire/test/junit/Repeat.java |    43 -
 .../com/gemstone/gemfire/test/junit/Retry.java  |    38 -
 .../test/junit/categories/ContainerTest.java    |    25 -
 .../test/junit/categories/DistributedTest.java  |    25 -
 .../categories/DistributedTransactionsTest.java |    26 -
 .../test/junit/categories/HydraTest.java        |    24 -
 .../test/junit/categories/IntegrationTest.java  |    25 -
 .../test/junit/categories/PerformanceTest.java  |    25 -
 .../gemfire/test/junit/categories/UITest.java   |    24 -
 .../gemfire/test/junit/categories/UnitTest.java |    25 -
 .../gemfire/test/junit/categories/WanTest.java  |    24 -
 .../test/junit/rules/ConditionalIgnoreRule.java |   123 -
 .../test/junit/rules/ExpectedTimeout.java       |   180 -
 .../test/junit/rules/ExpectedTimeoutRule.java   |   180 -
 .../test/junit/rules/IgnoreUntilRule.java       |   123 -
 .../gemfire/test/junit/rules/RepeatRule.java    |    81 -
 .../gemfire/test/junit/rules/RetryRule.java     |   181 -
 .../rules/SerializableExternalResource.java     |   107 -
 .../test/junit/rules/SerializableRuleChain.java |   119 -
 .../rules/SerializableTemporaryFolder.java      |    70 -
 .../test/junit/rules/SerializableTestName.java  |    54 -
 .../test/junit/rules/SerializableTestRule.java  |    33 -
 .../junit/rules/SerializableTestWatcher.java    |    29 -
 .../test/junit/rules/SerializableTimeout.java   |   119 -
 .../junit/support/DefaultIgnoreCondition.java   |    57 -
 .../IgnoreConditionEvaluationException.java     |    43 -
 .../junit/rules/ExpectedTimeoutJUnitTest.java   |   204 -
 .../examples/RepeatingTestCasesExampleTest.java |    94 -
 .../rules/examples/RetryRuleExampleTest.java    |    43 -
 .../rules/tests/ExpectedTimeoutRuleTest.java    |   214 -
 .../junit/rules/tests/IgnoreUntilRuleTest.java  |   121 -
 .../junit/rules/tests/JUnitRuleTestSuite.java   |    33 -
 .../test/junit/rules/tests/RepeatRuleTest.java  |   304 -
 .../tests/RetryRuleGlobalWithErrorTest.java     |   250 -
 .../tests/RetryRuleGlobalWithExceptionTest.java |   254 -
 .../tests/RetryRuleLocalWithErrorTest.java      |   207 -
 .../tests/RetryRuleLocalWithExceptionTest.java  |   213 -
 .../junit/rules/tests/RuleAndClassRuleTest.java |   138 -
 .../test/junit/rules/tests/TestRunner.java      |    37 -
 gemfire-lucene/build.gradle                     |    40 -
 .../gemfire/cache/lucene/LuceneIndex.java       |    60 -
 .../gemfire/cache/lucene/LuceneQuery.java       |    48 -
 .../cache/lucene/LuceneQueryFactory.java        |   100 -
 .../cache/lucene/LuceneQueryProvider.java       |    45 -
 .../cache/lucene/LuceneQueryResults.java        |    58 -
 .../cache/lucene/LuceneResultStruct.java        |    62 -
 .../gemfire/cache/lucene/LuceneService.java     |   118 -
 .../cache/lucene/LuceneServiceProvider.java     |    46 -
 .../lucene/internal/InternalLuceneIndex.java    |    29 -
 .../lucene/internal/InternalLuceneService.java  |    29 -
 .../lucene/internal/LuceneEventListener.java    |    99 -
 .../LuceneIndexForPartitionedRegion.java        |   136 -
 .../LuceneIndexForReplicatedRegion.java         |    48 -
 .../cache/lucene/internal/LuceneIndexImpl.java  |   107 -
 .../lucene/internal/LuceneQueryFactoryImpl.java |    67 -
 .../cache/lucene/internal/LuceneQueryImpl.java  |    87 -
 .../lucene/internal/LuceneQueryResultsImpl.java |   120 -
 .../lucene/internal/LuceneResultStructImpl.java |    94 -
 .../lucene/internal/LuceneServiceImpl.java      |   273 -
 .../internal/PartitionedRepositoryManager.java  |   163 -
 .../lucene/internal/StringQueryProvider.java    |   106 -
 .../internal/directory/FileIndexInput.java      |   131 -
 .../internal/directory/RegionDirectory.java     |   119 -
 .../internal/distributed/CollectorManager.java  |    55 -
 .../lucene/internal/distributed/EntryScore.java |    82 -
 .../internal/distributed/LuceneFunction.java    |   137 -
 .../distributed/LuceneFunctionContext.java      |   115 -
 .../lucene/internal/distributed/TopEntries.java |   133 -
 .../distributed/TopEntriesCollector.java        |   102 -
 .../distributed/TopEntriesCollectorManager.java |   178 -
 .../TopEntriesFunctionCollector.java            |   163 -
 .../lucene/internal/filesystem/ChunkKey.java    |   123 -
 .../cache/lucene/internal/filesystem/File.java  |   155 -
 .../internal/filesystem/FileInputStream.java    |   166 -
 .../internal/filesystem/FileOutputStream.java   |   103 -
 .../lucene/internal/filesystem/FileSystem.java  |   156 -
 .../filesystem/SeekableInputStream.java         |    43 -
 .../internal/repository/IndexRepository.java    |    74 -
 .../repository/IndexRepositoryImpl.java         |   113 -
 .../repository/IndexResultCollector.java        |    47 -
 .../internal/repository/RepositoryManager.java  |    44 -
 .../HeterogenousLuceneSerializer.java           |    83 -
 .../repository/serializer/LuceneSerializer.java |    35 -
 .../serializer/PdxLuceneSerializer.java         |    47 -
 .../serializer/ReflectionLuceneSerializer.java  |    74 -
 .../repository/serializer/SerializerUtil.java   |   168 -
 .../internal/xml/LuceneIndexCreation.java       |   111 -
 .../internal/xml/LuceneIndexXmlGenerator.java   |    65 -
 .../internal/xml/LuceneServiceXmlGenerator.java |    39 -
 .../lucene/internal/xml/LuceneXmlConstants.java |    31 -
 .../lucene/internal/xml/LuceneXmlParser.java    |    97 -
 .../geode.apache.org/lucene/lucene-1.0.xsd      |    57 -
 ...gemstone.gemfire.internal.cache.CacheService |     1 -
 ...ne.gemfire.internal.cache.xmlcache.XmlParser |     1 -
 .../internal/LuceneEventListenerJUnitTest.java  |   109 -
 .../LuceneIndexRecoveryHAJUnitTest.java         |   201 -
 .../LuceneQueryFactoryImplJUnitTest.java        |    50 -
 .../internal/LuceneQueryImplJUnitTest.java      |   123 -
 .../LuceneQueryResultsImplJUnitTest.java        |   126 -
 .../LuceneResultStructImpJUnitTest.java         |    51 -
 .../internal/LuceneServiceImplJUnitTest.java    |   226 -
 .../PartitionedRepositoryManagerJUnitTest.java  |   230 -
 .../internal/StringQueryProviderJUnitTest.java  |    90 -
 .../directory/RegionDirectoryJUnitTest.java     |    56 -
 .../DistributedScoringJUnitTest.java            |   155 -
 .../distributed/EntryScoreJUnitTest.java        |    40 -
 .../LuceneFunctionContextJUnitTest.java         |    64 -
 .../distributed/LuceneFunctionJUnitTest.java    |   423 -
 .../LuceneFunctionReadPathDUnitTest.java        |   242 -
 .../TopEntriesCollectorJUnitTest.java           |   139 -
 .../TopEntriesFunctionCollectorJUnitTest.java   |   323 -
 .../distributed/TopEntriesJUnitTest.java        |   146 -
 .../internal/filesystem/ChunkKeyJUnitTest.java  |    48 -
 .../internal/filesystem/FileJUnitTest.java      |    53 -
 .../filesystem/FileSystemJUnitTest.java         |   578 -
 .../IndexRepositoryImplJUnitTest.java           |   208 -
 .../IndexRepositoryImplPerformanceTest.java     |   439 -
 .../HeterogenousLuceneSerializerJUnitTest.java  |    90 -
 .../serializer/PdxFieldMapperJUnitTest.java     |    85 -
 .../ReflectionFieldMapperJUnitTest.java         |    85 -
 .../internal/repository/serializer/Type1.java   |    48 -
 .../internal/repository/serializer/Type2.java   |    34 -
 ...neIndexXmlGeneratorIntegrationJUnitTest.java |    78 -
 .../xml/LuceneIndexXmlGeneratorJUnitTest.java   |    80 -
 ...uceneIndexXmlParserIntegrationJUnitTest.java |   107 -
 .../xml/LuceneIndexXmlParserJUnitTest.java      |    72 -
 ...erIntegrationJUnitTest.createIndex.cache.xml |    41 -
 ...serIntegrationJUnitTest.parseIndex.cache.xml |    41 -
 gemfire-pulse/build.gradle                      |   116 -
 .../tools/pulse/internal/PulseAppListener.java  |   703 -
 .../controllers/ExceptionHandlingAdvice.java    |    52 -
 .../internal/controllers/PulseController.java   |   587 -
 .../tools/pulse/internal/data/Cluster.java      |  3808 ----
 .../tools/pulse/internal/data/DataBrowser.java  |   281 -
 .../pulse/internal/data/IClusterUpdater.java    |    37 -
 .../pulse/internal/data/JMXDataUpdater.java     |  2449 ---
 .../pulse/internal/data/JmxManagerFinder.java   |   171 -
 .../tools/pulse/internal/data/PulseConfig.java  |   126 -
 .../pulse/internal/data/PulseConstants.java     |   416 -
 .../tools/pulse/internal/data/PulseVersion.java |   104 -
 .../tools/pulse/internal/data/Repository.java   |   215 -
 .../gemfire/tools/pulse/internal/json/CDL.java  |   274 -
 .../tools/pulse/internal/json/Cookie.java       |   164 -
 .../tools/pulse/internal/json/CookieList.java   |    85 -
 .../gemfire/tools/pulse/internal/json/HTTP.java |   158 -
 .../tools/pulse/internal/json/HTTPTokener.java  |    72 -
 .../tools/pulse/internal/json/JSONArray.java    |   901 -
 .../pulse/internal/json/JSONException.java      |    47 -
 .../tools/pulse/internal/json/JSONML.java       |   462 -
 .../tools/pulse/internal/json/JSONObject.java   |  1585 --
 .../tools/pulse/internal/json/JSONString.java   |    37 -
 .../tools/pulse/internal/json/JSONStringer.java |    73 -
 .../tools/pulse/internal/json/JSONTokener.java  |   441 -
 .../tools/pulse/internal/json/JSONWriter.java   |   322 -
 .../gemfire/tools/pulse/internal/json/README    |    68 -
 .../gemfire/tools/pulse/internal/json/XML.java  |   503 -
 .../tools/pulse/internal/json/XMLTokener.java   |   360 -
 .../tools/pulse/internal/log/LogWriter.java     |   266 -
 .../pulse/internal/log/MessageFormatter.java    |   103 -
 .../pulse/internal/log/PulseLogWriter.java      |   306 -
 .../tools/pulse/internal/log/PulseLogger.java   |   144 -
 .../internal/service/ClusterDetailsService.java |   109 -
 .../service/ClusterDiskThroughputService.java   |    79 -
 .../service/ClusterGCPausesService.java         |    71 -
 .../service/ClusterKeyStatisticsService.java    |    79 -
 .../internal/service/ClusterMemberService.java  |   133 -
 .../service/ClusterMembersRGraphService.java    |   372 -
 .../service/ClusterMemoryUsageService.java      |    70 -
 .../internal/service/ClusterRegionService.java  |   241 -
 .../internal/service/ClusterRegionsService.java |   243 -
 .../service/ClusterSelectedRegionService.java   |   278 -
 .../ClusterSelectedRegionsMemberService.java    |   146 -
 .../internal/service/ClusterWANInfoService.java |    82 -
 .../service/MemberAsynchEventQueuesService.java |   107 -
 .../internal/service/MemberClientsService.java  |   123 -
 .../internal/service/MemberDetailsService.java  |   129 -
 .../service/MemberDiskThroughputService.java    |    93 -
 .../internal/service/MemberGCPausesService.java |    85 -
 .../service/MemberGatewayHubService.java        |   163 -
 .../service/MemberHeapUsageService.java         |    85 -
 .../service/MemberKeyStatisticsService.java     |    98 -
 .../internal/service/MemberRegionsService.java  |   140 -
 .../internal/service/MembersListService.java    |    78 -
 .../pulse/internal/service/PulseService.java    |    42 -
 .../internal/service/PulseServiceFactory.java   |    56 -
 .../internal/service/PulseVersionService.java   |    74 -
 .../service/QueryStatisticsService.java         |   152 -
 .../internal/service/SystemAlertsService.java   |   134 -
 .../pulse/internal/util/ConnectionUtil.java     |    47 -
 .../pulse/internal/util/IPAddressUtil.java      |    66 -
 .../tools/pulse/internal/util/StringUtils.java  |    86 -
 .../tools/pulse/internal/util/TimeUtils.java    |   121 -
 .../main/resources/LogMessages_en_US.properties |    97 -
 .../main/resources/LogMessages_fr_FR.properties |    91 -
 .../src/main/resources/default.properties       |    23 -
 .../src/main/resources/gemfire.properties       |    47 -
 .../src/main/resources/pulse-users.properties   |    30 -
 .../src/main/resources/pulse.properties         |    54 -
 .../src/main/resources/pulsesecurity.properties |    26 -
 .../src/main/resources/sqlfire.properties       |    47 -
 gemfire-pulse/src/main/webapp/DataBrowser.html  |   367 -
 gemfire-pulse/src/main/webapp/Login.html        |   142 -
 .../src/main/webapp/META-INF/MANIFEST.MF        |     3 -
 .../src/main/webapp/MemberDetails.html          |   618 -
 .../src/main/webapp/QueryStatistics.html        |   323 -
 .../webapp/WEB-INF/mvc-dispatcher-servlet.xml   |    35 -
 .../src/main/webapp/WEB-INF/spring-security.xml |    83 -
 gemfire-pulse/src/main/webapp/WEB-INF/web.xml   |    62 -
 .../src/main/webapp/clusterDetail.html          |   676 -
 .../src/main/webapp/css/ForceDirected.css       |    46 -
 gemfire-pulse/src/main/webapp/css/Treemap.css   |   134 -
 gemfire-pulse/src/main/webapp/css/base.css      |    74 -
 gemfire-pulse/src/main/webapp/css/common.css    |   240 -
 .../webapp/css/fonts/DroidSans-Bold-webfont.eot |   Bin 43462 -> 0 bytes
 .../webapp/css/fonts/DroidSans-Bold-webfont.svg |   271 -
 .../webapp/css/fonts/DroidSans-Bold-webfont.ttf |   Bin 43260 -> 0 bytes
 .../css/fonts/DroidSans-Bold-webfont.woff       |   Bin 27120 -> 0 bytes
 .../main/webapp/css/fonts/DroidSans-webfont.eot |   Bin 44926 -> 0 bytes
 .../main/webapp/css/fonts/DroidSans-webfont.svg |   271 -
 .../main/webapp/css/fonts/DroidSans-webfont.ttf |   Bin 44712 -> 0 bytes
 .../webapp/css/fonts/DroidSans-webfont.woff     |   Bin 27672 -> 0 bytes
 .../src/main/webapp/css/grid/ui.jqgrid.css      |   850 -
 gemfire-pulse/src/main/webapp/css/ie/ie.css     |    19 -
 gemfire-pulse/src/main/webapp/css/ie/ie7.css    |    21 -
 gemfire-pulse/src/main/webapp/css/ie/ie8.css    |    20 -
 gemfire-pulse/src/main/webapp/css/ie/ie9.css    |    20 -
 gemfire-pulse/src/main/webapp/css/jquery-ui.css |   566 -
 .../src/main/webapp/css/jquery.jscrollpane.css  |   121 -
 .../src/main/webapp/css/jquery.ui.all.css       |    11 -
 .../src/main/webapp/css/jquery.ui.core.css      |    41 -
 .../src/main/webapp/css/jquery.ui.theme.css     |   248 -
 .../src/main/webapp/css/jquery.ztreestyle.css   |    90 -
 .../css/multiselect/jquery.multiselect.css      |   301 -
 .../main/webapp/css/multiselect/prettify.css    |    46 -
 .../src/main/webapp/css/multiselect/style.css   |    35 -
 gemfire-pulse/src/main/webapp/css/popup.css     |    55 -
 gemfire-pulse/src/main/webapp/css/style.css     |  3067 ---
 .../src/main/webapp/css/treeView/Treemap.css    |   134 -
 .../src/main/webapp/images/about-gemfirexd.png  |   Bin 4440 -> 0 bytes
 .../src/main/webapp/images/about-sqlfire.png    |   Bin 6277 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/about.png  |   Bin 4421 -> 0 bytes
 .../src/main/webapp/images/acc-minus.png        |   Bin 1049 -> 0 bytes
 .../src/main/webapp/images/acc-n-minus.png      |   Bin 961 -> 0 bytes
 .../src/main/webapp/images/acc-n-plus.png       |   Bin 988 -> 0 bytes
 .../src/main/webapp/images/acc-plus.png         |   Bin 1047 -> 0 bytes
 .../src/main/webapp/images/activeServer.png     |   Bin 2846 -> 0 bytes
 .../src/main/webapp/images/arrow-down.png       |   Bin 986 -> 0 bytes
 .../src/main/webapp/images/arrow-up.png         |   Bin 988 -> 0 bytes
 .../src/main/webapp/images/bg-image.png         |   Bin 948 -> 0 bytes
 .../src/main/webapp/images/bg-imageLogin.png    |   Bin 946 -> 0 bytes
 .../src/main/webapp/images/blue-msg-icon.png    |   Bin 1194 -> 0 bytes
 .../src/main/webapp/images/border-left-grid.png |   Bin 927 -> 0 bytes
 .../src/main/webapp/images/bread-crumb.png      |   Bin 1182 -> 0 bytes
 .../src/main/webapp/images/bubble_arrow.png     |   Bin 1168 -> 0 bytes
 .../src/main/webapp/images/chart-active.png     |   Bin 1096 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/chart.png  |   Bin 1095 -> 0 bytes
 .../src/main/webapp/images/checkbox.png         |   Bin 1630 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/chkbox.png |   Bin 1313 -> 0 bytes
 .../src/main/webapp/images/copy_icon.png        |   Bin 1172 -> 0 bytes
 .../src/main/webapp/images/correct_icon.png     |   Bin 1143 -> 0 bytes
 .../main/webapp/images/correct_small_icon.png   |   Bin 1065 -> 0 bytes
 .../main/webapp/images/correct_white_icon.png   |   Bin 1122 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/cross.png  |   Bin 2954 -> 0 bytes
 .../main/webapp/images/dataViewWanEnabled.png   |   Bin 1204 -> 0 bytes
 .../src/main/webapp/images/dd_active.png        |   Bin 1065 -> 0 bytes
 .../src/main/webapp/images/dd_arrow.png         |   Bin 1058 -> 0 bytes
 .../webapp/images/error-locators-others.png     |   Bin 2052 -> 0 bytes
 .../src/main/webapp/images/error-locators.png   |   Bin 2023 -> 0 bytes
 .../images/error-manager-locator-others.png     |   Bin 2067 -> 0 bytes
 .../webapp/images/error-manager-locator.png     |   Bin 2047 -> 0 bytes
 .../webapp/images/error-managers-others.png     |   Bin 2051 -> 0 bytes
 .../src/main/webapp/images/error-managers.png   |   Bin 2025 -> 0 bytes
 .../main/webapp/images/error-message-icon.png   |   Bin 1193 -> 0 bytes
 .../src/main/webapp/images/error-msg-icon.png   |   Bin 1194 -> 0 bytes
 .../src/main/webapp/images/error-others.png     |   Bin 2066 -> 0 bytes
 .../src/main/webapp/images/error-otheruser.png  |   Bin 2002 -> 0 bytes
 .../main/webapp/images/error-status-icon.png    |   Bin 2024 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/error.png  |   Bin 1110 -> 0 bytes
 .../src/main/webapp/images/graph-active.png     |   Bin 1360 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/graph.png  |   Bin 1374 -> 0 bytes
 .../images/graph/key-statistics-graph.png       |   Bin 1617 -> 0 bytes
 .../webapp/images/graph/memory-usage-graph.png  |   Bin 4366 -> 0 bytes
 .../src/main/webapp/images/graph/reads.png      |   Bin 3423 -> 0 bytes
 .../images/graph/throughput-writes-graph.png    |   Bin 4340 -> 0 bytes
 .../src/main/webapp/images/graph/topology.png   |   Bin 14997 -> 0 bytes
 .../src/main/webapp/images/graph/treeview.png   |   Bin 3386 -> 0 bytes
 .../src/main/webapp/images/graph/writes.png     |   Bin 3527 -> 0 bytes
 .../src/main/webapp/images/grid-active.png      |   Bin 1095 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/grid.png   |   Bin 1094 -> 0 bytes
 .../webapp/images/header-bg-bottom-border.png   |   Bin 924 -> 0 bytes
 .../src/main/webapp/images/hide_ico.png         |   Bin 3281 -> 0 bytes
 .../src/main/webapp/images/history-icon.png     |   Bin 3533 -> 0 bytes
 .../src/main/webapp/images/history-remove.png   |   Bin 1185 -> 0 bytes
 .../src/main/webapp/images/hor-spiltter-dot.png |   Bin 990 -> 0 bytes
 .../webapp/images/icons members/locators.png    |   Bin 3106 -> 0 bytes
 .../images/icons members/locators_others.png    |   Bin 3118 -> 0 bytes
 .../webapp/images/icons members/managers.png    |   Bin 3103 -> 0 bytes
 .../images/icons members/managers_locators.png  |   Bin 3120 -> 0 bytes
 .../images/icons members/managers_others.png    |   Bin 3117 -> 0 bytes
 .../main/webapp/images/icons members/others.png |   Bin 3102 -> 0 bytes
 .../src/main/webapp/images/info-msg-icon.png    |   Bin 1194 -> 0 bytes
 .../src/main/webapp/images/lastLine.png         |   Bin 948 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/line.png   |   Bin 929 -> 0 bytes
 .../src/main/webapp/images/mask-bg.png          |   Bin 940 -> 0 bytes
 .../webapp/images/membersName_arror-off.png     |   Bin 1148 -> 0 bytes
 .../main/webapp/images/membersName_arror-on.png |   Bin 1170 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/minus.png  |   Bin 2959 -> 0 bytes
 .../webapp/images/normal-locators-others.png    |   Bin 2025 -> 0 bytes
 .../src/main/webapp/images/normal-locators.png  |   Bin 1995 -> 0 bytes
 .../images/normal-manager-locator-others.png    |   Bin 2037 -> 0 bytes
 .../webapp/images/normal-manager-locator.png    |   Bin 2029 -> 0 bytes
 .../webapp/images/normal-managers-others.png    |   Bin 2027 -> 0 bytes
 .../src/main/webapp/images/normal-managers.png  |   Bin 1997 -> 0 bytes
 .../src/main/webapp/images/normal-others.png    |   Bin 1988 -> 0 bytes
 .../src/main/webapp/images/normal-otheruser.png |   Bin 1968 -> 0 bytes
 .../main/webapp/images/normal-status-icon.png   |   Bin 1955 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/normal.png |   Bin 1110 -> 0 bytes
 .../src/main/webapp/images/orange-msg-icon.png  |   Bin 1194 -> 0 bytes
 .../src/main/webapp/images/pivotal-logo.png     |   Bin 4302 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/plus.png   |   Bin 1178 -> 0 bytes
 .../src/main/webapp/images/plusMinusIcon.png    |   Bin 1192 -> 0 bytes
 .../src/main/webapp/images/popup-arrow.png      |   Bin 1075 -> 0 bytes
 .../main/webapp/images/popup-close-button.png   |   Bin 1026 -> 0 bytes
 .../images/pulse-monitoring-gemfirexd-old.png   |   Bin 6606 -> 0 bytes
 .../images/pulse-monitoring-gemfirexd.png       |   Bin 4440 -> 0 bytes
 .../webapp/images/pulse-monitoring-sqlfire.png  |   Bin 6467 -> 0 bytes
 .../src/main/webapp/images/pulse-monitoring.png |   Bin 4741 -> 0 bytes
 .../src/main/webapp/images/radio-off.png        |   Bin 1252 -> 0 bytes
 .../src/main/webapp/images/radio-on.png         |   Bin 1306 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/radio.png  |   Bin 2476 -> 0 bytes
 .../src/main/webapp/images/regionIcons.png      |   Bin 1495 -> 0 bytes
 .../src/main/webapp/images/rightBorder.png      |   Bin 927 -> 0 bytes
 .../src/main/webapp/images/searchIcon.png       |   Bin 1592 -> 0 bytes
 .../src/main/webapp/images/seperator.png        |   Bin 929 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/server.png |   Bin 1233 -> 0 bytes
 .../webapp/images/severe-locators-others.png    |   Bin 2026 -> 0 bytes
 .../src/main/webapp/images/severe-locators.png  |   Bin 1980 -> 0 bytes
 .../images/severe-manager-locator-others.png    |   Bin 2032 -> 0 bytes
 .../webapp/images/severe-manager-locator.png    |   Bin 2026 -> 0 bytes
 .../webapp/images/severe-managers-others.png    |   Bin 2026 -> 0 bytes
 .../src/main/webapp/images/severe-managers.png  |   Bin 1985 -> 0 bytes
 .../src/main/webapp/images/severe-msg-icon.png  |   Bin 1194 -> 0 bytes
 .../src/main/webapp/images/severe-others.png    |   Bin 2007 -> 0 bytes
 .../src/main/webapp/images/severe-otheruser.png |   Bin 1959 -> 0 bytes
 .../main/webapp/images/severe-status-icon.png   |   Bin 2218 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/severe.png |   Bin 1110 -> 0 bytes
 .../src/main/webapp/images/show_ico.png         |   Bin 3296 -> 0 bytes
 gemfire-pulse/src/main/webapp/images/spacer.png |   Bin 922 -> 0 bytes
 .../src/main/webapp/images/sqlfire.png          |   Bin 6467 -> 0 bytes
 .../src/main/webapp/images/status-down.png      |   Bin 1125 -> 0 bytes
 .../src/main/webapp/images/status-up.png        |   Bin 1104 -> 0 bytes
 .../src/main/webapp/images/subServer.png        |   Bin 2201 -> 0 bytes
 .../src/main/webapp/images/tab-bottom-bg.png    |   Bin 929 -> 0 bytes
 .../src/main/webapp/images/treeView-img.png     |   Bin 962 -> 0 bytes
 .../main/webapp/images/ui-anim_basic_16x16.gif  |   Bin 1459 -> 0 bytes
 .../src/main/webapp/images/ver-spiltter-dot.png |   Bin 979 -> 0 bytes
 .../webapp/images/warning-locators-others.png   |   Bin 2048 -> 0 bytes
 .../src/main/webapp/images/warning-locators.png |   Bin 2032 -> 0 bytes
 .../images/warning-manager-locator-others.png   |   Bin 2071 -> 0 bytes
 .../webapp/images/warning-manager-locator.png   |   Bin 2052 -> 0 bytes
 .../webapp/images/warning-managers-others.png   |   Bin 2023 -> 0 bytes
 .../src/main/webapp/images/warning-managers.png |   Bin 2030 -> 0 bytes
 .../src/main/webapp/images/warning-msg-icon.png |   Bin 1194 -> 0 bytes
 .../src/main/webapp/images/warning-others.png   |   Bin 2027 -> 0 bytes
 .../main/webapp/images/warning-otheruser.png    |   Bin 2010 -> 0 bytes
 .../main/webapp/images/warning-status-icon.png  |   Bin 1714 -> 0 bytes
 .../src/main/webapp/images/warning.png          |   Bin 1107 -> 0 bytes
 .../src/main/webapp/images/yellow-msg-icon.png  |   Bin 1194 -> 0 bytes
 gemfire-pulse/src/main/webapp/index.html        |    67 -
 .../main/webapp/properties/default.properties   |    21 -
 .../webapp/properties/default_en.properties     |    21 -
 .../main/webapp/properties/gemfire.properties   |    45 -
 .../webapp/properties/gemfire_en.properties     |    45 -
 .../main/webapp/properties/gemfirexd.properties |    45 -
 .../webapp/properties/gemfirexd_en.properties   |    45 -
 .../src/main/webapp/properties/index.properties |    18 -
 .../main/webapp/properties/index_fr.properties  |    19 -
 .../main/webapp/properties/sqlfire.properties   |    45 -
 gemfire-pulse/src/main/webapp/regionDetail.html |   567 -
 .../src/main/webapp/scripts/lib/common.js       |   536 -
 .../src/main/webapp/scripts/lib/excanvas.js     |  1416 --
 .../main/webapp/scripts/lib/grid.locale-en.js   |   169 -
 .../src/main/webapp/scripts/lib/html5.js        |     3 -
 .../src/main/webapp/scripts/lib/jit.js          | 17208 -----------------
 .../src/main/webapp/scripts/lib/jquery-1.7.2.js |  9404 ---------
 .../webapp/scripts/lib/jquery.generateFile.js   |    77 -
 .../scripts/lib/jquery.i18n.properties.js       |   336 -
 .../webapp/scripts/lib/jquery.jqGrid.src.js     | 12182 ------------
 .../webapp/scripts/lib/jquery.jscrollpane.js    |  1340 --
 .../webapp/scripts/lib/jquery.mousewheel.js     |    84 -
 .../webapp/scripts/lib/jquery.placeholder.js    |   106 -
 .../main/webapp/scripts/lib/jquery.sparkline.js |  3001 ---
 .../main/webapp/scripts/lib/jquery.tablednd.js  |   383 -
 .../main/webapp/scripts/lib/jquery.timeago.js   |   193 -
 .../webapp/scripts/lib/jquery.ztree.core-3.5.js |  1650 --
 .../scripts/lib/jquery.ztree.excheck-3.5.js     |   624 -
 .../src/main/webapp/scripts/lib/tooltip.js      |   357 -
 .../webapp/scripts/multiselect/jquery-ui.js     | 14988 --------------
 .../scripts/multiselect/jquery.multiselect.js   |   816 -
 .../main/webapp/scripts/multiselect/prettify.js |  1522 --
 .../webapp/scripts/pulsescript/MemberDetails.js |  1045 -
 .../scripts/pulsescript/PulseCallbacks.js       |  1735 --
 .../scripts/pulsescript/PulseFunctions.js       |   227 -
 .../webapp/scripts/pulsescript/clusterDetail.js |  2360 ---
 .../scripts/pulsescript/clusterRGraphMembers.js |  1515 --
 .../main/webapp/scripts/pulsescript/common.js   |  1626 --
 .../scripts/pulsescript/pages/DataBrowser.js    |   662 -
 .../pulsescript/pages/DataBrowserQuery.js       |   964 -
 .../pages/DataBrowserQueryHistory.js            |    95 -
 .../webapp/scripts/pulsescript/pages/Login.js   |   170 -
 .../webapp/scripts/pulsescript/pages/index.js   |    26 -
 .../scripts/pulsescript/queryStatistics.js      |   315 -
 .../webapp/scripts/pulsescript/regionView.js    |   757 -
 .../pulse/testbed/GemFireDistributedSystem.java |   323 -
 .../tools/pulse/testbed/GemfireTopology.java    |    24 -
 .../tools/pulse/testbed/PropFileHelper.java     |   115 -
 .../pulse/testbed/PropMockDataUpdater.java      |   515 -
 .../gemfire/tools/pulse/testbed/TestBed.java    |    84 -
 .../tools/pulse/testbed/driver/PulseUITest.java |   284 -
 .../pulse/testbed/driver/TomcatHelper.java      |    77 -
 .../tools/pulse/tests/AggregateStatement.java   |   217 -
 .../pulse/tests/AggregateStatementMBean.java    |   168 -
 .../pulse/tests/DataBrowserResultLoader.java    |    84 -
 .../pulse/tests/GemFireXDAggregateTable.java    |    46 -
 .../tests/GemFireXDAggregateTableMBean.java     |    28 -
 .../tools/pulse/tests/GemFireXDCluster.java     |    95 -
 .../pulse/tests/GemFireXDClusterMBean.java      |    32 -
 .../tools/pulse/tests/GemFireXDMember.java      |    80 -
 .../tools/pulse/tests/GemFireXDMemberMBean.java |    31 -
 .../gemfire/tools/pulse/tests/JMXBaseBean.java  |    67 -
 .../tools/pulse/tests/JMXProperties.java        |    47 -
 .../gemfire/tools/pulse/tests/Member.java       |   193 -
 .../gemfire/tools/pulse/tests/MemberMBean.java  |    86 -
 .../tools/pulse/tests/PulseAutomatedTest.java   |   785 -
 .../tools/pulse/tests/PulseBaseTest.java        |   686 -
 .../gemfire/tools/pulse/tests/PulseTest.java    |  1056 -
 .../tools/pulse/tests/PulseTestData.java        |   106 -
 .../tools/pulse/tests/PulseTestLocators.java    |   225 -
 .../gemfire/tools/pulse/tests/Region.java       |   192 -
 .../gemfire/tools/pulse/tests/RegionMBean.java  |    59 -
 .../tools/pulse/tests/RegionOnMember.java       |    96 -
 .../tools/pulse/tests/RegionOnMemberMBean.java  |    50 -
 .../gemfire/tools/pulse/tests/Server.java       |   253 -
 .../gemfire/tools/pulse/tests/ServerObject.java |   264 -
 .../tools/pulse/tests/ServerObjectMBean.java    |    79 -
 .../gemfire/tools/pulse/tests/TomcatHelper.java |    97 -
 .../pulse/tests/junit/BaseServiceTest.java      |   250 -
 .../junit/ClusterSelectedRegionServiceTest.java |   350 -
 ...ClusterSelectedRegionsMemberServiceTest.java |   362 -
 .../junit/MemberGatewayHubServiceTest.java      |   423 -
 .../src/test/resources/NoDataFound1.txt         |     1 -
 .../src/test/resources/NoDataFound2.txt         |    35 -
 .../src/test/resources/NoDataFound3.txt         |     6 -
 gemfire-pulse/src/test/resources/message.txt    |     1 -
 .../src/test/resources/test.properties          |   326 -
 gemfire-pulse/src/test/resources/test1.txt      |     5 -
 gemfire-pulse/src/test/resources/test2.txt      |     7 -
 gemfire-pulse/src/test/resources/test3.txt      |     5 -
 gemfire-pulse/src/test/resources/test4.txt      |     4 -
 gemfire-pulse/src/test/resources/test5.txt      |     7 -
 gemfire-pulse/src/test/resources/test6.txt      |    11 -
 gemfire-pulse/src/test/resources/test7.txt      |    13 -
 .../resources/testNullObjectsAtRootLevel1.txt   |    25 -
 .../resources/testNullObjectsAtRootLevel2.txt   |    30 -
 .../src/test/resources/testQueryResult.txt      |   198 -
 .../src/test/resources/testQueryResult1000.txt  |  1023 -
 .../testQueryResultArrayAndArrayList.txt        |     8 -
 .../test/resources/testQueryResultArrayList.txt |     6 -
 .../resources/testQueryResultArrayOfList.txt    |    15 -
 .../resources/testQueryResultClusterSmall.txt   |    23 -
 .../testQueryResultClusterWithStruct.txt        |    10 -
 .../test/resources/testQueryResultHashMap.txt   |     8 -
 .../resources/testQueryResultHashMapSmall.txt   |    12 -
 .../src/test/resources/testQueryResultSmall.txt |    12 -
 .../resources/testQueryResultWithStruct.txt     |  1744 --
 .../testQueryResultWithStructSmall.txt          |    15 -
 gemfire-pulse/src/test/resources/test_pp.txt    |     7 -
 .../src/test/resources/testbed.properties       |   157 -
 gemfire-rebalancer/build.gradle                 |    28 -
 .../gemfire/cache/util/AutoBalancer.java        |   554 -
 .../util/AutoBalancerIntegrationJUnitTest.java  |   206 -
 .../cache/util/AutoBalancerJUnitTest.java       |   604 -
 gemfire-site/.gitignore                         |     1 -
 gemfire-site/website/.gitignore                 |     1 -
 gemfire-site/website/README.md                  |    54 -
 gemfire-site/website/Rules                      |    69 -
 gemfire-site/website/build.sh                   |    18 -
 .../website/content/bootstrap/bootstrap.min.css |     9 -
 .../website/content/community/index.html        |   291 -
 .../website/content/css/bootflat-extensions.css |   356 -
 .../website/content/css/bootflat-square.css     |    69 -
 gemfire-site/website/content/css/bootflat.css   |  1559 --
 .../website/content/css/font-awesome.min.css    |   405 -
 gemfire-site/website/content/css/geode-site.css |  1617 --
 gemfire-site/website/content/favicon.ico        |   Bin 20805 -> 0 bytes
 .../website/content/font/FontAwesome.otf        |   Bin 61896 -> 0 bytes
 .../content/font/fontawesome-webfont-eot.eot    |   Bin 37405 -> 0 bytes
 .../content/font/fontawesome-webfont-svg.svg    |   399 -
 .../content/font/fontawesome-webfont-ttf.ttf    |   Bin 79076 -> 0 bytes
 .../content/font/fontawesome-webfont-woff.woff  |   Bin 43572 -> 0 bytes
 .../website/content/img/apache_geode_logo.png   |   Bin 23616 -> 0 bytes
 .../content/img/apache_geode_logo_white.png     |   Bin 22695 -> 0 bytes
 .../img/apache_geode_logo_white_small.png       |   Bin 52948 -> 0 bytes
 .../website/content/img/check_flat/default.png  |   Bin 25851 -> 0 bytes
 gemfire-site/website/content/img/egg-logo.png   |   Bin 9938 -> 0 bytes
 gemfire-site/website/content/img/github.png     |   Bin 8936 -> 0 bytes
 gemfire-site/website/content/index.html         |   142 -
 .../website/content/js/bootstrap.min.js         |     8 -
 gemfire-site/website/content/js/head.js         |   708 -
 gemfire-site/website/content/js/html5shiv.js    |     8 -
 .../website/content/js/jquery-1.10.1.min.js     |     6 -
 .../website/content/js/jquery.icheck.js         |   397 -
 gemfire-site/website/content/js/respond.min.js  |     6 -
 .../website/content/js/usergrid-site.js         |    66 -
 .../website/content/releases/index.html         |   129 -
 gemfire-site/website/layouts/community.html     |     1 -
 gemfire-site/website/layouts/default.html       |    44 -
 gemfire-site/website/layouts/docs.html          |     1 -
 gemfire-site/website/layouts/footer.html        |    96 -
 gemfire-site/website/layouts/header.html        |   248 -
 gemfire-site/website/lib/default.rb             |    60 -
 gemfire-site/website/lib/helpers_.rb            |    16 -
 gemfire-site/website/lib/pandoc.template        |     4 -
 gemfire-site/website/nanoc.yaml                 |    94 -
 gemfire-site/website/run.sh                     |    18 -
 gemfire-site/website/utilities/map-markers.rb   |    75 -
 gemfire-site/website/utilities/markers.txt      |   440 -
 .../website/utilities/snapshot-apigee.rb        |    88 -
 gemfire-spark-connector/.gitignore              |     1 -
 gemfire-spark-connector/README.md               |    32 -
 gemfire-spark-connector/doc/10_demos.md         |    84 -
 gemfire-spark-connector/doc/1_building.md       |    36 -
 gemfire-spark-connector/doc/2_quick.md          |   178 -
 gemfire-spark-connector/doc/3_connecting.md     |    55 -
 gemfire-spark-connector/doc/4_loading.md        |   108 -
 gemfire-spark-connector/doc/5_rdd_join.md       |   237 -
 gemfire-spark-connector/doc/6_save_rdd.md       |    81 -
 gemfire-spark-connector/doc/7_save_dstream.md   |    68 -
 gemfire-spark-connector/doc/8_oql.md            |    58 -
 gemfire-spark-connector/doc/9_java_api.md       |   129 -
 .../connector/internal/RegionMetadata.java      |    93 -
 .../gemfirefunctions/QueryFunction.java         |    99 -
 .../RetrieveRegionFunction.java                 |   208 -
 .../RetrieveRegionMetadataFunction.java         |   118 -
 .../StructStreamingResultSender.java            |   219 -
 .../gemfire/spark/connector/Employee.java       |    54 -
 .../spark/connector/JavaApiIntegrationTest.java |   424 -
 .../gemfire/spark/connector/Portfolio.java      |   109 -
 .../gemfire/spark/connector/Position.java       |    73 -
 .../src/it/resources/test-regions.xml           |    49 -
 .../src/it/resources/test-retrieve-regions.xml  |    57 -
 .../spark/connector/BasicIntegrationTest.scala  |   598 -
 .../RDDJoinRegionIntegrationTest.scala          |   300 -
 .../RetrieveRegionIntegrationTest.scala         |   253 -
 .../gemfire/spark/connector/package.scala       |    29 -
 .../connector/testkit/GemFireCluster.scala      |    47 -
 .../spark/connector/testkit/GemFireRunner.scala |   148 -
 .../spark/connector/testkit/IOUtils.scala       |    94 -
 .../spark/streaming/ManualClockHelper.scala     |    28 -
 .../spark/streaming/TestInputDStream.scala      |    44 -
 .../javaapi/GemFireJavaDStreamFunctions.java    |    86 -
 .../GemFireJavaPairDStreamFunctions.java        |    77 -
 .../javaapi/GemFireJavaPairRDDFunctions.java    |   238 -
 .../javaapi/GemFireJavaRDDFunctions.java        |   178 -
 .../javaapi/GemFireJavaSQLContextFunctions.java |    49 -
 .../GemFireJavaSparkContextFunctions.java       |    87 -
 .../connector/javaapi/GemFireJavaUtil.java      |   122 -
 .../spark/connector/GemFireConnection.scala     |    67 -
 .../spark/connector/GemFireConnectionConf.scala |    73 -
 .../connector/GemFireConnectionManager.scala    |    31 -
 .../connector/GemFireFunctionDeployer.scala     |    81 -
 .../connector/GemFireKryoRegistrator.scala      |    29 -
 .../connector/GemFirePairRDDFunctions.scala     |   140 -
 .../spark/connector/GemFireRDDFunctions.scala   |   120 -
 .../connector/GemFireSQLContextFunctions.scala  |    42 -
 .../GemFireSparkContextFunctions.scala          |    39 -
 .../internal/DefaultGemFireConnection.scala     |   164 -
 .../DefaultGemFireConnectionManager.scala       |    77 -
 .../connector/internal/LocatorHelper.scala      |   135 -
 .../StructStreamingResultCollector.scala        |   152 -
 .../connector/internal/oql/QueryParser.scala    |    58 -
 .../spark/connector/internal/oql/QueryRDD.scala |    83 -
 .../internal/oql/QueryResultCollector.scala     |    69 -
 .../connector/internal/oql/RDDConverter.scala   |    40 -
 .../connector/internal/oql/RowBuilder.scala     |    38 -
 .../connector/internal/oql/SchemaBuilder.scala  |    73 -
 .../internal/oql/UndefinedSerializer.scala      |    46 -
 .../connector/internal/rdd/GemFireJoinRDD.scala |    67 -
 .../internal/rdd/GemFireOuterJoinRDD.scala      |    69 -
 .../internal/rdd/GemFireRDDPartition.scala      |    36 -
 .../internal/rdd/GemFireRDDPartitioner.scala    |    59 -
 .../rdd/GemFireRDDPartitionerImpl.scala         |    89 -
 .../internal/rdd/GemFireRDDWriter.scala         |    82 -
 .../internal/rdd/GemFireRegionRDD.scala         |   138 -
 .../javaapi/GemFireJavaRegionRDD.scala          |    26 -
 .../spark/connector/javaapi/JavaAPIHelper.scala |    53 -
 .../gemfire/spark/connector/package.scala       |    69 -
 .../streaming/GemFireDStreamFunctions.scala     |    89 -
 .../spark/connector/streaming/package.scala     |    32 -
 .../gemfire/spark/connector/JavaAPITest.java    |   163 -
 .../connector/GemFireFunctionDeployerTest.scala |    58 -
 .../DefaultGemFireConnectionManagerTest.scala   |    82 -
 ...tStreamingResultSenderAndCollectorTest.scala |   254 -
 .../internal/oql/QueryParserTest.scala          |    83 -
 .../connector/ConnectorImplicitsTest.scala      |    50 -
 .../connector/GemFireConnectionConfTest.scala   |   100 -
 .../connector/GemFireDStreamFunctionsTest.scala |    79 -
 .../connector/GemFireRDDFunctionsTest.scala     |   139 -
 .../spark/connector/LocatorHelperTest.scala     |   168 -
 .../rdd/GemFireRDDPartitionerTest.scala         |   190 -
 .../connector/rdd/GemFireRegionRDDTest.scala    |   117 -
 .../basic-demos/src/main/java/demo/Emp.java     |    95 -
 .../src/main/java/demo/OQLJavaDemo.java         |    59 -
 .../src/main/java/demo/PairRDDSaveJavaDemo.java |    86 -
 .../src/main/java/demo/RDDSaveJavaDemo.java     |    85 -
 .../src/main/java/demo/RegionToRDDJavaDemo.java |    57 -
 .../src/main/scala/demo/NetworkWordCount.scala  |    75 -
 .../project/Dependencies.scala                  |    45 -
 .../project/GemFireSparkBuild.scala             |    76 -
 gemfire-spark-connector/project/Settings.scala  |    57 -
 .../project/build.properties                    |     1 -
 gemfire-spark-connector/project/plugins.sbt     |     8 -
 gemfire-spark-connector/scalastyle-config.xml   |   117 -
 gemfire-wan/build.gradle                        |    23 -
 .../client/internal/GatewaySenderBatchOp.java   |   313 -
 .../cache/client/internal/SenderProxy.java      |    43 -
 .../internal/locator/wan/LocatorDiscovery.java  |   227 -
 .../internal/locator/wan/LocatorHelper.java     |   143 -
 .../locator/wan/LocatorJoinMessage.java         |   105 -
 .../wan/LocatorMembershipListenerImpl.java      |   230 -
 .../locator/wan/RemoteLocatorJoinRequest.java   |    87 -
 .../locator/wan/RemoteLocatorJoinResponse.java  |    89 -
 .../locator/wan/RemoteLocatorPingRequest.java   |    56 -
 .../locator/wan/RemoteLocatorPingResponse.java  |    55 -
 .../locator/wan/RemoteLocatorRequest.java       |    66 -
 .../locator/wan/RemoteLocatorResponse.java      |    74 -
 .../internal/locator/wan/WANFactoryImpl.java    |    74 -
 .../locator/wan/WanLocatorDiscovererImpl.java   |   138 -
 .../cache/wan/AbstractRemoteGatewaySender.java  |   169 -
 .../cache/wan/GatewayReceiverFactoryImpl.java   |   147 -
 .../internal/cache/wan/GatewayReceiverImpl.java |   253 -
 .../wan/GatewaySenderEventRemoteDispatcher.java |   766 -
 .../cache/wan/GatewaySenderFactoryImpl.java     |   389 -
 .../wan/parallel/ParallelGatewaySenderImpl.java |   267 -
 ...rentParallelGatewaySenderEventProcessor.java |    67 -
 ...moteParallelGatewaySenderEventProcessor.java |   122 -
 ...urrentSerialGatewaySenderEventProcessor.java |    45 -
 ...RemoteSerialGatewaySenderEventProcessor.java |    50 -
 .../wan/serial/SerialGatewaySenderImpl.java     |   260 -
 ...ternal.locator.wan.LocatorMembershipListener |    15 -
 ...ne.gemfire.internal.cache.wan.spi.WANFactory |    15 -
 .../cache/CacheXml70GatewayDUnitTest.java       |   243 -
 .../cache/CacheXml80GatewayDUnitTest.java       |    77 -
 .../AnalyzeWANSerializablesJUnitTest.java       |    91 -
 .../internal/cache/UpdateVersionDUnitTest.java  |   965 -
 .../gemfire/internal/cache/wan/WANTestBase.java |  5187 -----
 ...oncurrentParallelGatewaySenderDUnitTest.java |   863 -
 ...ntParallelGatewaySenderOffHeapDUnitTest.java |    32 -
 ...allelGatewaySenderOperation_1_DUnitTest.java |   851 -
 ...allelGatewaySenderOperation_2_DUnitTest.java |   541 -
 ...tSerialGatewaySenderOperationsDUnitTest.java |   111 -
 ...GatewaySenderOperationsOffHeapDUnitTest.java |    32 -
 .../ConcurrentWANPropogation_1_DUnitTest.java   |   610 -
 .../ConcurrentWANPropogation_2_DUnitTest.java   |   487 -
 .../cache/wan/disttx/DistTXWANDUnitTest.java    |   211 -
 .../CommonParallelGatewaySenderDUnitTest.java   |   485 -
 ...onParallelGatewaySenderOffHeapDUnitTest.java |    32 -
 ...wWANConcurrencyCheckForDestroyDUnitTest.java |   528 -
 .../cache/wan/misc/PDXNewWanDUnitTest.java      |   789 -
 ...dRegion_ParallelWANPersistenceDUnitTest.java |   753 -
 ...dRegion_ParallelWANPropogationDUnitTest.java |  1134 --
 .../SenderWithTransportFilterDUnitTest.java     |   241 -
 ...downAllPersistentGatewaySenderDUnitTest.java |   209 -
 .../wan/misc/WANConfigurationJUnitTest.java     |   609 -
 .../wan/misc/WANLocatorServerDUnitTest.java     |   195 -
 .../cache/wan/misc/WANSSLDUnitTest.java         |   153 -
 .../wan/misc/WanAutoDiscoveryDUnitTest.java     |   559 -
 .../cache/wan/misc/WanValidationsDUnitTest.java |  1680 --
 ...tewaySenderOperation_2_OffHeapDUnitTest.java |    32 -
 ...tewaySenderOperation_2_OffHeapDUnitTest.java |    32 -
 ...GatewaySenderOperationsOffHeapDUnitTest.java |    34 -
 ...ewaySenderQueueOverflowOffHeapDUnitTest.java |    34 -
 .../ParallelWANConflationOffHeapDUnitTest.java  |    34 -
 ...nceEnabledGatewaySenderOffHeapDUnitTest.java |    34 -
 ...ropogationConcurrentOpsOffHeapDUnitTest.java |    34 -
 .../ParallelWANPropogationOffHeapDUnitTest.java |    34 -
 ...erialGatewaySenderQueueOffHeapDUnitTest.java |    34 -
 ...nceEnabledGatewaySenderOffHeapDUnitTest.java |    34 -
 .../SerialWANPropogationOffHeapDUnitTest.java   |    34 -
 ...ation_PartitionedRegionOffHeapDUnitTest.java |    34 -
 ...allelGatewaySenderOperation_2_DUnitTest.java |    38 -
 ...arallelGatewaySenderOperationsDUnitTest.java |   639 -
 ...llelGatewaySenderQueueOverflowDUnitTest.java |   534 -
 .../ParallelWANConflationDUnitTest.java         |   497 -
 ...ersistenceEnabledGatewaySenderDUnitTest.java |  1824 --
 ...llelWANPropagationClientServerDUnitTest.java |   114 -
 ...lelWANPropagationConcurrentOpsDUnitTest.java |   291 -
 .../ParallelWANPropagationDUnitTest.java        |  1451 --
 ...ParallelWANPropagationLoopBackDUnitTest.java |   426 -
 .../wan/parallel/ParallelWANStatsDUnitTest.java |   532 -
 ...tewaySenderDistributedDeadlockDUnitTest.java |   408 -
 ...rialGatewaySenderEventListenerDUnitTest.java |   391 -
 .../SerialGatewaySenderOperationsDUnitTest.java |   656 -
 .../SerialGatewaySenderQueueDUnitTest.java      |   339 -
 ...ersistenceEnabledGatewaySenderDUnitTest.java |   604 -
 .../SerialWANPropagationLoopBackDUnitTest.java  |   539 -
 .../serial/SerialWANPropogationDUnitTest.java   |  1605 --
 ...NPropogation_PartitionedRegionDUnitTest.java |   440 -
 .../SerialWANPropogationsFeatureDUnitTest.java  |   373 -
 .../wan/serial/SerialWANStatsDUnitTest.java     |   597 -
 .../wan/wancommand/WANCommandTestBase.java      |   513 -
 ...anCommandCreateGatewayReceiverDUnitTest.java |   699 -
 .../WanCommandCreateGatewaySenderDUnitTest.java |   764 -
 ...WanCommandGatewayReceiverStartDUnitTest.java |   328 -
 .../WanCommandGatewayReceiverStopDUnitTest.java |   333 -
 .../WanCommandGatewaySenderStartDUnitTest.java  |   418 -
 .../WanCommandGatewaySenderStopDUnitTest.java   |   369 -
 .../wan/wancommand/WanCommandListDUnitTest.java |   404 -
 .../WanCommandPauseResumeDUnitTest.java         |   717 -
 .../wancommand/WanCommandStatusDUnitTest.java   |   583 -
 .../management/WANManagementDUnitTest.java      |   521 -
 .../ClusterConfigurationDUnitTest.java          |  1057 -
 .../pulse/TestRemoteClusterDUnitTest.java       |   272 -
 .../gemfire/codeAnalysis/excludedClasses.txt    |     2 -
 .../gemstone/gemfire/codeAnalysis/openBugs.txt  |    21 -
 .../sanctionedDataSerializables.txt             |    28 -
 .../codeAnalysis/sanctionedSerializables.txt    |     0
 gemfire-web-api/build.gradle                    |    73 -
 .../web/controllers/AbstractBaseController.java |   859 -
 .../web/controllers/BaseControllerAdvice.java   |   187 -
 .../web/controllers/CommonCrudController.java   |   312 -
 .../controllers/FunctionAccessController.java   |   293 -
 .../web/controllers/PdxBasedCrudController.java |   444 -
 .../web/controllers/QueryAccessController.java  |   459 -
 .../web/controllers/support/JSONTypes.java      |    25 -
 .../controllers/support/QueryResultTypes.java   |    32 -
 .../web/controllers/support/RegionData.java     |   170 -
 .../controllers/support/RegionEntryData.java    |   105 -
 .../support/RestServersResultCollector.java     |    55 -
 .../web/controllers/support/UpdateOp.java       |    31 -
 .../DataTypeNotSupportedException.java          |    50 -
 .../web/exception/GemfireRestException.java     |    48 -
 .../web/exception/MalformedJsonException.java   |    51 -
 .../web/exception/RegionNotFoundException.java  |    44 -
 .../exception/ResourceNotFoundException.java    |    45 -
 ...stomMappingJackson2HttpMessageConverter.java |   161 -
 .../web/swagger/config/RestApiPathProvider.java |    77 -
 .../web/swagger/config/SwaggerConfig.java       |   181 -
 .../rest/internal/web/util/ArrayUtils.java      |    60 -
 .../rest/internal/web/util/DateTimeUtils.java   |    54 -
 .../internal/web/util/IdentifiableUtils.java    |   109 -
 .../rest/internal/web/util/JSONUtils.java       |   253 -
 .../rest/internal/web/util/JsonWriter.java      |   597 -
 .../rest/internal/web/util/NumberUtils.java     |   146 -
 .../rest/internal/web/util/ValidationUtils.java |    41 -
 .../main/webapp/WEB-INF/gemfire-api-servlet.xml |    85 -
 gemfire-web-api/src/main/webapp/WEB-INF/web.xml |    75 -
 .../src/main/webapp/docs/css/reset.css          |   125 -
 .../src/main/webapp/docs/css/screen.css         |  1221 --
 .../main/webapp/docs/images/explorer_icons.png  |   Bin 5763 -> 0 bytes
 .../src/main/webapp/docs/images/logo_small.png  |   Bin 770 -> 0 bytes
 .../main/webapp/docs/images/pet_store_api.png   |   Bin 824 -> 0 bytes
 .../src/main/webapp/docs/images/throbber.gif    |   Bin 9257 -> 0 bytes
 .../src/main/webapp/docs/images/wordnik_api.png |   Bin 980 -> 0 bytes
 gemfire-web-api/src/main/webapp/docs/index.html |    81 -
 .../src/main/webapp/docs/lib/backbone-min.js    |    38 -
 .../main/webapp/docs/lib/handlebars-1.0.0.js    |  2278 ---
 .../main/webapp/docs/lib/highlight.7.3.pack.js  |     1 -
 .../main/webapp/docs/lib/jquery-1.8.0.min.js    |     2 -
 .../main/webapp/docs/lib/jquery.ba-bbq.min.js   |    18 -
 .../main/webapp/docs/lib/jquery.slideto.min.js  |     1 -
 .../main/webapp/docs/lib/jquery.wiggle.min.js   |     8 -
 .../src/main/webapp/docs/lib/shred.bundle.js    |  2765 ---
 .../src/main/webapp/docs/lib/shred/content.js   |   193 -
 .../src/main/webapp/docs/lib/swagger-oauth.js   |   211 -
 .../src/main/webapp/docs/lib/swagger.js         |  1527 --
 .../src/main/webapp/docs/lib/underscore-min.js  |    32 -
 gemfire-web-api/src/main/webapp/docs/o2c.html   |    15 -
 .../src/main/webapp/docs/swagger-ui.js          |  2269 ---
 .../src/main/webapp/docs/swagger-ui.min.js      |     1 -
 gemfire-web/build.gradle                        |    55 -
 .../src/main/webapp/WEB-INF/gemfire-servlet.xml |    59 -
 gemfire-web/src/main/webapp/WEB-INF/web.xml     |    56 -
 .../internal/web/AbstractWebTestCase.java       |    97 -
 .../ShellCommandsControllerJUnitTest.java       |   240 -
 ...entVariablesHandlerInterceptorJUnitTest.java |   268 -
 .../internal/web/domain/LinkIndexJUnitTest.java |   237 -
 .../internal/web/domain/LinkJUnitTest.java      |   124 -
 .../domain/QueryParameterSourceJUnitTest.java   |    93 -
 .../web/http/ClientHttpRequestJUnitTest.java    |   510 -
 ...ableObjectHttpMessageConverterJUnitTest.java |   166 -
 .../RestHttpOperationInvokerJUnitTest.java      |   454 -
 .../SimpleHttpOperationInvokerJUnitTest.java    |   199 -
 .../web/util/ConvertUtilsJUnitTest.java         |   171 -
 .../internal/web/util/UriUtilsJUnitTest.java    |   119 -
 geode-assembly/build.gradle                     |   347 +
 geode-assembly/src/main/dist/DISCLAIMER         |     6 +
 geode-assembly/src/main/dist/LICENSE            |   434 +
 geode-assembly/src/main/dist/NOTICE             |   467 +
 geode-assembly/src/main/dist/bin/gfsh           |   152 +
 .../src/main/dist/bin/gfsh-completion.bash      |   103 +
 geode-assembly/src/main/dist/bin/gfsh.bat       |    87 +
 geode-assembly/src/src/dist/gradlew             |   221 +
 .../LocatorLauncherAssemblyJUnitTest.java       |   157 +
 .../management/internal/AgentUtilJUnitTest.java |    50 +
 .../LauncherLifecycleCommandsDUnitTest.java     |  1007 +
 .../LauncherLifecycleCommandsJUnitTest.java     |   625 +
 .../SharedConfigurationEndToEndDUnitTest.java   |   450 +
 geode-common/build.gradle                       |    20 +
 .../gemfire/annotations/Experimental.java       |    56 +
 .../annotations/ExperimentalJUnitTest.java      |   199 +
 .../ClassInExperimentalPackage.java             |    27 +
 .../experimentalpackage/package-info.java       |    27 +
 .../ClassInNonExperimentalPackage.java          |    27 +
 .../nonexperimentalpackage/package-info.java    |    24 +
 geode-core/build.gradle                         |   217 +
 .../internal/ra/GFConnectionFactoryImpl.java    |    66 +
 .../gemfire/internal/ra/GFConnectionImpl.java   |    71 +
 .../internal/ra/spi/JCALocalTransaction.java    |   236 +
 .../internal/ra/spi/JCAManagedConnection.java   |   299 +
 .../ra/spi/JCAManagedConnectionFactory.java     |   145 +
 .../ra/spi/JCAManagedConnectionMetaData.java    |    67 +
 geode-core/src/jca/ra.xml                       |    52 +
 .../com/gemstone/gemfire/CancelCriterion.java   |   109 +
 .../com/gemstone/gemfire/CancelException.java   |    64 +
 .../gemstone/gemfire/CanonicalInstantiator.java |    86 +
 .../com/gemstone/gemfire/CopyException.java     |    67 +
 .../java/com/gemstone/gemfire/CopyHelper.java   |   268 +
 .../com/gemstone/gemfire/DataSerializable.java  |   140 +
 .../com/gemstone/gemfire/DataSerializer.java    |  3565 ++++
 .../main/java/com/gemstone/gemfire/Delta.java   |    66 +
 .../gemfire/DeltaSerializationException.java    |    59 +
 .../gemfire/ForcedDisconnectException.java      |    41 +
 .../gemstone/gemfire/GemFireCacheException.java |    50 +
 .../gemfire/GemFireCheckedException.java        |    90 +
 .../gemfire/GemFireConfigException.java         |    42 +
 .../com/gemstone/gemfire/GemFireException.java  |   149 +
 .../gemstone/gemfire/GemFireIOException.java    |    41 +
 .../gemstone/gemfire/GemFireRethrowable.java    |    47 +
 .../gemfire/IncompatibleSystemException.java    |    38 +
 .../java/com/gemstone/gemfire/Instantiator.java |   315 +
 .../gemstone/gemfire/InternalGemFireError.java  |   154 +
 .../gemfire/InternalGemFireException.java       |    56 +
 .../gemstone/gemfire/InvalidDeltaException.java |    63 +
 .../gemstone/gemfire/InvalidValueException.java |    42 +
 .../gemfire/InvalidVersionException.java        |    25 +
 .../com/gemstone/gemfire/LicenseException.java  |    54 +
 .../java/com/gemstone/gemfire/LogWriter.java    |   301 +
 .../com/gemstone/gemfire/NoSystemException.java |    48 +
 .../gemfire/OutOfOffHeapMemoryException.java    |    45 +
 .../gemfire/SerializationException.java         |    45 +
 .../gemstone/gemfire/StatisticDescriptor.java   |    82 +
 .../java/com/gemstone/gemfire/Statistics.java   |   446 +
 .../com/gemstone/gemfire/StatisticsFactory.java |   154 +
 .../com/gemstone/gemfire/StatisticsType.java    |    72 +
 .../gemstone/gemfire/StatisticsTypeFactory.java |   197 +
 .../gemfire/SystemConnectException.java         |    42 +
 .../com/gemstone/gemfire/SystemFailure.java     |  1239 ++
 .../gemfire/SystemIsRunningException.java       |    46 +
 .../gemfire/ThreadInterruptedException.java     |    31 +
 .../com/gemstone/gemfire/ToDataException.java   |    42 +
 .../gemfire/UncreatedSystemException.java       |    48 +
 .../gemstone/gemfire/UnmodifiableException.java |    36 +
 .../gemfire/UnstartedSystemException.java       |    49 +
 .../com/gemstone/gemfire/admin/AdminConfig.java |   157 +
 .../gemfire/admin/AdminDistributedSystem.java   |   478 +
 .../admin/AdminDistributedSystemFactory.java    |   163 +
 .../gemstone/gemfire/admin/AdminException.java  |    90 +
 .../gemfire/admin/AdminXmlException.java        |    48 +
 .../java/com/gemstone/gemfire/admin/Alert.java  |    56 +
 .../com/gemstone/gemfire/admin/AlertLevel.java  |   174 +
 .../gemstone/gemfire/admin/AlertListener.java   |    30 +
 .../gemstone/gemfire/admin/BackupStatus.java    |    49 +
 .../admin/CacheDoesNotExistException.java       |    87 +
 .../gemfire/admin/CacheHealthConfig.java        |   157 +
 .../com/gemstone/gemfire/admin/CacheServer.java |    46 +
 .../gemfire/admin/CacheServerConfig.java        |    55 +
 .../com/gemstone/gemfire/admin/CacheVm.java     |    38 +
 .../gemstone/gemfire/admin/CacheVmConfig.java   |    54 +
 .../gemfire/admin/ConfigurationParameter.java   |    74 +
 .../gemfire/admin/DistributedSystemConfig.java  |   682 +
 .../admin/DistributedSystemHealthConfig.java    |    77 +
 .../gemfire/admin/DistributionLocator.java      |    47 +
 .../admin/DistributionLocatorConfig.java        |    90 +
 .../gemstone/gemfire/admin/GemFireHealth.java   |   234 +
 .../gemfire/admin/GemFireHealthConfig.java      |    58 +
 .../gemfire/admin/GemFireMemberStatus.java      |   709 +
 .../gemstone/gemfire/admin/ManagedEntity.java   |   125 +
 .../gemfire/admin/ManagedEntityConfig.java      |   100 +
 .../gemfire/admin/MemberHealthConfig.java       |   142 +
 .../admin/OperationCancelledException.java      |    48 +
 .../gemfire/admin/RegionNotFoundException.java  |    39 +
 .../gemfire/admin/RegionSubRegionSnapshot.java  |   193 +
 .../gemfire/admin/RuntimeAdminException.java    |    50 +
 .../com/gemstone/gemfire/admin/Statistic.java   |    66 +
 .../gemfire/admin/StatisticResource.java        |    86 +
 .../gemstone/gemfire/admin/SystemMember.java    |   148 +
 .../gemfire/admin/SystemMemberBridgeServer.java |   309 +
 .../gemfire/admin/SystemMemberCache.java        |   205 +
 .../gemfire/admin/SystemMemberCacheEvent.java   |    34 +
 .../admin/SystemMemberCacheListener.java        |    73 +
 .../gemfire/admin/SystemMemberCacheServer.java  |   309 +
 .../gemfire/admin/SystemMemberRegion.java       |   322 +
 .../gemfire/admin/SystemMemberRegionEvent.java  |    33 +
 .../gemfire/admin/SystemMemberType.java         |   146 +
 .../gemfire/admin/SystemMembershipEvent.java    |    41 +
 .../gemfire/admin/SystemMembershipListener.java |    62 +
 .../UnmodifiableConfigurationException.java     |    89 +
 .../admin/internal/AbstractHealthEvaluator.java |   185 +
 .../internal/AdminDistributedSystemImpl.java    |  2510 +++
 .../admin/internal/BackupDataStoreHelper.java   |    76 +
 .../admin/internal/BackupDataStoreResult.java   |    57 +
 .../admin/internal/BackupStatusImpl.java        |    62 +
 .../admin/internal/CacheHealthConfigImpl.java   |    92 +
 .../admin/internal/CacheHealthEvaluator.java    |   324 +
 .../admin/internal/CacheServerConfigImpl.java   |   136 +
 .../gemfire/admin/internal/CacheServerImpl.java |   199 +
 .../internal/ConfigurationParameterImpl.java    |   281 +
 .../ConfigurationParameterListener.java         |    35 +
 .../DisabledManagedEntityController.java        |    92 +
 .../internal/DistributedSystemConfigImpl.java   |  1103 ++
 .../DistributedSystemHealthConfigImpl.java      |    59 +
 .../DistributedSystemHealthEvaluator.java       |   172 +
 .../DistributedSystemHealthMonitor.java         |   437 +
 .../internal/DistributionLocatorConfigImpl.java |   192 +
 .../admin/internal/DistributionLocatorImpl.java |   331 +
 .../EnabledManagedEntityController.java         |   412 +
 .../admin/internal/FinishBackupRequest.java     |   172 +
 .../admin/internal/FinishBackupResponse.java    |    79 +
 .../admin/internal/FlushToDiskRequest.java      |    98 +
 .../admin/internal/FlushToDiskResponse.java     |    46 +
 .../admin/internal/GemFireHealthConfigImpl.java |    84 +
 .../admin/internal/GemFireHealthEvaluator.java  |   188 +
 .../admin/internal/GemFireHealthImpl.java       |   536 +
 .../gemfire/admin/internal/InetAddressUtil.java |   209 +
 .../admin/internal/InternalManagedEntity.java   |   106 +
 .../gemfire/admin/internal/LogCollator.java     |   137 +
 .../admin/internal/ManagedEntityConfigImpl.java |   263 +
 .../admin/internal/ManagedEntityConfigXml.java  |   170 +
 .../ManagedEntityConfigXmlGenerator.java        |   386 +
 .../internal/ManagedEntityConfigXmlParser.java  |   623 +
 .../admin/internal/ManagedEntityController.java |    74 +
 .../ManagedEntityControllerFactory.java         |    61 +
 .../admin/internal/ManagedSystemMemberImpl.java |   271 +
 .../admin/internal/MemberHealthConfigImpl.java  |    96 +
 .../admin/internal/MemberHealthEvaluator.java   |   242 +
 .../admin/internal/PrepareBackupRequest.java    |   133 +
 .../admin/internal/PrepareBackupResponse.java   |    82 +
 .../gemfire/admin/internal/StatisticImpl.java   |    97 +
 .../admin/internal/StatisticResourceImpl.java   |   182 +
 .../internal/SystemMemberBridgeServerImpl.java  |   234 +
 .../internal/SystemMemberCacheEventImpl.java    |    61 +
 .../SystemMemberCacheEventProcessor.java        |   148 +
 .../admin/internal/SystemMemberCacheImpl.java   |   313 +
 .../admin/internal/SystemMemberImpl.java        |   520 +
 .../internal/SystemMemberRegionEventImpl.java   |    63 +
 .../admin/internal/SystemMemberRegionImpl.java  |   381 +
 .../internal/SystemMembershipEventImpl.java     |    71 +
 .../internal/doc-files/config-hierarchy.fig     |   156 +
 .../admin/internal/doc-files/health-classes.fig |   233 +
 .../admin/internal/doc-files/health-classes.gif |   Bin 0 -> 8973 bytes
 .../gemfire/admin/internal/package.html         |    53 +
 .../com/gemstone/gemfire/admin/jmx/Agent.java   |   165 +
 .../gemstone/gemfire/admin/jmx/AgentConfig.java |   884 +
 .../gemfire/admin/jmx/AgentFactory.java         |    52 +
 .../internal/AdminDistributedSystemJmxImpl.java |  2341 +++
 .../admin/jmx/internal/AgentConfigImpl.java     |  1847 ++
 .../gemfire/admin/jmx/internal/AgentImpl.java   |  1622 ++
 .../admin/jmx/internal/AgentLauncher.java       |   889 +
 .../admin/jmx/internal/CacheServerJmxImpl.java  |   642 +
 .../admin/jmx/internal/ConfigAttributeInfo.java |    77 +
 .../internal/ConfigurationParameterJmxImpl.java |   170 +
 .../DistributedSystemHealthConfigJmxImpl.java   |   108 +
 .../internal/DistributionLocatorJmxImpl.java    |   186 +
 .../admin/jmx/internal/DynamicManagedBean.java  |   142 +
 .../internal/GemFireHealthConfigJmxImpl.java    |   223 +
 .../jmx/internal/GemFireHealthJmxImpl.java      |   179 +
 .../admin/jmx/internal/GenerateMBeanHTML.java   |   514 +
 .../gemfire/admin/jmx/internal/MBeanUtil.java   |   769 +
 .../admin/jmx/internal/MX4JModelMBean.java      |  1255 ++
 .../jmx/internal/MX4JServerSocketFactory.java   |   160 +
 .../gemfire/admin/jmx/internal/MailManager.java |   333 +
 .../admin/jmx/internal/ManagedResource.java     |    78 +
 .../admin/jmx/internal/ManagedResourceType.java |   210 +
 .../jmx/internal/MemberInfoWithStatsMBean.java  |  1388 ++
 .../admin/jmx/internal/RMIRegistryService.java  |   239 +
 .../jmx/internal/RMIRegistryServiceMBean.java   |    85 +
 .../jmx/internal/RefreshNotificationType.java   |   133 +
 .../jmx/internal/StatAlertNotification.java     |   162 +
 .../jmx/internal/StatAlertsAggregator.java      |   125 +
 .../jmx/internal/StatisticAttributeInfo.java    |    79 +
 .../jmx/internal/StatisticResourceJmxImpl.java  |   361 +
 .../SystemMemberBridgeServerJmxImpl.java        |   135 +
 .../jmx/internal/SystemMemberCacheJmxImpl.java  |   475 +
 .../admin/jmx/internal/SystemMemberJmx.java     |   508 +
 .../admin/jmx/internal/SystemMemberJmxImpl.java |   593 +
 .../jmx/internal/SystemMemberRegionJmxImpl.java |   140 +
 .../gemfire/admin/jmx/internal/package.html     |   166 +
 .../com/gemstone/gemfire/admin/jmx/package.html |    28 +
 .../com/gemstone/gemfire/admin/package.html     |    78 +
 .../gemfire/cache/AttributesFactory.java        |  2056 ++
 .../gemfire/cache/AttributesMutator.java        |   224 +
 .../java/com/gemstone/gemfire/cache/Cache.java  |   457 +
 .../gemstone/gemfire/cache/CacheCallback.java   |    47 +
 .../gemfire/cache/CacheClosedException.java     |    77 +
 .../com/gemstone/gemfire/cache/CacheEvent.java  |   110 +
 .../gemstone/gemfire/cache/CacheException.java  |    70 +
 .../gemfire/cache/CacheExistsException.java     |    66 +
 .../gemstone/gemfire/cache/CacheFactory.java    |   392 +
 .../gemstone/gemfire/cache/CacheListener.java   |   174 +
 .../com/gemstone/gemfire/cache/CacheLoader.java |    64 +
 .../gemfire/cache/CacheLoaderException.java     |    66 +
 .../gemfire/cache/CacheRuntimeException.java    |    81 +
 .../gemstone/gemfire/cache/CacheStatistics.java |   130 +
 .../gemfire/cache/CacheTransactionManager.java  |   350 +
 .../com/gemstone/gemfire/cache/CacheWriter.java |   151 +
 .../gemfire/cache/CacheWriterException.java     |    70 +
 .../gemfire/cache/CacheXmlException.java        |    50 +
 .../gemstone/gemfire/cache/ClientSession.java   |   198 +
 .../gemfire/cache/CommitConflictException.java  |    57 +
 .../cache/CommitDistributionException.java      |    81 +
 .../cache/CommitIncompleteException.java        |    31 +
 .../gemfire/cache/CustomEvictionAttributes.java |    79 +
 .../gemstone/gemfire/cache/CustomExpiry.java    |    42 +
 .../com/gemstone/gemfire/cache/DataPolicy.java  |   266 +
 .../com/gemstone/gemfire/cache/Declarable.java  |    77 +
 .../gemfire/cache/DiskAccessException.java      |   141 +
 .../com/gemstone/gemfire/cache/DiskStore.java   |   216 +
 .../gemfire/cache/DiskStoreFactory.java         |   243 +
 .../gemfire/cache/DiskWriteAttributes.java      |   108 +
 .../cache/DiskWriteAttributesFactory.java       |   263 +
 .../DuplicatePrimaryPartitionException.java     |    65 +
 .../gemfire/cache/DynamicRegionFactory.java     |  1108 ++
 .../gemfire/cache/DynamicRegionListener.java    |    70 +
 .../gemfire/cache/EntryDestroyedException.java  |    61 +
 .../com/gemstone/gemfire/cache/EntryEvent.java  |   167 +
 .../gemfire/cache/EntryExistsException.java     |    62 +
 .../gemfire/cache/EntryNotFoundException.java   |    51 +
 .../gemfire/cache/EntryNotFoundInRegion.java    |    50 +
 .../gemstone/gemfire/cache/EntryOperation.java  |    86 +
 .../gemstone/gemfire/cache/EvictionAction.java  |   115 +
 .../gemfire/cache/EvictionAlgorithm.java        |   151 +
 .../gemfire/cache/EvictionAttributes.java       |   494 +
 .../cache/EvictionAttributesMutator.java        |    40 +
 .../gemfire/cache/EvictionCriteria.java         |    58 +
 .../gemfire/cache/ExpirationAction.java         |   123 +
 .../gemfire/cache/ExpirationAttributes.java     |   144 +
 .../cache/FailedSynchronizationException.java   |    59 +
 .../gemfire/cache/FixedPartitionAttributes.java |   115 +
 .../gemfire/cache/FixedPartitionResolver.java   |    79 +
 .../cache/GatewayConfigurationException.java    |    45 +
 .../gemfire/cache/GatewayException.java         |    68 +
 .../gemstone/gemfire/cache/GemFireCache.java    |   262 +
 .../cache/IncompatibleVersionException.java     |    48 +
 .../gemstone/gemfire/cache/InterestPolicy.java  |   149 +
 .../cache/InterestRegistrationEvent.java        |    92 +
 .../cache/InterestRegistrationListener.java     |    84 +
 .../gemfire/cache/InterestResultPolicy.java     |   122 +
 .../gemstone/gemfire/cache/LoaderHelper.java    |    81 +
 .../com/gemstone/gemfire/cache/LossAction.java  |   149 +
 .../gemfire/cache/LowMemoryException.java       |    67 +
 .../gemfire/cache/MembershipAttributes.java     |   269 +
 .../com/gemstone/gemfire/cache/MirrorType.java  |   136 +
 .../cache/NoQueueServersAvailableException.java |    64 +
 ...NoSubscriptionServersAvailableException.java |    64 +
 .../com/gemstone/gemfire/cache/Operation.java   |  1010 +
 .../cache/OperationAbortedException.java        |    63 +
 .../gemfire/cache/PartitionAttributes.java      |   171 +
 .../cache/PartitionAttributesFactory.java       |   457 +
 .../gemfire/cache/PartitionResolver.java        |    84 +
 .../PartitionedRegionDistributionException.java |    46 +
 .../PartitionedRegionStorageException.java      |    96 +
 .../java/com/gemstone/gemfire/cache/Region.java |  2403 +++
 .../gemfire/cache/RegionAccessException.java    |   118 +
 .../gemfire/cache/RegionAttributes.java         |   490 +
 .../gemfire/cache/RegionDestroyedException.java |    52 +
 .../cache/RegionDistributionException.java      |   123 +
 .../com/gemstone/gemfire/cache/RegionEvent.java |    41 +
 .../gemfire/cache/RegionExistsException.java    |    65 +
 .../gemstone/gemfire/cache/RegionFactory.java   |   934 +
 .../gemfire/cache/RegionMembershipListener.java |    83 +
 .../cache/RegionReinitializedException.java     |    48 +
 .../gemfire/cache/RegionRoleException.java      |    63 +
 .../gemfire/cache/RegionRoleListener.java       |    54 +
 .../gemstone/gemfire/cache/RegionService.java   |   142 +
 .../gemstone/gemfire/cache/RegionShortcut.java  |   238 +
 .../cache/RemoteTransactionException.java       |    42 +
 .../gemstone/gemfire/cache/RequiredRoles.java   |   117 +
 .../gemfire/cache/ResourceException.java        |    61 +
 .../gemfire/cache/ResumptionAction.java         |   114 +
 .../com/gemstone/gemfire/cache/RoleEvent.java   |    39 +
 .../gemstone/gemfire/cache/RoleException.java   |    68 +
 .../java/com/gemstone/gemfire/cache/Scope.java  |   168 +
 .../gemfire/cache/SerializedCacheValue.java     |    53 +
 .../cache/StatisticsDisabledException.java      |    68 +
 .../gemfire/cache/SubscriptionAttributes.java   |   117 +
 .../SynchronizationCommitConflictException.java |    49 +
 .../gemfire/cache/TimeoutException.java         |    73 +
 ...TransactionDataNodeHasDepartedException.java |    42 +
 .../TransactionDataNotColocatedException.java   |    46 +
 .../TransactionDataRebalancedException.java     |    38 +
 .../gemfire/cache/TransactionEvent.java         |   114 +
 .../gemfire/cache/TransactionException.java     |    43 +
 .../gemstone/gemfire/cache/TransactionId.java   |    33 +
 .../cache/TransactionInDoubtException.java      |    42 +
 .../gemfire/cache/TransactionListener.java      |    66 +
 .../gemfire/cache/TransactionWriter.java        |    44 +
 .../cache/TransactionWriterException.java       |    45 +
 ...upportedOperationInTransactionException.java |    37 +
 .../cache/UnsupportedVersionException.java      |    44 +
 .../gemfire/cache/VersionException.java         |    50 +
 .../gemfire/cache/asyncqueue/AsyncEvent.java    |    42 +
 .../cache/asyncqueue/AsyncEventListener.java    |    76 +
 .../cache/asyncqueue/AsyncEventQueue.java       |   151 +
 .../asyncqueue/AsyncEventQueueFactory.java      |   191 +
 .../internal/AsyncEventQueueFactoryImpl.java    |   299 +
 .../internal/AsyncEventQueueImpl.java           |   205 +
 .../internal/AsyncEventQueueStats.java          |   186 +
 .../internal/ParallelAsyncEventQueueImpl.java   |   260 +
 .../internal/SerialAsyncEventQueueImpl.java     |   257 +
 .../client/AllConnectionsInUseException.java    |    61 +
 .../gemfire/cache/client/ClientCache.java       |   168 +
 .../cache/client/ClientCacheFactory.java        |   695 +
 .../cache/client/ClientNotReadyException.java   |    56 +
 .../cache/client/ClientRegionFactory.java       |   346 +
 .../cache/client/ClientRegionShortcut.java      |   108 +
 .../client/NoAvailableLocatorsException.java    |    59 +
 .../client/NoAvailableServersException.java     |    59 +
 .../com/gemstone/gemfire/cache/client/Pool.java |   251 +
 .../gemfire/cache/client/PoolFactory.java       |   477 +
 .../gemfire/cache/client/PoolManager.java       |    98 +
 .../client/ServerConnectivityException.java     |    63 +
 .../cache/client/ServerOperationException.java  |    86 +
 .../ServerRefusedConnectionException.java       |    41 +
 .../client/SubscriptionNotEnabledException.java |    63 +
 .../client/doc-files/example-client-cache.xml   |    46 +
 .../cache/client/internal/AbstractOp.java       |   436 +
 .../cache/client/internal/AddPDXEnumOp.java     |    98 +
 .../cache/client/internal/AddPDXTypeOp.java     |    96 +
 .../client/internal/AuthenticateUserOp.java     |   312 +
 .../internal/AutoConnectionSourceImpl.java      |   387 +
 .../client/internal/CacheServerLoadMessage.java |   108 +
 .../gemfire/cache/client/internal/ClearOp.java  |   106 +
 .../client/internal/ClientMetadataService.java  |   848 +
 .../client/internal/ClientPartitionAdvisor.java |   288 +
 .../internal/ClientRegionFactoryImpl.java       |   271 +
 .../cache/client/internal/ClientUpdater.java    |    36 +
 .../client/internal/CloseConnectionOp.java      |    95 +
 .../gemfire/cache/client/internal/CommitOp.java |   109 +
 .../cache/client/internal/Connection.java       |    85 +
 .../client/internal/ConnectionFactory.java      |    68 +
 .../client/internal/ConnectionFactoryImpl.java  |   334 +
 .../cache/client/internal/ConnectionImpl.java   |   339 +
 .../cache/client/internal/ConnectionSource.java |    77 +
 .../cache/client/internal/ConnectionStats.java  |  3292 ++++
 .../cache/client/internal/ContainsKeyOp.java    |   102 +
 .../DataSerializerRecoveryListener.java         |   153 +
 .../cache/client/internal/DestroyOp.java        |   286 +
 .../cache/client/internal/DestroyRegionOp.java  |   104 +
 .../gemfire/cache/client/internal/Endpoint.java |   111 +
 .../cache/client/internal/EndpointManager.java  |   100 +
 .../client/internal/EndpointManagerImpl.java    |   308 +
 .../cache/client/internal/ExecutablePool.java   |   150 +
 .../client/internal/ExecuteFunctionHelper.java  |    30 +
 .../client/internal/ExecuteFunctionNoAckOp.java |   243 +
 .../client/internal/ExecuteFunctionOp.java      |   653 +
 .../internal/ExecuteRegionFunctionNoAckOp.java  |   227 +
 .../internal/ExecuteRegionFunctionOp.java       |   624 +
 .../ExecuteRegionFunctionSingleHopOp.java       |   500 +
 .../internal/ExplicitConnectionSourceImpl.java  |   277 +
 .../gemfire/cache/client/internal/GetAllOp.java |   242 +
 .../client/internal/GetClientPRMetaDataOp.java  |   171 +
 .../GetClientPartitionAttributesOp.java         |   177 +
 .../cache/client/internal/GetEntryOp.java       |    82 +
 .../cache/client/internal/GetEventValueOp.java  |   121 +
 .../client/internal/GetFunctionAttributeOp.java |    84 +
 .../gemfire/cache/client/internal/GetOp.java    |   245 +
 .../cache/client/internal/GetPDXEnumByIdOp.java |    92 +
 .../cache/client/internal/GetPDXEnumsOp.java    |   112 +
 .../client/internal/GetPDXIdForEnumOp.java      |   113 +
 .../client/internal/GetPDXIdForTypeOp.java      |   113 +
 .../cache/client/internal/GetPDXTypeByIdOp.java |    92 +
 .../cache/client/internal/GetPDXTypesOp.java    |   112 +
 .../internal/InstantiatorRecoveryListener.java  |   159 +
 .../cache/client/internal/InternalPool.java     |    43 +
 .../cache/client/internal/InvalidateOp.java     |   121 +
 .../gemfire/cache/client/internal/KeySetOp.java |   130 +
 .../cache/client/internal/LiveServerPinger.java |   117 +
 .../internal/LocatorDiscoveryCallback.java      |    47 +
 .../LocatorDiscoveryCallbackAdapter.java        |    36 +
 .../cache/client/internal/MakePrimaryOp.java    |    91 +
 .../gemfire/cache/client/internal/Op.java       |    43 +
 .../cache/client/internal/OpExecutorImpl.java   |   985 +
 .../internal/PdxRegistryRecoveryListener.java   |    90 +
 .../gemfire/cache/client/internal/PingOp.java   |    97 +
 .../gemfire/cache/client/internal/PoolImpl.java |  1522 ++
 .../cache/client/internal/PrimaryAckOp.java     |   101 +
 .../cache/client/internal/ProxyCache.java       |   248 +
 .../client/internal/ProxyCacheCloseOp.java      |   124 +
 .../cache/client/internal/ProxyRegion.java      |   698 +
 .../gemfire/cache/client/internal/PutAllOp.java |   430 +
 .../gemfire/cache/client/internal/PutOp.java    |   553 +
 .../gemfire/cache/client/internal/QueryOp.java  |   203 +
 .../client/internal/QueueConnectionImpl.java    |   226 +
 .../cache/client/internal/QueueManager.java     |    57 +
 .../cache/client/internal/QueueManagerImpl.java |  1487 ++
 .../cache/client/internal/QueueState.java       |    33 +
 .../cache/client/internal/QueueStateImpl.java   |   450 +
 .../cache/client/internal/ReadyForEventsOp.java |    91 +
 .../internal/RegisterDataSerializersOp.java     |   138 +
 .../internal/RegisterInstantiatorsOp.java       |   180 +
 .../client/internal/RegisterInterestListOp.java |   147 +
 .../client/internal/RegisterInterestOp.java     |   296 +
 .../internal/RegisterInterestTracker.java       |   419 +
 .../cache/client/internal/RemoveAllOp.java      |   391 +
 .../cache/client/internal/RollbackOp.java       |    99 +
 .../cache/client/internal/ServerBlackList.java  |   188 +
 .../cache/client/internal/ServerProxy.java      |    69 +
 .../client/internal/ServerRegionDataAccess.java |   143 +
 .../client/internal/ServerRegionProxy.java      |   878 +
 .../internal/SingleHopClientExecutor.java       |   415 +
 .../internal/SingleHopOperationCallable.java    |    83 +
 .../gemfire/cache/client/internal/SizeOp.java   |    92 +
 .../cache/client/internal/TXFailoverOp.java     |    93 +
 .../client/internal/TXSynchronizationOp.java    |   163 +
 .../internal/UnregisterInterestListOp.java      |   100 +
 .../client/internal/UnregisterInterestOp.java   |    98 +
 .../cache/client/internal/UserAttributes.java   |    59 +
 .../doc-files/ConnectionManagerImpl.dia         |   Bin 0 -> 2034 bytes
 .../doc-files/ConnectionManagerImpl.png         |   Bin 0 -> 11825 bytes
 .../client/internal/doc-files/PoolImpl.dia      |   Bin 0 -> 3083 bytes
 .../internal/doc-files/QueueManagerImpl.dia     |   Bin 0 -> 2180 bytes
 .../internal/doc-files/QueueManagerImpl.png     |   Bin 0 -> 15075 bytes
 .../doc-files/client_static_diagram.png         |   Bin 0 -> 29430 bytes
 .../locator/ClientConnectionRequest.java        |    68 +
 .../locator/ClientConnectionResponse.java       |    85 +
 .../locator/ClientReplacementRequest.java       |    75 +
 .../internal/locator/GetAllServersRequest.java  |    58 +
 .../internal/locator/GetAllServersResponse.java |    80 +
 .../internal/locator/LocatorListRequest.java    |    36 +
 .../internal/locator/LocatorListResponse.java   |    92 +
 .../internal/locator/LocatorStatusRequest.java  |    37 +
 .../internal/locator/LocatorStatusResponse.java |   321 +
 .../locator/QueueConnectionRequest.java         |    99 +
 .../locator/QueueConnectionResponse.java        |    87 +
 .../internal/locator/SerializationHelper.java   |   123 +
 .../internal/locator/ServerLocationRequest.java |    61 +
 .../locator/ServerLocationResponse.java         |    33 +
 .../locator/wan/LocatorMembershipListener.java  |    57 +
 .../gemfire/cache/client/internal/package.html  |    63 +
 .../pooling/ConnectionDestroyedException.java   |    48 +
 .../internal/pooling/ConnectionManager.java     |   132 +
 .../internal/pooling/ConnectionManagerImpl.java |  1587 ++
 .../internal/pooling/PooledConnection.java      |   354 +
 .../gemstone/gemfire/cache/client/package.html  |    67 +
 .../gemfire/cache/control/RebalanceFactory.java |    66 +
 .../cache/control/RebalanceOperation.java       |    75 +
 .../gemfire/cache/control/RebalanceResults.java |   106 +
 .../gemfire/cache/control/ResourceManager.java  |   260 +
 .../gemstone/gemfire/cache/control/package.html |    23 +
 .../gemfire/cache/doc-files/architecture.fig    |   170 +
 .../gemfire/cache/doc-files/architecture.gif    |   Bin 0 -> 9983 bytes
 .../cache/doc-files/entry-life-cycle.fig        |    64 +
 .../cache/doc-files/entry-life-cycle.gif        |   Bin 0 -> 3357 bytes
 .../gemfire/cache/doc-files/example-cache.xml   |    98 +
 .../gemfire/cache/doc-files/example2-cache.xml  |    63 +
 .../gemfire/cache/doc-files/example3-cache.xml  |    60 +
 .../cache/doc-files/partitioned-regions.fig     |   267 +
 .../cache/doc-files/partitioned-regions.gif     |   Bin 0 -> 9494 bytes
 .../execute/EmtpyRegionFunctionException.java   |    64 +
 .../gemfire/cache/execute/Execution.java        |   224 +
 .../gemfire/cache/execute/Function.java         |   112 +
 .../gemfire/cache/execute/FunctionAdapter.java  |   124 +
 .../gemfire/cache/execute/FunctionContext.java  |    80 +
 .../cache/execute/FunctionException.java        |   129 +
 .../FunctionInvocationTargetException.java      |    93 +
 .../gemfire/cache/execute/FunctionService.java  |   371 +
 .../cache/execute/RegionFunctionContext.java    |    72 +
 .../gemfire/cache/execute/ResultCollector.java  |   136 +
 .../gemfire/cache/execute/ResultSender.java     |    93 +
 .../internal/FunctionServiceManager.java        |   460 +
 .../gemstone/gemfire/cache/execute/package.html |   162 +
 .../gemfire/cache/hdfs/HDFSIOException.java     |    53 +
 .../gemstone/gemfire/cache/hdfs/HDFSStore.java  |   343 +
 .../gemfire/cache/hdfs/HDFSStoreFactory.java    |   205 +
 .../gemfire/cache/hdfs/HDFSStoreMutator.java    |   197 +
 .../cache/hdfs/StoreExistsException.java        |    33 +
 .../cache/hdfs/internal/FailureTracker.java     |    97 +
 .../cache/hdfs/internal/FlushObserver.java      |    54 +
 .../hdfs/internal/HDFSBucketRegionQueue.java    |  1233 ++
 .../cache/hdfs/internal/HDFSEntriesSet.java     |   329 +
 .../cache/hdfs/internal/HDFSEventListener.java  |   180 +
 .../hdfs/internal/HDFSEventQueueFilter.java     |    74 +
 .../hdfs/internal/HDFSGatewayEventImpl.java     |   181 +
 .../hdfs/internal/HDFSIntegrationUtil.java      |   118 +
 .../HDFSParallelGatewaySenderQueue.java         |   473 +
 .../hdfs/internal/HDFSStoreConfigHolder.java    |   560 +
 .../cache/hdfs/internal/HDFSStoreCreation.java  |   199 +
 .../hdfs/internal/HDFSStoreFactoryImpl.java     |    78 +
 .../cache/hdfs/internal/HDFSStoreImpl.java      |   639 +
 .../hdfs/internal/HDFSStoreMutatorImpl.java     |   200 +
 .../HDFSWriteOnlyStoreEventListener.java        |   185 +
 .../hdfs/internal/HoplogListenerForRegion.java  |    73 +
 .../cache/hdfs/internal/PersistedEventImpl.java |   203 +
 .../hdfs/internal/QueuedPersistentEvent.java    |    27 +
 .../hdfs/internal/SignalledFlushObserver.java   |   123 +
 .../internal/SortedHDFSQueuePersistedEvent.java |    87 +
 .../internal/SortedHoplogPersistedEvent.java    |   115 +
 .../UnsortedHDFSQueuePersistedEvent.java        |    77 +
 .../internal/UnsortedHoplogPersistedEvent.java  |    93 +
 .../hdfs/internal/hoplog/AbstractHoplog.java    |   357 +
 .../hoplog/AbstractHoplogOrganizer.java         |   430 +
 .../cache/hdfs/internal/hoplog/BloomFilter.java |    36 +
 .../hoplog/CloseTmpHoplogsTimerTask.java        |   109 +
 .../hdfs/internal/hoplog/CompactionStatus.java  |    73 +
 .../cache/hdfs/internal/hoplog/FlushStatus.java |    73 +
 .../internal/hoplog/HDFSCompactionManager.java  |   330 +
 .../internal/hoplog/HDFSFlushQueueArgs.java     |    94 +
 .../internal/hoplog/HDFSFlushQueueFunction.java |   287 +
 .../hoplog/HDFSForceCompactionArgs.java         |   108 +
 .../hoplog/HDFSForceCompactionFunction.java     |   130 +
 .../HDFSForceCompactionResultCollector.java     |   132 +
 .../hoplog/HDFSLastCompactionTimeFunction.java  |    57 +
 .../internal/hoplog/HDFSRegionDirector.java     |   480 +
 .../hdfs/internal/hoplog/HDFSStoreDirector.java |    79 +
 .../hoplog/HDFSUnsortedHoplogOrganizer.java     |   448 +
 .../hdfs/internal/hoplog/HFileSortedOplog.java  |   853 +
 .../hoplog/HdfsSortedOplogOrganizer.java        |  2007 ++
 .../cache/hdfs/internal/hoplog/Hoplog.java      |   264 +
 .../hdfs/internal/hoplog/HoplogConfig.java      |    75 +
 .../hdfs/internal/hoplog/HoplogListener.java    |    47 +
 .../hdfs/internal/hoplog/HoplogOrganizer.java   |   123 +
 .../hdfs/internal/hoplog/HoplogSetIterator.java |   166 +
 .../hdfs/internal/hoplog/HoplogSetReader.java   |   114 +
 .../internal/hoplog/SequenceFileHoplog.java     |   396 +
 .../hoplog/mapred/AbstractGFRecordReader.java   |   106 +
 .../internal/hoplog/mapred/GFInputFormat.java   |    95 +
 .../internal/hoplog/mapred/GFOutputFormat.java  |    76 +
 .../mapreduce/AbstractGFRecordReader.java       |   140 +
 .../hoplog/mapreduce/GFInputFormat.java         |   124 +
 .../hdfs/internal/hoplog/mapreduce/GFKey.java   |    72 +
 .../hoplog/mapreduce/GFOutputFormat.java        |   199 +
 .../hoplog/mapreduce/HDFSSplitIterator.java     |   198 +
 .../internal/hoplog/mapreduce/HoplogUtil.java   |   464 +
 .../hoplog/mapreduce/RWSplitIterator.java       |    49 +
 .../hoplog/mapreduce/StreamSplitIterator.java   |    47 +
 .../org/apache/hadoop/io/SequenceFile.java      |  3726 ++++
 .../operations/CloseCQOperationContext.java     |    65 +
 .../operations/DestroyOperationContext.java     |    63 +
 .../operations/ExecuteCQOperationContext.java   |    68 +
 .../ExecuteFunctionOperationContext.java        |    97 +
 .../GetDurableCQsOperationContext.java          |    60 +
 .../cache/operations/GetOperationContext.java   |    91 +
 .../operations/InterestOperationContext.java    |    84 +
 .../gemfire/cache/operations/InterestType.java  |   152 +
 .../operations/InvalidateOperationContext.java  |    64 +
 .../cache/operations/KeyOperationContext.java   |   125 +
 .../operations/KeySetOperationContext.java      |    97 +
 .../operations/KeyValueOperationContext.java    |   177 +
 .../cache/operations/OperationContext.java      |   587 +
 .../operations/PutAllOperationContext.java      |   407 +
 .../cache/operations/PutOperationContext.java   |   144 +
 .../cache/operations/QueryOperationContext.java |   172 +
 .../operations/RegionClearOperationContext.java |    51 +
 .../RegionCreateOperationContext.java           |    61 +
 .../RegionDestroyOperationContext.java          |    51 +
 .../operations/RegionOperationContext.java      |    87 +
 .../RegisterInterestOperationContext.java       |    72 +
 .../operations/RemoveAllOperationContext.java   |   101 +
 .../operations/StopCQOperationContext.java      |    66 +
 .../UnregisterInterestOperationContext.java     |    54 +
 .../internal/GetOperationContextImpl.java       |   124 +
 .../gemfire/cache/operations/package.html       |   107 +
 .../com/gemstone/gemfire/cache/package.html     |   608 +
 .../cache/partition/PartitionListener.java      |   132 +
 .../partition/PartitionListenerAdapter.java     |    50 +
 .../cache/partition/PartitionMemberInfo.java    |    74 +
 .../PartitionNotAvailableException.java         |    66 +
 .../cache/partition/PartitionRebalanceInfo.java |   150 +
 .../cache/partition/PartitionRegionHelper.java  |   552 +
 .../cache/partition/PartitionRegionInfo.java    |   113 +
 .../gemfire/cache/partition/package.html        |    23 +
 .../ConflictingPersistentDataException.java     |    57 +
 .../persistence/PartitionOfflineException.java  |    77 +
 .../gemfire/cache/persistence/PersistentID.java |    59 +
 .../PersistentReplicatesOfflineException.java   |    44 +
 .../persistence/RevokeFailedException.java      |    51 +
 .../RevokedPersistentDataException.java         |    58 +
 .../gemfire/cache/query/Aggregator.java         |    46 +
 .../cache/query/AmbiguousNameException.java     |    47 +
 .../gemfire/cache/query/CqAttributes.java       |    50 +
 .../cache/query/CqAttributesFactory.java        |   319 +
 .../cache/query/CqAttributesMutator.java        |    57 +
 .../gemfire/cache/query/CqClosedException.java  |    57 +
 .../gemstone/gemfire/cache/query/CqEvent.java   |    93 +
 .../gemfire/cache/query/CqException.java        |    57 +
 .../gemfire/cache/query/CqExistsException.java  |    53 +
 .../gemfire/cache/query/CqListener.java         |    59 +
 .../gemstone/gemfire/cache/query/CqQuery.java   |   155 +
 .../gemstone/gemfire/cache/query/CqResults.java |    51 +
 .../cache/query/CqServiceStatistics.java        |    70 +
 .../gemstone/gemfire/cache/query/CqState.java   |    55 +
 .../gemfire/cache/query/CqStatistics.java       |    53 +
 .../gemfire/cache/query/CqStatusListener.java   |    42 +
 .../cache/query/FunctionDomainException.java    |    36 +
 .../com/gemstone/gemfire/cache/query/Index.java |   112 +
 .../cache/query/IndexCreationException.java     |    46 +
 .../cache/query/IndexExistsException.java       |    52 +
 .../cache/query/IndexInvalidException.java      |    64 +
 .../cache/query/IndexMaintenanceException.java  |    66 +
 .../cache/query/IndexNameConflictException.java |    52 +
 .../gemfire/cache/query/IndexStatistics.java    |    76 +
 .../gemstone/gemfire/cache/query/IndexType.java |   106 +
 .../query/MultiIndexCreationException.java      |    82 +
 .../cache/query/NameNotFoundException.java      |    48 +
 .../cache/query/NameResolutionException.java    |    47 +
 .../query/ParameterCountInvalidException.java   |    38 +
 .../com/gemstone/gemfire/cache/query/Query.java |   328 +
 .../gemfire/cache/query/QueryException.java     |    66 +
 .../query/QueryExecutionLowMemoryException.java |    67 +
 .../query/QueryExecutionTimeoutException.java   |    62 +
 .../cache/query/QueryInvalidException.java      |    48 +
 .../query/QueryInvocationTargetException.java   |    54 +
 .../gemfire/cache/query/QueryService.java       |   852 +
 .../gemfire/cache/query/QueryStatistics.java    |    38 +
 .../cache/query/RegionNotFoundException.java    |    45 +
 .../gemfire/cache/query/SelectResults.java      |   122 +
 .../gemstone/gemfire/cache/query/Struct.java    |    59 +
 .../cache/query/TypeMismatchException.java      |    45 +
 .../query/internal/AbstractCompiledValue.java   |   323 +
 .../internal/AbstractGroupOrRangeJunction.java  |   596 +
 .../cache/query/internal/AllGroupJunction.java  |   276 +
 .../query/internal/AttributeDescriptor.java     |   420 +
 .../gemfire/cache/query/internal/Bag.java       |   726 +
 .../internal/CompiledAggregateFunction.java     |   185 +
 .../query/internal/CompiledBindArgument.java    |   100 +
 .../query/internal/CompiledComparison.java      |   877 +
 .../query/internal/CompiledConstruction.java    |    78 +
 .../cache/query/internal/CompiledFunction.java  |   117 +
 .../query/internal/CompiledGroupBySelect.java   |   522 +
 .../cache/query/internal/CompiledID.java        |    99 +
 .../cache/query/internal/CompiledIn.java        |   965 +
 .../query/internal/CompiledIndexOperation.java  |   183 +
 .../query/internal/CompiledIteratorDef.java     |   379 +
 .../cache/query/internal/CompiledJunction.java  |  1254 ++
 .../cache/query/internal/CompiledLike.java      |   548 +
 .../cache/query/internal/CompiledLiteral.java   |    85 +
 .../cache/query/internal/CompiledNegation.java  |    79 +
 .../cache/query/internal/CompiledOperation.java |   331 +
 .../cache/query/internal/CompiledPath.java      |   177 +
 .../cache/query/internal/CompiledRegion.java    |   111 +
 .../cache/query/internal/CompiledSelect.java    |  1590 ++
 .../query/internal/CompiledSortCriterion.java   |   320 +
 .../query/internal/CompiledUnaryMinus.java      |   102 +
 .../cache/query/internal/CompiledUndefined.java |   320 +
 .../cache/query/internal/CompiledValue.java     |   143 +
 .../query/internal/CompositeGroupJunction.java  |   555 +
 .../gemfire/cache/query/internal/CqEntry.java   |   112 +
 .../cache/query/internal/CqQueryVsdStats.java   |   342 +
 .../cache/query/internal/CqStateImpl.java       |   104 +
 .../internal/CumulativeNonDistinctResults.java  |   391 +
 .../cache/query/internal/DefaultQuery.java      |  1141 ++
 .../query/internal/DefaultQueryService.java     |  1003 +
 .../cache/query/internal/DerivedInfo.java       |   306 +
 .../cache/query/internal/ExecutionContext.java  |   736 +
 .../gemfire/cache/query/internal/Filter.java    |   178 +
 .../gemfire/cache/query/internal/Functions.java |   206 +
 .../cache/query/internal/GroupJunction.java     |   193 +
 .../cache/query/internal/HashingStrategy.java   |    55 +
 .../gemfire/cache/query/internal/IndexInfo.java |    78 +
 .../internal/IndexTrackingQueryObserver.java    |   217 +
 .../cache/query/internal/IndexUpdater.java      |   123 +
 .../gemfire/cache/query/internal/Indexable.java |    55 +
 .../cache/query/internal/LinkedResultSet.java   |   145 +
 .../cache/query/internal/LinkedStructSet.java   |   367 +
 .../cache/query/internal/MapIndexable.java      |    26 +
 .../cache/query/internal/MethodDispatch.java    |   232 +
 .../cache/query/internal/NWayMergeResults.java  |   546 +
 .../gemfire/cache/query/internal/Negatable.java |    26 +
 .../gemfire/cache/query/internal/NullToken.java |    77 +
 .../cache/query/internal/ObjectIntHashMap.java  |  1141 ++
 .../cache/query/internal/OrderByComparator.java |   237 +
 .../internal/OrderByComparatorUnmapped.java     |    90 +
 .../gemfire/cache/query/internal/Ordered.java   |    44 +
 .../cache/query/internal/OrganizedOperands.java |    55 +
 .../cache/query/internal/PRQueryTraceInfo.java  |   109 +
 .../gemfire/cache/query/internal/PathUtils.java |   269 +
 .../gemfire/cache/query/internal/PlanInfo.java  |    36 +
 .../cache/query/internal/ProxyQueryService.java |   451 +
 .../gemfire/cache/query/internal/QCompiler.java |   698 +
 .../gemfire/cache/query/internal/QRegion.java   |   539 +
 .../gemfire/cache/query/internal/QScope.java    |    92 +
 .../QueryExecutionCanceledException.java        |    63 +
 .../query/internal/QueryExecutionContext.java   |   242 +
 .../cache/query/internal/QueryExecutor.java     |    40 +
 .../cache/query/internal/QueryMonitor.java      |   361 +
 .../cache/query/internal/QueryObserver.java     |   338 +
 .../query/internal/QueryObserverAdapter.java    |   341 +
 .../query/internal/QueryObserverHolder.java     |    84 +
 .../cache/query/internal/QueryUtils.java        |  2079 ++
 .../cache/query/internal/RangeJunction.java     |  1255 ++
 .../cache/query/internal/ResultsBag.java        |   276 +
 .../ResultsCollectionCopyOnReadWrapper.java     |   228 +
 ...ResultsCollectionPdxDeserializerWrapper.java |   219 +
 .../internal/ResultsCollectionWrapper.java      |   664 +
 .../cache/query/internal/ResultsSet.java        |   150 +
 .../cache/query/internal/RuntimeIterator.java   |   338 +
 .../query/internal/SelectResultsComparator.java |    61 +
 .../cache/query/internal/SortedResultSet.java   |   134 +
 .../cache/query/internal/SortedResultsBag.java  |   260 +
 .../cache/query/internal/SortedStructBag.java   |   369 +
 .../cache/query/internal/SortedStructSet.java   |   385 +
 .../gemfire/cache/query/internal/StructBag.java |   474 +
 .../cache/query/internal/StructFields.java      |    42 +
 .../cache/query/internal/StructImpl.java        |   183 +
 .../gemfire/cache/query/internal/StructSet.java |   459 +
 .../gemfire/cache/query/internal/Support.java   |    95 +
 .../gemfire/cache/query/internal/Undefined.java |    87 +
 .../internal/aggregate/AbstractAggregator.java  |    47 +
 .../cache/query/internal/aggregate/Avg.java     |    50 +
 .../query/internal/aggregate/AvgBucketNode.java |    49 +
 .../query/internal/aggregate/AvgDistinct.java   |    43 +
 .../aggregate/AvgDistinctPRQueryNode.java       |    35 +
 .../internal/aggregate/AvgPRQueryNode.java      |    47 +
 .../cache/query/internal/aggregate/Count.java   |    49 +
 .../query/internal/aggregate/CountDistinct.java |    33 +
 .../aggregate/CountDistinctPRQueryNode.java     |    44 +
 .../internal/aggregate/CountPRQueryNode.java    |    48 +
 .../internal/aggregate/DistinctAggregator.java  |    56 +
 .../cache/query/internal/aggregate/MaxMin.java  |    68 +
 .../cache/query/internal/aggregate/Sum.java     |    48 +
 .../query/internal/aggregate/SumDistinct.java   |    35 +
 .../aggregate/SumDistinctPRQueryNode.java       |    46 +
 .../cache/query/internal/cq/ClientCQ.java       |    42 +
 .../cache/query/internal/cq/CqService.java      |   263 +
 .../query/internal/cq/CqServiceProvider.java    |    72 +
 .../query/internal/cq/InternalCqQuery.java      |    82 +
 .../query/internal/cq/MissingCqService.java     |   217 +
 .../internal/cq/MissingCqServiceStatistics.java |    52 +
 .../cache/query/internal/cq/ServerCQ.java       |    87 +
 .../query/internal/cq/spi/CqServiceFactory.java |    36 +
 .../query/internal/index/AbstractIndex.java     |  2405 +++
 .../query/internal/index/AbstractMapIndex.java  |   440 +
 .../internal/index/CompactMapRangeIndex.java    |   216 +
 .../query/internal/index/CompactRangeIndex.java |  1799 ++
 .../query/internal/index/DummyQRegion.java      |   252 +
 .../index/FunctionalIndexCreationHelper.java    |   721 +
 .../cache/query/internal/index/HashIndex.java   |  1573 ++
 .../query/internal/index/HashIndexSet.java      |   805 +
 .../query/internal/index/IMQException.java      |    59 +
 .../internal/index/IndexConcurrentHashSet.java  |    78 +
 .../query/internal/index/IndexCreationData.java |   166 +
 .../internal/index/IndexCreationHelper.java     |   113 +
 .../cache/query/internal/index/IndexData.java   |    72 +
 .../query/internal/index/IndexElemArray.java    |   361 +
 .../query/internal/index/IndexManager.java      |  1721 ++
 .../query/internal/index/IndexProtocol.java     |   222 +
 .../cache/query/internal/index/IndexStats.java  |   223 +
 .../cache/query/internal/index/IndexStore.java  |   153 +
 .../cache/query/internal/index/IndexUtils.java  |   135 +
 .../index/IndexedExpressionEvaluator.java       |    52 +
 .../query/internal/index/MapIndexStore.java     |   336 +
 .../query/internal/index/MapRangeIndex.java     |   195 +
 .../query/internal/index/MemoryIndexStore.java  |   822 +
 .../query/internal/index/PartitionedIndex.java  |   656 +
 .../query/internal/index/PrimaryKeyIndex.java   |   392 +
 .../index/PrimaryKeyIndexCreationHelper.java    |   135 +
 .../cache/query/internal/index/RangeIndex.java  |  1686 ++
 .../cache/query/internal/index/package.html     |   646 +
 .../gemfire/cache/query/internal/package.html   |    43 +
 .../query/internal/parse/ASTAggregateFunc.java  |    66 +
 .../cache/query/internal/parse/ASTAnd.java      |    39 +
 .../query/internal/parse/ASTCombination.java    |    46 +
 .../query/internal/parse/ASTCompareOp.java      |    38 +
 .../query/internal/parse/ASTConstruction.java   |    45 +
 .../query/internal/parse/ASTConversionExpr.java |    42 +
 .../cache/query/internal/parse/ASTDummy.java    |    39 +
 .../cache/query/internal/parse/ASTGroupBy.java  |    44 +
 .../cache/query/internal/parse/ASTHint.java     |    52 +
 .../query/internal/parse/ASTHintIdentifier.java |    52 +
 .../query/internal/parse/ASTIdentifier.java     |    42 +
 .../cache/query/internal/parse/ASTImport.java   |    57 +
 .../cache/query/internal/parse/ASTIn.java       |    43 +
 .../query/internal/parse/ASTIteratorDef.java    |    79 +
 .../cache/query/internal/parse/ASTLike.java     |    47 +
 .../cache/query/internal/parse/ASTLimit.java    |    41 +
 .../cache/query/internal/parse/ASTLiteral.java  |   232 +
 .../internal/parse/ASTMethodInvocation.java     |    68 +
 .../cache/query/internal/parse/ASTOr.java       |    38 +
 .../cache/query/internal/parse/ASTOrderBy.java  |    44 +
 .../query/internal/parse/ASTParameter.java      |    40 +
 .../cache/query/internal/parse/ASTPostfix.java  |    70 +
 .../query/internal/parse/ASTProjection.java     |    48 +
 .../query/internal/parse/ASTRegionPath.java     |    41 +
 .../cache/query/internal/parse/ASTSelect.java   |    68 +
 .../query/internal/parse/ASTSortCriterion.java  |    44 +
 .../cache/query/internal/parse/ASTTrace.java    |    41 +
 .../cache/query/internal/parse/ASTType.java     |    67 +
 .../cache/query/internal/parse/ASTTypeCast.java |    44 +
 .../cache/query/internal/parse/ASTUnary.java    |    65 +
 .../query/internal/parse/ASTUndefinedExpr.java  |    42 +
 .../query/internal/parse/ASTUnsupported.java    |    45 +
 .../cache/query/internal/parse/GemFireAST.java  |    61 +
 .../cache/query/internal/parse/OQLLexer.java    |  2265 +++
 .../internal/parse/OQLLexerTokenTypes.java      |   155 +
 .../query/internal/parse/OQLLexerTokenTypes.txt |   147 +
 .../cache/query/internal/parse/OQLParser.java   |  3833 ++++
 .../cache/query/internal/parse/UtilParser.java  |    92 +
 .../cache/query/internal/parse/fixantlr.sh      |    52 +
 .../gemfire/cache/query/internal/parse/oql.g    |  1195 ++
 .../internal/types/CollectionTypeImpl.java      |   126 +
 .../types/ExtendedNumericComparator.java        |    52 +
 .../cache/query/internal/types/MapTypeImpl.java |   100 +
 .../query/internal/types/NumericComparator.java |    96 +
 .../query/internal/types/ObjectTypeImpl.java    |   100 +
 .../query/internal/types/StructTypeImpl.java    |   160 +
 .../internal/types/TemporalComparator.java      |    77 +
 .../cache/query/internal/types/TypeUtils.java   |   476 +
 .../query/internal/utils/LimitIterator.java     |    63 +
 .../cache/query/internal/utils/PDXUtils.java    |    95 +
 .../gemstone/gemfire/cache/query/package.html   |   708 +
 .../cache/query/types/CollectionType.java       |    47 +
 .../gemfire/cache/query/types/MapType.java      |    42 +
 .../gemfire/cache/query/types/ObjectType.java   |    60 +
 .../gemfire/cache/query/types/StructType.java   |    52 +
 .../gemfire/cache/server/CacheServer.java       |   512 +
 .../cache/server/ClientSubscriptionConfig.java  |   148 +
 .../gemfire/cache/server/ServerLoad.java        |   187 +
 .../gemfire/cache/server/ServerLoadProbe.java   |    75 +
 .../cache/server/ServerLoadProbeAdapter.java    |    43 +
 .../gemfire/cache/server/ServerMetrics.java     |    53 +
 .../server/internal/ConnectionCountProbe.java   |    94 +
 .../cache/server/internal/LoadMonitor.java      |   242 +
 .../server/internal/ServerMetricsImpl.java      |    79 +
 .../gemstone/gemfire/cache/server/package.html  |    42 +
 .../cache/snapshot/CacheSnapshotService.java    |   149 +
 .../cache/snapshot/RegionSnapshotService.java   |   140 +
 .../gemfire/cache/snapshot/SnapshotFilter.java  |    45 +
 .../cache/snapshot/SnapshotIterator.java        |    62 +
 .../gemfire/cache/snapshot/SnapshotOptions.java |    62 +
 .../gemfire/cache/snapshot/SnapshotReader.java  |    58 +
 .../gemfire/cache/snapshot/package.html         |    54 +
 .../cache/util/BoundedLinkedHashMap.java        |    88 +
 .../cache/util/CacheListenerAdapter.java        |    67 +
 .../gemfire/cache/util/CacheWriterAdapter.java  |    54 +
 .../gemfire/cache/util/CqListenerAdapter.java   |    66 +
 .../gemstone/gemfire/cache/util/Gateway.java    |    53 +
 .../cache/util/GatewayConflictHelper.java       |    34 +
 .../cache/util/GatewayConflictResolver.java     |    48 +
 .../gemfire/cache/util/GatewayEvent.java        |    91 +
 .../gemfire/cache/util/ObjectSizer.java         |    83 +
 .../gemfire/cache/util/ObjectSizerImpl.java     |    35 +
 .../util/RegionMembershipListenerAdapter.java   |    44 +
 .../cache/util/RegionRoleListenerAdapter.java   |    40 +
 .../cache/util/TimestampedEntryEvent.java       |    40 +
 .../cache/util/TransactionListenerAdapter.java  |    43 +
 .../gemstone/gemfire/cache/util/package.html    |    31 +
 .../gemfire/cache/wan/EventSequenceID.java      |   104 +
 .../gemfire/cache/wan/GatewayEventFilter.java   |    64 +
 .../wan/GatewayEventSubstitutionFilter.java     |    40 +
 .../gemfire/cache/wan/GatewayQueueEvent.java    |    81 +
 .../gemfire/cache/wan/GatewayReceiver.java      |   174 +
 .../cache/wan/GatewayReceiverFactory.java       |   122 +
 .../gemfire/cache/wan/GatewaySender.java        |   415 +
 .../gemfire/cache/wan/GatewaySenderFactory.java |   239 +
 .../cache/wan/GatewayTransportFilter.java       |    27 +
 .../compression/CompressionException.java       |    43 +
 .../gemfire/compression/Compressor.java         |    48 +
 .../gemfire/compression/SnappyCompressor.java   |   110 +
 .../gemfire/distributed/AbstractLauncher.java   |   926 +
 .../distributed/ClientSocketFactory.java        |    47 +
 .../distributed/DistributedLockService.java     |   393 +
 .../gemfire/distributed/DistributedMember.java  |    80 +
 .../gemfire/distributed/DistributedSystem.java  |  2217 +++
 .../DistributedSystemDisconnectedException.java |    47 +
 .../distributed/DurableClientAttributes.java    |   147 +
 .../distributed/FutureCancelledException.java   |    47 +
 .../distributed/GatewayCancelledException.java  |    46 +
 .../distributed/LeaseExpiredException.java      |    38 +
 .../gemstone/gemfire/distributed/Locator.java   |   553 +
 .../gemfire/distributed/LocatorLauncher.java    |  2052 ++
 .../distributed/LockNotHeldException.java       |    51 +
 .../LockServiceDestroyedException.java          |    51 +
 .../distributed/OplogCancelledException.java    |    47 +
 .../distributed/PoolCancelledException.java     |    47 +
 .../com/gemstone/gemfire/distributed/Role.java  |    56 +
 .../gemfire/distributed/ServerLauncher.java     |  2614 +++
 .../TXManagerCancelledException.java            |    47 +
 .../internal/AbstractDistributionConfig.java    |  1161 ++
 .../distributed/internal/AdminMessageType.java  |    23 +
 .../internal/AtomicLongWithTerminalState.java   |    67 +
 .../internal/CollectingReplyProcessor.java      |    56 +
 .../distributed/internal/ConfigAttribute.java   |    36 +
 .../internal/ConfigAttributeChecker.java        |    31 +
 .../internal/ConfigAttributeDesc.java           |    31 +
 .../internal/ConfigAttributeGetter.java         |    31 +
 .../internal/ConfigAttributeSetter.java         |    31 +
 .../distributed/internal/ConflationKey.java     |    78 +
 .../gemfire/distributed/internal/DM.java        |   467 +
 .../gemfire/distributed/internal/DMStats.java   |   622 +
 .../gemfire/distributed/internal/DSClock.java   |   313 +
 .../internal/DirectReplyProcessor.java          |   172 +
 .../internal/DistributionAdvisee.java           |    93 +
 .../internal/DistributionAdvisor.java           |  1678 ++
 .../internal/DistributionChannel.java           |   166 +
 .../internal/DistributionConfig.java            |  3807 ++++
 .../internal/DistributionConfigImpl.java        |  3564 ++++
 .../internal/DistributionConfigSnapshot.java    |    71 +
 .../internal/DistributionException.java         |    37 +
 .../internal/DistributionManager.java           |  4811 +++++
 .../internal/DistributionMessage.java           |   711 +
 .../internal/DistributionMessageObserver.java   |    75 +
 .../distributed/internal/DistributionStats.java |  2065 ++
 .../distributed/internal/FlowControlParams.java |   114 +
 .../FunctionExecutionPooledExecutor.java        |   311 +
 .../distributed/internal/HealthMonitor.java     |    46 +
 .../distributed/internal/HealthMonitorImpl.java |   148 +
 .../internal/HighPriorityAckedMessage.java      |   235 +
 .../HighPriorityDistributionMessage.java        |    31 +
 .../distributed/internal/IgnoredByManager.java  |    26 +
 .../internal/InternalDistributedSystem.java     |  3079 +++
 .../distributed/internal/InternalLocator.java   |  1488 ++
 .../internal/LocatorLoadSnapshot.java           |   695 +
 .../distributed/internal/LocatorStats.java      |   245 +
 .../internal/LonerDistributionManager.java      |  1001 +
 .../gemfire/distributed/internal/MQueue.java    |    32 +
 .../internal/MembershipListener.java            |    77 +
 .../distributed/internal/MessageFactory.java    |    56 +
 .../distributed/internal/MessageWithReply.java  |    43 +
 .../internal/OverflowQueueWithDMStats.java      |   174 +
 .../distributed/internal/PoolStatHelper.java    |    38 +
 .../internal/PooledDistributionMessage.java     |    34 +
 .../internal/PooledExecutorWithDMStats.java     |   234 +
 .../distributed/internal/ProcessorKeeper21.java |   129 +
 .../distributed/internal/ProductUseLog.java     |   147 +
 .../distributed/internal/ProfileListener.java   |    55 +
 .../distributed/internal/QueueStatHelper.java   |    42 +
 .../internal/ReliableReplyException.java        |    37 +
 .../internal/ReliableReplyProcessor21.java      |   116 +
 .../distributed/internal/ReplyException.java    |   201 +
 .../distributed/internal/ReplyMessage.java      |   364 +
 .../distributed/internal/ReplyProcessor21.java  |  1298 ++
 .../distributed/internal/ReplySender.java       |    39 +
 .../distributed/internal/ResourceEvent.java     |    52 +
 .../internal/ResourceEventsListener.java        |    38 +
 .../internal/RuntimeDistributionConfigImpl.java |   138 +
 .../internal/SerialAckedMessage.java            |   159 +
 .../internal/SerialDistributionMessage.java     |    34 +
 .../SerialQueuedExecutorWithDMStats.java        |    51 +
 .../distributed/internal/ServerLocation.java    |   178 +
 .../distributed/internal/ServerLocator.java     |   486 +
 .../internal/SharedConfiguration.java           |   955 +
 .../distributed/internal/ShutdownMessage.java   |   121 +
 .../gemfire/distributed/internal/Sizeable.java  |    28 +
 .../distributed/internal/SizeableRunnable.java  |    39 +
 .../distributed/internal/StartupMessage.java    |   433 +
 .../internal/StartupMessageData.java            |   231 +
 .../internal/StartupMessageReplyProcessor.java  |   118 +
 .../distributed/internal/StartupOperation.java  |   136 +
 .../internal/StartupResponseMessage.java        |   294 +
 .../StartupResponseWithVersionMessage.java      |   108 +
 .../internal/ThrottledMemQueueStatHelper.java   |    49 +
 .../internal/ThrottledQueueStatHelper.java      |    39 +
 .../ThrottlingMemLinkedQueueWithDMStats.java    |   165 +
 .../internal/WaitForViewInstallation.java       |   126 +
 .../internal/WanLocatorDiscoverer.java          |    31 +
 .../deadlock/DLockDependencyMonitor.java        |   147 +
 .../internal/deadlock/DeadlockDetector.java     |   395 +
 .../internal/deadlock/Dependency.java           |    88 +
 .../internal/deadlock/DependencyGraph.java      |   340 +
 .../internal/deadlock/DependencyMonitor.java    |    45 +
 .../deadlock/DependencyMonitorManager.java      |   107 +
 .../deadlock/GemFireDeadlockDetector.java       |   142 +
 .../internal/deadlock/LocalLockInfo.java        |   101 +
 .../internal/deadlock/LocalThread.java          |   120 +
 .../deadlock/MessageDependencyMonitor.java      |   155 +
 .../internal/deadlock/ThreadReference.java      |    28 +
 .../internal/deadlock/UnsafeThreadLocal.java    |    92 +
 .../internal/direct/DirectChannel.java          |   939 +
 .../internal/direct/DirectChannelListener.java  |    38 +
 .../internal/direct/ShunnedMemberException.java |    34 +
 .../internal/distribution-overview.html         |    42 +
 .../internal/doc-files/config-classes.fig       |   138 +
 .../internal/doc-files/config-classes.gif       |   Bin 0 -> 4205 bytes
 .../doc-files/distribution-managers.fig         |    76 +
 .../doc-files/distribution-managers.gif         |   Bin 0 -> 3267 bytes
 .../internal/locks/Collaboration.java           |   454 +
 .../distributed/internal/locks/DLockBatch.java  |    46 +
 .../internal/locks/DLockBatchId.java            |    31 +
 .../internal/locks/DLockGrantor.java            |  3796 ++++
 .../locks/DLockLessorDepartureHandler.java      |    35 +
 .../internal/locks/DLockQueryProcessor.java     |   519 +
 .../locks/DLockRecoverGrantorProcessor.java     |   460 +
 .../internal/locks/DLockReleaseProcessor.java   |   450 +
 .../internal/locks/DLockRemoteToken.java        |   235 +
 .../internal/locks/DLockRequestProcessor.java   |  1284 ++
 .../internal/locks/DLockService.java            |  3377 ++++
 .../distributed/internal/locks/DLockStats.java  |   887 +
 .../distributed/internal/locks/DLockToken.java  |   572 +
 .../internal/locks/DeposeGrantorProcessor.java  |   210 +
 .../internal/locks/DistributedLockStats.java    |   201 +
 .../internal/locks/DistributedMemberLock.java   |   297 +
 .../internal/locks/DummyDLockStats.java         |   180 +
 .../internal/locks/ElderInitProcessor.java      |   314 +
 .../distributed/internal/locks/ElderState.java  |   399 +
 .../distributed/internal/locks/GrantorInfo.java |    87 +
 .../internal/locks/GrantorRequestProcessor.java |   751 +
 .../locks/LockGrantorDestroyedException.java    |    51 +
 .../internal/locks/LockGrantorId.java           |   243 +
 .../locks/NonGrantorDestroyedProcessor.java     |   308 +
 .../internal/locks/RemoteThread.java            |    88 +
 .../internal/locks/doc-files/elder.fig          |    84 +
 .../internal/locks/doc-files/elder.jpg          |   Bin 0 -> 55182 bytes
 .../internal/locks/doc-files/turks.fig          |   128 +
 .../internal/locks/doc-files/turks.jpg          |   Bin 0 -> 79859 bytes
 .../distributed/internal/locks/package.html     |   313 +
 .../DistributedMembershipListener.java          |    86 +
 .../membership/InternalDistributedMember.java   |  1304 ++
 .../internal/membership/InternalRole.java       |   169 +
 .../internal/membership/MemberAttributes.java   |   124 +
 .../internal/membership/MemberFactory.java      |   109 +
 .../internal/membership/MemberServices.java     |    90 +
 .../internal/membership/MembershipManager.java  |   326 +
 .../internal/membership/MembershipTestHook.java |    40 +
 .../internal/membership/NetMember.java          |    82 +
 .../internal/membership/NetView.java            |   614 +
 .../internal/membership/QuorumChecker.java      |    63 +
 .../internal/membership/gms/GMSMember.java      |   458 +
 .../membership/gms/GMSMemberFactory.java        |   133 +
 .../internal/membership/gms/GMSUtil.java        |   159 +
 .../internal/membership/gms/NetLocator.java     |    32 +
 .../internal/membership/gms/ServiceConfig.java  |   187 +
 .../internal/membership/gms/Services.java       |   387 +
 .../internal/membership/gms/SuspectMember.java  |    58 +
 .../membership/gms/auth/GMSAuthenticator.java   |   235 +
 .../membership/gms/fd/GMSHealthMonitor.java     |  1380 ++
 .../gms/interfaces/Authenticator.java           |    27 +
 .../gms/interfaces/HealthMonitor.java           |    64 +
 .../membership/gms/interfaces/JoinLeave.java    |    73 +
 .../membership/gms/interfaces/Locator.java      |    32 +
 .../membership/gms/interfaces/Manager.java      |   120 +
 .../gms/interfaces/MessageHandler.java          |    30 +
 .../membership/gms/interfaces/Messenger.java    |    81 +
 .../membership/gms/interfaces/Service.java      |    83 +
 .../gms/locator/FindCoordinatorRequest.java     |   148 +
 .../gms/locator/FindCoordinatorResponse.java    |   161 +
 .../membership/gms/locator/GMSLocator.java      |   373 +
 .../membership/gms/locator/GetViewRequest.java  |    49 +
 .../membership/gms/locator/GetViewResponse.java |    64 +
 .../gms/locator/PeerLocatorRequest.java         |    25 +
 .../membership/gms/membership/GMSJoinLeave.java |  2312 +++
 .../membership/gms/messages/HasMemberID.java    |    25 +
 .../gms/messages/HeartbeatMessage.java          |    74 +
 .../gms/messages/HeartbeatRequestMessage.java   |    80 +
 .../gms/messages/InstallViewMessage.java        |   106 +
 .../gms/messages/JoinRequestMessage.java        |    97 +
 .../gms/messages/JoinResponseMessage.java       |   129 +
 .../gms/messages/LeaveRequestMessage.java       |    94 +
 .../gms/messages/NetworkPartitionMessage.java   |    44 +
 .../gms/messages/RemoveMemberMessage.java       |    96 +
 .../gms/messages/SuspectMembersMessage.java     |    91 +
 .../membership/gms/messages/SuspectRequest.java |    72 +
 .../membership/gms/messages/ViewAckMessage.java |   103 +
 .../gms/messenger/AddressManager.java           |   121 +
 .../membership/gms/messenger/GMSPingPonger.java |    65 +
 .../gms/messenger/GMSQuorumChecker.java         |   274 +
 .../membership/gms/messenger/JGAddress.java     |   221 +
 .../gms/messenger/JGroupsMessenger.java         |  1116 ++
 .../membership/gms/messenger/StatRecorder.java  |   162 +
 .../membership/gms/messenger/Transport.java     |   163 +
 .../gms/mgr/GMSMembershipManager.java           |  2652 +++
 .../membership/gms/mgr/LocalViewMessage.java    |    85 +
 .../internal/membership/gms/package.html        |    57 +
 .../gemfire/distributed/internal/package.html   |    55 +
 .../internal/streaming/StreamingOperation.java  |   613 +
 .../internal/tcpserver/InfoRequest.java         |    41 +
 .../internal/tcpserver/InfoResponse.java        |    56 +
 .../internal/tcpserver/ShutdownRequest.java     |    39 +
 .../internal/tcpserver/ShutdownResponse.java    |    40 +
 .../internal/tcpserver/TcpClient.java           |   251 +
 .../internal/tcpserver/TcpHandler.java          |    61 +
 .../internal/tcpserver/TcpServer.java           |   546 +
 .../internal/tcpserver/VersionRequest.java      |    41 +
 .../internal/tcpserver/VersionResponse.java     |    54 +
 .../unsafe/RegisterSignalHandlerSupport.java    |    35 +
 .../gemstone/gemfire/distributed/package.html   |    37 +
 .../doc-files/data-serialization-exceptions.fig |   135 +
 .../doc-files/data-serialization-exceptions.gif |   Bin 0 -> 3666 bytes
 .../gemstone/gemfire/i18n/LogWriterI18n.java    |   420 +
 .../com/gemstone/gemfire/i18n/StringId.java     |   161 +
 .../gemfire/internal/AbstractConfig.java        |   403 +
 .../internal/AbstractStatisticsFactory.java     |   340 +
 .../gemfire/internal/ArchiveSplitter.java       |   522 +
 .../com/gemstone/gemfire/internal/Assert.java   |   177 +
 .../gemfire/internal/AvailablePort.java         |   588 +
 .../com/gemstone/gemfire/internal/Banner.java   |   172 +
 .../gemfire/internal/ByteArrayDataInput.java    |   458 +
 .../internal/ByteBufferOutputStream.java        |   102 +
 .../gemfire/internal/ByteBufferWriter.java      |    35 +
 .../gemfire/internal/ClassLoadUtil.java         |   124 +
 .../gemfire/internal/ClassPathLoader.java       |   726 +
 .../com/gemstone/gemfire/internal/Config.java   |   110 +
 .../gemstone/gemfire/internal/ConfigSource.java |   108 +
 .../gemfire/internal/ConnectionWatcher.java     |    41 +
 .../gemfire/internal/CopyOnWriteHashSet.java    |   177 +
 .../com/gemstone/gemfire/internal/DSCODE.java   |   416 +
 .../gemstone/gemfire/internal/DSFIDFactory.java |  1403 ++
 .../internal/DSFIDNotFoundException.java        |    52 +
 .../internal/DataSerializableFixedID.java       |   912 +
 .../gemfire/internal/DistributionLocator.java   |   190 +
 .../internal/DummyStatisticsFactory.java        |   134 +
 .../gemfire/internal/DummyStatisticsImpl.java   |   199 +
 .../gemfire/internal/ExternalizableDSFID.java   |    43 +
 .../com/gemstone/gemfire/internal/FileUtil.java |   342 +
 .../gemfire/internal/GemFireStatSampler.java    |   507 +
 .../gemfire/internal/GemFireUtilLauncher.java   |   166 +
 .../gemfire/internal/GemFireVersion.java        |   677 +
 .../internal/GfeConsoleReaderFactory.java       |    87 +
 .../gemfire/internal/HeapDataOutputStream.java  |  1374 ++
 .../gemfire/internal/HistogramStats.java        |    82 +
 .../gemfire/internal/HostStatHelper.java        |   289 +
 .../gemfire/internal/HostStatSampler.java       |   546 +
 .../InsufficientDiskSpaceException.java         |    54 +
 .../internal/InternalDataSerializer.java        |  4057 ++++
 .../gemfire/internal/InternalEntity.java        |    30 +
 .../gemfire/internal/InternalInstantiator.java  |  1061 +
 .../InternalStatisticsDisabledException.java    |    70 +
 .../gemfire/internal/JarClassLoader.java        |   701 +
 .../gemstone/gemfire/internal/JarDeployer.java  |   639 +
 .../gemfire/internal/LinuxProcFsStatistics.java |   786 +
 .../gemfire/internal/LinuxProcessStats.java     |    79 +
 .../gemfire/internal/LinuxSystemStats.java      |   311 +
 .../gemfire/internal/LocalStatListener.java     |    41 +
 .../internal/LocalStatisticsFactory.java        |   101 +
 .../gemfire/internal/LocalStatisticsImpl.java   |   269 +
 .../gemstone/gemfire/internal/ManagerInfo.java  |   386 +
 .../gemfire/internal/MigrationClient.java       |   260 +
 .../gemfire/internal/MigrationServer.java       |   566 +
 .../gemstone/gemfire/internal/NanoTimer.java    |   186 +
 .../gemfire/internal/NullDataOutputStream.java  |   379 +
 .../gemstone/gemfire/internal/OSProcess.java    |   753 +
 .../gemfire/internal/OSXProcessStats.java       |    83 +
 .../gemfire/internal/OSXSystemStats.java        |   228 +
 .../gemfire/internal/ObjIdConcurrentMap.java    |  1366 ++
 .../com/gemstone/gemfire/internal/ObjIdMap.java |   337 +
 .../internal/ObjToByteArraySerializer.java      |    35 +
 .../gemfire/internal/OneTaskOnlyExecutor.java   |   175 +
 .../gemfire/internal/OsStatisticsFactory.java   |    42 +
 .../gemfire/internal/PdxSerializerObject.java   |    33 +
 .../gemfire/internal/ProcessOutputReader.java   |   135 +
 .../gemstone/gemfire/internal/ProcessStats.java |    61 +
 .../gemstone/gemfire/internal/PureJavaMode.java |    80 +
 ...cheduledThreadPoolExecutorWithKeepAlive.java |   313 +
 .../com/gemstone/gemfire/internal/Sendable.java |    42 +
 .../gemfire/internal/SerializationVersions.java |    42 +
 .../com/gemstone/gemfire/internal/SetUtils.java |    68 +
 .../gemfire/internal/SharedLibrary.java         |   226 +
 .../gemfire/internal/SimpleStatSampler.java     |   114 +
 .../com/gemstone/gemfire/internal/SmHelper.java |   183 +
 .../gemstone/gemfire/internal/SocketCloser.java |   257 +
 .../gemfire/internal/SocketCreator.java         |  1367 ++
 .../gemfire/internal/SocketIOWithTimeout.java   |   491 +
 .../gemfire/internal/SocketInputStream.java     |   181 +
 .../gemfire/internal/SocketInputWrapper.java    |    93 +
 .../gemfire/internal/SocketOutputStream.java    |   174 +
 .../gemstone/gemfire/internal/SocketUtils.java  |   220 +
 .../gemfire/internal/SolarisProcessStats.java   |   217 +
 .../gemfire/internal/SolarisSystemStats.java    |   428 +
 .../gemfire/internal/StatArchiveFormat.java     |   197 +
 .../gemfire/internal/StatArchiveReader.java     |  3338 ++++
 .../gemfire/internal/StatArchiveWriter.java     |   748 +
 .../gemfire/internal/StatSamplerStats.java      |   123 +
 .../internal/StatisticDescriptorImpl.java       |   385 +
 .../gemfire/internal/StatisticsImpl.java        |   454 +
 .../gemfire/internal/StatisticsManager.java     |    79 +
 .../internal/StatisticsTypeFactoryImpl.java     |   141 +
 .../gemfire/internal/StatisticsTypeImpl.java    |   260 +
 .../gemfire/internal/StatisticsTypeXml.java     |   280 +
 .../gemstone/gemfire/internal/SystemAdmin.java  |  2305 +++
 .../gemfire/internal/SystemFailureTestHook.java |    48 +
 .../gemstone/gemfire/internal/SystemTimer.java  |   467 +
 .../gemfire/internal/UniqueIdGenerator.java     |   257 +
 .../com/gemstone/gemfire/internal/VMStats.java  |    87 +
 .../gemfire/internal/VMStatsContract.java       |    36 +
 .../internal/VMStatsContractFactory.java        |    60 +
 .../com/gemstone/gemfire/internal/Version.java  |   636 +
 .../internal/VersionedDataInputStream.java      |    67 +
 .../internal/VersionedDataOutputStream.java     |    57 +
 .../internal/VersionedDataSerializable.java     |    34 +
 .../gemfire/internal/VersionedDataStream.java   |    53 +
 .../gemfire/internal/VersionedObjectInput.java  |   245 +
 .../gemfire/internal/VersionedObjectOutput.java |   199 +
 .../gemfire/internal/WindowsProcessStats.java   |   160 +
 .../gemfire/internal/WindowsSystemStats.java    |   267 +
 .../internal/admin/AdminBridgeServer.java       |    33 +
 .../gemstone/gemfire/internal/admin/Alert.java  |    69 +
 .../gemfire/internal/admin/AlertListener.java   |    29 +
 .../gemfire/internal/admin/ApplicationVM.java   |    36 +
 .../gemfire/internal/admin/CacheCollector.java  |   277 +
 .../gemfire/internal/admin/CacheInfo.java       |   102 +
 .../gemfire/internal/admin/CacheSnapshot.java   |    34 +
 .../admin/ClientHealthMonitoringRegion.java     |   117 +
 .../internal/admin/ClientMembershipMessage.java |   187 +
 .../internal/admin/ClientStatsManager.java      |   263 +
 .../internal/admin/CompoundEntrySnapshot.java   |   201 +
 .../internal/admin/CompoundRegionSnapshot.java  |   387 +
 .../gemfire/internal/admin/DLockInfo.java       |    35 +
 .../gemfire/internal/admin/EntrySnapshot.java   |    29 +
 .../gemfire/internal/admin/EntryValueNode.java  |    53 +
 .../gemfire/internal/admin/GemFireVM.java       |   396 +
 .../gemfire/internal/admin/GfManagerAgent.java  |   112 +
 .../internal/admin/GfManagerAgentConfig.java    |    87 +
 .../internal/admin/GfManagerAgentFactory.java   |    42 +
 .../gemfire/internal/admin/GfObject.java        |    28 +
 .../gemfire/internal/admin/HealthListener.java  |    44 +
 .../internal/admin/JoinLeaveListener.java       |    27 +
 .../gemfire/internal/admin/ListenerIdMap.java   |   318 +
 .../gemfire/internal/admin/RegionSnapshot.java  |    31 +
 .../gemfire/internal/admin/SSLConfig.java       |   131 +
 .../gemfire/internal/admin/SnapshotClient.java  |    38 +
 .../gemstone/gemfire/internal/admin/Stat.java   |    44 +
 .../gemfire/internal/admin/StatAlert.java       |   140 +
 .../internal/admin/StatAlertDefinition.java     |   103 +
 .../internal/admin/StatAlertsManager.java       |   408 +
 .../gemfire/internal/admin/StatListener.java    |    43 +
 .../gemfire/internal/admin/StatResource.java    |    42 +
 .../gemfire/internal/admin/TransportConfig.java |    27 +
 .../admin/doc-files/class-hierarchy.fig         |   224 +
 .../admin/doc-files/class-hierarchy.gif         |   Bin 0 -> 11971 bytes
 .../gemfire/internal/admin/package.html         |    29 +
 .../admin/remote/AddHealthListenerRequest.java  |    89 +
 .../admin/remote/AddHealthListenerResponse.java |    76 +
 .../admin/remote/AddStatListenerRequest.java    |    85 +
 .../admin/remote/AddStatListenerResponse.java   |    79 +
 .../remote/AdminConsoleDisconnectMessage.java   |   125 +
 .../admin/remote/AdminConsoleMessage.java       |    83 +
 .../admin/remote/AdminFailureResponse.java      |    73 +
 .../remote/AdminMultipleReplyProcessor.java     |    91 +
 .../internal/admin/remote/AdminRegion.java      |   581 +
 .../admin/remote/AdminReplyProcessor.java       |   148 +
 .../internal/admin/remote/AdminRequest.java     |   193 +
 .../internal/admin/remote/AdminResponse.java    |    90 +
 .../internal/admin/remote/AdminWaiters.java     |   184 +
 .../admin/remote/AlertLevelChangeMessage.java   |    96 +
 .../admin/remote/AlertListenerMessage.java      |   147 +
 .../admin/remote/AlertsNotificationMessage.java |   110 +
 .../admin/remote/AppCacheSnapshotMessage.java   |   163 +
 .../admin/remote/BridgeServerRequest.java       |   202 +
 .../admin/remote/BridgeServerResponse.java      |   181 +
 .../admin/remote/CacheConfigRequest.java        |    88 +
 .../admin/remote/CacheConfigResponse.java       |   119 +
 .../internal/admin/remote/CacheDisplay.java     |    86 +
 .../internal/admin/remote/CacheInfoRequest.java |    73 +
 .../admin/remote/CacheInfoResponse.java         |    83 +
 .../admin/remote/CancelStatListenerRequest.java |    79 +
 .../remote/CancelStatListenerResponse.java      |    74 +
 .../internal/admin/remote/Cancellable.java      |    27 +
 .../admin/remote/CancellationMessage.java       |    70 +
 .../admin/remote/CancellationRegistry.java      |    95 +
 .../remote/ChangeRefreshIntervalMessage.java    |    98 +
 .../internal/admin/remote/CliLegacyMessage.java |    58 +
 .../admin/remote/ClientHealthStats.java         |   308 +
 .../internal/admin/remote/CompactRequest.java   |   145 +
 .../internal/admin/remote/CompactResponse.java  |    66 +
 .../admin/remote/DestroyEntryMessage.java       |   100 +
 .../admin/remote/DestroyRegionMessage.java      |    96 +
 .../admin/remote/DistributionLocatorId.java     |   394 +
 .../internal/admin/remote/DummyEntry.java       |    77 +
 .../admin/remote/DurableClientInfoRequest.java  |   109 +
 .../admin/remote/DurableClientInfoResponse.java |   108 +
 .../admin/remote/EntryValueNodeImpl.java        |   393 +
 .../admin/remote/FetchDistLockInfoRequest.java  |    68 +
 .../admin/remote/FetchDistLockInfoResponse.java |    93 +
 .../remote/FetchHealthDiagnosisRequest.java     |    91 +
 .../remote/FetchHealthDiagnosisResponse.java    |    92 +
 .../internal/admin/remote/FetchHostRequest.java |    70 +
 .../admin/remote/FetchHostResponse.java         |   173 +
 .../remote/FetchResourceAttributesRequest.java  |    70 +
 .../remote/FetchResourceAttributesResponse.java |    81 +
 .../admin/remote/FetchStatsRequest.java         |    72 +
 .../admin/remote/FetchStatsResponse.java        |   145 +
 .../admin/remote/FetchSysCfgRequest.java        |    76 +
 .../admin/remote/FetchSysCfgResponse.java       |    77 +
 .../remote/FlushAppCacheSnapshotMessage.java    |    69 +
 .../admin/remote/HealthListenerMessage.java     |    89 +
 .../remote/InspectionClasspathManager.java      |    90 +
 .../admin/remote/LicenseInfoRequest.java        |    72 +
 .../admin/remote/LicenseInfoResponse.java       |    79 +
 .../remote/MissingPersistentIDsRequest.java     |   141 +
 .../remote/MissingPersistentIDsResponse.java    |   115 +
 .../admin/remote/ObjectDetailsRequest.java      |   103 +
 .../admin/remote/ObjectDetailsResponse.java     |   155 +
 .../admin/remote/ObjectNamesRequest.java        |    89 +
 .../admin/remote/ObjectNamesResponse.java       |    98 +
 .../PrepareRevokePersistentIDRequest.java       |   127 +
 .../remote/RefreshMemberSnapshotRequest.java    |    74 +
 .../remote/RefreshMemberSnapshotResponse.java   |    95 +
 .../admin/remote/RegionAdminMessage.java        |    66 +
 .../admin/remote/RegionAdminRequest.java        |    74 +
 .../admin/remote/RegionAttributesRequest.java   |    74 +
 .../admin/remote/RegionAttributesResponse.java  |    75 +
 .../internal/admin/remote/RegionRequest.java    |   175 +
 .../internal/admin/remote/RegionResponse.java   |   149 +
 .../admin/remote/RegionSizeRequest.java         |    90 +
 .../admin/remote/RegionSizeResponse.java        |    96 +
 .../admin/remote/RegionStatisticsRequest.java   |    74 +
 .../admin/remote/RegionStatisticsResponse.java  |    75 +
 .../remote/RegionSubRegionSizeRequest.java      |    94 +
 .../remote/RegionSubRegionsSizeResponse.java    |   162 +
 .../internal/admin/remote/RemoteAlert.java      |   205 +
 .../admin/remote/RemoteApplicationVM.java       |    61 +
 .../admin/remote/RemoteBridgeServer.java        |   300 +
 .../internal/admin/remote/RemoteCacheInfo.java  |   192 +
 .../admin/remote/RemoteCacheStatistics.java     |    87 +
 .../internal/admin/remote/RemoteDLockInfo.java  |   115 +
 .../admin/remote/RemoteEntrySnapshot.java       |   131 +
 .../internal/admin/remote/RemoteGemFireVM.java  |   998 +
 .../admin/remote/RemoteGfManagerAgent.java      |  1489 ++
 .../internal/admin/remote/RemoteObjectName.java |    95 +
 .../admin/remote/RemoteRegionAttributes.java    |   702 +
 .../admin/remote/RemoteRegionSnapshot.java      |   158 +
 .../internal/admin/remote/RemoteStat.java       |   118 +
 .../admin/remote/RemoteStatResource.java        |   154 +
 .../admin/remote/RemoteTransportConfig.java     |   376 +
 .../remote/RemoveHealthListenerRequest.java     |    80 +
 .../remote/RemoveHealthListenerResponse.java    |    67 +
 .../admin/remote/ResetHealthStatusRequest.java  |    80 +
 .../admin/remote/ResetHealthStatusResponse.java |    72 +
 .../admin/remote/RevokePersistentIDRequest.java |   103 +
 .../remote/RevokePersistentIDResponse.java      |    36 +
 .../admin/remote/RootRegionRequest.java         |    76 +
 .../admin/remote/RootRegionResponse.java        |   115 +
 .../remote/ShutdownAllGatewayHubsRequest.java   |    68 +
 .../admin/remote/ShutdownAllRequest.java        |   301 +
 .../admin/remote/ShutdownAllResponse.java       |    80 +
 .../admin/remote/SnapshotResultMessage.java     |    85 +
 .../remote/StatAlertsManagerAssignMessage.java  |   152 +
 .../admin/remote/StatListenerMessage.java       |   118 +
 .../admin/remote/StoreSysCfgRequest.java        |    81 +
 .../admin/remote/StoreSysCfgResponse.java       |    77 +
 .../internal/admin/remote/SubRegionRequest.java |    74 +
 .../admin/remote/SubRegionResponse.java         |   100 +
 .../internal/admin/remote/TailLogRequest.java   |    62 +
 .../internal/admin/remote/TailLogResponse.java  |   169 +
 .../remote/UpdateAlertDefinitionMessage.java    |   162 +
 .../admin/remote/VersionInfoRequest.java        |    73 +
 .../admin/remote/VersionInfoResponse.java       |    74 +
 .../admin/remote/VersionMismatchAlert.java      |    66 +
 .../gemfire/internal/admin/remote/package.html  |    41 +
 .../admin/statalerts/BaseDecoratorImpl.java     |   224 +
 .../statalerts/DummyStatisticInfoImpl.java      |   146 +
 .../admin/statalerts/FunctionDecoratorImpl.java |   133 +
 .../admin/statalerts/FunctionHelper.java        |   257 +
 .../statalerts/GaugeThresholdDecoratorImpl.java |   156 +
 .../statalerts/MultiAttrDefinitionImpl.java     |   207 +
 .../NumberThresholdDecoratorImpl.java           |   153 +
 .../statalerts/SingleAttrDefinitionImpl.java    |   213 +
 .../admin/statalerts/StatisticInfo.java         |    85 +
 .../admin/statalerts/StatisticInfoImpl.java     |   157 +
 .../cache/AbstractBucketRegionQueue.java        |   563 +
 .../internal/cache/AbstractCacheServer.java     |   407 +
 .../cache/AbstractDiskLRURegionEntry.java       |    42 +
 .../internal/cache/AbstractDiskRegion.java      |   992 +
 .../internal/cache/AbstractDiskRegionEntry.java |    76 +
 .../internal/cache/AbstractLRURegionEntry.java  |    46 +
 .../internal/cache/AbstractLRURegionMap.java    |   861 +
 .../cache/AbstractOplogDiskRegionEntry.java     |   173 +
 .../gemfire/internal/cache/AbstractRegion.java  |  2134 ++
 .../internal/cache/AbstractRegionEntry.java     |  2243 +++
 .../internal/cache/AbstractRegionMap.java       |  4164 ++++
 .../internal/cache/AbstractUpdateOperation.java |   338 +
 .../gemfire/internal/cache/AcceptHelper.java    |   101 +
 .../cache/AddCacheServerProfileMessage.java     |   161 +
 .../gemfire/internal/cache/BackupLock.java      |    91 +
 .../gemfire/internal/cache/BucketAdvisor.java   |  3002 +++
 .../gemfire/internal/cache/BucketDump.java      |   144 +
 .../internal/cache/BucketNotFoundException.java |    38 +
 .../cache/BucketPersistenceAdvisor.java         |   463 +
 .../gemfire/internal/cache/BucketRegion.java    |  2622 +++
 .../internal/cache/BucketRegionEvictior.java    |    63 +
 .../internal/cache/BucketRegionQueue.java       |   548 +
 .../internal/cache/BucketServerLocation.java    |    88 +
 .../internal/cache/BucketServerLocation66.java  |   113 +
 .../cache/BytesAndBitsForCompactor.java         |    94 +
 .../internal/cache/CacheClientStatus.java       |   101 +
 .../gemfire/internal/cache/CacheConfig.java     |   228 +
 .../cache/CacheDistributionAdvisee.java         |    58 +
 .../cache/CacheDistributionAdvisor.java         |  1260 ++
 .../internal/cache/CacheLifecycleListener.java  |    37 +
 .../gemfire/internal/cache/CacheObserver.java   |   190 +
 .../internal/cache/CacheObserverAdapter.java    |   154 +
 .../internal/cache/CacheObserverHolder.java     |    78 +
 .../gemfire/internal/cache/CachePerfStats.java  |  1419 ++
 .../internal/cache/CacheServerAdvisor.java      |   173 +
 .../gemfire/internal/cache/CacheServerImpl.java |   832 +
 .../internal/cache/CacheServerLauncher.java     |  1393 ++
 .../gemfire/internal/cache/CacheService.java    |    42 +
 .../internal/cache/CacheStatisticsImpl.java     |   111 +
 .../internal/cache/CachedDeserializable.java    |   114 +
 .../cache/CachedDeserializableFactory.java      |   275 +
 .../internal/cache/ClientRegionEventImpl.java   |   117 +
 .../internal/cache/ClientServerObserver.java    |    99 +
 .../cache/ClientServerObserverAdapter.java      |   116 +
 .../cache/ClientServerObserverHolder.java       |    62 +
 .../cache/ClientSubscriptionConfigImpl.java     |   178 +
 .../internal/cache/CloseCacheMessage.java       |   116 +
 .../cache/ClusterConfigurationLoader.java       |   245 +
 .../internal/cache/ColocationHelper.java        |   569 +
 .../internal/cache/CommitReplyException.java    |    73 +
 .../internal/cache/CompactableOplog.java        |    37 +
 .../gemfire/internal/cache/Conflatable.java     |    76 +
 .../internal/cache/ControllerAdvisor.java       |   171 +
 .../internal/cache/CountingDataInputStream.java |   125 +
 .../internal/cache/CreateRegionProcessor.java   |   914 +
 .../internal/cache/CustomEntryExpiryTask.java   |    49 +
 .../cache/CustomEvictionAttributesImpl.java     |    36 +
 .../internal/cache/DataLocationException.java   |    43 +
 .../internal/cache/DestroyOperation.java        |   303 +
 .../cache/DestroyPartitionedRegionMessage.java  |   252 +
 .../internal/cache/DestroyRegionOperation.java  |   547 +
 .../gemfire/internal/cache/DestroyedEntry.java  |    85 +
 .../internal/cache/DirectReplyMessage.java      |    58 +
 .../gemfire/internal/cache/DirectoryHolder.java |   123 +
 .../internal/cache/DiskDirectoryStats.java      |   117 +
 .../gemfire/internal/cache/DiskEntry.java       |  2028 ++
 .../gemstone/gemfire/internal/cache/DiskId.java |   730 +
 .../gemfire/internal/cache/DiskInitFile.java    |  2877 +++
 .../gemfire/internal/cache/DiskRegion.java      |   876 +
 .../gemfire/internal/cache/DiskRegionStats.java |   326 +
 .../internal/cache/DiskStoreAttributes.java     |   196 +
 .../gemfire/internal/cache/DiskStoreBackup.java |    98 +
 .../internal/cache/DiskStoreFactoryImpl.java    |   291 +
 .../gemfire/internal/cache/DiskStoreImpl.java   |  4873 +++++
 .../internal/cache/DiskStoreMonitor.java        |   413 +
 .../internal/cache/DiskStoreObserver.java       |    63 +
 .../gemfire/internal/cache/DiskStoreStats.java  |   528 +
 .../gemfire/internal/cache/DiskStoreTask.java   |    27 +
 .../internal/cache/DiskWriteAttributesImpl.java |   564 +
 .../internal/cache/DistPeerTXStateStub.java     |   374 +
 .../cache/DistTXAdjunctCommitMessage.java       |    51 +
 .../internal/cache/DistTXCommitMessage.java     |   500 +
 .../cache/DistTXCoordinatorInterface.java       |    73 +
 .../internal/cache/DistTXPrecommitMessage.java  |   548 +
 .../internal/cache/DistTXRollbackMessage.java   |   507 +
 .../gemfire/internal/cache/DistTXState.java     |   746 +
 .../cache/DistTXStateOnCoordinator.java         |   416 +
 .../internal/cache/DistTXStateProxyImpl.java    |    48 +
 .../DistTXStateProxyImplOnCoordinator.java      |  1068 +
 .../cache/DistTXStateProxyImplOnDatanode.java   |   128 +
 .../cache/DistributedCacheOperation.java        |  1615 ++
 .../cache/DistributedClearOperation.java        |   356 +
 .../cache/DistributedPutAllOperation.java       |  1384 ++
 .../internal/cache/DistributedRegion.java       |  4311 +++++
 ...stributedRegionFunctionStreamingMessage.java |   460 +
 .../cache/DistributedRemoveAllOperation.java    |  1097 ++
 .../cache/DistributedTombstoneOperation.java    |   227 +
 .../internal/cache/DummyCachePerfStats.java     |   485 +
 .../internal/cache/DynamicRegionAttributes.java |    52 +
 .../cache/DynamicRegionFactoryImpl.java         |    44 +
 .../gemfire/internal/cache/EntriesMap.java      |   155 +
 .../gemfire/internal/cache/EntriesSet.java      |   294 +
 .../gemfire/internal/cache/EntryBits.java       |   128 +
 .../gemfire/internal/cache/EntryEventImpl.java  |  3142 +++
 .../gemfire/internal/cache/EntryExpiryTask.java |   358 +
 .../internal/cache/EntryOperationImpl.java      |   119 +
 .../gemfire/internal/cache/EntrySnapshot.java   |   285 +
 .../internal/cache/EnumListenerEvent.java       |   475 +
 .../gemfire/internal/cache/EventID.java         |   804 +
 .../internal/cache/EventStateHelper.java        |   196 +
 .../gemfire/internal/cache/EventTracker.java    |   812 +
 .../internal/cache/EvictionAttributesImpl.java  |   243 +
 .../gemfire/internal/cache/EvictorService.java  |   285 +
 .../internal/cache/ExpirationScheduler.java     |   106 +
 .../gemfire/internal/cache/ExpiryTask.java      |   540 +
 .../internal/cache/ExportDiskRegion.java        |    84 +
 .../gemfire/internal/cache/FilterProfile.java   |  2218 +++
 .../internal/cache/FilterRoutingInfo.java       |   519 +
 .../cache/FindDurableQueueProcessor.java        |   256 +
 .../internal/cache/FindRemoteTXMessage.java     |   281 +
 .../internal/cache/FindVersionTagOperation.java |   254 +
 .../cache/FixedPartitionAttributesImpl.java     |   156 +
 .../internal/cache/ForceReattemptException.java |   121 +
 .../cache/ForceableLinkedBlockingQueue.java     |   864 +
 .../FunctionStreamingOrderedReplyMessage.java   |    64 +
 .../cache/FunctionStreamingReplyMessage.java    |   145 +
 .../internal/cache/GatewayEventFilter.java      |    27 +
 .../internal/cache/GemFireCacheImpl.java        |  5467 ++++++
 .../internal/cache/GemfireCacheHelper.java      |    38 +
 .../gemfire/internal/cache/GridAdvisor.java     |   442 +
 .../gemfire/internal/cache/HARegion.java        |   618 +
 .../internal/cache/HDFSLRURegionMap.java        |   112 +
 .../gemfire/internal/cache/HDFSRegionMap.java   |    33 +
 .../internal/cache/HDFSRegionMapDelegate.java   |   541 +
 .../internal/cache/HDFSRegionMapImpl.java       |    75 +
 .../internal/cache/HasCachePerfStats.java       |    22 +
 .../internal/cache/IdentityArrayList.java       |   473 +
 .../gemfire/internal/cache/ImageState.java      |    89 +
 .../cache/InMemoryPersistentMemberView.java     |   136 +
 .../internal/cache/IncomingGatewayStatus.java   |    83 +
 .../internal/cache/InitialImageFlowControl.java |   253 +
 .../internal/cache/InitialImageOperation.java   |  4310 +++++
 .../gemfire/internal/cache/InlineKeyHelper.java |    71 +
 .../gemfire/internal/cache/InterestEvent.java   |    68 +
 .../gemfire/internal/cache/InterestFilter.java  |    34 +
 .../cache/InterestRegistrationEventImpl.java    |   152 +
 .../gemfire/internal/cache/InternalCache.java   |    52 +
 .../internal/cache/InternalCacheEvent.java      |    87 +
 .../internal/cache/InternalDataView.java        |   255 +
 .../internal/cache/InternalRegionArguments.java |   337 +
 .../internal/cache/InvalidateOperation.java     |   236 +
 .../InvalidatePartitionedRegionMessage.java     |   102 +
 .../cache/InvalidateRegionOperation.java        |   108 +
 .../cache/JtaAfterCompletionMessage.java        |   128 +
 .../cache/JtaBeforeCompletionMessage.java       |    82 +
 .../gemfire/internal/cache/KeyInfo.java         |   129 +
 .../internal/cache/KeyWithRegionContext.java    |    71 +
 .../gemfire/internal/cache/ListOfDeltas.java    |   101 +
 .../internal/cache/LoaderHelperFactory.java     |    40 +
 .../internal/cache/LoaderHelperImpl.java        |   169 +
 .../gemfire/internal/cache/LocalDataSet.java    |   750 +
 .../gemfire/internal/cache/LocalRegion.java     | 12975 +++++++++++++
 .../internal/cache/LocalRegionDataView.java     |   273 +
 .../cache/MemberFunctionStreamingMessage.java   |   416 +
 .../cache/MinimumSystemRequirements.java        |    92 +
 .../cache/NetSearchExpirationCalculator.java    |    49 +
 .../gemstone/gemfire/internal/cache/Node.java   |   187 +
 .../internal/cache/NonLocalRegionEntry.java     |   579 +
 .../cache/NonLocalRegionEntryWithStats.java     |    86 +
 .../internal/cache/OffHeapRegionEntry.java      |    42 +
 .../cache/OfflineCompactionDiskRegion.java      |   124 +
 .../gemstone/gemfire/internal/cache/OpType.java |    59 +
 .../gemstone/gemfire/internal/cache/Oplog.java  |  7969 ++++++++
 .../gemfire/internal/cache/OplogSet.java        |    34 +
 .../internal/cache/OrderedTombstoneMap.java     |   123 +
 .../gemfire/internal/cache/OverflowOplog.java   |  1613 ++
 .../internal/cache/OverflowOplogSet.java        |   328 +
 .../internal/cache/PRContainsValueFunction.java |    60 +
 .../internal/cache/PRHARedundancyProvider.java  |  2384 +++
 .../internal/cache/PRQueryProcessor.java        |   658 +
 .../internal/cache/PRSystemPropertyGetter.java  |    70 +
 .../internal/cache/PartitionAttributesImpl.java |   828 +
 .../internal/cache/PartitionRegionConfig.java   |   477 +
 .../cache/PartitionRegionConfigValidator.java   |   511 +
 .../internal/cache/PartitionedRegion.java       | 11398 +++++++++++
 .../PartitionedRegionBucketMgmtHelper.java      |    54 +
 .../cache/PartitionedRegionDataStore.java       |  3284 ++++
 .../cache/PartitionedRegionDataView.java        |   142 +
 .../cache/PartitionedRegionException.java       |    48 +
 .../internal/cache/PartitionedRegionHelper.java |  1132 ++
 .../cache/PartitionedRegionQueryEvaluator.java  |  1486 ++
 .../internal/cache/PartitionedRegionStats.java  |  1267 ++
 .../internal/cache/PartitionedRegionStatus.java |    86 +
 .../gemfire/internal/cache/PeerTXStateStub.java |   257 +
 .../internal/cache/PersistentOplogSet.java      |  1184 ++
 .../internal/cache/PlaceHolderDiskRegion.java   |   207 +
 .../gemfire/internal/cache/PoolFactoryImpl.java |   529 +
 .../gemfire/internal/cache/PoolManagerImpl.java |   336 +
 .../gemfire/internal/cache/PoolStats.java       |   319 +
 .../cache/PreferBytesCachedDeserializable.java  |   157 +
 .../internal/cache/PrimaryBucketException.java  |    49 +
 .../cache/ProfileExchangeProcessor.java         |    41 +
 .../internal/cache/ProxyBucketRegion.java       |   657 +
 .../gemfire/internal/cache/ProxyRegionMap.java  |   794 +
 .../cache/PutAllPartialResultException.java     |   229 +
 .../gemfire/internal/cache/QueuedOperation.java |   196 +
 .../internal/cache/RegionClearedException.java  |    62 +
 .../gemfire/internal/cache/RegionEntry.java     |   519 +
 .../internal/cache/RegionEntryContext.java      |    41 +
 .../internal/cache/RegionEntryFactory.java      |    50 +
 .../gemfire/internal/cache/RegionEventImpl.java |   352 +
 .../internal/cache/RegionEvictorTask.java       |   144 +
 .../internal/cache/RegionExpiryTask.java        |   162 +
 .../internal/cache/RegionFactoryImpl.java       |    50 +
 .../internal/cache/RegionIdleExpiryTask.java    |    73 +
 .../gemfire/internal/cache/RegionListener.java  |    46 +
 .../gemfire/internal/cache/RegionMap.java       |   404 +
 .../internal/cache/RegionMapFactory.java        |    76 +
 .../gemfire/internal/cache/RegionQueue.java     |   158 +
 .../internal/cache/RegionQueueException.java    |    49 +
 .../gemfire/internal/cache/RegionStatus.java    |    88 +
 .../internal/cache/RegionTTLExpiryTask.java     |    75 +
 .../internal/cache/ReleaseClearLockMessage.java |   113 +
 .../cache/ReliableDistributionData.java         |    43 +
 .../internal/cache/ReliableMessageQueue.java    |    66 +
 .../cache/ReliableMessageQueueFactory.java      |    43 +
 .../cache/ReliableMessageQueueFactoryImpl.java  |   230 +
 .../cache/RemoteContainsKeyValueMessage.java    |   342 +
 .../internal/cache/RemoteDestroyMessage.java    |   745 +
 .../internal/cache/RemoteFetchEntryMessage.java |   386 +
 .../cache/RemoteFetchVersionMessage.java        |   261 +
 .../internal/cache/RemoteGetMessage.java        |   462 +
 .../internal/cache/RemoteInvalidateMessage.java |   439 +
 .../cache/RemoteOperationException.java         |   119 +
 .../internal/cache/RemoteOperationMessage.java  |   656 +
 .../RemoteOperationMessageWithDirectReply.java  |    85 +
 .../internal/cache/RemotePutAllMessage.java     |   549 +
 .../internal/cache/RemotePutMessage.java        |  1236 ++
 .../internal/cache/RemoteRegionOperation.java   |   224 +
 .../internal/cache/RemoteRemoveAllMessage.java  |   531 +
 .../gemfire/internal/cache/RoleEventImpl.java   |    96 +
 .../cache/SearchLoadAndWriteProcessor.java      |  2802 +++
 .../internal/cache/SendQueueOperation.java      |   191 +
 .../internal/cache/SerializationHelper.java     |    24 +
 .../internal/cache/ServerPingMessage.java       |   136 +
 .../internal/cache/StateFlushOperation.java     |   783 +
 .../cache/StoreAllCachedDeserializable.java     |   159 +
 .../internal/cache/TXBucketRegionState.java     |    37 +
 .../gemfire/internal/cache/TXCommitMessage.java |  2478 +++
 .../gemfire/internal/cache/TXEntry.java         |   274 +
 .../gemfire/internal/cache/TXEntryState.java    |  2270 +++
 .../internal/cache/TXEntryStateFactory.java     |    38 +
 .../internal/cache/TXEntryUserAttrState.java    |    67 +
 .../gemfire/internal/cache/TXEvent.java         |   148 +
 .../internal/cache/TXFarSideCMTracker.java      |   360 +
 .../gemstone/gemfire/internal/cache/TXId.java   |   130 +
 .../gemfire/internal/cache/TXLockRequest.java   |   144 +
 .../gemfire/internal/cache/TXManagerImpl.java   |  1511 ++
 .../gemfire/internal/cache/TXMessage.java       |   215 +
 .../internal/cache/TXRegionLockRequestImpl.java |   209 +
 .../gemfire/internal/cache/TXRegionState.java   |   629 +
 .../internal/cache/TXRemoteCommitMessage.java   |   320 +
 .../internal/cache/TXRemoteRollbackMessage.java |    88 +
 .../internal/cache/TXReservationMgr.java        |   154 +
 .../gemfire/internal/cache/TXRmtEvent.java      |   243 +
 .../gemfire/internal/cache/TXState.java         |  1839 ++
 .../internal/cache/TXStateInterface.java        |   224 +
 .../gemfire/internal/cache/TXStateProxy.java    |    96 +
 .../internal/cache/TXStateProxyImpl.java        |  1036 +
 .../gemfire/internal/cache/TXStateStub.java     |   577 +
 .../cache/TXSynchronizationRunnable.java        |   160 +
 .../cache/TestHeapThresholdObserver.java        |    62 +
 .../cache/TimestampedEntryEventImpl.java        |    73 +
 .../gemstone/gemfire/internal/cache/Token.java  |   301 +
 .../internal/cache/TombstoneService.java        |  1007 +
 .../internal/cache/TransactionMessage.java      |    75 +
 .../gemfire/internal/cache/TxEntryFactory.java  |    35 +
 .../internal/cache/UnsharedImageState.java      |   293 +
 .../cache/UpdateAttributesProcessor.java        |   553 +
 .../cache/UpdateEntryVersionOperation.java      |   195 +
 .../gemfire/internal/cache/UpdateOperation.java |   629 +
 .../cache/UserSpecifiedDiskStoreAttributes.java |   191 +
 .../cache/UserSpecifiedRegionAttributes.java    |   624 +
 .../internal/cache/VMCachedDeserializable.java  |   263 +
 .../gemfire/internal/cache/VMLRURegionMap.java  |    65 +
 .../gemfire/internal/cache/VMRegionMap.java     |    39 +
 .../cache/VMStatsDiskLRURegionEntry.java        |    40 +
 .../cache/VMStatsDiskLRURegionEntryHeap.java    |    69 +
 .../VMStatsDiskLRURegionEntryHeapIntKey.java    |   345 +
 .../VMStatsDiskLRURegionEntryHeapLongKey.java   |   345 +
 .../VMStatsDiskLRURegionEntryHeapObjectKey.java |   338 +
 ...VMStatsDiskLRURegionEntryHeapStringKey1.java |   407 +
 ...VMStatsDiskLRURegionEntryHeapStringKey2.java |   448 +
 .../VMStatsDiskLRURegionEntryHeapUUIDKey.java   |   349 +
 .../cache/VMStatsDiskLRURegionEntryOffHeap.java |    69 +
 .../VMStatsDiskLRURegionEntryOffHeapIntKey.java |   394 +
 ...VMStatsDiskLRURegionEntryOffHeapLongKey.java |   394 +
 ...StatsDiskLRURegionEntryOffHeapObjectKey.java |   387 +
 ...tatsDiskLRURegionEntryOffHeapStringKey1.java |   456 +
 ...tatsDiskLRURegionEntryOffHeapStringKey2.java |   497 +
 ...VMStatsDiskLRURegionEntryOffHeapUUIDKey.java |   398 +
 .../internal/cache/VMStatsDiskRegionEntry.java  |    39 +
 .../cache/VMStatsDiskRegionEntryHeap.java       |    69 +
 .../cache/VMStatsDiskRegionEntryHeapIntKey.java |   248 +
 .../VMStatsDiskRegionEntryHeapLongKey.java      |   248 +
 .../VMStatsDiskRegionEntryHeapObjectKey.java    |   241 +
 .../VMStatsDiskRegionEntryHeapStringKey1.java   |   310 +
 .../VMStatsDiskRegionEntryHeapStringKey2.java   |   351 +
 .../VMStatsDiskRegionEntryHeapUUIDKey.java      |   252 +
 .../cache/VMStatsDiskRegionEntryOffHeap.java    |    69 +
 .../VMStatsDiskRegionEntryOffHeapIntKey.java    |   297 +
 .../VMStatsDiskRegionEntryOffHeapLongKey.java   |   297 +
 .../VMStatsDiskRegionEntryOffHeapObjectKey.java |   290 +
 ...VMStatsDiskRegionEntryOffHeapStringKey1.java |   359 +
 ...VMStatsDiskRegionEntryOffHeapStringKey2.java |   400 +
 .../VMStatsDiskRegionEntryOffHeapUUIDKey.java   |   301 +
 .../internal/cache/VMStatsLRURegionEntry.java   |    43 +
 .../cache/VMStatsLRURegionEntryHeap.java        |    69 +
 .../cache/VMStatsLRURegionEntryHeapIntKey.java  |   256 +
 .../cache/VMStatsLRURegionEntryHeapLongKey.java |   256 +
 .../VMStatsLRURegionEntryHeapObjectKey.java     |   249 +
 .../VMStatsLRURegionEntryHeapStringKey1.java    |   318 +
 .../VMStatsLRURegionEntryHeapStringKey2.java    |   359 +
 .../cache/VMStatsLRURegionEntryHeapUUIDKey.java |   260 +
 .../cache/VMStatsLRURegionEntryOffHeap.java     |    69 +
 .../VMStatsLRURegionEntryOffHeapIntKey.java     |   305 +
 .../VMStatsLRURegionEntryOffHeapLongKey.java    |   305 +
 .../VMStatsLRURegionEntryOffHeapObjectKey.java  |   298 +
 .../VMStatsLRURegionEntryOffHeapStringKey1.java |   367 +
 .../VMStatsLRURegionEntryOffHeapStringKey2.java |   408 +
 .../VMStatsLRURegionEntryOffHeapUUIDKey.java    |   309 +
 .../internal/cache/VMStatsRegionEntry.java      |    39 +
 .../internal/cache/VMStatsRegionEntryHeap.java  |    69 +
 .../cache/VMStatsRegionEntryHeapIntKey.java     |   175 +
 .../cache/VMStatsRegionEntryHeapLongKey.java    |   175 +
 .../cache/VMStatsRegionEntryHeapObjectKey.java  |   168 +
 .../cache/VMStatsRegionEntryHeapStringKey1.java |   237 +
 .../cache/VMStatsRegionEntryHeapStringKey2.java |   278 +
 .../cache/VMStatsRegionEntryHeapUUIDKey.java    |   179 +
 .../cache/VMStatsRegionEntryOffHeap.java        |    69 +
 .../cache/VMStatsRegionEntryOffHeapIntKey.java  |   224 +
 .../cache/VMStatsRegionEntryOffHeapLongKey.java |   224 +
 .../VMStatsRegionEntryOffHeapObjectKey.java     |   217 +
 .../VMStatsRegionEntryOffHeapStringKey1.java    |   286 +
 .../VMStatsRegionEntryOffHeapStringKey2.java    |   327 +
 .../cache/VMStatsRegionEntryOffHeapUUIDKey.java |   228 +
 .../cache/VMThinDiskLRURegionEntry.java         |    39 +
 .../cache/VMThinDiskLRURegionEntryHeap.java     |    69 +
 .../VMThinDiskLRURegionEntryHeapIntKey.java     |   280 +
 .../VMThinDiskLRURegionEntryHeapLongKey.java    |   280 +
 .../VMThinDiskLRURegionEntryHeapObjectKey.java  |   273 +
 .../VMThinDiskLRURegionEntryHeapStringKey1.java |   342 +
 .../VMThinDiskLRURegionEntryHeapStringKey2.java |   383 +
 .../VMThinDiskLRURegionEntryHeapUUIDKey.java    |   284 +
 .../cache/VMThinDiskLRURegionEntryOffHeap.java  |    69 +
 .../VMThinDiskLRURegionEntryOffHeapIntKey.java  |   329 +
 .../VMThinDiskLRURegionEntryOffHeapLongKey.java |   329 +
 ...MThinDiskLRURegionEntryOffHeapObjectKey.java |   322 +
 ...ThinDiskLRURegionEntryOffHeapStringKey1.java |   391 +
 ...ThinDiskLRURegionEntryOffHeapStringKey2.java |   432 +
 .../VMThinDiskLRURegionEntryOffHeapUUIDKey.java |   333 +
 .../internal/cache/VMThinDiskRegionEntry.java   |    41 +
 .../cache/VMThinDiskRegionEntryHeap.java        |    69 +
 .../cache/VMThinDiskRegionEntryHeapIntKey.java  |   182 +
 .../cache/VMThinDiskRegionEntryHeapLongKey.java |   182 +
 .../VMThinDiskRegionEntryHeapObjectKey.java     |   175 +
 .../VMThinDiskRegionEntryHeapStringKey1.java    |   244 +
 .../VMThinDiskRegionEntryHeapStringKey2.java    |   285 +
 .../cache/VMThinDiskRegionEntryHeapUUIDKey.java |   186 +
 .../cache/VMThinDiskRegionEntryOffHeap.java     |    69 +
 .../VMThinDiskRegionEntryOffHeapIntKey.java     |   231 +
 .../VMThinDiskRegionEntryOffHeapLongKey.java    |   231 +
 .../VMThinDiskRegionEntryOffHeapObjectKey.java  |   224 +
 .../VMThinDiskRegionEntryOffHeapStringKey1.java |   293 +
 .../VMThinDiskRegionEntryOffHeapStringKey2.java |   334 +
 .../VMThinDiskRegionEntryOffHeapUUIDKey.java    |   235 +
 .../internal/cache/VMThinLRURegionEntry.java    |    37 +
 .../cache/VMThinLRURegionEntryHeap.java         |    69 +
 .../cache/VMThinLRURegionEntryHeapIntKey.java   |   191 +
 .../cache/VMThinLRURegionEntryHeapLongKey.java  |   191 +
 .../VMThinLRURegionEntryHeapObjectKey.java      |   184 +
 .../VMThinLRURegionEntryHeapStringKey1.java     |   253 +
 .../VMThinLRURegionEntryHeapStringKey2.java     |   294 +
 .../cache/VMThinLRURegionEntryHeapUUIDKey.java  |   195 +
 .../cache/VMThinLRURegionEntryOffHeap.java      |    69 +
 .../VMThinLRURegionEntryOffHeapIntKey.java      |   240 +
 .../VMThinLRURegionEntryOffHeapLongKey.java     |   240 +
 .../VMThinLRURegionEntryOffHeapObjectKey.java   |   233 +
 .../VMThinLRURegionEntryOffHeapStringKey1.java  |   302 +
 .../VMThinLRURegionEntryOffHeapStringKey2.java  |   343 +
 .../VMThinLRURegionEntryOffHeapUUIDKey.java     |   244 +
 .../internal/cache/VMThinRegionEntry.java       |    35 +
 .../internal/cache/VMThinRegionEntryHeap.java   |    71 +
 .../cache/VMThinRegionEntryHeapIntKey.java      |   109 +
 .../cache/VMThinRegionEntryHeapLongKey.java     |   109 +
 .../cache/VMThinRegionEntryHeapObjectKey.java   |   102 +
 .../cache/VMThinRegionEntryHeapStringKey1.java  |   171 +
 .../cache/VMThinRegionEntryHeapStringKey2.java  |   212 +
 .../cache/VMThinRegionEntryHeapUUIDKey.java     |   113 +
 .../cache/VMThinRegionEntryOffHeap.java         |    71 +
 .../cache/VMThinRegionEntryOffHeapIntKey.java   |   158 +
 .../cache/VMThinRegionEntryOffHeapLongKey.java  |   158 +
 .../VMThinRegionEntryOffHeapObjectKey.java      |   151 +
 .../VMThinRegionEntryOffHeapStringKey1.java     |   220 +
 .../VMThinRegionEntryOffHeapStringKey2.java     |   261 +
 .../cache/VMThinRegionEntryOffHeapUUIDKey.java  |   162 +
 .../internal/cache/ValidatingDiskRegion.java    |   519 +
 .../internal/cache/ValueByteWrapper.java        |    70 +
 .../internal/cache/VersionTimestamp.java        |    47 +
 .../cache/VersionedStatsDiskLRURegionEntry.java |    33 +
 .../VersionedStatsDiskLRURegionEntryHeap.java   |    70 +
 ...sionedStatsDiskLRURegionEntryHeapIntKey.java |   430 +
 ...ionedStatsDiskLRURegionEntryHeapLongKey.java |   430 +
 ...nedStatsDiskLRURegionEntryHeapObjectKey.java |   423 +
 ...edStatsDiskLRURegionEntryHeapStringKey1.java |   492 +
 ...edStatsDiskLRURegionEntryHeapStringKey2.java |   533 +
 ...ionedStatsDiskLRURegionEntryHeapUUIDKey.java |   434 +
 ...VersionedStatsDiskLRURegionEntryOffHeap.java |    70 +
 ...nedStatsDiskLRURegionEntryOffHeapIntKey.java |   479 +
 ...edStatsDiskLRURegionEntryOffHeapLongKey.java |   479 +
 ...StatsDiskLRURegionEntryOffHeapObjectKey.java |   472 +
 ...tatsDiskLRURegionEntryOffHeapStringKey1.java |   541 +
 ...tatsDiskLRURegionEntryOffHeapStringKey2.java |   582 +
 ...edStatsDiskLRURegionEntryOffHeapUUIDKey.java |   483 +
 .../cache/VersionedStatsDiskRegionEntry.java    |    33 +
 .../VersionedStatsDiskRegionEntryHeap.java      |    70 +
 ...VersionedStatsDiskRegionEntryHeapIntKey.java |   333 +
 ...ersionedStatsDiskRegionEntryHeapLongKey.java |   333 +
 ...sionedStatsDiskRegionEntryHeapObjectKey.java |   326 +
 ...ionedStatsDiskRegionEntryHeapStringKey1.java |   395 +
 ...ionedStatsDiskRegionEntryHeapStringKey2.java |   436 +
 ...ersionedStatsDiskRegionEntryHeapUUIDKey.java |   337 +
 .../VersionedStatsDiskRegionEntryOffHeap.java   |    70 +
 ...sionedStatsDiskRegionEntryOffHeapIntKey.java |   382 +
 ...ionedStatsDiskRegionEntryOffHeapLongKey.java |   382 +
 ...nedStatsDiskRegionEntryOffHeapObjectKey.java |   375 +
 ...edStatsDiskRegionEntryOffHeapStringKey1.java |   444 +
 ...edStatsDiskRegionEntryOffHeapStringKey2.java |   485 +
 ...ionedStatsDiskRegionEntryOffHeapUUIDKey.java |   386 +
 .../cache/VersionedStatsLRURegionEntry.java     |    34 +
 .../cache/VersionedStatsLRURegionEntryHeap.java |    70 +
 .../VersionedStatsLRURegionEntryHeapIntKey.java |   341 +
 ...VersionedStatsLRURegionEntryHeapLongKey.java |   341 +
 ...rsionedStatsLRURegionEntryHeapObjectKey.java |   334 +
 ...sionedStatsLRURegionEntryHeapStringKey1.java |   403 +
 ...sionedStatsLRURegionEntryHeapStringKey2.java |   444 +
 ...VersionedStatsLRURegionEntryHeapUUIDKey.java |   345 +
 .../VersionedStatsLRURegionEntryOffHeap.java    |    70 +
 ...rsionedStatsLRURegionEntryOffHeapIntKey.java |   390 +
 ...sionedStatsLRURegionEntryOffHeapLongKey.java |   390 +
 ...onedStatsLRURegionEntryOffHeapObjectKey.java |   383 +
 ...nedStatsLRURegionEntryOffHeapStringKey1.java |   452 +
 ...nedStatsLRURegionEntryOffHeapStringKey2.java |   493 +
 ...sionedStatsLRURegionEntryOffHeapUUIDKey.java |   394 +
 .../cache/VersionedStatsRegionEntry.java        |    34 +
 .../cache/VersionedStatsRegionEntryHeap.java    |    69 +
 .../VersionedStatsRegionEntryHeapIntKey.java    |   260 +
 .../VersionedStatsRegionEntryHeapLongKey.java   |   260 +
 .../VersionedStatsRegionEntryHeapObjectKey.java |   253 +
 ...VersionedStatsRegionEntryHeapStringKey1.java |   322 +
 ...VersionedStatsRegionEntryHeapStringKey2.java |   363 +
 .../VersionedStatsRegionEntryHeapUUIDKey.java   |   264 +
 .../cache/VersionedStatsRegionEntryOffHeap.java |    69 +
 .../VersionedStatsRegionEntryOffHeapIntKey.java |   309 +
 ...VersionedStatsRegionEntryOffHeapLongKey.java |   309 +
 ...rsionedStatsRegionEntryOffHeapObjectKey.java |   302 +
 ...sionedStatsRegionEntryOffHeapStringKey1.java |   371 +
 ...sionedStatsRegionEntryOffHeapStringKey2.java |   412 +
 ...VersionedStatsRegionEntryOffHeapUUIDKey.java |   313 +
 .../cache/VersionedThinDiskLRURegionEntry.java  |    33 +
 .../VersionedThinDiskLRURegionEntryHeap.java    |    70 +
 ...rsionedThinDiskLRURegionEntryHeapIntKey.java |   365 +
 ...sionedThinDiskLRURegionEntryHeapLongKey.java |   365 +
 ...onedThinDiskLRURegionEntryHeapObjectKey.java |   358 +
 ...nedThinDiskLRURegionEntryHeapStringKey1.java |   427 +
 ...nedThinDiskLRURegionEntryHeapStringKey2.java |   468 +
 ...sionedThinDiskLRURegionEntryHeapUUIDKey.java |   369 +
 .../VersionedThinDiskLRURegionEntryOffHeap.java |    70 +
 ...onedThinDiskLRURegionEntryOffHeapIntKey.java |   414 +
 ...nedThinDiskLRURegionEntryOffHeapLongKey.java |   414 +
 ...dThinDiskLRURegionEntryOffHeapObjectKey.java |   407 +
 ...ThinDiskLRURegionEntryOffHeapStringKey1.java |   476 +
 ...ThinDiskLRURegionEntryOffHeapStringKey2.java |   517 +
 ...nedThinDiskLRURegionEntryOffHeapUUIDKey.java |   418 +
 .../cache/VersionedThinDiskRegionEntry.java     |    33 +
 .../cache/VersionedThinDiskRegionEntryHeap.java |    70 +
 .../VersionedThinDiskRegionEntryHeapIntKey.java |   267 +
 ...VersionedThinDiskRegionEntryHeapLongKey.java |   267 +
 ...rsionedThinDiskRegionEntryHeapObjectKey.java |   260 +
 ...sionedThinDiskRegionEntryHeapStringKey1.java |   329 +
 ...sionedThinDiskRegionEntryHeapStringKey2.java |   370 +
 ...VersionedThinDiskRegionEntryHeapUUIDKey.java |   271 +
 .../VersionedThinDiskRegionEntryOffHeap.java    |    70 +
 ...rsionedThinDiskRegionEntryOffHeapIntKey.java |   316 +
 ...sionedThinDiskRegionEntryOffHeapLongKey.java |   316 +
 ...onedThinDiskRegionEntryOffHeapObjectKey.java |   309 +
 ...nedThinDiskRegionEntryOffHeapStringKey1.java |   378 +
 ...nedThinDiskRegionEntryOffHeapStringKey2.java |   419 +
 ...sionedThinDiskRegionEntryOffHeapUUIDKey.java |   320 +
 .../cache/VersionedThinLRURegionEntry.java      |    38 +
 .../cache/VersionedThinLRURegionEntryHeap.java  |    69 +
 .../VersionedThinLRURegionEntryHeapIntKey.java  |   276 +
 .../VersionedThinLRURegionEntryHeapLongKey.java |   276 +
 ...ersionedThinLRURegionEntryHeapObjectKey.java |   269 +
 ...rsionedThinLRURegionEntryHeapStringKey1.java |   338 +
 ...rsionedThinLRURegionEntryHeapStringKey2.java |   379 +
 .../VersionedThinLRURegionEntryHeapUUIDKey.java |   280 +
 .../VersionedThinLRURegionEntryOffHeap.java     |    69 +
 ...ersionedThinLRURegionEntryOffHeapIntKey.java |   325 +
 ...rsionedThinLRURegionEntryOffHeapLongKey.java |   325 +
 ...ionedThinLRURegionEntryOffHeapObjectKey.java |   318 +
 ...onedThinLRURegionEntryOffHeapStringKey1.java |   387 +
 ...onedThinLRURegionEntryOffHeapStringKey2.java |   428 +
 ...rsionedThinLRURegionEntryOffHeapUUIDKey.java |   329 +
 .../cache/VersionedThinRegionEntry.java         |    33 +
 .../cache/VersionedThinRegionEntryHeap.java     |    69 +
 .../VersionedThinRegionEntryHeapIntKey.java     |   194 +
 .../VersionedThinRegionEntryHeapLongKey.java    |   194 +
 .../VersionedThinRegionEntryHeapObjectKey.java  |   187 +
 .../VersionedThinRegionEntryHeapStringKey1.java |   256 +
 .../VersionedThinRegionEntryHeapStringKey2.java |   297 +
 .../VersionedThinRegionEntryHeapUUIDKey.java    |   198 +
 .../cache/VersionedThinRegionEntryOffHeap.java  |    69 +
 .../VersionedThinRegionEntryOffHeapIntKey.java  |   243 +
 .../VersionedThinRegionEntryOffHeapLongKey.java |   243 +
 ...ersionedThinRegionEntryOffHeapObjectKey.java |   236 +
 ...rsionedThinRegionEntryOffHeapStringKey1.java |   305 +
 ...rsionedThinRegionEntryOffHeapStringKey2.java |   346 +
 .../VersionedThinRegionEntryOffHeapUUIDKey.java |   247 +
 .../internal/cache/WrappedCallbackArgument.java |   105 +
 .../cache/WrappedRegionMembershipListener.java  |   200 +
 .../CompressedCachedDeserializable.java         |   197 +
 .../SnappyCompressedCachedDeserializable.java   |    83 +
 .../internal/cache/control/FilterByPath.java    |    66 +
 .../cache/control/HeapMemoryMonitor.java        |   881 +
 .../cache/control/InternalResourceManager.java  |   620 +
 .../internal/cache/control/MemoryEvent.java     |    93 +
 .../cache/control/MemoryThresholds.java         |   282 +
 .../cache/control/OffHeapMemoryMonitor.java     |   562 +
 .../control/PartitionRebalanceDetailsImpl.java  |   159 +
 .../cache/control/RebalanceOperationImpl.java   |   263 +
 .../cache/control/RebalanceResultsImpl.java     |   104 +
 .../internal/cache/control/RegionFilter.java    |    27 +
 .../internal/cache/control/ResourceAdvisor.java |   475 +
 .../internal/cache/control/ResourceEvent.java   |    33 +
 .../cache/control/ResourceListener.java         |    33 +
 .../cache/control/ResourceManagerStats.java     |   607 +
 .../internal/cache/control/ResourceMonitor.java |    54 +
 .../gemfire/internal/cache/delta/Delta.java     |    57 +
 .../cache/doc-files/BucketAdvisor-state.png     |   Bin 0 -> 39148 bytes
 .../internal/cache/doc-files/eventmatrix.xls    |   Bin 0 -> 24576 bytes
 .../cache/doc-files/extensible-hashing.fig      |   159 +
 .../cache/doc-files/extensible-hashing.gif      |   Bin 0 -> 6605 bytes
 .../cache/doc-files/jcache-get-flow.fig         |   349 +
 .../cache/doc-files/jcache-get-flow.pdf         |   Bin 0 -> 7519 bytes
 .../cache/doc-files/jcache-put-flow.fig         |   359 +
 .../cache/doc-files/jcache-put-flow.pdf         |   Bin 0 -> 7667 bytes
 .../doc-files/jcache-update-message-flow.fig    |   334 +
 .../doc-files/jcache-update-message-flow.pdf    |   Bin 0 -> 5937 bytes
 .../cache/doc-files/partitioned-regions.fig     |   255 +
 .../cache/doc-files/partitioned-regions.gif     |   Bin 0 -> 9273 bytes
 .../internal/cache/doc-files/properties.html    |  3937 ++++
 .../cache/doc-files/region-implementation.fig   |   262 +
 .../cache/execute/AbstractExecution.java        |   635 +
 .../cache/execute/BucketMovedException.java     |    57 +
 .../cache/execute/DefaultResultCollector.java   |   108 +
 .../DistributedRegionFunctionExecutor.java      |   444 +
 .../DistributedRegionFunctionResultSender.java  |   263 +
 .../DistributedRegionFunctionResultWaiter.java  |    60 +
 .../cache/execute/FunctionContextImpl.java      |   107 +
 .../execute/FunctionExecutionNodePruner.java    |   260 +
 .../cache/execute/FunctionRemoteContext.java    |   131 +
 .../cache/execute/FunctionServiceStats.java     |   440 +
 .../internal/cache/execute/FunctionStats.java   |   536 +
 .../FunctionStreamingResultCollector.java       |   636 +
 .../cache/execute/InternalExecution.java        |   112 +
 .../execute/InternalFunctionException.java      |    78 +
 ...ternalFunctionInvocationTargetException.java |    96 +
 .../cache/execute/InternalFunctionService.java  |   199 +
 .../execute/InternalRegionFunctionContext.java  |    84 +
 .../cache/execute/InternalResultSender.java     |    35 +
 .../cache/execute/LocalResultCollector.java     |    43 +
 .../cache/execute/LocalResultCollectorImpl.java |   212 +
 .../cache/execute/MemberFunctionExecutor.java   |   283 +
 .../execute/MemberFunctionResultSender.java     |   278 +
 .../execute/MemberFunctionResultWaiter.java     |    51 +
 .../cache/execute/MemberMappedArgument.java     |    74 +
 .../execute/MultiRegionFunctionContext.java     |    50 +
 .../execute/MultiRegionFunctionContextImpl.java |    56 +
 .../execute/MultiRegionFunctionExecutor.java    |   416 +
 .../MultiRegionFunctionResultWaiter.java        |    61 +
 .../internal/cache/execute/NoResult.java        |    79 +
 .../PartitionedRegionFunctionExecutor.java      |   378 +
 .../PartitionedRegionFunctionResultSender.java  |   340 +
 .../PartitionedRegionFunctionResultWaiter.java  |   125 +
 .../execute/RegionFunctionContextImpl.java      |   160 +
 .../cache/execute/ServerFunctionExecutor.java   |   428 +
 .../execute/ServerRegionFunctionExecutor.java   |   501 +
 .../ServerToClientFunctionResultSender.java     |   319 +
 .../ServerToClientFunctionResultSender65.java   |   289 +
 .../execute/StreamingFunctionOperation.java     |   127 +
 .../cache/execute/util/CommitFunction.java      |   142 +
 .../util/FindRestEnabledServersFunction.java    |    83 +
 .../execute/util/NestedTransactionFunction.java |   117 +
 .../cache/execute/util/RollbackFunction.java    |   137 +
 .../internal/cache/extension/Extensible.java    |    43 +
 .../internal/cache/extension/Extension.java     |    53 +
 .../cache/extension/ExtensionPoint.java         |    65 +
 .../cache/extension/SimpleExtensionPoint.java   |    85 +
 .../internal/cache/ha/HAContainerMap.java       |   203 +
 .../internal/cache/ha/HAContainerRegion.java    |   170 +
 .../internal/cache/ha/HAContainerWrapper.java   |    47 +
 .../internal/cache/ha/HARegionQueue.java        |  4226 ++++
 .../cache/ha/HARegionQueueAttributes.java       |   109 +
 .../internal/cache/ha/HARegionQueueStats.java   |   411 +
 .../internal/cache/ha/QueueRemovalMessage.java  |   240 +
 .../internal/cache/ha/ThreadIdentifier.java     |   330 +
 .../cache/locks/TXLessorDepartureHandler.java   |   102 +
 .../internal/cache/locks/TXLockBatch.java       |   148 +
 .../gemfire/internal/cache/locks/TXLockId.java  |    35 +
 .../internal/cache/locks/TXLockIdImpl.java      |   140 +
 .../internal/cache/locks/TXLockService.java     |   161 +
 .../internal/cache/locks/TXLockServiceImpl.java |   278 +
 .../internal/cache/locks/TXLockToken.java       |    95 +
 .../locks/TXLockUpdateParticipantsMessage.java  |   186 +
 .../locks/TXOriginatorRecoveryProcessor.java    |   312 +
 .../locks/TXRecoverGrantorMessageProcessor.java |   157 +
 .../cache/locks/TXRegionLockRequest.java        |    39 +
 .../gemfire/internal/cache/lru/EnableLRU.java   |   122 +
 .../gemfire/internal/cache/lru/HeapEvictor.java |   492 +
 .../cache/lru/HeapLRUCapacityController.java    |   335 +
 .../internal/cache/lru/HeapLRUStatistics.java   |    68 +
 .../internal/cache/lru/LRUAlgorithm.java        |   352 +
 .../cache/lru/LRUCapacityController.java        |   356 +
 .../internal/cache/lru/LRUClockNode.java        |    45 +
 .../gemfire/internal/cache/lru/LRUEntry.java    |    32 +
 .../internal/cache/lru/LRUMapCallbacks.java     |    61 +
 .../internal/cache/lru/LRUStatistics.java       |   210 +
 .../cache/lru/MemLRUCapacityController.java     |   545 +
 .../internal/cache/lru/NewLIFOClockHand.java    |    98 +
 .../internal/cache/lru/NewLRUClockHand.java     |   468 +
 .../internal/cache/lru/OffHeapEvictor.java      |    97 +
 .../gemfire/internal/cache/lru/Sizeable.java    |    63 +
 .../operations/ContainsKeyOperationContext.java |    52 +
 .../gemfire/internal/cache/package.html         |   241 +
 .../AllBucketProfilesUpdateMessage.java         |   170 +
 .../partitioned/BecomePrimaryBucketMessage.java |   332 +
 .../internal/cache/partitioned/Bucket.java      |    80 +
 .../cache/partitioned/BucketBackupMessage.java  |   137 +
 .../cache/partitioned/BucketCountLoadProbe.java |    75 +
 .../partitioned/BucketProfileUpdateMessage.java |   192 +
 .../cache/partitioned/BucketSizeMessage.java    |   286 +
 .../partitioned/ContainsKeyValueMessage.java    |   348 +
 .../cache/partitioned/CreateBucketMessage.java  |   371 +
 .../partitioned/CreateMissingBucketsTask.java   |    70 +
 .../partitioned/DeposePrimaryBucketMessage.java |   285 +
 .../cache/partitioned/DestroyMessage.java       |   621 +
 .../DestroyRegionOnDataStoreMessage.java        |   118 +
 .../partitioned/DumpAllPRConfigMessage.java     |    77 +
 .../cache/partitioned/DumpB2NRegion.java        |   343 +
 .../cache/partitioned/DumpBucketsMessage.java   |   111 +
 .../partitioned/EndBucketCreationMessage.java   |   149 +
 .../partitioned/FetchBulkEntriesMessage.java    |   670 +
 .../cache/partitioned/FetchEntriesMessage.java  |   659 +
 .../cache/partitioned/FetchEntryMessage.java    |   431 +
 .../cache/partitioned/FetchKeysMessage.java     |   574 +
 .../FetchPartitionDetailsMessage.java           |   397 +
 .../cache/partitioned/FlushMessage.java         |   154 +
 .../internal/cache/partitioned/GetMessage.java  |   669 +
 .../partitioned/IdentityRequestMessage.java     |   342 +
 .../partitioned/IdentityUpdateMessage.java      |   167 +
 .../cache/partitioned/IndexCreationMsg.java     |   687 +
 .../cache/partitioned/InterestEventMessage.java |   284 +
 .../cache/partitioned/InternalPRInfo.java       |    44 +
 .../partitioned/InternalPartitionDetails.java   |    45 +
 .../cache/partitioned/InvalidateMessage.java    |   409 +
 .../internal/cache/partitioned/LoadProbe.java   |    33 +
 .../internal/cache/partitioned/LockObject.java  |    42 +
 .../partitioned/ManageBackupBucketMessage.java  |   437 +
 .../cache/partitioned/ManageBucketMessage.java  |   419 +
 .../cache/partitioned/MoveBucketMessage.java    |   324 +
 .../cache/partitioned/OfflineMemberDetails.java |    48 +
 .../partitioned/OfflineMemberDetailsImpl.java   |    79 +
 .../cache/partitioned/PREntriesIterator.java    |    44 +
 .../PRFunctionStreamingResultCollector.java     |   436 +
 .../internal/cache/partitioned/PRLoad.java      |   154 +
 .../PRLocallyDestroyedException.java            |    40 +
 .../cache/partitioned/PRSanityCheckMessage.java |   164 +
 .../cache/partitioned/PRTombstoneMessage.java   |   182 +
 .../PRUpdateEntryVersionMessage.java            |   295 +
 .../partitioned/PartitionMemberInfoImpl.java    |   167 +
 .../cache/partitioned/PartitionMessage.java     |   849 +
 .../PartitionMessageWithDirectReply.java        |   141 +
 .../partitioned/PartitionRegionInfoImpl.java    |   139 +
 ...rtitionedRegionFunctionStreamingMessage.java |   205 +
 .../partitioned/PartitionedRegionObserver.java  |    44 +
 .../PartitionedRegionObserverAdapter.java       |    47 +
 .../PartitionedRegionObserverHolder.java        |    63 +
 .../PartitionedRegionRebalanceOp.java           |   913 +
 .../partitioned/PrimaryRequestMessage.java      |   238 +
 .../cache/partitioned/PutAllPRMessage.java      |   912 +
 .../internal/cache/partitioned/PutMessage.java  |  1380 ++
 .../cache/partitioned/QueryMessage.java         |   326 +
 .../cache/partitioned/RecoveryRunnable.java     |    86 +
 .../RedundancyAlreadyMetException.java          |    42 +
 .../cache/partitioned/RedundancyLogger.java     |   395 +
 .../cache/partitioned/RegionAdvisor.java        |  1965 ++
 .../partitioned/RemoteFetchKeysMessage.java     |   489 +
 .../cache/partitioned/RemoteSizeMessage.java    |   363 +
 .../cache/partitioned/RemoveAllPRMessage.java   |   823 +
 .../cache/partitioned/RemoveBucketMessage.java  |   323 +
 .../cache/partitioned/RemoveIndexesMessage.java |   545 +
 .../internal/cache/partitioned/SizeMessage.java |   379 +
 .../cache/partitioned/SizedBasedLoadProbe.java  |    83 +
 .../StreamingPartitionOperation.java            |   471 +
 .../partitioned/rebalance/BucketOperator.java   |   101 +
 .../rebalance/CompositeDirector.java            |   127 +
 .../rebalance/ExplicitMoveDirector.java         |    99 +
 .../partitioned/rebalance/FPRDirector.java      |    79 +
 .../partitioned/rebalance/MoveBuckets.java      |    63 +
 .../partitioned/rebalance/MovePrimaries.java    |    63 +
 .../partitioned/rebalance/MovePrimariesFPR.java |   105 +
 .../rebalance/ParallelBucketOperator.java       |   167 +
 .../rebalance/PartitionedRegionLoadModel.java   |  1640 ++
 .../rebalance/PercentageMoveDirector.java       |   165 +
 .../rebalance/RebalanceDirector.java            |    79 +
 .../rebalance/RebalanceDirectorAdapter.java     |    39 +
 .../rebalance/RemoveOverRedundancy.java         |    82 +
 .../rebalance/SatisfyRedundancy.java            |    92 +
 .../rebalance/SatisfyRedundancyFPR.java         |    90 +
 .../rebalance/SimulatedBucketOperator.java      |    55 +
 .../cache/persistence/BackupInspector.java      |   345 +
 .../cache/persistence/BackupManager.java        |   377 +
 .../cache/persistence/BytesAndBits.java         |    51 +
 .../cache/persistence/CanonicalIdHolder.java    |   101 +
 .../CreatePersistentRegionProcessor.java        |    58 +
 .../cache/persistence/DiskExceptionHandler.java |    38 +
 .../persistence/DiskInitFileInterpreter.java    |   148 +
 .../cache/persistence/DiskInitFileParser.java   |   652 +
 .../cache/persistence/DiskRecoveryStore.java    |    64 +
 .../cache/persistence/DiskRegionView.java       |   109 +
 .../cache/persistence/DiskStoreFilter.java      |    57 +
 .../internal/cache/persistence/DiskStoreID.java |   167 +
 .../persistence/MembershipFlushRequest.java     |   141 +
 .../persistence/MembershipViewRequest.java      |   254 +
 .../internal/cache/persistence/OplogType.java   |    32 +
 .../cache/persistence/PRPersistentConfig.java   |    74 +
 .../cache/persistence/PersistenceAdvisor.java   |   190 +
 .../persistence/PersistenceAdvisorImpl.java     |  1300 ++
 .../persistence/PersistenceObserverHolder.java  |   102 +
 .../cache/persistence/PersistentMemberID.java   |   171 +
 .../persistence/PersistentMemberManager.java    |   270 +
 .../persistence/PersistentMemberPattern.java    |   229 +
 .../persistence/PersistentMemberState.java      |    41 +
 .../cache/persistence/PersistentMemberView.java |   150 +
 .../persistence/PersistentMembershipView.java   |   112 +
 .../persistence/PersistentStateListener.java    |    38 +
 .../PersistentStateQueryMessage.java            |   308 +
 .../PersistentStateQueryResults.java            |    57 +
 .../PrepareNewPersistentMemberMessage.java      |   168 +
 .../RemovePersistentMemberMessage.java          |   182 +
 .../cache/persistence/RestoreScript.java        |   223 +
 .../persistence/UninterruptibleFileChannel.java |    29 +
 .../UninterruptibleRandomAccessFile.java        |   251 +
 .../persistence/query/CloseableIterator.java    |    33 +
 .../persistence/query/IdentityExtractor.java    |    26 +
 .../cache/persistence/query/IndexMap.java       |   187 +
 .../cache/persistence/query/ResultBag.java      |    60 +
 .../cache/persistence/query/ResultList.java     |    58 +
 .../cache/persistence/query/ResultMap.java      |   124 +
 .../cache/persistence/query/ResultSet.java      |    60 +
 .../persistence/query/SortKeyExtractor.java     |    21 +
 .../query/TemporaryResultSetFactory.java        |    79 +
 .../persistence/query/mock/ByteComparator.java  |    86 +
 .../mock/CachedDeserializableComparator.java    |    54 +
 .../persistence/query/mock/IndexMapImpl.java    |   278 +
 .../persistence/query/mock/ItrAdapter.java      |    62 +
 .../query/mock/NaturalComparator.java           |    33 +
 .../cache/persistence/query/mock/Pair.java      |    72 +
 .../persistence/query/mock/PairComparator.java  |    46 +
 .../persistence/query/mock/ResultListImpl.java  |    55 +
 .../query/mock/ReverseComparator.java           |    40 +
 .../query/mock/SortedResultBagImpl.java         |    64 +
 .../query/mock/SortedResultMapImpl.java         |   184 +
 .../query/mock/SortedResultSetImpl.java         |    52 +
 .../persistence/soplog/ByteComparator.java      |    56 +
 .../persistence/soplog/CursorIterator.java      |    82 +
 .../soplog/DelegatingSerializedComparator.java  |    38 +
 .../soplog/HFileStoreStatistics.java            |   205 +
 .../persistence/soplog/KeyValueIterator.java    |    43 +
 .../soplog/SortedOplogStatistics.java           |   505 +
 .../cache/persistence/soplog/SortedReader.java  |   256 +
 .../persistence/soplog/TrackedReference.java    |   154 +
 .../region/entry/RegionEntryFactoryBuilder.java |   103 +
 .../snapshot/CacheSnapshotServiceImpl.java      |   130 +
 .../internal/cache/snapshot/ClientExporter.java |   229 +
 .../cache/snapshot/ExportedRegistry.java        |   104 +
 .../internal/cache/snapshot/FlowController.java |   350 +
 .../internal/cache/snapshot/GFSnapshot.java     |   417 +
 .../internal/cache/snapshot/LocalExporter.java  |    58 +
 .../snapshot/RegionSnapshotServiceImpl.java     |   565 +
 .../cache/snapshot/SnapshotFileMapper.java      |    93 +
 .../cache/snapshot/SnapshotOptionsImpl.java     |   124 +
 .../internal/cache/snapshot/SnapshotPacket.java |   270 +
 .../cache/snapshot/WindowedExporter.java        |   401 +
 .../gemfire/internal/cache/tier/Acceptor.java   |   115 +
 .../internal/cache/tier/BatchException.java     |    72 +
 .../internal/cache/tier/CachedRegionHelper.java |   109 +
 .../internal/cache/tier/ClientHandShake.java    |    46 +
 .../gemfire/internal/cache/tier/Command.java    |    36 +
 .../internal/cache/tier/ConnectionProxy.java    |    35 +
 .../internal/cache/tier/InterestType.java       |    64 +
 .../cache/tier/InternalClientMembership.java    |   626 +
 .../internal/cache/tier/MessageType.java        |   569 +
 .../gemfire/internal/cache/tier/package.html    |    23 +
 .../cache/tier/sockets/AcceptorImpl.java        |  1872 ++
 .../cache/tier/sockets/BaseCommand.java         |  1611 ++
 .../cache/tier/sockets/BaseCommandQuery.java    |   578 +
 .../cache/tier/sockets/CacheClientNotifier.java |  2743 +++
 .../tier/sockets/CacheClientNotifierStats.java  |   295 +
 .../cache/tier/sockets/CacheClientProxy.java    |  3116 +++
 .../tier/sockets/CacheClientProxyStats.java     |   405 +
 .../cache/tier/sockets/CacheClientUpdater.java  |  2007 ++
 .../cache/tier/sockets/CacheServerHelper.java   |   193 +
 .../cache/tier/sockets/CacheServerStats.java    |  1148 ++
 .../cache/tier/sockets/ChunkedMessage.java      |   376 +
 .../tier/sockets/ClientBlacklistProcessor.java  |   174 +
 .../sockets/ClientDataSerializerMessage.java    |   256 +
 .../cache/tier/sockets/ClientHealthMonitor.java |   972 +
 .../tier/sockets/ClientInstantiatorMessage.java |   230 +
 .../tier/sockets/ClientInterestMessageImpl.java |   274 +
 .../tier/sockets/ClientMarkerMessageImpl.java   |   127 +
 .../cache/tier/sockets/ClientMessage.java       |    46 +
 .../tier/sockets/ClientPingMessageImpl.java     |   111 +
 .../tier/sockets/ClientProxyMembershipID.java   |   623 +
 .../tier/sockets/ClientTombstoneMessage.java    |   188 +
 .../cache/tier/sockets/ClientUpdateMessage.java |   188 +
 .../tier/sockets/ClientUpdateMessageImpl.java   |  1725 ++
 .../cache/tier/sockets/ClientUserAuths.java     |   201 +
 .../cache/tier/sockets/CommandInitializer.java  |   342 +
 .../cache/tier/sockets/ConnectionListener.java  |    55 +
 .../tier/sockets/ConnectionListenerAdapter.java |    38 +
 .../cache/tier/sockets/HAEventWrapper.java      |   435 +
 .../internal/cache/tier/sockets/HandShake.java  |  1934 ++
 .../tier/sockets/InterestResultPolicyImpl.java  |    59 +
 .../internal/cache/tier/sockets/Message.java    |  1116 ++
 .../cache/tier/sockets/MessageStats.java        |    29 +
 .../tier/sockets/MessageTooLargeException.java  |    29 +
 .../cache/tier/sockets/ObjectPartList.java      |   273 +
 .../cache/tier/sockets/ObjectPartList651.java   |   166 +
 .../internal/cache/tier/sockets/Part.java       |   452 +
 .../RemoveClientFromBlacklistMessage.java       |   114 +
 .../tier/sockets/SerializedObjectPartList.java  |   132 +
 .../cache/tier/sockets/ServerConnection.java    |  2077 ++
 .../tier/sockets/ServerHandShakeProcessor.java  |   464 +
 .../cache/tier/sockets/ServerQueueStatus.java   |   132 +
 .../tier/sockets/ServerResponseMatrix.java      |   141 +
 .../tier/sockets/UnregisterAllInterest.java     |    50 +
 .../cache/tier/sockets/UserAuthAttributes.java  |    81 +
 .../cache/tier/sockets/VersionedObjectList.java |   753 +
 .../cache/tier/sockets/command/AddPdxEnum.java  |    73 +
 .../cache/tier/sockets/command/AddPdxType.java  |    78 +
 .../cache/tier/sockets/command/ClearRegion.java |   150 +
 .../cache/tier/sockets/command/ClientReady.java |    76 +
 .../tier/sockets/command/CloseConnection.java   |    77 +
 .../tier/sockets/command/CommitCommand.java     |   142 +
 .../cache/tier/sockets/command/ContainsKey.java |   145 +
 .../tier/sockets/command/ContainsKey66.java     |   162 +
 .../tier/sockets/command/CreateRegion.java      |   137 +
 .../cache/tier/sockets/command/Default.java     |    52 +
 .../cache/tier/sockets/command/Destroy.java     |   219 +
 .../cache/tier/sockets/command/Destroy65.java   |   340 +
 .../cache/tier/sockets/command/Destroy70.java   |   118 +
 .../tier/sockets/command/DestroyRegion.java     |   175 +
 .../tier/sockets/command/ExecuteFunction.java   |   242 +
 .../tier/sockets/command/ExecuteFunction65.java |   273 +
 .../tier/sockets/command/ExecuteFunction66.java |   431 +
 .../tier/sockets/command/ExecuteFunction70.java |   144 +
 .../sockets/command/ExecuteRegionFunction.java  |   270 +
 .../command/ExecuteRegionFunction61.java        |   292 +
 .../command/ExecuteRegionFunction65.java        |   400 +
 .../command/ExecuteRegionFunction66.java        |   435 +
 .../command/ExecuteRegionFunctionSingleHop.java |   420 +
 .../sockets/command/GatewayReceiverCommand.java |   805 +
 .../cache/tier/sockets/command/Get70.java       |   531 +
 .../cache/tier/sockets/command/GetAll.java      |   260 +
 .../cache/tier/sockets/command/GetAll651.java   |   284 +
 .../cache/tier/sockets/command/GetAll70.java    |   293 +
 .../cache/tier/sockets/command/GetAllForRI.java |    52 +
 .../sockets/command/GetAllWithCallback.java     |   285 +
 .../command/GetClientPRMetadataCommand.java     |   114 +
 .../command/GetClientPRMetadataCommand66.java   |   105 +
 .../GetClientPartitionAttributesCommand.java    |   141 +
 .../GetClientPartitionAttributesCommand66.java  |   158 +
 .../cache/tier/sockets/command/GetEntry70.java  |    77 +
 .../tier/sockets/command/GetEntryCommand.java   |    64 +
 .../sockets/command/GetFunctionAttribute.java   |    81 +
 .../tier/sockets/command/GetPDXEnumById.java    |    73 +
 .../tier/sockets/command/GetPDXIdForEnum.java   |    74 +
 .../tier/sockets/command/GetPDXIdForType.java   |    75 +
 .../tier/sockets/command/GetPDXTypeById.java    |    73 +
 .../tier/sockets/command/GetPdxEnums70.java     |    68 +
 .../tier/sockets/command/GetPdxTypes70.java     |    67 +
 .../cache/tier/sockets/command/Invalid.java     |    49 +
 .../cache/tier/sockets/command/Invalidate.java  |   249 +
 .../tier/sockets/command/Invalidate70.java      |   107 +
 .../cache/tier/sockets/command/KeySet.java      |   193 +
 .../cache/tier/sockets/command/MakePrimary.java |    66 +
 .../tier/sockets/command/ManagementCommand.java |    39 +
 .../cache/tier/sockets/command/PeriodicAck.java |    79 +
 .../cache/tier/sockets/command/Ping.java        |    93 +
 .../cache/tier/sockets/command/Put.java         |   261 +
 .../cache/tier/sockets/command/Put61.java       |   319 +
 .../cache/tier/sockets/command/Put65.java       |   539 +
 .../cache/tier/sockets/command/Put70.java       |   126 +
 .../cache/tier/sockets/command/PutAll.java      |   268 +
 .../cache/tier/sockets/command/PutAll70.java    |   380 +
 .../cache/tier/sockets/command/PutAll80.java    |   469 +
 .../sockets/command/PutAllWithCallback.java     |    53 +
 .../sockets/command/PutUserCredentials.java     |    81 +
 .../cache/tier/sockets/command/Query.java       |   107 +
 .../cache/tier/sockets/command/Query651.java    |   137 +
 .../command/RegisterDataSerializers.java        |   114 +
 .../sockets/command/RegisterInstantiators.java  |   148 +
 .../tier/sockets/command/RegisterInterest.java  |   245 +
 .../sockets/command/RegisterInterest61.java     |   282 +
 .../sockets/command/RegisterInterestList.java   |   253 +
 .../sockets/command/RegisterInterestList61.java |   265 +
 .../sockets/command/RegisterInterestList66.java |   267 +
 .../cache/tier/sockets/command/RemoveAll.java   |   404 +
 .../tier/sockets/command/RemoveUserAuth.java    |    84 +
 .../cache/tier/sockets/command/Request.java     |   278 +
 .../tier/sockets/command/RequestEventValue.java |   176 +
 .../tier/sockets/command/RollbackCommand.java   |    90 +
 .../cache/tier/sockets/command/Size.java        |   167 +
 .../tier/sockets/command/TXFailoverCommand.java |   132 +
 .../command/TXSynchronizationCommand.java       |   210 +
 .../sockets/command/UnregisterInterest.java     |   152 +
 .../sockets/command/UnregisterInterestList.java |   171 +
 .../command/UpdateClientNotification.java       |    79 +
 .../doc-files/communication-architecture.fig    |   158 +
 .../doc-files/communication-architecture.gif    |   Bin 0 -> 5485 bytes
 .../internal/cache/tier/sockets/package.html    |    23 +
 .../cache/tx/AbstractPeerTXRegionStub.java      |    56 +
 .../internal/cache/tx/ClientTXRegionStub.java   |   158 +
 .../internal/cache/tx/ClientTXStateStub.java    |   292 +
 .../cache/tx/DistClientTXStateStub.java         |   140 +
 .../internal/cache/tx/DistTxEntryEvent.java     |   288 +
 .../internal/cache/tx/DistTxKeyInfo.java        |    54 +
 .../cache/tx/DistributedTXRegionStub.java       |   255 +
 .../cache/tx/PartitionedTXRegionStub.java       |   535 +
 .../gemfire/internal/cache/tx/TXRegionStub.java |    65 +
 .../cache/tx/TransactionalOperation.java        |   111 +
 .../cache/versions/CompactVersionHolder.java    |   105 +
 .../ConcurrentCacheModificationException.java   |    41 +
 .../cache/versions/DiskRegionVersionVector.java |   103 +
 .../internal/cache/versions/DiskVersionTag.java |    83 +
 .../internal/cache/versions/RVVException.java   |   207 +
 .../internal/cache/versions/RVVExceptionB.java  |   296 +
 .../internal/cache/versions/RVVExceptionT.java  |   283 +
 .../cache/versions/RegionVersionHolder.java     |   789 +
 .../cache/versions/RegionVersionVector.java     |  1531 ++
 .../cache/versions/VMRegionVersionVector.java   |   101 +
 .../internal/cache/versions/VMVersionTag.java   |    74 +
 .../internal/cache/versions/VersionHolder.java  |    57 +
 .../internal/cache/versions/VersionSource.java  |    43 +
 .../internal/cache/versions/VersionStamp.java   |    93 +
 .../internal/cache/versions/VersionTag.java     |   548 +
 .../internal/cache/vmotion/VMotionObserver.java |    44 +
 .../cache/vmotion/VMotionObserverAdapter.java   |    49 +
 .../cache/vmotion/VMotionObserverHolder.java    |    57 +
 .../cache/wan/AbstractGatewaySender.java        |  1331 ++
 .../AbstractGatewaySenderEventProcessor.java    |  1353 ++
 .../AsyncEventQueueConfigurationException.java  |    73 +
 .../internal/cache/wan/BatchException70.java    |   108 +
 .../cache/wan/DistributedSystemListener.java    |    32 +
 .../cache/wan/GatewayEventFilterImpl.java       |    45 +
 .../cache/wan/GatewayReceiverException.java     |    69 +
 .../cache/wan/GatewayReceiverStats.java         |   278 +
 .../cache/wan/GatewaySenderAdvisor.java         |   747 +
 .../cache/wan/GatewaySenderAttributes.java      |   200 +
 .../GatewaySenderConfigurationException.java    |    49 +
 .../wan/GatewaySenderEventCallbackArgument.java |   201 +
 .../GatewaySenderEventCallbackDispatcher.java   |   203 +
 .../cache/wan/GatewaySenderEventDispatcher.java |    35 +
 .../cache/wan/GatewaySenderEventImpl.java       |  1286 ++
 .../cache/wan/GatewaySenderException.java       |    63 +
 .../internal/cache/wan/GatewaySenderStats.java  |   744 +
 .../cache/wan/InternalGatewaySenderFactory.java |    38 +
 .../cache/wan/TransportFilterServerSocket.java  |    40 +
 .../cache/wan/TransportFilterSocket.java        |    78 +
 .../cache/wan/TransportFilterSocketFactory.java |    41 +
 .../internal/cache/wan/WANServiceProvider.java  |    76 +
 .../BucketRegionQueueUnavailableException.java  |    35 +
 ...rentParallelGatewaySenderEventProcessor.java |   376 +
 .../ConcurrentParallelGatewaySenderQueue.java   |   229 +
 .../ParallelGatewaySenderEventProcessor.java    |   245 +
 .../parallel/ParallelGatewaySenderQueue.java    |  1886 ++
 .../ParallelQueueBatchRemovalMessage.java       |   279 +
 .../parallel/ParallelQueueRemovalMessage.java   |   282 +
 .../cache/wan/parallel/RREventIDResolver.java   |    54 +
 .../cache/wan/serial/BatchDestroyOperation.java |   243 +
 ...urrentSerialGatewaySenderEventProcessor.java |   386 +
 .../SerialGatewaySenderEventProcessor.java      |   848 +
 .../wan/serial/SerialGatewaySenderQueue.java    |  1300 ++
 .../serial/SerialSecondaryGatewayListener.java  |   100 +
 .../internal/cache/wan/spi/WANFactory.java      |    37 +
 .../cache/xmlcache/AbstractXmlParser.java       |    95 +
 .../cache/xmlcache/AsyncEventQueueCreation.java |   223 +
 .../cache/xmlcache/BindingCreation.java         |    61 +
 .../internal/cache/xmlcache/CacheCreation.java  |  1695 ++
 .../cache/xmlcache/CacheServerCreation.java     |   257 +
 .../CacheTransactionManagerCreation.java        |   145 +
 .../internal/cache/xmlcache/CacheXml.java       |  1056 +
 .../cache/xmlcache/CacheXmlGenerator.java       |  2877 +++
 .../internal/cache/xmlcache/CacheXmlParser.java |  3795 ++++
 .../xmlcache/CacheXmlPropertyResolver.java      |   147 +
 .../CacheXmlPropertyResolverHelper.java         |   152 +
 .../cache/xmlcache/CacheXmlVersion.java         |   132 +
 .../cache/xmlcache/ClientCacheCreation.java     |   306 +
 .../cache/xmlcache/ClientHaQueueCreation.java   |   100 +
 .../internal/cache/xmlcache/Declarable2.java    |    39 +
 .../cache/xmlcache/DefaultEntityResolver2.java  |    75 +
 .../xmlcache/DiskStoreAttributesCreation.java   |   314 +
 .../cache/xmlcache/FunctionServiceCreation.java |    53 +
 .../cache/xmlcache/GatewayReceiverCreation.java |   190 +
 .../cache/xmlcache/GeodeEntityResolver.java     |    58 +
 .../cache/xmlcache/IndexCreationData.java       |   144 +
 .../ParallelAsyncEventQueueCreation.java        |   119 +
 .../xmlcache/ParallelGatewaySenderCreation.java |   123 +
 .../cache/xmlcache/PivotalEntityResolver.java   |    58 +
 .../cache/xmlcache/PropertyResolver.java        |    57 +
 .../xmlcache/RegionAttributesCreation.java      |  1671 ++
 .../internal/cache/xmlcache/RegionCreation.java |   969 +
 .../cache/xmlcache/ResourceManagerCreation.java |   215 +
 .../xmlcache/SerialAsyncEventQueueCreation.java |   115 +
 .../xmlcache/SerialGatewaySenderCreation.java   |   115 +
 .../cache/xmlcache/SerializerCreation.java      |   108 +
 .../internal/cache/xmlcache/XmlGenerator.java   |    62 +
 .../cache/xmlcache/XmlGeneratorUtils.java       |   151 +
 .../internal/cache/xmlcache/XmlParser.java      |    58 +
 .../internal/cache/xmlcache/package.html        |    32 +
 .../gemfire/internal/concurrent/AL.java         |   127 +
 .../internal/concurrent/AtomicLong5.java        |    48 +
 .../gemfire/internal/concurrent/Atomics.java    |    67 +
 .../concurrent/CompactConcurrentHashSet2.java   |  2514 +++
 .../internal/concurrent/ConcurrentHashSet.java  |    89 +
 .../gemfire/internal/concurrent/LI.java         |    95 +
 .../internal/concurrent/MapCallback.java        |   269 +
 .../internal/concurrent/MapCallbackAdapter.java |   140 +
 .../gemfire/internal/concurrent/MapResult.java  |    43 +
 .../internal/datasource/AbstractDataSource.java |   241 +
 .../internal/datasource/AbstractPoolCache.java  |   553 +
 .../ClientConnectionFactoryWrapper.java         |    54 +
 .../internal/datasource/ConfigProperty.java     |    65 +
 .../ConfiguredDataSourceProperties.java         |   288 +
 .../ConnectionEventListenerAdaptor.java         |    76 +
 .../datasource/ConnectionPoolCache.java         |    52 +
 .../datasource/ConnectionPoolCacheImpl.java     |   104 +
 .../internal/datasource/ConnectionProvider.java |    50 +
 .../datasource/ConnectionProviderException.java |    67 +
 .../datasource/DataSourceCreateException.java   |    62 +
 .../internal/datasource/DataSourceFactory.java  |   374 +
 .../datasource/DataSourceResources.java         |    49 +
 .../FacetsJCAConnectionManagerImpl.java         |   269 +
 .../datasource/GemFireBasicDataSource.java      |   150 +
 .../datasource/GemFireConnPooledDataSource.java |   225 +
 .../GemFireConnectionPoolManager.java           |   108 +
 .../GemFireTransactionDataSource.java           |   264 +
 .../datasource/JCAConnectionManagerImpl.java    |   220 +
 .../datasource/ManagedPoolCacheImpl.java        |   104 +
 .../internal/datasource/PoolException.java      |    55 +
 .../internal/datasource/TranxPoolCacheImpl.java |   102 +
 .../gemfire/internal/doc-files/cs-maps.fig      |   150 +
 .../gemfire/internal/doc-files/cs-maps.gif      |   Bin 0 -> 5951 bytes
 .../gemfire/internal/doc-files/ds-map.fig       |   105 +
 .../gemfire/internal/doc-files/ds-map.gif       |   Bin 0 -> 4867 bytes
 .../internal/doc-files/merge-log-files.fig      |   153 +
 .../internal/doc-files/merge-log-files.gif      |   Bin 0 -> 2646 bytes
 .../com/gemstone/gemfire/internal/hll/Bits.java |    48 +
 .../internal/hll/CardinalityMergeException.java |    26 +
 .../gemfire/internal/hll/HyperLogLog.java       |   345 +
 .../gemfire/internal/hll/HyperLogLogPlus.java   |  1053 +
 .../gemstone/gemfire/internal/hll/IBuilder.java |    24 +
 .../gemfire/internal/hll/ICardinality.java      |    72 +
 .../gemfire/internal/hll/MurmurHash.java        |   245 +
 .../gemfire/internal/hll/RegisterSet.java       |   110 +
 .../i18n/AbstractStringIdResourceBundle.java    |   156 +
 .../gemfire/internal/i18n/LocalizedStrings.java |  2162 +++
 .../internal/i18n/ParentLocalizedStrings.java   |  2399 +++
 .../gemfire/internal/i18n/StringId.java         |    58 +
 .../internal/io/CompositeOutputStream.java      |   176 +
 .../internal/io/CompositePrintStream.java       |    79 +
 .../gemfire/internal/io/TeeOutputStream.java    |    93 +
 .../gemfire/internal/io/TeePrintStream.java     |    45 +
 .../gemfire/internal/jndi/ContextImpl.java      |   779 +
 .../jndi/InitialContextFactoryImpl.java         |   102 +
 .../gemfire/internal/jndi/JNDIInvoker.java      |   401 +
 .../gemfire/internal/jndi/NameParserImpl.java   |    55 +
 .../gemfire/internal/jta/GlobalTransaction.java |   732 +
 .../gemfire/internal/jta/TransactionImpl.java   |   270 +
 .../internal/jta/TransactionManagerImpl.java    |   867 +
 .../gemfire/internal/jta/TransactionUtils.java  |    59 +
 .../internal/jta/UserTransactionImpl.java       |   145 +
 .../gemstone/gemfire/internal/jta/XidImpl.java  |    94 +
 .../gemfire/internal/lang/ClassUtils.java       |   131 +
 .../gemstone/gemfire/internal/lang/Filter.java  |    30 +
 .../gemfire/internal/lang/InOutParameter.java   |   102 +
 .../gemfire/internal/lang/Initable.java         |    36 +
 .../gemfire/internal/lang/Initializer.java      |    46 +
 .../internal/lang/MutableIdentifiable.java      |    39 +
 .../gemfire/internal/lang/ObjectUtils.java      |   192 +
 .../gemfire/internal/lang/Orderable.java        |    41 +
 .../gemstone/gemfire/internal/lang/Ordered.java |    44 +
 .../gemfire/internal/lang/StringUtils.java      |   716 +
 .../gemfire/internal/lang/SystemUtils.java      |   244 +
 .../gemfire/internal/lang/ThreadUtils.java      |   131 +
 .../gemfire/internal/logging/DateFormatter.java |    94 +
 .../internal/logging/DebugLogWriter.java        |   126 +
 .../internal/logging/GemFireFormatter.java      |   104 +
 .../internal/logging/GemFireHandler.java        |    81 +
 .../gemfire/internal/logging/GemFireLevel.java  |    78 +
 .../internal/logging/InternalLogWriter.java     |   134 +
 .../internal/logging/LocalLogWriter.java        |    95 +
 .../gemfire/internal/logging/LogConfig.java     |    65 +
 .../gemfire/internal/logging/LogFileParser.java |   513 +
 .../gemfire/internal/logging/LogService.java    |   279 +
 .../internal/logging/LogWriterFactory.java      |   109 +
 .../gemfire/internal/logging/LogWriterImpl.java |  1051 +
 .../internal/logging/LoggingThreadGroup.java    |   347 +
 .../internal/logging/ManagerLogWriter.java      |   692 +
 .../gemfire/internal/logging/MergeLogFiles.java |  1008 +
 .../gemfire/internal/logging/PureLogWriter.java |   283 +
 .../logging/SecurityLocalLogWriter.java         |    87 +
 .../internal/logging/SecurityLogConfig.java     |    66 +
 .../internal/logging/SecurityLogWriter.java     |    80 +
 .../logging/SecurityManagerLogWriter.java       |    73 +
 .../gemfire/internal/logging/SortLogFile.java   |   149 +
 .../internal/logging/StandardErrorPrinter.java  |    43 +
 .../internal/logging/StandardOutputPrinter.java |    43 +
 .../internal/logging/log4j/AlertAppender.java   |   351 +
 .../internal/logging/log4j/AppenderContext.java |    80 +
 .../internal/logging/log4j/ConfigLocator.java   |    85 +
 .../internal/logging/log4j/Configurator.java    |   205 +
 .../internal/logging/log4j/FastLogger.java      |    79 +
 .../internal/logging/log4j/GemFireLogger.java   |   923 +
 .../logging/log4j/LocalizedMessage.java         |    81 +
 .../internal/logging/log4j/LogMarker.java       |    98 +
 .../logging/log4j/LogWriterAppender.java        |   212 +
 .../logging/log4j/LogWriterAppenders.java       |   299 +
 .../internal/logging/log4j/LogWriterLogger.java |  2035 ++
 .../logging/log4j/ThreadIdPatternConverter.java |    61 +
 .../gemfire/internal/memcached/Command.java     |   501 +
 .../internal/memcached/CommandProcessor.java    |    42 +
 .../internal/memcached/ConnectionHandler.java   |    93 +
 .../gemfire/internal/memcached/KeyWrapper.java  |    95 +
 .../gemfire/internal/memcached/Reply.java       |   121 +
 .../internal/memcached/RequestReader.java       |   291 +
 .../internal/memcached/ResponseStatus.java      |    64 +
 .../internal/memcached/ValueWrapper.java        |   146 +
 .../memcached/commands/AbstractCommand.java     |   223 +
 .../internal/memcached/commands/AddCommand.java |    90 +
 .../memcached/commands/AddQCommand.java         |    30 +
 .../memcached/commands/AppendCommand.java       |    92 +
 .../memcached/commands/AppendQCommand.java      |    29 +
 .../internal/memcached/commands/CASCommand.java |    76 +
 .../memcached/commands/ClientError.java         |    39 +
 .../memcached/commands/DecrementCommand.java    |   173 +
 .../memcached/commands/DecrementQCommand.java   |    29 +
 .../memcached/commands/DeleteCommand.java       |   101 +
 .../memcached/commands/DeleteQCommand.java      |    29 +
 .../memcached/commands/FlushAllCommand.java     |   119 +
 .../memcached/commands/FlushAllQCommand.java    |    29 +
 .../internal/memcached/commands/GATCommand.java |    29 +
 .../memcached/commands/GATQCommand.java         |    29 +
 .../internal/memcached/commands/GetCommand.java |   224 +
 .../memcached/commands/GetKCommand.java         |    30 +
 .../memcached/commands/GetKQCommand.java        |    30 +
 .../memcached/commands/GetQCommand.java         |    38 +
 .../memcached/commands/IncrementCommand.java    |   170 +
 .../memcached/commands/IncrementQCommand.java   |    29 +
 .../memcached/commands/NoOpCommand.java         |    40 +
 .../memcached/commands/NotSupportedCommand.java |    41 +
 .../memcached/commands/PrependCommand.java      |    88 +
 .../memcached/commands/PrependQCommand.java     |    29 +
 .../memcached/commands/QuitCommand.java         |    56 +
 .../memcached/commands/QuitQCommand.java        |    29 +
 .../memcached/commands/ReplaceCommand.java      |   102 +
 .../memcached/commands/ReplaceQCommand.java     |    29 +
 .../internal/memcached/commands/SetCommand.java |    90 +
 .../memcached/commands/SetQCommand.java         |    30 +
 .../memcached/commands/StatsCommand.java        |    50 +
 .../memcached/commands/StorageCommand.java      |   218 +
 .../memcached/commands/TouchCommand.java        |   104 +
 .../memcached/commands/VerbosityCommand.java    |    48 +
 .../memcached/commands/VersionCommand.java      |    49 +
 .../modules/util/RegionConfiguration.java       |   293 +
 .../gemfire/internal/net/SocketUtils.java       |    76 +
 .../internal/offheap/AbstractStoredObject.java  |   107 +
 .../offheap/AddressableMemoryChunk.java         |    29 +
 .../offheap/AddressableMemoryChunkFactory.java  |    27 +
 .../internal/offheap/ByteArrayMemoryChunk.java  |    77 +
 .../internal/offheap/ByteBufferMemoryChunk.java |    90 +
 .../gemfire/internal/offheap/DataAsAddress.java |   131 +
 .../gemfire/internal/offheap/DataType.java      |   269 +
 ...DisconnectingOutOfOffHeapMemoryListener.java |    77 +
 .../gemfire/internal/offheap/Fragment.java      |   139 +
 .../internal/offheap/FreeListManager.java       |   920 +
 .../internal/offheap/LifecycleListener.java     |    98 +
 .../internal/offheap/MemoryAllocator.java       |    62 +
 .../gemfire/internal/offheap/MemoryBlock.java   |    70 +
 .../internal/offheap/MemoryBlockNode.java       |   162 +
 .../gemfire/internal/offheap/MemoryChunk.java   |    47 +
 .../offheap/MemoryChunkWithRefCount.java        |    34 +
 .../internal/offheap/MemoryInspector.java       |    43 +
 .../internal/offheap/MemoryInspectorImpl.java   |    99 +
 .../internal/offheap/MemoryUsageListener.java   |    27 +
 .../gemfire/internal/offheap/ObjectChunk.java   |   737 +
 .../internal/offheap/ObjectChunkSlice.java      |    44 +
 .../offheap/ObjectChunkWithHeapForm.java        |    40 +
 .../offheap/OffHeapCachedDeserializable.java    |   142 +
 .../gemfire/internal/offheap/OffHeapHelper.java |   133 +
 .../internal/offheap/OffHeapMemoryStats.java    |    54 +
 .../offheap/OffHeapRegionEntryHelper.java       |   406 +
 .../internal/offheap/OffHeapStorage.java        |   394 +
 .../offheap/OutOfOffHeapMemoryListener.java     |    44 +
 .../internal/offheap/RefCountChangeInfo.java    |   130 +
 .../internal/offheap/ReferenceCountHelper.java  |   254 +
 .../gemfire/internal/offheap/Releasable.java    |    31 +
 .../offheap/SimpleMemoryAllocatorImpl.java      |   511 +
 .../gemfire/internal/offheap/StoredObject.java  |    95 +
 .../internal/offheap/SyncChunkStack.java        |   141 +
 .../internal/offheap/UnsafeMemoryChunk.java     |   217 +
 .../offheap/annotations/OffHeapIdentifier.java  |    69 +
 .../internal/offheap/annotations/Released.java  |    49 +
 .../internal/offheap/annotations/Retained.java  |    51 +
 .../offheap/annotations/Unretained.java         |    51 +
 .../com/gemstone/gemfire/internal/package.html  |    45 +
 .../internal/process/AttachProcessUtils.java    |    57 +
 .../process/BlockingProcessStreamReader.java    |    73 +
 ...usterConfigurationNotAvailableException.java |    31 +
 .../process/ConnectionFailedException.java      |    50 +
 .../internal/process/ControlFileWatchdog.java   |   158 +
 .../process/ControlNotificationHandler.java     |    32 +
 .../internal/process/ControllableProcess.java   |   132 +
 .../process/FileAlreadyExistsException.java     |    52 +
 .../process/FileControllerParameters.java       |    33 +
 .../internal/process/FileProcessController.java |   162 +
 .../process/LocalProcessController.java         |   478 +
 .../internal/process/LocalProcessLauncher.java  |   128 +
 .../process/MBeanControllerParameters.java      |    37 +
 .../process/MBeanInvocationFailedException.java |    50 +
 .../process/MBeanProcessController.java         |   391 +
 .../internal/process/NativeProcessUtils.java    |    53 +
 .../process/NonBlockingProcessStreamReader.java |   101 +
 .../gemfire/internal/process/PidFile.java       |   169 +
 .../process/PidUnavailableException.java        |    51 +
 .../internal/process/ProcessController.java     |    61 +
 .../process/ProcessControllerFactory.java       |   102 +
 .../process/ProcessControllerParameters.java    |    30 +
 .../process/ProcessLauncherContext.java         |   176 +
 .../internal/process/ProcessStreamReader.java   |   265 +
 .../ProcessTerminatedAbnormallyException.java   |    90 +
 .../gemfire/internal/process/ProcessType.java   |    69 +
 .../gemfire/internal/process/ProcessUtils.java  |   195 +
 .../gemfire/internal/process/StartupStatus.java |    63 +
 .../internal/process/StartupStatusListener.java |    30 +
 .../UnableToControlProcessException.java        |    51 +
 .../AbstractSignalNotificationHandler.java      |   179 +
 .../gemfire/internal/process/signal/Signal.java |   128 +
 .../internal/process/signal/SignalEvent.java    |    53 +
 .../internal/process/signal/SignalListener.java |    34 +
 .../internal/process/signal/SignalType.java     |    44 +
 .../internal/redis/ByteArrayWrapper.java        |   181 +
 .../internal/redis/ByteToCommandDecoder.java    |   189 +
 .../gemstone/gemfire/internal/redis/Coder.java  |   517 +
 .../gemfire/internal/redis/Command.java         |   150 +
 .../gemfire/internal/redis/DoubleWrapper.java   |    79 +
 .../internal/redis/ExecutionHandlerContext.java |   380 +
 .../gemfire/internal/redis/Executor.java        |    38 +
 .../gemfire/internal/redis/Extendable.java      |    33 +
 .../redis/RedisCommandParserException.java      |    45 +
 .../internal/redis/RedisCommandType.java        |  2345 +++
 .../gemfire/internal/redis/RedisConstants.java  |   202 +
 .../gemfire/internal/redis/RedisDataType.java   |   118 +
 .../redis/RedisDataTypeMismatchException.java   |    39 +
 .../internal/redis/RegionCreationException.java |    39 +
 .../gemfire/internal/redis/RegionProvider.java  |   553 +
 .../redis/executor/AbstractExecutor.java        |   139 +
 .../redis/executor/AbstractScanExecutor.java    |    47 +
 .../internal/redis/executor/AuthExecutor.java   |    54 +
 .../internal/redis/executor/DBSizeExecutor.java |    31 +
 .../internal/redis/executor/DelExecutor.java    |    55 +
 .../internal/redis/executor/EchoExecutor.java   |    40 +
 .../internal/redis/executor/ExistsExecutor.java |    49 +
 .../redis/executor/ExpirationExecutor.java      |    41 +
 .../redis/executor/ExpireAtExecutor.java        |    93 +
 .../internal/redis/executor/ExpireExecutor.java |    93 +
 .../redis/executor/FlushAllExecutor.java        |    49 +
 .../internal/redis/executor/KeysExecutor.java   |    70 +
 .../internal/redis/executor/ListQuery.java      |    53 +
 .../redis/executor/PExpireAtExecutor.java       |    32 +
 .../redis/executor/PExpireExecutor.java         |    32 +
 .../internal/redis/executor/PTTLExecutor.java   |    33 +
 .../redis/executor/PersistExecutor.java         |    52 +
 .../internal/redis/executor/PingExecutor.java   |    31 +
 .../internal/redis/executor/QuitExecutor.java   |    31 +
 .../internal/redis/executor/ScanExecutor.java   |   144 +
 .../redis/executor/ShutDownExecutor.java        |    28 +
 .../internal/redis/executor/SortedSetQuery.java |   204 +
 .../internal/redis/executor/TTLExecutor.java    |    77 +
 .../internal/redis/executor/TimeExecutor.java   |    51 +
 .../internal/redis/executor/TypeExecutor.java   |    48 +
 .../internal/redis/executor/UnkownExecutor.java |    31 +
 .../redis/executor/hash/HDelExecutor.java       |    67 +
 .../redis/executor/hash/HExistsExecutor.java    |    66 +
 .../redis/executor/hash/HGetAllExecutor.java    |    63 +
 .../redis/executor/hash/HGetExecutor.java       |    62 +
 .../redis/executor/hash/HIncrByExecutor.java    |   109 +
 .../executor/hash/HIncrByFloatExecutor.java     |    99 +
 .../redis/executor/hash/HKeysExecutor.java      |    63 +
 .../redis/executor/hash/HLenExecutor.java       |    57 +
 .../redis/executor/hash/HMGetExecutor.java      |    72 +
 .../redis/executor/hash/HMSetExecutor.java      |    62 +
 .../redis/executor/hash/HScanExecutor.java      |   163 +
 .../redis/executor/hash/HSetExecutor.java       |    78 +
 .../redis/executor/hash/HSetNXExecutor.java     |    33 +
 .../redis/executor/hash/HValsExecutor.java      |    62 +
 .../redis/executor/hash/HashExecutor.java       |    39 +
 .../redis/executor/hll/HllExecutor.java         |    38 +
 .../redis/executor/hll/PFAddExecutor.java       |    66 +
 .../redis/executor/hll/PFCountExecutor.java     |    70 +
 .../redis/executor/hll/PFMergeExecutor.java     |    74 +
 .../internal/redis/executor/hll/Varint.java     |   241 +
 .../redis/executor/list/LIndexExecutor.java     |   118 +
 .../redis/executor/list/LInsertExecutor.java    |    29 +
 .../redis/executor/list/LLenExecutor.java       |    58 +
 .../redis/executor/list/LPopExecutor.java       |    34 +
 .../redis/executor/list/LPushExecutor.java      |    34 +
 .../redis/executor/list/LPushXExecutor.java     |    34 +
 .../redis/executor/list/LRangeExecutor.java     |   113 +
 .../redis/executor/list/LRemExecutor.java       |   116 +
 .../redis/executor/list/LSetExecutor.java       |   108 +
 .../redis/executor/list/LTrimExecutor.java      |   124 +
 .../redis/executor/list/ListExecutor.java       |   150 +
 .../redis/executor/list/PopExecutor.java        |   150 +
 .../redis/executor/list/PushExecutor.java       |    54 +
 .../redis/executor/list/PushXExecutor.java      |    59 +
 .../redis/executor/list/RPopExecutor.java       |    34 +
 .../redis/executor/list/RPushExecutor.java      |    34 +
 .../redis/executor/list/RPushXExecutor.java     |    34 +
 .../redis/executor/set/SAddExecutor.java        |    60 +
 .../redis/executor/set/SCardExecutor.java       |    55 +
 .../redis/executor/set/SDiffExecutor.java       |    46 +
 .../redis/executor/set/SDiffStoreExecutor.java  |    33 +
 .../redis/executor/set/SInterExecutor.java      |    49 +
 .../redis/executor/set/SInterStoreExecutor.java |    34 +
 .../redis/executor/set/SIsMemberExecutor.java   |    62 +
 .../redis/executor/set/SMembersExecutor.java    |    56 +
 .../redis/executor/set/SMoveExecutor.java       |    72 +
 .../redis/executor/set/SPopExecutor.java        |    61 +
 .../redis/executor/set/SRandMemberExecutor.java |    96 +
 .../redis/executor/set/SRemExecutor.java        |    63 +
 .../redis/executor/set/SScanExecutor.java       |   154 +
 .../redis/executor/set/SUnionExecutor.java      |    51 +
 .../redis/executor/set/SUnionStoreExecutor.java |    34 +
 .../redis/executor/set/SetExecutor.java         |    23 +
 .../redis/executor/set/SetOpExecutor.java       |   109 +
 .../executor/sortedset/SortedSetExecutor.java   |    41 +
 .../redis/executor/sortedset/ZAddExecutor.java  |    88 +
 .../redis/executor/sortedset/ZCardExecutor.java |    54 +
 .../executor/sortedset/ZCountExecutor.java      |   145 +
 .../executor/sortedset/ZIncrByExecutor.java     |    77 +
 .../executor/sortedset/ZLexCountExecutor.java   |   143 +
 .../executor/sortedset/ZRangeByLexExecutor.java |   209 +
 .../sortedset/ZRangeByScoreExecutor.java        |   209 +
 .../executor/sortedset/ZRangeExecutor.java      |   125 +
 .../redis/executor/sortedset/ZRankExecutor.java |    98 +
 .../redis/executor/sortedset/ZRemExecutor.java  |    64 +
 .../sortedset/ZRemRangeByLexExecutor.java       |   153 +
 .../sortedset/ZRemRangeByRankExecutor.java      |   121 +
 .../sortedset/ZRemRangeByScoreExecutor.java     |   143 +
 .../sortedset/ZRevRangeByScoreExecutor.java     |    33 +
 .../executor/sortedset/ZRevRangeExecutor.java   |    34 +
 .../executor/sortedset/ZRevRankExecutor.java    |    32 +
 .../redis/executor/sortedset/ZScanExecutor.java |   161 +
 .../executor/sortedset/ZScoreExecutor.java      |    59 +
 .../redis/executor/string/AppendExecutor.java   |    69 +
 .../redis/executor/string/BitCountExecutor.java |    97 +
 .../redis/executor/string/BitOpExecutor.java    |   153 +
 .../redis/executor/string/BitPosExecutor.java   |   134 +
 .../redis/executor/string/DecrByExecutor.java   |   110 +
 .../redis/executor/string/DecrExecutor.java     |    95 +
 .../redis/executor/string/GetBitExecutor.java   |    82 +
 .../redis/executor/string/GetExecutor.java      |    51 +
 .../redis/executor/string/GetRangeExecutor.java |    98 +
 .../redis/executor/string/GetSetExecutor.java   |    59 +
 .../redis/executor/string/IncrByExecutor.java   |   107 +
 .../executor/string/IncrByFloatExecutor.java    |   122 +
 .../redis/executor/string/IncrExecutor.java     |    91 +
 .../redis/executor/string/MGetExecutor.java     |    73 +
 .../redis/executor/string/MSetExecutor.java     |    64 +
 .../redis/executor/string/MSetNXExecutor.java   |    88 +
 .../redis/executor/string/PSetEXExecutor.java   |    34 +
 .../redis/executor/string/SetBitExecutor.java   |   106 +
 .../redis/executor/string/SetEXExecutor.java    |    88 +
 .../redis/executor/string/SetExecutor.java      |   154 +
 .../redis/executor/string/SetNXExecutor.java    |    60 +
 .../redis/executor/string/SetRangeExecutor.java |    96 +
 .../redis/executor/string/StringExecutor.java   |    45 +
 .../redis/executor/string/StrlenExecutor.java   |    56 +
 .../executor/transactions/DiscardExecutor.java  |    42 +
 .../executor/transactions/ExecExecutor.java     |    88 +
 .../executor/transactions/MultiExecutor.java    |    47 +
 .../transactions/TransactionExecutor.java       |    23 +
 .../executor/transactions/UnwatchExecutor.java  |    31 +
 .../executor/transactions/WatchExecutor.java    |    31 +
 .../redis/org/apache/hadoop/fs/GlobPattern.java |   164 +
 .../internal/security/AuthorizeRequest.java     |   769 +
 .../internal/security/AuthorizeRequestPP.java   |   250 +
 .../security/FilterPostAuthorization.java       |   235 +
 .../security/FilterPreAuthorization.java        |   160 +
 .../internal/security/ObjectWithAuthz.java      |    69 +
 .../gemfire/internal/security/package.html      |    25 +
 .../internal/sequencelog/EntryLogger.java       |   210 +
 .../gemfire/internal/sequencelog/GraphType.java |    60 +
 .../internal/sequencelog/MembershipLogger.java  |    47 +
 .../internal/sequencelog/MessageLogger.java     |    40 +
 .../internal/sequencelog/RegionLogger.java      |    88 +
 .../internal/sequencelog/SequenceLogger.java    |    63 +
 .../sequencelog/SequenceLoggerImpl.java         |   149 +
 .../internal/sequencelog/Transition.java        |    88 +
 .../gemfire/internal/sequencelog/io/Filter.java |    32 +
 .../sequencelog/io/GemfireLogConverter.java     |   251 +
 .../internal/sequencelog/io/GraphReader.java    |    90 +
 .../sequencelog/io/InputStreamReader.java       |   103 +
 .../sequencelog/io/OutputStreamAppender.java    |   117 +
 .../internal/sequencelog/model/Edge.java        |   111 +
 .../internal/sequencelog/model/Graph.java       |   105 +
 .../internal/sequencelog/model/GraphID.java     |    95 +
 .../sequencelog/model/GraphReaderCallback.java  |    37 +
 .../internal/sequencelog/model/GraphSet.java    |   165 +
 .../internal/sequencelog/model/Vertex.java      |   124 +
 .../visualization/text/TextDisplay.java         |    85 +
 .../gemfire/internal/shared/NativeCalls.java    |   633 +
 .../internal/shared/NativeCallsJNAImpl.java     |  1217 ++
 .../internal/shared/NativeErrorException.java   |    43 +
 .../gemfire/internal/shared/OSType.java         |    93 +
 .../internal/shared/StringPrintWriter.java      |   236 +
 .../internal/shared/TCPSocketOptions.java       |    48 +
 .../internal/size/CachingSingleObjectSizer.java |    51 +
 .../size/InstrumentationSingleObjectSizer.java  |    42 +
 .../gemfire/internal/size/ObjectGraphSizer.java |   252 +
 .../gemfire/internal/size/ObjectTraverser.java  |   205 +
 .../internal/size/ReflectionObjectSizer.java    |    94 +
 .../size/ReflectionSingleObjectSizer.java       |   183 +
 .../internal/size/SingleObjectSizer.java        |    28 +
 .../internal/size/SizeClassOnceObjectSizer.java |    96 +
 .../gemfire/internal/size/SizeOfUtil0.java      |    33 +
 .../internal/size/WellKnownClassSizer.java      |    60 +
 .../internal/statistics/CounterMonitor.java     |    58 +
 .../internal/statistics/GaugeMonitor.java       |    53 +
 .../statistics/IgnoreResourceException.java     |    65 +
 .../MapBasedStatisticsNotification.java         |    88 +
 .../internal/statistics/ResourceInstance.java   |   120 +
 .../internal/statistics/ResourceType.java       |    70 +
 .../internal/statistics/SampleCollector.java    |   786 +
 .../internal/statistics/SampleHandler.java      |    72 +
 .../internal/statistics/SimpleStatisticId.java  |    67 +
 .../statistics/StatArchiveDescriptor.java       |   134 +
 .../internal/statistics/StatArchiveHandler.java |   676 +
 .../statistics/StatArchiveHandlerConfig.java    |    67 +
 .../internal/statistics/StatMonitorHandler.java |   336 +
 .../internal/statistics/StatisticId.java        |    39 +
 .../statistics/StatisticNotFoundException.java  |    62 +
 .../internal/statistics/StatisticsListener.java |    27 +
 .../internal/statistics/StatisticsMonitor.java  |   166 +
 .../statistics/StatisticsNotification.java      |    66 +
 .../internal/statistics/StatisticsSampler.java  |    57 +
 .../internal/statistics/ValueMonitor.java       |   133 +
 .../gemfire/internal/statistics/package.html    |    31 +
 .../stats50/Atomic50StatisticsImpl.java         |   497 +
 .../gemfire/internal/stats50/VMStats50.java     |   703 +
 .../gemfire/internal/tcp/BaseMsgStreamer.java   |    65 +
 .../gemstone/gemfire/internal/tcp/Buffers.java  |   170 +
 .../internal/tcp/ByteBufferInputStream.java     |  1022 +
 .../gemfire/internal/tcp/ConnectExceptions.java |    93 +
 .../gemfire/internal/tcp/Connection.java        |  4154 ++++
 .../internal/tcp/ConnectionException.java       |    38 +
 .../gemfire/internal/tcp/ConnectionTable.java   |  1428 ++
 .../gemfire/internal/tcp/DirectReplySender.java |   105 +
 .../tcp/ImmutableByteBufferInputStream.java     |    85 +
 .../internal/tcp/MemberShunnedException.java    |    50 +
 .../gemfire/internal/tcp/MsgDestreamer.java     |   536 +
 .../gemfire/internal/tcp/MsgIdGenerator.java    |    54 +
 .../gemfire/internal/tcp/MsgOutputStream.java   |   427 +
 .../gemfire/internal/tcp/MsgReader.java         |   129 +
 .../gemfire/internal/tcp/MsgStreamer.java       |  1004 +
 .../gemfire/internal/tcp/MsgStreamerList.java   |   169 +
 .../gemfire/internal/tcp/NIOMsgReader.java      |   113 +
 .../gemfire/internal/tcp/OioMsgReader.java      |    43 +
 .../internal/tcp/ReenteredConnectException.java |    51 +
 .../gemfire/internal/tcp/ServerDelegate.java    |    47 +
 .../gemfire/internal/tcp/TCPConduit.java        |  1207 ++
 .../tcp/VersionedByteBufferInputStream.java     |    79 +
 .../internal/tcp/VersionedMsgStreamer.java      |    60 +
 .../gemstone/gemfire/internal/tcp/package.html  |   138 +
 .../internal/util/AbortableTaskService.java     |   174 +
 .../gemfire/internal/util/ArrayUtils.java       |   369 +
 .../gemfire/internal/util/BlobHelper.java       |   195 +
 .../gemfire/internal/util/Breadcrumbs.java      |   265 +
 .../gemstone/gemfire/internal/util/Bytes.java   |   259 +
 .../gemfire/internal/util/Callable.java         |    48 +
 .../gemfire/internal/util/CollectionUtils.java  |   282 +
 .../gemfire/internal/util/DebuggerSupport.java  |    65 +
 .../gemfire/internal/util/DelayedAction.java    |    65 +
 .../com/gemstone/gemfire/internal/util/Hex.java |    57 +
 .../gemstone/gemfire/internal/util/IOUtils.java |   347 +
 .../internal/util/JavaCommandBuilder.java       |   123 +
 .../gemfire/internal/util/LogFileUtils.java     |   178 +
 .../internal/util/ObjectIntProcedure.java       |    30 +
 .../gemfire/internal/util/PasswordUtil.java     |   132 +
 .../gemfire/internal/util/PluckStacks.java      |   523 +
 .../internal/util/SingletonCallable.java        |    87 +
 .../gemfire/internal/util/SingletonValue.java   |   318 +
 .../internal/util/StackTraceCollector.java      |   169 +
 .../gemfire/internal/util/StopWatch.java        |    80 +
 .../internal/util/SunAPINotFoundException.java  |    46 +
 .../gemfire/internal/util/TransformUtils.java   |   132 +
 .../gemfire/internal/util/Transformer.java      |    33 +
 .../gemfire/internal/util/Versionable.java      |    37 +
 .../internal/util/VersionedArrayList.java       |   346 +
 .../util/concurrent/CopyOnWriteHashMap.java     |   209 +
 .../util/concurrent/CopyOnWriteWeakHashMap.java |    98 +
 .../CustomEntryConcurrentHashMap.java           |  2679 +++
 .../internal/util/concurrent/FutureResult.java  |    93 +
 .../util/concurrent/ReentrantSemaphore.java     |   161 +
 .../util/concurrent/SemaphoreReadWriteLock.java |   217 +
 .../util/concurrent/StoppableCondition.java     |   113 +
 .../concurrent/StoppableCountDownLatch.java     |    98 +
 .../concurrent/StoppableCountDownOrUpLatch.java |   211 +
 .../concurrent/StoppableNonReentrantLock.java   |    92 +
 .../util/concurrent/StoppableReadWriteLock.java |    35 +
 .../util/concurrent/StoppableReentrantLock.java |   131 +
 .../StoppableReentrantReadWriteLock.java        |   244 +
 .../internal/util/doc-files/call-stack.fig      |    34 +
 .../internal/util/doc-files/class-loaders.fig   |    49 +
 .../lang/AttachAPINotFoundException.java        |    67 +
 .../com/gemstone/gemfire/lang/Identifiable.java |    40 +
 .../management/AlreadyRunningException.java     |    46 +
 .../management/AsyncEventQueueMXBean.java       |   118 +
 .../gemfire/management/CacheServerMXBean.java   |   405 +
 .../gemfire/management/ClientHealthStatus.java  |   346 +
 .../gemfire/management/ClientQueueDetail.java   |   165 +
 .../DependenciesNotFoundException.java          |    58 +
 .../gemfire/management/DiskBackupResult.java    |    68 +
 .../gemfire/management/DiskBackupStatus.java    |    73 +
 .../gemfire/management/DiskMetrics.java         |   124 +
 .../gemfire/management/DiskStoreMXBean.java     |   221 +
 .../DistributedLockServiceMXBean.java           |    66 +
 .../management/DistributedRegionMXBean.java     |   317 +
 .../management/DistributedSystemMXBean.java     |   696 +
 .../management/EvictionAttributesData.java      |   112 +
 .../FixedPartitionAttributesData.java           |    95 +
 .../management/GatewayReceiverMXBean.java       |   216 +
 .../gemfire/management/GatewaySenderMXBean.java |   257 +
 .../gemfire/management/GemFireProperties.java   |  1589 ++
 .../gemfire/management/JMXNotificationType.java |   208 +
 .../management/JMXNotificationUserData.java     |    46 +
 .../gemstone/gemfire/management/JVMMetrics.java |   151 +
 .../gemfire/management/LocatorMXBean.java       |    76 +
 .../gemfire/management/LockServiceMXBean.java   |    89 +
 .../gemfire/management/ManagementException.java |    88 +
 .../gemfire/management/ManagementService.java   |   427 +
 .../gemfire/management/ManagerMXBean.java       |    90 +
 .../gemfire/management/MemberMXBean.java        |   866 +
 .../management/MembershipAttributesData.java    |   113 +
 .../gemfire/management/NetworkMetrics.java      |    59 +
 .../gemstone/gemfire/management/OSMetrics.java  |   231 +
 .../management/PartitionAttributesData.java     |   146 +
 .../management/PersistentMemberDetails.java     |    68 +
 .../management/RegionAttributesData.java        |   438 +
 .../gemfire/management/RegionMXBean.java        |   360 +
 .../gemfire/management/ServerLoadData.java      |    93 +
 .../gemfire/management/cli/CliMetaData.java     |   104 +
 .../cli/CommandProcessingException.java         |   125 +
 .../gemfire/management/cli/CommandService.java  |   205 +
 .../management/cli/CommandServiceException.java |    68 +
 .../management/cli/CommandStatement.java        |    58 +
 .../gemfire/management/cli/ConverterHint.java   |    52 +
 .../gemstone/gemfire/management/cli/Result.java |   130 +
 .../gemfire/management/cli/package.html         |    23 +
 .../gemfire/management/internal/AgentUtil.java  |   134 +
 .../management/internal/AlertDetails.java       |   162 +
 .../management/internal/ArrayConverter.java     |    82 +
 .../internal/BaseManagementService.java         |   185 +
 .../internal/CollectionConverter.java           |   110 +
 .../management/internal/CompositeConverter.java |   146 +
 .../management/internal/EnumConverter.java      |    50 +
 .../management/internal/FederatingManager.java  |   626 +
 .../internal/FederationComponent.java           |   306 +
 .../management/internal/FilterChain.java        |    59 +
 .../management/internal/FilterParam.java        |    71 +
 .../management/internal/IdentityConverter.java  |    47 +
 .../management/internal/JettyHelper.java        |   228 +
 .../management/internal/JmxManagerAdvisee.java  |   149 +
 .../management/internal/JmxManagerAdvisor.java  |   384 +
 .../management/internal/JmxManagerLocator.java  |   241 +
 .../internal/JmxManagerLocatorRequest.java      |   118 +
 .../internal/JmxManagerLocatorResponse.java     |   104 +
 .../management/internal/LocalFilterChain.java   |    63 +
 .../management/internal/LocalManager.java       |   466 +
 .../management/internal/MBeanJMXAdapter.java    |   621 +
 .../management/internal/MBeanProxyFactory.java  |   355 +
 .../internal/MBeanProxyInfoRepository.java      |   171 +
 .../internal/MBeanProxyInvocationHandler.java   |   546 +
 .../internal/MXBeanProxyInvocationHandler.java  |   260 +
 .../management/internal/ManagementAgent.java    |   526 +
 .../internal/ManagementCacheListener.java       |   122 +
 .../internal/ManagementConstants.java           |   187 +
 .../management/internal/ManagementFunction.java |   173 +
 .../internal/ManagementMembershipListener.java  |    94 +
 .../internal/ManagementResourceRepo.java        |   262 +
 .../management/internal/ManagementStrings.java  |   153 +
 .../gemfire/management/internal/Manager.java    |    90 +
 .../internal/ManagerStartupMessage.java         |    76 +
 .../management/internal/MemberMessenger.java    |   105 +
 .../internal/MonitoringRegionCacheListener.java |   116 +
 .../internal/NotificationBroadCasterProxy.java  |    38 +
 .../internal/NotificationCacheListener.java     |   120 +
 .../management/internal/NotificationHub.java    |   206 +
 .../internal/NotificationHubClient.java         |    77 +
 .../management/internal/NotificationKey.java    |    66 +
 .../gemfire/management/internal/OpenMethod.java |   190 +
 .../management/internal/OpenTypeConverter.java  |  1018 +
 .../management/internal/OpenTypeUtil.java       |   117 +
 .../gemfire/management/internal/ProxyInfo.java  |    83 +
 .../management/internal/ProxyInterface.java     |    40 +
 .../management/internal/ProxyListener.java      |   137 +
 .../management/internal/RemoteFilterChain.java  |    95 +
 .../gemfire/management/internal/RestAgent.java  |   344 +
 .../gemfire/management/internal/SSLUtil.java    |    82 +
 .../management/internal/StringBasedFilter.java  |   122 +
 .../internal/SystemManagementService.java       |   845 +
 .../management/internal/TableConverter.java     |   102 +
 .../internal/beans/AggregateHandler.java        |    92 +
 .../internal/beans/AsyncEventQueueMBean.java    |   113 +
 .../beans/AsyncEventQueueMBeanBridge.java       |   121 +
 .../internal/beans/BeanUtilFuncs.java           |   393 +
 .../internal/beans/CacheServerBridge.java       |   772 +
 .../internal/beans/CacheServerMBean.java        |   317 +
 .../internal/beans/DiskRegionBridge.java        |   138 +
 .../internal/beans/DiskStoreMBean.java          |   182 +
 .../internal/beans/DiskStoreMBeanBridge.java    |   288 +
 .../beans/DistributedLockServiceBridge.java     |   227 +
 .../beans/DistributedLockServiceMBean.java      |    68 +
 .../internal/beans/DistributedRegionBridge.java |   683 +
 .../internal/beans/DistributedRegionMBean.java  |   330 +
 .../internal/beans/DistributedSystemBridge.java |  1888 ++
 .../internal/beans/DistributedSystemMBean.java  |   461 +
 .../internal/beans/GatewayReceiverMBean.java    |   220 +
 .../beans/GatewayReceiverMBeanBridge.java       |   224 +
 .../internal/beans/GatewaySenderMBean.java      |   226 +
 .../beans/GatewaySenderMBeanBridge.java         |   293 +
 .../internal/beans/HDFSRegionBridge.java        |   174 +
 .../management/internal/beans/LocatorMBean.java |    79 +
 .../internal/beans/LocatorMBeanBridge.java      |   157 +
 .../internal/beans/LockServiceMBean.java        |    94 +
 .../internal/beans/LockServiceMBeanBridge.java  |   129 +
 .../internal/beans/MBeanAggregator.java         |   435 +
 .../internal/beans/ManagementAdapter.java       |  1134 ++
 .../internal/beans/ManagementListener.java      |   215 +
 .../management/internal/beans/ManagerMBean.java |    71 +
 .../internal/beans/ManagerMBeanBridge.java      |    80 +
 .../management/internal/beans/MemberMBean.java  |   685 +
 .../internal/beans/MemberMBeanBridge.java       |  1999 ++
 .../internal/beans/MetricsCalculator.java       |   138 +
 .../internal/beans/PartitionedRegionBridge.java |   317 +
 .../internal/beans/QueryDataFunction.java       |   613 +
 .../management/internal/beans/RegionMBean.java  |   323 +
 .../internal/beans/RegionMBeanBridge.java       |   599 +
 .../beans/RegionMBeanCompositeDataFactory.java  |   229 +
 .../internal/beans/SequenceNumber.java          |    50 +
 .../management/internal/beans/ServerBridge.java |   184 +
 .../stats/AggregateRegionStatsMonitor.java      |   298 +
 .../internal/beans/stats/GCStatsMonitor.java    |    94 +
 .../GatewayReceiverClusterStatsMonitor.java     |    80 +
 .../stats/GatewaySenderClusterStatsMonitor.java |    93 +
 .../stats/IntegerStatsDeltaAggregator.java      |    93 +
 .../beans/stats/LongStatsDeltaAggregator.java   |    92 +
 .../internal/beans/stats/MBeanStatsMonitor.java |   120 +
 .../beans/stats/MemberClusterStatsMonitor.java  |   255 +
 .../beans/stats/MemberLevelDiskMonitor.java     |   311 +
 .../beans/stats/RegionClusterStatsMonitor.java  |   475 +
 .../beans/stats/ServerClusterStatsMonitor.java  |    86 +
 .../internal/beans/stats/StatType.java          |    29 +
 .../internal/beans/stats/StatsAggregator.java   |   305 +
 .../beans/stats/StatsAverageLatency.java        |    55 +
 .../internal/beans/stats/StatsKey.java          |   355 +
 .../internal/beans/stats/StatsLatency.java      |    70 +
 .../internal/beans/stats/StatsRate.java         |    92 +
 .../internal/beans/stats/VMStatsMonitor.java    |   129 +
 .../cli/AbstractCliAroundInterceptor.java       |   133 +
 .../internal/cli/CliAroundInterceptor.java      |    36 +
 .../management/internal/cli/CliUtil.java        |   758 +
 .../management/internal/cli/CommandManager.java |   632 +
 .../management/internal/cli/CommandRequest.java |   134 +
 .../internal/cli/CommandResponse.java           |   350 +
 .../internal/cli/CommandResponseBuilder.java    |    88 +
 .../internal/cli/CommandResponseWriter.java     |    66 +
 .../internal/cli/GfshParseResult.java           |   102 +
 .../management/internal/cli/GfshParser.java     |  1520 ++
 .../management/internal/cli/Launcher.java       |   315 +
 .../management/internal/cli/LogWrapper.java     |   440 +
 .../internal/cli/MultipleValueAdapter.java      |    39 +
 .../internal/cli/MultipleValueConverter.java    |    60 +
 .../internal/cli/annotation/CliArgument.java    |    88 +
 .../cli/commands/AbstractCommandsSupport.java   |   197 +
 .../internal/cli/commands/ClientCommands.java   |   333 +
 .../internal/cli/commands/ConfigCommands.java   |   490 +
 .../CreateAlterDestroyRegionCommands.java       |  1206 ++
 .../internal/cli/commands/DataCommands.java     |  1404 ++
 .../internal/cli/commands/DeployCommands.java   |   352 +
 .../cli/commands/DiskStoreCommands.java         |  1466 ++
 .../cli/commands/DurableClientCommands.java     |   437 +
 ...ExportImportSharedConfigurationCommands.java |   297 +
 .../internal/cli/commands/FunctionCommands.java |   648 +
 .../internal/cli/commands/GfshHelpCommands.java |   111 +
 .../internal/cli/commands/IndexCommands.java    |   683 +
 .../cli/commands/LauncherLifecycleCommands.java |  2816 +++
 .../internal/cli/commands/MemberCommands.java   |   209 +
 .../cli/commands/MiscellaneousCommands.java     |  2135 ++
 .../internal/cli/commands/PDXCommands.java      |   291 +
 .../internal/cli/commands/QueueCommands.java    |   286 +
 .../internal/cli/commands/RegionCommands.java   |   498 +
 .../internal/cli/commands/ShellCommands.java    |  1114 ++
 .../internal/cli/commands/StatusCommands.java   |    96 +
 .../internal/cli/commands/WanCommands.java      |  1296 ++
 .../cli/commands/dto/RegionAttributesInfo.java  |   164 +
 .../cli/commands/dto/RegionDetails.java         |   231 +
 .../cli/commands/dto/RegionMemberDetails.java   |   199 +
 .../cli/converters/BooleanConverter.java        |    54 +
 .../ClusterMemberIdNameConverter.java           |    80 +
 .../converters/ConnectionEndpointConverter.java |   145 +
 .../internal/cli/converters/DirConverter.java   |   174 +
 .../cli/converters/DirPathConverter.java        |   143 +
 .../cli/converters/DiskStoreNameConverter.java  |    93 +
 .../internal/cli/converters/EnumConverter.java  |    67 +
 .../cli/converters/FilePathConverter.java       |   136 +
 .../cli/converters/FilePathStringConverter.java |   132 +
 .../converters/GatewayReceiverIdsConverter.java |    73 +
 .../converters/GatewaySenderIdConverter.java    |    81 +
 .../internal/cli/converters/HelpConverter.java  |    73 +
 .../cli/converters/HintTopicConverter.java      |    74 +
 .../cli/converters/IndexTypeConverter.java      |    57 +
 .../LocatorDiscoveryConfigConverter.java        |    80 +
 .../cli/converters/LocatorIdNameConverter.java  |    79 +
 .../cli/converters/LogLevelConverter.java       |    64 +
 .../cli/converters/MemberGroupConverter.java    |    83 +
 .../cli/converters/MemberIdNameConverter.java   |    82 +
 .../cli/converters/RegionPathConverter.java     |   100 +
 .../cli/converters/StringArrayConverter.java    |    59 +
 .../cli/converters/StringListConverter.java     |    60 +
 .../cli/domain/AsyncEventQueueDetails.java      |    77 +
 .../internal/cli/domain/CacheServerInfo.java    |    72 +
 .../cli/domain/ConnectToLocatorResult.java      |    56 +
 .../internal/cli/domain/DataCommandRequest.java |   214 +
 .../internal/cli/domain/DataCommandResult.java  |   904 +
 .../internal/cli/domain/DiskStoreDetails.java   |   692 +
 .../cli/domain/DurableCqNamesResult.java        |    64 +
 .../cli/domain/EvictionAttributesInfo.java      |   100 +
 .../domain/FixedPartitionAttributesInfo.java    |    70 +
 .../internal/cli/domain/IndexDetails.java       |   330 +
 .../internal/cli/domain/IndexInfo.java          |   103 +
 .../cli/domain/MemberConfigurationInfo.java     |   118 +
 .../internal/cli/domain/MemberInformation.java  |   202 +
 .../internal/cli/domain/MemberResult.java       |   114 +
 .../cli/domain/PartitionAttributesInfo.java     |   171 +
 .../cli/domain/RegionAttributesInfo.java        |   492 +
 .../internal/cli/domain/RegionDescription.java  |   247 +
 .../cli/domain/RegionDescriptionPerMember.java  |   137 +
 .../internal/cli/domain/RegionInformation.java  |   157 +
 .../cli/domain/StackTracesPerMember.java        |    39 +
 .../cli/domain/SubscriptionQueueSizeResult.java |    51 +
 .../cli/exceptions/CliCommandException.java     |    65 +
 .../exceptions/CliCommandInvalidException.java  |    33 +
 .../CliCommandMultiModeOptionException.java     |    48 +
 .../CliCommandNotAvailableException.java        |    33 +
 .../exceptions/CliCommandOptionException.java   |    53 +
 ...CommandOptionHasMultipleValuesException.java |    33 +
 .../CliCommandOptionInvalidException.java       |    34 +
 .../CliCommandOptionMissingException.java       |    35 +
 .../CliCommandOptionNotApplicableException.java |    36 +
 ...liCommandOptionValueConversionException.java |    36 +
 .../CliCommandOptionValueException.java         |    42 +
 .../CliCommandOptionValueMissingException.java  |    36 +
 .../internal/cli/exceptions/CliException.java   |    21 +
 .../exceptions/CreateSubregionException.java    |    41 +
 .../cli/exceptions/ExceptionGenerator.java      |    46 +
 .../cli/exceptions/ExceptionHandler.java        |   106 +
 .../cli/exceptions/IndexNotFoundException.java  |    35 +
 .../functions/AlterRuntimeConfigFunction.java   |    96 +
 .../cli/functions/ChangeLogLevelFunction.java   |    96 +
 .../cli/functions/CliFunctionResult.java        |   248 +
 .../functions/CloseDurableClientFunction.java   |    77 +
 .../cli/functions/CloseDurableCqFunction.java   |    79 +
 .../cli/functions/ContunuousQueryFunction.java  |   152 +
 .../CreateAsyncEventQueueFunction.java          |   183 +
 .../functions/CreateDefinedIndexesFunction.java |    91 +
 .../cli/functions/CreateDiskStoreFunction.java  |    91 +
 .../cli/functions/CreateIndexFunction.java      |   100 +
 .../cli/functions/DataCommandFunction.java      |  1048 +
 .../internal/cli/functions/DeployFunction.java  |   115 +
 .../functions/DescribeDiskStoreFunction.java    |   259 +
 .../functions/DescribeHDFSStoreFunction.java    |    87 +
 .../cli/functions/DestroyDiskStoreFunction.java |   103 +
 .../cli/functions/DestroyIndexFunction.java     |   122 +
 .../cli/functions/ExportConfigFunction.java     |   132 +
 .../cli/functions/ExportDataFunction.java       |    74 +
 .../ExportSharedConfigurationFunction.java      |    72 +
 .../FetchRegionAttributesFunction.java          |   144 +
 .../FetchSharedConfigurationStatusFunction.java |    54 +
 .../functions/GarbageCollectionFunction.java    |    93 +
 .../GatewayReceiverCreateFunction.java          |   226 +
 .../functions/GatewayReceiverFunctionArgs.java  |    80 +
 .../functions/GatewaySenderCreateFunction.java  |   219 +
 .../functions/GatewaySenderFunctionArgs.java    |   144 +
 .../GetMemberConfigInformationFunction.java     |   213 +
 .../functions/GetMemberInformationFunction.java |   150 +
 .../functions/GetRegionDescriptionFunction.java |    62 +
 .../cli/functions/GetRegionsFunction.java       |    75 +
 .../cli/functions/GetStackTracesFunction.java   |    54 +
 .../GetSubscriptionQueueSizeFunction.java       |   101 +
 .../cli/functions/ImportDataFunction.java       |    70 +
 ...ortSharedConfigurationArtifactsFunction.java |    77 +
 .../functions/ListAsyncEventQueuesFunction.java |   109 +
 .../cli/functions/ListDeployedFunction.java     |   106 +
 .../cli/functions/ListDiskStoresFunction.java   |    85 +
 .../functions/ListDurableCqNamesFunction.java   |    99 +
 .../cli/functions/ListFunctionFunction.java     |   115 +
 .../cli/functions/ListIndexFunction.java        |    74 +
 .../LoadSharedConfigurationFunction.java        |    65 +
 .../internal/cli/functions/LogFileFunction.java |   298 +
 .../cli/functions/MemberRegionFunction.java     |    85 +
 .../cli/functions/MembersForRegionFunction.java |    96 +
 .../internal/cli/functions/NetstatFunction.java |   272 +
 .../cli/functions/RebalanceFunction.java        |   124 +
 .../cli/functions/RegionAlterFunction.java      |   344 +
 .../cli/functions/RegionCreateFunction.java     |   415 +
 .../cli/functions/RegionDestroyFunction.java    |    85 +
 .../cli/functions/RegionFunctionArgs.java       |   764 +
 .../cli/functions/ShutDownFunction.java         |    87 +
 .../cli/functions/UndeployFunction.java         |   133 +
 .../cli/functions/UnregisterFunction.java       |    76 +
 .../cli/functions/UserFunctionExecution.java    |   227 +
 .../management/internal/cli/help/CliTopic.java  |   131 +
 .../internal/cli/help/format/Block.java         |    45 +
 .../internal/cli/help/format/DataNode.java      |    51 +
 .../internal/cli/help/format/Help.java          |    47 +
 .../internal/cli/help/format/NewHelp.java       |    55 +
 .../internal/cli/help/format/Row.java           |    30 +
 .../internal/cli/help/utils/FormatOutput.java   |    35 +
 .../internal/cli/help/utils/HelpUtils.java      |   418 +
 .../internal/cli/i18n/CliStrings.java           |  2231 +++
 .../internal/cli/json/GfJsonArray.java          |   242 +
 .../internal/cli/json/GfJsonException.java      |    37 +
 .../internal/cli/json/GfJsonObject.java         |   393 +
 .../management/internal/cli/json/TypedJson.java |   820 +
 .../internal/cli/modes/CommandModes.java        |   155 +
 .../cli/multistep/CLIMultiStepHelper.java       |   400 +
 .../internal/cli/multistep/CLIRemoteStep.java   |    35 +
 .../internal/cli/multistep/CLIStep.java         |    34 +
 .../cli/multistep/CLIStepExecption.java         |    38 +
 .../cli/multistep/MultiStepCommand.java         |    34 +
 .../internal/cli/parser/Argument.java           |    76 +
 .../internal/cli/parser/AvailabilityTarget.java |   107 +
 .../internal/cli/parser/CommandTarget.java      |   188 +
 .../internal/cli/parser/GfshMethodTarget.java   |   134 +
 .../internal/cli/parser/GfshOptionParser.java   |    40 +
 .../internal/cli/parser/MethodParameter.java    |    42 +
 .../management/internal/cli/parser/Option.java  |   223 +
 .../internal/cli/parser/OptionSet.java          |   132 +
 .../internal/cli/parser/Parameter.java          |   119 +
 .../internal/cli/parser/ParserUtils.java        |   190 +
 .../internal/cli/parser/SyntaxConstants.java    |    37 +
 .../cli/parser/jopt/JoptOptionParser.java       |   300 +
 .../preprocessor/EnclosingCharacters.java       |    35 +
 .../cli/parser/preprocessor/Preprocessor.java   |   140 +
 .../parser/preprocessor/PreprocessorUtils.java  |   338 +
 .../internal/cli/parser/preprocessor/Stack.java |    55 +
 .../cli/parser/preprocessor/TrimmedInput.java   |    47 +
 .../cli/remote/CommandExecutionContext.java     |   127 +
 .../internal/cli/remote/CommandProcessor.java   |   166 +
 .../cli/remote/CommandStatementImpl.java        |   100 +
 .../cli/remote/MemberCommandService.java        |    84 +
 .../cli/remote/RemoteExecutionStrategy.java     |   169 +
 .../internal/cli/remote/WrapperThreadLocal.java |    42 +
 .../internal/cli/result/AbstractResultData.java |   340 +
 .../cli/result/CliJsonSerializable.java         |    45 +
 .../cli/result/CliJsonSerializableFactory.java  |    48 +
 .../cli/result/CliJsonSerializableIds.java      |    34 +
 .../internal/cli/result/CommandResult.java      |   661 +
 .../cli/result/CommandResultException.java      |    39 +
 .../cli/result/CompositeResultData.java         |   361 +
 .../internal/cli/result/ErrorResultData.java    |   104 +
 .../internal/cli/result/FileResult.java         |   117 +
 .../internal/cli/result/InfoResultData.java     |    91 +
 .../internal/cli/result/ObjectResultData.java   |    88 +
 .../internal/cli/result/ResultBuilder.java      |   475 +
 .../internal/cli/result/ResultData.java         |    53 +
 .../cli/result/ResultDataException.java         |    35 +
 .../internal/cli/result/TableBuilder.java       |   475 +
 .../internal/cli/result/TableBuilderHelper.java |   176 +
 .../internal/cli/result/TabularResultData.java  |   174 +
 .../management/internal/cli/shell/Gfsh.java     |  1259 ++
 .../internal/cli/shell/GfshConfig.java          |   253 +
 .../cli/shell/GfshExecutionStrategy.java        |   294 +
 .../cli/shell/JMXConnectionException.java       |    56 +
 .../cli/shell/JMXInvocationException.java       |    42 +
 .../internal/cli/shell/JmxOperationInvoker.java |   478 +
 .../internal/cli/shell/MultiCommandHelper.java  |    70 +
 .../internal/cli/shell/OperationInvoker.java    |   135 +
 .../internal/cli/shell/jline/ANSIBuffer.java    |   433 +
 .../internal/cli/shell/jline/ANSIHandler.java   |   113 +
 .../cli/shell/jline/CygwinMinttyTerminal.java   |    56 +
 .../internal/cli/shell/jline/GfshHistory.java   |    63 +
 .../shell/jline/GfshUnsupportedTerminal.java    |    33 +
 .../cli/shell/unsafe/GfshSignalHandler.java     |    85 +
 .../internal/cli/util/CLIConsoleBufferUtil.java |    37 +
 .../internal/cli/util/CauseFinder.java          |   214 +
 .../cli/util/ClasspathScanLoadHelper.java       |   258 +
 .../internal/cli/util/CommandStringBuilder.java |   105 +
 .../internal/cli/util/CommentSkipHelper.java    |    78 +
 .../internal/cli/util/ConnectionEndpoint.java   |    73 +
 .../internal/cli/util/DiskStoreCompacter.java   |   134 +
 .../cli/util/DiskStoreNotFoundException.java    |    49 +
 .../internal/cli/util/DiskStoreUpgrader.java    |   130 +
 .../internal/cli/util/DiskStoreValidater.java   |    60 +
 .../cli/util/EvictionAttributesInfo.java        |    63 +
 .../cli/util/FixedPartitionAttributesInfo.java  |    65 +
 .../internal/cli/util/GfshConsoleReader.java    |    90 +
 .../cli/util/HDFSStoreNotFoundException.java    |    47 +
 .../cli/util/JConsoleNotFoundException.java     |    47 +
 .../management/internal/cli/util/JsonUtil.java  |   606 +
 .../internal/cli/util/MemberInformation.java    |   157 +
 .../cli/util/MemberNotFoundException.java       |    49 +
 .../management/internal/cli/util/MergeLogs.java |    87 +
 .../internal/cli/util/ReadWriteFile.java        |   232 +
 .../cli/util/RegionAttributesDefault.java       |    90 +
 .../cli/util/RegionAttributesNames.java         |    89 +
 .../internal/cli/util/RegionPath.java           |   128 +
 .../cli/util/VisualVmNotFoundException.java     |    48 +
 .../SharedConfigurationWriter.java              |   180 +
 .../callbacks/ConfigurationChangeListener.java  |    59 +
 .../configuration/domain/CacheElement.java      |   253 +
 .../configuration/domain/Configuration.java     |   207 +
 .../domain/ConfigurationChangeResult.java       |   126 +
 .../domain/SharedConfigurationStatus.java       |    26 +
 .../configuration/domain/XmlEntity.java         |   551 +
 .../configuration/functions/AddJarFunction.java |    67 +
 .../functions/AddXmlEntityFunction.java         |    60 +
 .../functions/DeleteJarFunction.java            |    68 +
 .../functions/DeleteXmlEntityFunction.java      |    65 +
 .../functions/GetAllJarsFunction.java           |    67 +
 .../functions/ModifyPropertiesFunction.java     |    65 +
 .../handlers/ConfigurationRequestHandler.java   |    85 +
 ...SharedConfigurationStatusRequestHandler.java |    65 +
 .../messages/ConfigurationRequest.java          |   128 +
 .../messages/ConfigurationResponse.java         |   174 +
 .../SharedConfigurationStatusRequest.java       |    44 +
 .../SharedConfigurationStatusResponse.java      |    78 +
 .../configuration/utils/DtdResolver.java        |    92 +
 .../configuration/utils/XmlConstants.java       |    56 +
 .../internal/configuration/utils/XmlUtils.java  |   685 +
 .../internal/configuration/utils/ZipUtils.java  |   122 +
 .../internal/messages/CompactRequest.java       |   174 +
 .../internal/messages/CompactResponse.java      |    70 +
 .../internal/security/AccessControl.java        |    57 +
 .../internal/security/AccessControlContext.java |    49 +
 .../internal/security/AccessControlMXBean.java  |    29 +
 .../internal/security/CLIOperationContext.java  |   186 +
 .../internal/security/JMXOperationContext.java  |   262 +
 .../internal/security/JSONAuthorization.java    |   292 +
 .../internal/security/MBeanServerWrapper.java   |   343 +
 .../security/ManagementInterceptor.java         |   385 +
 .../management/internal/security/Resource.java  |    33 +
 .../internal/security/ResourceConstants.java    |   161 +
 .../internal/security/ResourceOperation.java    |    40 +
 .../security/ResourceOperationContext.java      |   436 +
 .../unsafe/ReadOpFileAccessController.java      |    63 +
 .../controllers/AbstractCommandsController.java |   711 +
 .../AbstractMultiPartCommandsController.java    |    78 +
 .../controllers/ClientCommandsController.java   |    60 +
 .../controllers/ClusterCommandsController.java  |    49 +
 .../controllers/ConfigCommandsController.java   |   222 +
 .../web/controllers/DataCommandsController.java |   251 +
 .../controllers/DeployCommandsController.java   |   110 +
 .../DiskStoreCommandsController.java            |   184 +
 .../DurableClientCommandsController.java        |   158 +
 .../controllers/FunctionCommandsController.java |   147 +
 .../controllers/IndexCommandsController.java    |   172 +
 .../LauncherLifecycleCommandsController.java    |    55 +
 .../controllers/MemberCommandsController.java   |    78 +
 .../MiscellaneousCommandsController.java        |   275 +
 .../web/controllers/PdxCommandsController.java  |   122 +
 .../controllers/QueueCommandsController.java    |   133 +
 .../controllers/RegionCommandsController.java   |   332 +
 .../controllers/ShellCommandsController.java    |   286 +
 .../web/controllers/WanCommandsController.java  |   403 +
 .../EnvironmentVariablesHandlerInterceptor.java |   179 +
 .../support/MemberMXBeanAdapter.java            |   660 +
 .../management/internal/web/domain/Link.java    |   161 +
 .../internal/web/domain/LinkIndex.java          |   140 +
 .../web/domain/QueryParameterSource.java        |    63 +
 .../internal/web/http/ClientHttpRequest.java    |   451 +
 .../internal/web/http/HttpHeader.java           |   100 +
 .../internal/web/http/HttpMethod.java           |    36 +
 .../SerializableObjectHttpMessageConverter.java |   103 +
 .../web/http/support/SimpleHttpRequester.java   |   237 +
 .../internal/web/io/MultipartFileAdapter.java   |    68 +
 .../web/io/MultipartFileResourceAdapter.java    |    68 +
 .../web/shell/AbstractHttpOperationInvoker.java |   820 +
 .../web/shell/HttpOperationInvoker.java         |    31 +
 .../web/shell/MBeanAccessException.java         |    45 +
 .../RestApiCallForCommandNotFoundException.java |    44 +
 .../web/shell/RestHttpOperationInvoker.java     |   438 +
 .../web/shell/SimpleHttpOperationInvoker.java   |   162 +
 .../shell/support/HttpInvocationHandler.java    |    95 +
 .../shell/support/HttpMBeanProxyFactory.java    |    41 +
 .../internal/web/util/ConvertUtils.java         |   132 +
 .../management/internal/web/util/UriUtils.java  |   257 +
 .../management/membership/ClientMembership.java |    67 +
 .../membership/ClientMembershipEvent.java       |    51 +
 .../membership/ClientMembershipListener.java    |    48 +
 .../ClientMembershipListenerAdapter.java        |    52 +
 .../management/membership/MembershipEvent.java  |    42 +
 .../membership/MembershipListener.java          |    53 +
 .../UniversalMembershipListenerAdapter.java     |   384 +
 .../gemstone/gemfire/management/package.html    |    24 +
 .../memcached/GemFireMemcachedServer.java       |   284 +
 .../main/java/com/gemstone/gemfire/package.html |    86 +
 .../com/gemstone/gemfire/pdx/FieldType.java     |   158 +
 .../com/gemstone/gemfire/pdx/JSONFormatter.java |   630 +
 .../gemfire/pdx/JSONFormatterException.java     |    47 +
 .../gemfire/pdx/NonPortableClassException.java  |    34 +
 .../gemfire/pdx/PdxConfigurationException.java  |    41 +
 .../pdx/PdxFieldAlreadyExistsException.java     |    46 +
 .../pdx/PdxFieldDoesNotExistException.java      |    42 +
 .../pdx/PdxFieldTypeMismatchException.java      |    46 +
 .../gemfire/pdx/PdxInitializationException.java |    51 +
 .../com/gemstone/gemfire/pdx/PdxInstance.java   |   202 +
 .../gemfire/pdx/PdxInstanceFactory.java         |   472 +
 .../com/gemstone/gemfire/pdx/PdxReader.java     |   265 +
 .../pdx/PdxRegistryMismatchException.java       |    37 +
 .../gemstone/gemfire/pdx/PdxSerializable.java   |    71 +
 .../gemfire/pdx/PdxSerializationException.java  |    53 +
 .../com/gemstone/gemfire/pdx/PdxSerializer.java |    94 +
 .../gemstone/gemfire/pdx/PdxUnreadFields.java   |    42 +
 .../com/gemstone/gemfire/pdx/PdxWriter.java     |   479 +
 .../pdx/ReflectionBasedAutoSerializer.java      |   561 +
 .../gemfire/pdx/WritablePdxInstance.java        |    44 +
 .../pdx/internal/AutoSerializableManager.java   |  2304 +++
 .../pdx/internal/CheckTypeRegistryState.java    |   110 +
 .../pdx/internal/ClientTypeRegistration.java    |   418 +
 .../gemfire/pdx/internal/ComparableEnum.java    |    24 +
 .../pdx/internal/ConvertableToBytes.java        |    23 +
 .../gemstone/gemfire/pdx/internal/DataSize.java |    49 +
 .../gemfire/pdx/internal/DefaultPdxField.java   |    40 +
 .../gemstone/gemfire/pdx/internal/EnumId.java   |    96 +
 .../gemstone/gemfire/pdx/internal/EnumInfo.java |   333 +
 .../pdx/internal/FieldNotFoundInPdxVersion.java |    27 +
 .../gemfire/pdx/internal/InternalPdxReader.java |    85 +
 .../pdx/internal/LonerTypeRegistration.java     |   186 +
 .../pdx/internal/NullTypeRegistration.java      |   120 +
 .../gemstone/gemfire/pdx/internal/PdxField.java |   259 +
 .../gemfire/pdx/internal/PdxInputStream.java    |   439 +
 .../gemfire/pdx/internal/PdxInstanceEnum.java   |   183 +
 .../pdx/internal/PdxInstanceFactoryImpl.java    |   270 +
 .../gemfire/pdx/internal/PdxInstanceImpl.java   |   646 +
 .../pdx/internal/PdxInstanceInputStream.java    |   115 +
 .../gemfire/pdx/internal/PdxOutputStream.java   |   242 +
 .../gemfire/pdx/internal/PdxReaderImpl.java     |   904 +
 .../gemfire/pdx/internal/PdxString.java         |   210 +
 .../gemstone/gemfire/pdx/internal/PdxType.java  |   495 +
 .../gemfire/pdx/internal/PdxUnreadData.java     |   118 +
 .../gemfire/pdx/internal/PdxWriterImpl.java     |   910 +
 .../pdx/internal/PeerTypeRegistration.java      |   776 +
 .../pdx/internal/TrackingPdxReaderImpl.java     |   354 +
 .../gemfire/pdx/internal/TypeRegistration.java  |   102 +
 .../gemfire/pdx/internal/TypeRegistry.java      |   525 +
 .../gemfire/pdx/internal/UnreadPdxType.java     |    73 +
 .../internal/WeakConcurrentIdentityHashMap.java |   137 +
 .../pdx/internal/WritablePdxInstanceImpl.java   |   288 +
 .../gemfire/pdx/internal/json/JsonHelper.java   |   182 +
 .../pdx/internal/json/PdxInstanceHelper.java    |   195 +
 .../pdx/internal/json/PdxListHelper.java        |   190 +
 .../gemfire/pdx/internal/json/PdxToJSON.java    |   322 +
 .../pdx/internal/unsafe/UnsafeWrapper.java      |   188 +
 .../java/com/gemstone/gemfire/pdx/package.html  |   112 +
 .../com/gemstone/gemfire/ra/GFConnection.java   |    27 +
 .../gemfire/ra/GFConnectionFactory.java         |    29 +
 .../gemfire/redis/GemFireRedisServer.java       |   717 +
 .../gemfire/security/AccessControl.java         |    95 +
 .../gemfire/security/AuthInitialize.java        |    88 +
 .../security/AuthenticationFailedException.java |    54 +
 .../AuthenticationRequiredException.java        |    54 +
 .../gemfire/security/Authenticator.java         |    87 +
 .../security/GemFireSecurityException.java      |    55 +
 .../security/NotAuthorizedException.java        |    63 +
 .../com/gemstone/gemfire/security/package.html  |    39 +
 .../message/GemFireParameterizedMessage.java    |   554 +
 .../GemFireParameterizedMessageFactory.java     |    54 +
 geode-core/src/main/java/external-overview.html |    43 +
 geode-core/src/main/java/internal-overview.html |    26 +
 .../gemfire/cache/cache-8.1.xsd                 |  1512 ++
 .../gemfire/cache/cache-9.0.xsd                 |  1519 ++
 .../services/org.xml.sax.ext.EntityResolver2    |     2 +
 .../gemstone/gemfire/admin/doc-files/ds4_0.dtd  |   176 +
 .../gemstone/gemfire/admin/doc-files/ds5_0.dtd  |   168 +
 .../internal/doc-files/mbeans-descriptors.dtd   |   232 +
 .../gemfire/admin/jmx/mbeans-descriptors.xml    |  1435 ++
 .../gemfire/cache/doc-files/cache3_0.dtd        |   296 +
 .../gemfire/cache/doc-files/cache4_0.dtd        |   392 +
 .../gemfire/cache/doc-files/cache4_1.dtd        |   485 +
 .../gemfire/cache/doc-files/cache5_0.dtd        |   519 +
 .../gemfire/cache/doc-files/cache5_1.dtd        |   534 +
 .../gemfire/cache/doc-files/cache5_5.dtd        |   651 +
 .../gemfire/cache/doc-files/cache5_7.dtd        |   776 +
 .../gemfire/cache/doc-files/cache5_8.dtd        |   794 +
 .../gemfire/cache/doc-files/cache6_0.dtd        |   862 +
 .../gemfire/cache/doc-files/cache6_1.dtd        |   871 +
 .../gemfire/cache/doc-files/cache6_5.dtd        |   949 +
 .../gemfire/cache/doc-files/cache6_6.dtd        |  1006 +
 .../gemfire/cache/doc-files/cache7_0.dtd        |  1087 ++
 .../gemfire/cache/doc-files/cache8_0.dtd        |  1107 ++
 .../membership/gms/messenger/jgroups-config.xml |    72 +
 .../membership/gms/messenger/jgroups-mcast.xml  |    98 +
 .../internal/i18n/StringIdResourceBundle_ja.txt |  3811 ++++
 .../internal/logging/log4j/log4j2-legacy.xml    |    17 +
 .../gemstone/gemfire/internal/privatekey.ser    |   Bin 0 -> 756 bytes
 .../com/gemstone/gemfire/internal/publickey.ser |   Bin 0 -> 1029 bytes
 .../tools/gfsh/app/windowsbindings.properties   |    83 +
 .../internal/cli/commands/support/gfmon.html    |    28 +
 .../management/internal/cli/modes/commands.json |     3 +
 .../management/internal/cli/modes/connect.json  |    29 +
 .../internal/cli/modes/stopserver.json          |    29 +
 .../com/gemstone/gemfire/statisticsType.dtd     |    87 +
 geode-core/src/main/resources/log4j2-cli.xml    |    17 +
 geode-core/src/main/resources/log4j2.xml        |    23 +
 .../batterytest/greplogs/ExpectedStrings.java   |   188 +
 .../java/batterytest/greplogs/LogConsumer.java  |   290 +
 .../src/test/java/cacheRunner/Portfolio.java    |   129 +
 .../src/test/java/cacheRunner/Position.java     |    74 +
 .../src/test/java/com/company/app/Customer.java |    37 +
 .../src/test/java/com/company/app/DBLoader.java |    64 +
 .../com/company/app/OrdersCacheListener.java    |    52 +
 .../java/com/company/data/DatabaseLoader.java   |    43 +
 .../java/com/company/data/MyDeclarable.java     |    33 +
 .../src/test/java/com/company/data/MySizer.java |    40 +
 .../com/company/data/MyTransactionListener.java |    39 +
 .../src/test/java/com/examples/LinkNode.java    |    78 +
 .../src/test/java/com/examples/SuperClass.java  |    93 +
 .../src/test/java/com/examples/TestObject.java  |    55 +
 .../src/test/java/com/examples/ds/Address.java  |    23 +
 .../src/test/java/com/examples/ds/Company.java  |    43 +
 .../java/com/examples/ds/CompanySerializer.java |    67 +
 .../src/test/java/com/examples/ds/Employee.java |    53 +
 .../com/examples/ds/PutDataSerializables.java   |    55 +
 .../src/test/java/com/examples/ds/User.java     |    58 +
 .../com/examples/snapshot/MyDataSerializer.java |    63 +
 .../java/com/examples/snapshot/MyObject.java    |    69 +
 .../snapshot/MyObjectDataSerializable.java      |    45 +
 .../java/com/examples/snapshot/MyObjectPdx.java |    33 +
 .../snapshot/MyObjectPdxSerializable.java       |    42 +
 .../com/examples/snapshot/MyPdxSerializer.java  |    64 +
 .../java/com/gemstone/gemfire/AppObject.java    |    24 +
 .../com/gemstone/gemfire/CopyJUnitTest.java     |   575 +
 .../com/gemstone/gemfire/DeltaTestImpl.java     |   397 +
 .../gemfire/DiskInstantiatorsJUnitTest.java     |   183 +
 .../com/gemstone/gemfire/GemFireTestCase.java   |    92 +
 .../java/com/gemstone/gemfire/Invariant.java    |    32 +
 .../com/gemstone/gemfire/InvariantResult.java   |    28 +
 .../com/gemstone/gemfire/JUnitTestSetup.java    |   143 +
 .../gemfire/JtaNoninvolvementJUnitTest.java     |   180 +
 .../gemfire/LocalStatisticsJUnitTest.java       |    50 +
 .../com/gemstone/gemfire/LonerDMJUnitTest.java  |   196 +
 .../gemstone/gemfire/StatisticsTestCase.java    |   388 +
 .../gemfire/StatisticsTypeJUnitTest.java        |    77 +
 .../gemfire/SystemFailureJUnitTest.java         |    60 +
 .../com/gemstone/gemfire/TXExpiryJUnitTest.java |   420 +
 .../java/com/gemstone/gemfire/TXJUnitTest.java  |  6825 +++++++
 .../com/gemstone/gemfire/TXWriterJUnitTest.java |   241 +
 .../gemstone/gemfire/TXWriterOOMEJUnitTest.java |    78 +
 .../com/gemstone/gemfire/TXWriterTestCase.java  |   152 +
 .../gemstone/gemfire/TestDataSerializer.java    |   117 +
 .../com/gemstone/gemfire/TimingTestCase.java    |    77 +
 .../com/gemstone/gemfire/UnitTestDoclet.java    |   264 +
 .../gemstone/gemfire/admin/AdminTestHelper.java |    45 +
 .../BindDistributedSystemJUnitTest.java         |    97 +
 .../internal/CacheHealthEvaluatorJUnitTest.java |   208 +
 .../internal/DistributedSystemTestCase.java     |    67 +
 .../admin/internal/HealthEvaluatorTestCase.java |    76 +
 .../MemberHealthEvaluatorJUnitTest.java         |   102 +
 .../cache/AttributesFactoryJUnitTest.java       |   420 +
 .../gemfire/cache/Bug36619JUnitTest.java        |    77 +
 .../gemfire/cache/Bug42039JUnitTest.java        |    96 +
 .../gemfire/cache/Bug52289JUnitTest.java        |    89 +
 .../gemfire/cache/CacheListenerJUnitTest.java   |   336 +
 .../cache/CacheRegionClearStatsDUnitTest.java   |   240 +
 .../gemstone/gemfire/cache/ClientHelper.java    |    73 +
 .../cache/ClientServerTimeSyncDUnitTest.java    |   203 +
 .../cache/ConnectionPoolAndLoaderDUnitTest.java |   489 +
 .../cache/ConnectionPoolFactoryJUnitTest.java   |   424 +
 .../gemfire/cache/OperationJUnitTest.java       |   933 +
 .../gemfire/cache/PoolManagerJUnitTest.java     |   135 +
 .../gemstone/gemfire/cache/ProxyJUnitTest.java  |  1169 ++
 .../gemfire/cache/RegionFactoryJUnitTest.java   |  1195 ++
 .../gemfire/cache/RoleExceptionJUnitTest.java   |   139 +
 .../SerialAsyncEventQueueImplJUnitTest.java     |    62 +
 .../client/ClientCacheFactoryJUnitTest.java     |   343 +
 .../client/ClientRegionFactoryJUnitTest.java    |   532 +
 .../ClientServerRegisterInterestsDUnitTest.java |   256 +
 .../internal/AutoConnectionSourceDUnitTest.java |   598 +
 .../AutoConnectionSourceImplJUnitTest.java      |   398 +
 .../CacheServerSSLConnectionDUnitTest.java      |   424 +
 .../internal/ConnectionPoolImplJUnitTest.java   |   260 +
 .../internal/LocatorLoadBalancingDUnitTest.java |   502 +
 .../cache/client/internal/LocatorTestBase.java  |   365 +
 .../internal/OpExecutorImplJUnitTest.java       |   664 +
 .../client/internal/QueueManagerJUnitTest.java  |   674 +
 .../internal/SSLNoClientAuthDUnitTest.java      |   277 +
 .../internal/ServerBlackListJUnitTest.java      |   123 +
 .../locator/LocatorStatusResponseJUnitTest.java |    77 +
 .../pooling/ConnectionManagerJUnitTest.java     |   878 +
 .../SignalledFlushObserverJUnitTest.java        |    97 +
 .../SortedListForAsyncQueueJUnitTest.java       |   565 +
 .../management/MXMemoryPoolListenerExample.java |   206 +
 .../management/MemoryThresholdsDUnitTest.java   |  2333 +++
 .../MemoryThresholdsOffHeapDUnitTest.java       |  1826 ++
 .../management/ResourceManagerDUnitTest.java    |  1841 ++
 .../ExceptionHandlingJUnitTest.java             |   177 +
 .../mapInterface/MapFunctionalJUnitTest.java    |   170 +
 .../mapInterface/PutAllGlobalLockJUnitTest.java |   109 +
 .../PutOperationContextJUnitTest.java           |   264 +
 .../GetOperationContextImplJUnitTest.java       |   291 +
 .../PartitionRegionHelperDUnitTest.java         |   742 +
 .../BaseLineAndCompareQueryPerfJUnitTest.java   |   537 +
 .../query/Bug32947ValueConstraintJUnitTest.java |   127 +
 .../gemfire/cache/query/BugJUnitTest.java       |   570 +
 .../gemfire/cache/query/CacheUtils.java         |   398 +
 .../cache/query/MultithreadedTester.java        |    73 +
 .../cache/query/PdxStringQueryJUnitTest.java    |   727 +
 .../gemstone/gemfire/cache/query/PerfQuery.java |   330 +
 .../gemfire/cache/query/QueryJUnitTest.java     |   457 +
 .../cache/query/QueryServiceJUnitTest.java      |   252 +
 .../gemfire/cache/query/QueryTestUtils.java     |  1640 ++
 .../cache/query/QueryTestUtilsJUnitTest.java    |   134 +
 .../gemfire/cache/query/RegionJUnitTest.java    |   226 +
 .../cache/query/TypedIteratorJUnitTest.java     |   133 +
 .../com/gemstone/gemfire/cache/query/Utils.java |    57 +
 .../query/cq/dunit/CqQueryTestListener.java     |   398 +
 .../gemfire/cache/query/data/Address.java       |    51 +
 .../gemstone/gemfire/cache/query/data/City.java |    57 +
 .../cache/query/data/CollectionHolder.java      |    90 +
 .../cache/query/data/ComparableWrapper.java     |    70 +
 .../gemfire/cache/query/data/Country.java       |   100 +
 .../gemstone/gemfire/cache/query/data/Data.java |    47 +
 .../gemfire/cache/query/data/District.java      |    65 +
 .../gemfire/cache/query/data/Employee.java      |    72 +
 .../gemfire/cache/query/data/Inventory.java     |   127 +
 .../gemfire/cache/query/data/Keywords.java      |    90 +
 .../gemfire/cache/query/data/Manager.java       |    43 +
 .../gemfire/cache/query/data/Numbers.java       |    52 +
 .../gemfire/cache/query/data/PhoneNo.java       |    42 +
 .../gemfire/cache/query/data/Portfolio.java     |   314 +
 .../gemfire/cache/query/data/PortfolioData.java |   154 +
 .../gemfire/cache/query/data/PortfolioNoDS.java |   240 +
 .../gemfire/cache/query/data/PortfolioPdx.java  |   311 +
 .../gemfire/cache/query/data/Position.java      |   166 +
 .../gemfire/cache/query/data/PositionNoDS.java  |   130 +
 .../gemfire/cache/query/data/PositionPdx.java   |   182 +
 .../query/data/ProhibitedSecurityQuote.java     |    66 +
 .../gemfire/cache/query/data/Quote.java         |   114 +
 .../gemfire/cache/query/data/Restricted.java    |    80 +
 .../cache/query/data/SecurityMaster.java        |   262 +
 .../gemfire/cache/query/data/State.java         |    81 +
 .../gemfire/cache/query/data/Street.java        |    38 +
 .../gemfire/cache/query/data/Student.java       |    77 +
 .../gemfire/cache/query/data/Vehicle.java       |    39 +
 .../gemfire/cache/query/data/Village.java       |    55 +
 .../query/dunit/CloseCacheAuthorization.java    |    62 +
 .../query/dunit/CompactRangeIndexDUnitTest.java |   204 +
 .../cache/query/dunit/CqTimeTestListener.java   |   266 +
 .../cache/query/dunit/GroupByDUnitImpl.java     |   328 +
 .../dunit/GroupByPartitionedQueryDUnitTest.java |   110 +
 .../query/dunit/GroupByQueryDUnitTest.java      |   189 +
 .../cache/query/dunit/HashIndexDUnitTest.java   |   132 +
 .../cache/query/dunit/HelperTestCase.java       |   267 +
 .../dunit/NonDistinctOrderByDUnitImpl.java      |   266 +
 .../NonDistinctOrderByPartitionedDUnitTest.java |   154 +
 .../query/dunit/PdxStringQueryDUnitTest.java    |  1987 ++
 .../dunit/QueryAPITestPartitionResolver.java    |    44 +
 .../cache/query/dunit/QueryAuthorization.java   |    70 +
 .../dunit/QueryDataInconsistencyDUnitTest.java  |   576 +
 .../dunit/QueryIndexUsingXMLDUnitTest.java      |   993 +
 .../QueryParamsAuthorizationDUnitTest.java      |   111 +
 .../QueryUsingFunctionContextDUnitTest.java     |  1041 +
 .../query/dunit/QueryUsingPoolDUnitTest.java    |  2588 +++
 .../cache/query/dunit/RemoteQueryDUnitTest.java |  1502 ++
 ...esourceManagerWithQueryMonitorDUnitTest.java |  1166 ++
 .../query/dunit/SelectStarQueryDUnitTest.java   |  1625 ++
 .../cache/query/facets/lang/Address.java        |    60 +
 .../gemfire/cache/query/facets/lang/Course.java |    91 +
 .../cache/query/facets/lang/Department.java     |    96 +
 .../query/facets/lang/DerivedEmployee.java      |    29 +
 .../cache/query/facets/lang/Employee.java       |   140 +
 .../cache/query/facets/lang/Faculty.java        |   134 +
 .../cache/query/facets/lang/G_Student.java      |    66 +
 .../gemfire/cache/query/facets/lang/Person.java |    96 +
 .../cache/query/facets/lang/Student.java        |   103 +
 .../cache/query/facets/lang/UG_Student.java     |    66 +
 .../gemfire/cache/query/facets/lang/Utils.java  |   134 +
 .../ComparisonOperatorsJUnitTest.java           |   185 +
 .../query/functional/ConstantsJUnitTest.java    |   109 +
 .../query/functional/CountStarJUnitTest.java    |   686 +
 .../CustomerOptimizationsJUnitTest.java         |  1386 ++
 .../DistinctAndNonDistinctQueryJUnitTest.java   |   154 +
 ...ctResultsWithDupValuesInRegionJUnitTest.java |   481 +
 .../query/functional/FunctionJUnitTest.java     |   315 +
 .../functional/GroupByPartitionedJUnitTest.java |    50 +
 .../functional/GroupByReplicatedJUnitTest.java  |    39 +
 .../cache/query/functional/GroupByTestImpl.java |  1010 +
 .../query/functional/GroupByTestInterface.java  |    58 +
 .../query/functional/INOperatorJUnitTest.java   |   471 +
 .../functional/IUM6Bug32345ReJUnitTest.java     |   224 +
 .../cache/query/functional/IUMJUnitTest.java    |   237 +
 .../IUMRCompositeIteratorJUnitTest.java         |   251 +
 .../IUMRMultiIndexesMultiRegionJUnitTest.java   |  1274 ++
 .../IUMRShuffleIteratorsJUnitTest.java          |   489 +
 .../functional/IUMRSingleRegionJUnitTest.java   |   901 +
 ...ependentOperandsInWhereClause2JUnitTest.java |   200 +
 .../IndexCreationDeadLockJUnitTest.java         |   309 +
 .../functional/IndexCreationJUnitTest.java      |  1088 ++
 .../IndexMaintenanceAsynchJUnitTest.java        |   178 +
 .../functional/IndexOnEntrySetJUnitTest.java    |   335 +
 .../functional/IndexOperatorJUnitTest.java      |   225 +
 .../IndexPrimaryKeyUsageJUnitTest.java          |   335 +
 .../IndexUsageInNestedQueryJUnitTest.java       |   152 +
 .../IndexUsageWithAliasAsProjAtrbt.java         |   177 +
 ...IndexUsageWithAliasAsProjAtrbtJUnitTest.java |   185 +
 .../IndexUseMultFrmSnglCondJUnitTest.java       |   274 +
 ...ndexWithSngleFrmAndMultCondQryJUnitTest.java |  1354 ++
 .../functional/IteratorTypeDefEmpJUnitTest.java |    87 +
 .../functional/IteratorTypeDefJUnitTest.java    |   163 +
 .../IteratorTypeDefaultTypesJUnitTest.java      |   426 +
 .../functional/IumMultConditionJUnitTest.java   |   231 +
 .../functional/JavaSerializationJUnitTest.java  |    68 +
 .../functional/LikePredicateJUnitTest.java      |  2386 +++
 .../query/functional/LimitClauseJUnitTest.java  |  1850 ++
 .../functional/LogicalOperatorsJUnitTest.java   |   201 +
 .../cache/query/functional/MiscJUnitTest.java   |   726 +
 .../functional/MultiIndexCreationJUnitTest.java |   385 +
 .../MultiRegionIndexUsageJUnitTest.java         |   903 +
 .../functional/MultipleRegionsJUnitTest.java    |   109 +
 .../NegativeNumberQueriesJUnitTest.java         |   127 +
 .../query/functional/NestedQueryJUnitTest.java  |   511 +
 .../NonDistinctOrderByPartitionedJUnitTest.java |   260 +
 .../NonDistinctOrderByReplicatedJUnitTest.java  |   411 +
 .../NonDistinctOrderByTestImplementation.java   |  1545 ++
 .../query/functional/NumericQueryJUnitTest.java |   337 +
 .../functional/OrderByPartitionedJUnitTest.java |   667 +
 .../functional/OrderByReplicatedJUnitTest.java  |   836 +
 .../functional/OrderByTestImplementation.java   |  1184 ++
 .../functional/ParameterBindingJUnitTest.java   |   178 +
 .../PdxGroupByPartitionedJUnitTest.java         |    40 +
 .../PdxGroupByReplicatedJUnitTest.java          |    37 +
 .../query/functional/PdxGroupByTestImpl.java    |  1025 +
 .../query/functional/PdxOrderByJUnitTest.java   |   357 +
 .../functional/QRegionInterfaceJUnitTest.java   |   164 +
 .../QueryREUpdateInProgressJUnitTest.java       |   436 +
 .../functional/QueryUndefinedJUnitTest.java     |   286 +
 .../functional/ReservedKeywordsJUnitTest.java   |    82 +
 .../ResultsDataSerializabilityJUnitTest.java    |   144 +
 .../query/functional/SelectToDateJUnitTest.java |   263 +
 .../functional/StructMemberAccessJUnitTest.java |   287 +
 .../query/functional/StructSetOrResultsSet.java |   456 +
 .../query/functional/TestNewFunctionSSorRS.java |   129 +
 .../CompiledAggregateFunctionJUnitTest.java     |   200 +
 .../CompiledGroupBySelectJUnitTest.java         |   161 +
 .../query/internal/CompiledInJUnitTest.java     |   460 +
 .../CompiledJunctionInternalsJUnitTest.java     |  3481 ++++
 .../internal/CopyOnReadQueryJUnitTest.java      |   418 +
 .../internal/ExecutionContextJUnitTest.java     |   405 +
 .../query/internal/IndexManagerJUnitTest.java   |   182 +
 .../internal/NWayMergeResultsJUnitTest.java     |   551 +
 .../internal/OrderByComparatorJUnitTest.java    |   206 +
 .../internal/ProjectionAttributeJUnitTest.java  |   241 +
 .../query/internal/QCompilerJUnitTest.java      |   452 +
 .../QueryExecutionContextJUnitTest.java         |    67 +
 ...ueryFromClauseCanonicalizationJUnitTest.java |   257 +
 .../QueryObjectSerializationJUnitTest.java      |   151 +
 .../QueryObserverCallbackJUnitTest.java         |   424 +
 .../query/internal/QueryTraceJUnitTest.java     |   449 +
 .../query/internal/QueryUtilsJUnitTest.java     |   308 +
 .../query/internal/ResultsBagJUnitTest.java     |   307 +
 .../ResultsBagLimitBehaviourJUnitTest.java      |   585 +
 .../ResultsCollectionWrapperLimitJUnitTest.java |   367 +
 .../SelectResultsComparatorJUnitTest.java       |    91 +
 .../StructBagLimitBehaviourJUnitTest.java       |   129 +
 .../query/internal/StructSetJUnitTest.java      |    77 +
 .../internal/aggregate/AggregatorJUnitTest.java |   215 +
 ...syncIndexUpdaterThreadShutdownJUnitTest.java |   123 +
 .../index/AsynchIndexMaintenanceJUnitTest.java  |   261 +
 .../CompactRangeIndexIndexMapJUnitTest.java     |   187 +
 .../index/CompactRangeIndexJUnitTest.java       |   506 +
 ...rrentIndexInitOnOverflowRegionDUnitTest.java |   467 +
 ...ndexOperationsOnOverflowRegionDUnitTest.java |   724 +
 ...pdateWithInplaceObjectModFalseDUnitTest.java |   714 +
 ...ConcurrentIndexUpdateWithoutWLDUnitTest.java |   800 +
 .../index/CopyOnReadIndexDUnitTest.java         |   652 +
 .../index/CopyOnReadIndexJUnitTest.java         |   457 +
 .../DeclarativeIndexCreationJUnitTest.java      |   123 +
 .../query/internal/index/EquijoinDUnitTest.java |   437 +
 .../internal/index/HashIndexJUnitTest.java      |  1592 ++
 .../internal/index/HashIndexSetJUnitTest.java   |   504 +
 .../index/IndexCreationInternalsJUnitTest.java  |   214 +
 .../internal/index/IndexElemArrayJUnitTest.java |   137 +
 .../internal/index/IndexHintJUnitTest.java      |   506 +
 .../query/internal/index/IndexJUnitTest.java    |    97 +
 .../index/IndexMaintainceJUnitTest.java         |   513 +
 .../index/IndexMaintenanceJUnitTest.java        |  1439 ++
 .../index/IndexStatisticsJUnitTest.java         |   862 +
 .../IndexTrackingQueryObserverDUnitTest.java    |   329 +
 .../IndexTrackingQueryObserverJUnitTest.java    |   172 +
 .../query/internal/index/IndexUseJUnitTest.java |  1654 ++
 .../IndexedMergeEquiJoinScenariosJUnitTest.java |   604 +
 ...itializeIndexEntryDestroyQueryDUnitTest.java |   455 +
 .../internal/index/MapIndexStoreJUnitTest.java  |   339 +
 .../MapRangeIndexMaintenanceJUnitTest.java      |   389 +
 .../index/MemoryIndexStoreJUnitTest.java        |   396 +
 ...exStoreWithInplaceModificationJUnitTest.java |    54 +
 .../index/MultiIndexCreationDUnitTest.java      |   201 +
 .../NewDeclarativeIndexCreationJUnitTest.java   |   173 +
 .../PartitionedRegionEquijoinDUnitTest.java     |   130 +
 .../index/PdxCopyOnReadQueryJUnitTest.java      |    77 +
 ...gRegionCreationIndexUpdateTypeJUnitTest.java |    98 +
 .../index/PutAllWithIndexPerfDUnitTest.java     |   216 +
 .../internal/index/RangeIndexAPIJUnitTest.java  |   422 +
 .../PRBasicIndexCreationDUnitTest.java          |  1050 +
 .../PRBasicIndexCreationDeadlockDUnitTest.java  |   235 +
 .../PRBasicMultiIndexCreationDUnitTest.java     |  1065 +
 .../partitioned/PRBasicQueryDUnitTest.java      |   273 +
 .../PRBasicRemoveIndexDUnitTest.java            |   142 +
 .../PRColocatedEquiJoinDUnitTest.java           |  1722 ++
 .../partitioned/PRIndexStatisticsJUnitTest.java |   704 +
 .../partitioned/PRInvalidQueryDUnitTest.java    |   133 +
 .../partitioned/PRInvalidQueryJUnitTest.java    |   127 +
 .../partitioned/PRQueryCacheCloseDUnitTest.java |   341 +
 .../PRQueryCacheClosedJUnitTest.java            |   260 +
 .../query/partitioned/PRQueryDUnitHelper.java   |  3048 +++
 .../query/partitioned/PRQueryDUnitTest.java     |  1228 ++
 .../query/partitioned/PRQueryJUnitTest.java     |   188 +
 .../partitioned/PRQueryNumThreadsJUnitTest.java |   165 +
 .../query/partitioned/PRQueryPerfDUnitTest.java |   505 +
 .../PRQueryRegionCloseDUnitTest.java            |   211 +
 .../PRQueryRegionClosedJUnitTest.java           |   257 +
 .../PRQueryRegionDestroyedDUnitTest.java        |   225 +
 .../PRQueryRegionDestroyedJUnitTest.java        |   254 +
 .../PRQueryRemoteNodeExceptionDUnitTest.java    |   786 +
 .../gemfire/cache/query/transaction/Person.java |    57 +
 .../query/transaction/QueryAndJtaJUnitTest.java |   479 +
 .../internal/ConnectionCountProbeJUnitTest.java |    51 +
 .../cache/snapshot/CacheSnapshotJUnitTest.java  |   128 +
 .../snapshot/ParallelSnapshotDUnitTest.java     |   197 +
 .../gemfire/cache/snapshot/RegionGenerator.java |   125 +
 .../cache/snapshot/RegionSnapshotJUnitTest.java |   294 +
 .../snapshot/SnapshotByteArrayDUnitTest.java    |   138 +
 .../cache/snapshot/SnapshotDUnitTest.java       |   224 +
 .../snapshot/SnapshotPerformanceDUnitTest.java  |   167 +
 .../cache/snapshot/SnapshotTestCase.java        |    92 +
 .../cache/snapshot/WanSnapshotJUnitTest.java    |    98 +
 .../cache/util/PasswordUtilJUnitTest.java       |    41 +
 .../gemfire/cache30/Bug34387DUnitTest.java      |   174 +
 .../gemfire/cache30/Bug34948DUnitTest.java      |   148 +
 .../gemfire/cache30/Bug35214DUnitTest.java      |   214 +
 .../gemfire/cache30/Bug38013DUnitTest.java      |   141 +
 .../gemfire/cache30/Bug38741DUnitTest.java      |   414 +
 .../gemfire/cache30/Bug40255JUnitTest.java      |   143 +
 .../gemfire/cache30/Bug40662JUnitTest.java      |    90 +
 .../gemfire/cache30/Bug44418JUnitTest.java      |   173 +
 .../gemfire/cache30/CacheCloseDUnitTest.java    |   104 +
 .../gemfire/cache30/CacheListenerTestCase.java  |   428 +
 .../gemfire/cache30/CacheLoaderTestCase.java    |   330 +
 .../gemfire/cache30/CacheLogRollDUnitTest.java  |   455 +
 .../gemfire/cache30/CacheMapTxnDUnitTest.java   |   534 +
 ...cheRegionsReliablityStatsCheckDUnitTest.java |   136 +
 .../cache30/CacheSerializableRunnable.java      |   114 +
 .../cache30/CacheStatisticsDUnitTest.java       |   515 +
 .../gemstone/gemfire/cache30/CacheTestCase.java |   653 +
 .../gemfire/cache30/CacheWriterTestCase.java    |   507 +
 .../cache30/CacheXMLPartitionResolver.java      |    78 +
 .../gemfire/cache30/CacheXml30DUnitTest.java    |   827 +
 .../gemfire/cache30/CacheXml40DUnitTest.java    |   150 +
 .../gemfire/cache30/CacheXml41DUnitTest.java    |   643 +
 .../gemfire/cache30/CacheXml45DUnitTest.java    |   398 +
 .../gemfire/cache30/CacheXml51DUnitTest.java    |   351 +
 .../gemfire/cache30/CacheXml55DUnitTest.java    |    53 +
 .../gemfire/cache30/CacheXml57DUnitTest.java    |   658 +
 .../gemfire/cache30/CacheXml58DUnitTest.java    |   505 +
 .../gemfire/cache30/CacheXml60DUnitTest.java    |   336 +
 .../gemfire/cache30/CacheXml61DUnitTest.java    |   125 +
 .../gemfire/cache30/CacheXml65DUnitTest.java    |  1159 ++
 .../gemfire/cache30/CacheXml66DUnitTest.java    |   376 +
 .../gemfire/cache30/CacheXml70DUnitTest.java    |   289 +
 .../gemfire/cache30/CacheXml80DUnitTest.java    |   297 +
 .../gemfire/cache30/CacheXml81DUnitTest.java    |   158 +
 .../gemfire/cache30/CacheXml90DUnitTest.java    |   234 +
 .../gemfire/cache30/CacheXmlTestCase.java       |   157 +
 .../cache30/CachedAllEventsDUnitTest.java       |   111 +
 .../gemfire/cache30/CallbackArgDUnitTest.java   |   185 +
 .../cache30/CertifiableTestCacheListener.java   |   148 +
 .../cache30/ClearMultiVmCallBkDUnitTest.java    |   249 +
 .../gemfire/cache30/ClearMultiVmDUnitTest.java  |   467 +
 .../cache30/ClientMembershipDUnitTest.java      |  1659 ++
 .../ClientMembershipSelectorDUnitTest.java      |    32 +
 .../ClientRegisterInterestDUnitTest.java        |   426 +
 ...ClientRegisterInterestSelectorDUnitTest.java |    32 +
 .../cache30/ClientServerCCEDUnitTest.java       |   633 +
 .../gemfire/cache30/ClientServerTestCase.java   |   391 +
 .../ConcurrentLeaveDuringGIIDUnitTest.java      |   216 +
 ...ibutedNoAckAsyncOverflowRegionDUnitTest.java |    61 +
 ...iskDistributedNoAckAsyncRegionDUnitTest.java |    53 +
 .../DiskDistributedNoAckRegionTestCase.java     |    42 +
 ...ributedNoAckSyncOverflowRegionDUnitTest.java |    63 +
 .../gemfire/cache30/DiskRegionDUnitTest.java    |  1636 ++
 .../gemfire/cache30/DiskRegionTestImpl.java     |   247 +
 .../cache30/DistAckMapMethodsDUnitTest.java     |   705 +
 ...istributedAckOverflowRegionCCEDUnitTest.java |    82 +
 ...tedAckOverflowRegionCCEOffHeapDUnitTest.java |    82 +
 ...tributedAckPersistentRegionCCEDUnitTest.java |   228 +
 ...dAckPersistentRegionCCEOffHeapDUnitTest.java |    82 +
 .../DistributedAckRegionCCEDUnitTest.java       |   694 +
 ...DistributedAckRegionCCEOffHeapDUnitTest.java |    82 +
 ...istributedAckRegionCompressionDUnitTest.java |    72 +
 .../cache30/DistributedAckRegionDUnitTest.java  |   140 +
 .../DistributedAckRegionOffHeapDUnitTest.java   |    82 +
 .../DistributedMulticastRegionDUnitTest.java    |   212 +
 .../DistributedNoAckRegionCCEDUnitTest.java     |   586 +
 ...stributedNoAckRegionCCEOffHeapDUnitTest.java |    82 +
 .../DistributedNoAckRegionDUnitTest.java        |   311 +
 .../DistributedNoAckRegionOffHeapDUnitTest.java |    82 +
 .../gemfire/cache30/DynamicRegionDUnitTest.java |   288 +
 .../gemfire/cache30/GlobalLockingDUnitTest.java |   391 +
 .../cache30/GlobalRegionCCEDUnitTest.java       |   245 +
 .../GlobalRegionCCEOffHeapDUnitTest.java        |    82 +
 .../gemfire/cache30/GlobalRegionDUnitTest.java  |   417 +
 .../cache30/GlobalRegionOffHeapDUnitTest.java   |    89 +
 .../cache30/LRUEvictionControllerDUnitTest.java |   488 +
 .../gemfire/cache30/LocalRegionDUnitTest.java   |   264 +
 .../MemLRUEvictionControllerDUnitTest.java      |   276 +
 .../gemfire/cache30/MultiVMRegionTestCase.java  |  9177 +++++++++
 .../gemfire/cache30/MyGatewayEventFilter1.java  |    61 +
 .../gemfire/cache30/MyGatewayEventFilter2.java  |    66 +
 .../cache30/MyGatewayTransportFilter1.java      |    53 +
 .../cache30/MyGatewayTransportFilter2.java      |    55 +
 .../OffHeapLRUEvictionControllerDUnitTest.java  |    80 +
 .../PRBucketSynchronizationDUnitTest.java       |   306 +
 .../PartitionedRegionCompressionDUnitTest.java  |    70 +
 .../cache30/PartitionedRegionDUnitTest.java     |   554 +
 ...tionedRegionMembershipListenerDUnitTest.java |   150 +
 .../PartitionedRegionOffHeapDUnitTest.java      |    81 +
 .../cache30/PreloadedRegionTestCase.java        |   102 +
 .../gemfire/cache30/ProxyDUnitTest.java         |   546 +
 .../cache30/PutAllCallBkRemoteVMDUnitTest.java  |   401 +
 .../cache30/PutAllCallBkSingleVMDUnitTest.java  |   321 +
 .../gemfire/cache30/PutAllMultiVmDUnitTest.java |   366 +
 .../gemfire/cache30/QueueMsgDUnitTest.java      |   312 +
 .../cache30/RRSynchronizationDUnitTest.java     |   269 +
 .../gemfire/cache30/ReconnectDUnitTest.java     |  1173 ++
 .../ReconnectedCacheServerDUnitTest.java        |    95 +
 .../cache30/RegionAttributesTestCase.java       |   266 +
 .../cache30/RegionExpirationDUnitTest.java      |   276 +
 .../RegionMembershipListenerDUnitTest.java      |   420 +
 .../RegionReliabilityDistAckDUnitTest.java      |    39 +
 .../RegionReliabilityDistNoAckDUnitTest.java    |    39 +
 .../RegionReliabilityGlobalDUnitTest.java       |    39 +
 .../RegionReliabilityListenerDUnitTest.java     |   209 +
 .../cache30/RegionReliabilityTestCase.java      |  1463 ++
 .../gemfire/cache30/RegionTestCase.java         |  4101 ++++
 .../gemfire/cache30/ReliabilityTestCase.java    |    59 +
 .../cache30/RemoveAllMultiVmDUnitTest.java      |   300 +
 .../gemfire/cache30/RequiredRolesDUnitTest.java |   440 +
 .../cache30/RolePerformanceDUnitTest.java       |   188 +
 .../gemfire/cache30/SearchAndLoadDUnitTest.java |  1017 +
 .../gemfire/cache30/SlowRecDUnitTest.java       |  1467 ++
 .../gemfire/cache30/TXDistributedDUnitTest.java |  1527 ++
 .../gemfire/cache30/TXOrderDUnitTest.java       |   434 +
 .../cache30/TXRestrictionsDUnitTest.java        |   100 +
 .../gemfire/cache30/TestCacheCallback.java      |   102 +
 .../gemfire/cache30/TestCacheListener.java      |   222 +
 .../gemfire/cache30/TestCacheLoader.java        |    45 +
 .../gemfire/cache30/TestCacheWriter.java        |   131 +
 .../gemfire/cache30/TestDiskRegion.java         |   257 +
 .../gemstone/gemfire/cache30/TestHeapLRU.java   |    90 +
 .../gemfire/cache30/TestPdxSerializer.java      |    69 +
 .../cache30/TestTransactionListener.java        |    93 +
 .../gemfire/cache30/TestTransactionWriter.java  |    44 +
 .../AnalyzeSerializablesJUnitTest.java          |   325 +
 .../codeAnalysis/ClassAndMethodDetails.java     |   154 +
 .../gemfire/codeAnalysis/ClassAndMethods.java   |    50 +
 .../codeAnalysis/ClassAndVariableDetails.java   |   108 +
 .../gemfire/codeAnalysis/ClassAndVariables.java |    64 +
 .../codeAnalysis/CompiledClassUtils.java        |   433 +
 .../codeAnalysis/decode/CompiledAttribute.java  |    46 +
 .../codeAnalysis/decode/CompiledClass.java      |   276 +
 .../codeAnalysis/decode/CompiledCode.java       |    70 +
 .../codeAnalysis/decode/CompiledField.java      |   116 +
 .../codeAnalysis/decode/CompiledMethod.java     |   153 +
 .../gemfire/codeAnalysis/decode/cp/Cp.java      |    78 +
 .../gemfire/codeAnalysis/decode/cp/CpClass.java |    42 +
 .../codeAnalysis/decode/cp/CpDouble.java        |    40 +
 .../codeAnalysis/decode/cp/CpFieldref.java      |    33 +
 .../gemfire/codeAnalysis/decode/cp/CpFloat.java |    31 +
 .../codeAnalysis/decode/cp/CpInteger.java       |    31 +
 .../decode/cp/CpInterfaceMethodref.java         |    24 +
 .../codeAnalysis/decode/cp/CpInvokeDynamic.java |    33 +
 .../gemfire/codeAnalysis/decode/cp/CpLong.java  |    39 +
 .../codeAnalysis/decode/cp/CpMethodHandle.java  |    33 +
 .../codeAnalysis/decode/cp/CpMethodType.java    |    31 +
 .../codeAnalysis/decode/cp/CpMethodref.java     |    25 +
 .../codeAnalysis/decode/cp/CpNameAndType.java   |    27 +
 .../codeAnalysis/decode/cp/CpString.java        |    25 +
 .../gemfire/codeAnalysis/decode/cp/CpUtf8.java  |   133 +
 .../AbstractLauncherIntegrationJUnitTest.java   |    71 +
 .../distributed/AbstractLauncherJUnitTest.java  |   300 +
 .../AbstractLauncherJUnitTestCase.java          |   255 +
 .../AbstractLauncherServiceStatusJUnitTest.java |   265 +
 .../AbstractLocatorLauncherJUnitTestCase.java   |   106 +
 .../AbstractServerLauncherJUnitTestCase.java    |    94 +
 .../gemfire/distributed/AuthInitializer.java    |    45 +
 .../distributed/DistributedMemberDUnitTest.java |   432 +
 .../DistributedSystemConnectPerf.java           |   135 +
 .../distributed/DistributedSystemDUnitTest.java |   406 +
 .../DistributedSystemIntegrationJUnitTest.java  |    91 +
 .../distributed/DistributedSystemJUnitTest.java |    78 +
 .../distributed/DistributedTestSuite.java       |    36 +
 .../distributed/HostedLocatorsDUnitTest.java    |   195 +
 .../LauncherMemberMXBeanJUnitTest.java          |   153 +
 .../gemfire/distributed/LauncherTestSuite.java  |    48 +
 .../gemfire/distributed/LocatorDUnitTest.java   |  1913 ++
 .../gemfire/distributed/LocatorJUnitTest.java   |   200 +
 .../LocatorLauncherIntegrationJUnitTest.java    |   248 +
 .../distributed/LocatorLauncherJUnitTest.java   |   343 +
 .../LocatorLauncherLocalFileJUnitTest.java      |    52 +
 .../LocatorLauncherLocalJUnitTest.java          |   843 +
 .../LocatorLauncherRemoteFileJUnitTest.java     |   219 +
 .../LocatorLauncherRemoteJUnitTest.java         |  1005 +
 .../distributed/LocatorStateJUnitTest.java      |   208 +
 .../gemfire/distributed/MyAuthenticator.java    |    54 +
 .../gemfire/distributed/MyPrincipal.java        |    29 +
 .../gemfire/distributed/RoleDUnitTest.java      |   170 +
 .../ServerLauncherIntegrationJUnitTest.java     |   312 +
 .../distributed/ServerLauncherJUnitTest.java    |   831 +
 .../ServerLauncherLocalFileJUnitTest.java       |    55 +
 .../ServerLauncherLocalJUnitTest.java           |  1076 ++
 .../ServerLauncherRemoteFileJUnitTest.java      |   223 +
 .../ServerLauncherRemoteJUnitTest.java          |  1428 ++
 .../ServerLauncherWithSpringJUnitTest.java      |    99 +
 .../distributed/SystemAdminDUnitTest.java       |   125 +
 .../AtomicLongWithTerminalStateJUnitTest.java   |    41 +
 .../distributed/internal/Bug40751DUnitTest.java |   138 +
 .../ConsoleDistributionManagerDUnitTest.java    |   441 +
 .../distributed/internal/DateMessage.java       |    98 +
 .../internal/DistributionAdvisorDUnitTest.java  |    98 +
 .../internal/DistributionConfigJUnitTest.java   |   313 +
 .../internal/DistributionManagerDUnitTest.java  |   579 +
 .../InternalDistributedSystemJUnitTest.java     |   831 +
 .../gemfire/distributed/internal/LDM.java       |    71 +
 .../internal/LocatorLoadSnapshotJUnitTest.java  |   384 +
 .../internal/ProduceDateMessages.java           |    53 +
 .../internal/ProductUseLogDUnitTest.java        |   108 +
 .../internal/ProductUseLogJUnitTest.java        |    86 +
 .../internal/ServerLocatorJUnitTest.java        |    74 +
 .../internal/SharedConfigurationJUnitTest.java  |    57 +
 .../internal/StartupMessageDataJUnitTest.java   |   296 +
 .../deadlock/DeadlockDetectorJUnitTest.java     |   333 +
 .../deadlock/DependencyGraphJUnitTest.java      |    87 +
 .../GemFireDeadlockDetectorDUnitTest.java       |   243 +
 .../deadlock/UnsafeThreadLocalJUnitTest.java    |    61 +
 .../internal/locks/CollaborationJUnitTest.java  |   617 +
 .../internal/locks/DLockGrantorHelper.java      |    98 +
 .../locks/DLockReentrantLockJUnitTest.java      |    84 +
 .../membership/MembershipJUnitTest.java         |   364 +
 .../internal/membership/NetViewJUnitTest.java   |   269 +
 .../membership/gms/GMSMemberJUnitTest.java      |   164 +
 .../membership/gms/MembershipManagerHelper.java |   171 +
 .../gms/auth/GMSAuthenticatorJUnitTest.java     |   316 +
 .../gms/fd/GMSHealthMonitorJUnitTest.java       |   638 +
 .../locator/GMSLocatorRecoveryJUnitTest.java    |   186 +
 .../gms/membership/GMSJoinLeaveJUnitTest.java   |  1231 ++
 .../gms/membership/StatRecorderJUnitTest.java   |   227 +
 .../messenger/GMSQuorumCheckerJUnitTest.java    |   359 +
 .../membership/gms/messenger/InterceptUDP.java  |   109 +
 .../messenger/JGroupsMessengerJUnitTest.java    |   895 +
 .../gms/mgr/GMSMembershipManagerJUnitTest.java  |   436 +
 .../StreamingOperationManyDUnitTest.java        |   223 +
 .../StreamingOperationOneDUnitTest.java         |   182 +
 .../TcpServerBackwardCompatDUnitTest.java       |   257 +
 .../internal/tcpserver/TcpServerJUnitTest.java  |   221 +
 .../support/DistributedSystemAdapter.java       |   258 +
 .../gemfire/disttx/CacheMapDistTXDUnitTest.java |    65 +
 .../gemfire/disttx/DistTXDebugDUnitTest.java    |  1014 +
 .../disttx/DistTXDistributedTestSuite.java      |    42 +
 .../gemfire/disttx/DistTXExpiryJUnitTest.java   |    57 +
 .../gemfire/disttx/DistTXJUnitTest.java         |    96 +
 .../disttx/DistTXManagerImplJUnitTest.java      |    54 +
 .../gemfire/disttx/DistTXOrderDUnitTest.java    |    55 +
 .../disttx/DistTXPersistentDebugDUnitTest.java  |   132 +
 .../DistTXReleasesOffHeapOnCloseJUnitTest.java  |    53 +
 .../disttx/DistTXRestrictionsDUnitTest.java     |    46 +
 .../disttx/DistTXWithDeltaDUnitTest.java        |    38 +
 .../gemfire/disttx/DistTXWriterJUnitTest.java   |    56 +
 .../disttx/DistTXWriterOOMEJUnitTest.java       |    57 +
 .../disttx/DistributedTransactionDUnitTest.java |  2203 +++
 .../gemfire/disttx/PRDistTXDUnitTest.java       |    65 +
 .../gemfire/disttx/PRDistTXJUnitTest.java       |    92 +
 .../disttx/PRDistTXWithVersionsDUnitTest.java   |    66 +
 ...entPartitionedRegionWithDistTXDUnitTest.java |    46 +
 .../internal/AbstractConfigJUnitTest.java       |   114 +
 .../gemfire/internal/ArrayEqualsJUnitTest.java  |   193 +
 .../gemfire/internal/AvailablePortHelper.java   |   133 +
 .../internal/AvailablePortJUnitTest.java        |    75 +
 ...wardCompatibilitySerializationDUnitTest.java |   300 +
 .../gemfire/internal/Bug49856JUnitTest.java     |    85 +
 .../gemfire/internal/Bug51616JUnitTest.java     |    61 +
 .../gemfire/internal/ByteArrayData.java         |    73 +
 .../gemstone/gemfire/internal/ClassBuilder.java |   291 +
 .../ClassNotFoundExceptionDUnitTest.java        |   244 +
 .../internal/ClassPathLoaderJUnitTest.java      |  1262 ++
 .../gemfire/internal/ConfigSourceJUnitTest.java |    89 +
 .../internal/CopyOnWriteHashSetJUnitTest.java   |   103 +
 .../internal/DataSerializableJUnitTest.java     |  3671 ++++
 .../gemfire/internal/FileUtilJUnitTest.java     |   107 +
 .../internal/GemFireStatSamplerJUnitTest.java   |   618 +
 .../GemFireVersionIntegrationJUnitTest.java     |    54 +
 .../internal/GemFireVersionJUnitTest.java       |   102 +
 .../internal/HeapDataOutputStreamJUnitTest.java |   154 +
 .../gemfire/internal/InlineKeyJUnitTest.java    |   173 +
 .../gemfire/internal/JSSESocketJUnitTest.java   |   247 +
 .../internal/JarClassLoaderJUnitTest.java       |   828 +
 .../gemfire/internal/JarDeployerDUnitTest.java  |   747 +
 .../com/gemstone/gemfire/internal/JavaExec.java |    69 +
 .../gemfire/internal/LineWrapUnitJUnitTest.java |    52 +
 .../gemstone/gemfire/internal/LongBuffer.java   |    96 +
 .../gemfire/internal/NanoTimerJUnitTest.java    |   134 +
 .../gemfire/internal/ObjIdMapJUnitTest.java     |   256 +
 .../internal/OneTaskOnlyDecoratorJUnitTest.java |   165 +
 .../internal/PdxDeleteFieldDUnitTest.java       |   213 +
 .../internal/PdxDeleteFieldJUnitTest.java       |   214 +
 .../gemfire/internal/PdxRenameDUnitTest.java    |   217 +
 .../gemfire/internal/PdxRenameJUnitTest.java    |   164 +
 .../PutAllOperationContextJUnitTest.java        |   197 +
 .../internal/SSLConfigIntegrationJUnitTest.java |    51 +
 .../gemfire/internal/SSLConfigJUnitTest.java    |  1233 ++
 ...hreadPoolExecutorWithKeepAliveJUnitTest.java |   342 +
 .../internal/SimpleStatSamplerJUnitTest.java    |   358 +
 .../gemfire/internal/SocketCloserJUnitTest.java |   195 +
 .../internal/SocketCloserWithWaitJUnitTest.java |    38 +
 .../StatArchiveWriterReaderJUnitTest.java       |  1735 ++
 .../gemfire/internal/StatSamplerJUnitTest.java  |   361 +
 .../gemfire/internal/StatSamplerTestCase.java   |   185 +
 .../internal/UniqueIdGeneratorJUnitTest.java    |    68 +
 .../internal/cache/AbstractRegionJUnitTest.java |   513 +
 .../internal/cache/AbstractRegionMapTest.java   |   186 +
 .../gemfire/internal/cache/BackupDUnitTest.java |   800 +
 .../gemfire/internal/cache/BackupJUnitTest.java |   435 +
 .../internal/cache/BucketRegionJUnitTest.java   |   208 +
 .../internal/cache/Bug33359DUnitTest.java       |   160 +
 .../internal/cache/Bug33726DUnitTest.java       |   161 +
 .../internal/cache/Bug33726JUnitTest.java       |   134 +
 .../Bug34179TooManyFilesOpenJUnitTest.java      |   130 +
 .../internal/cache/Bug34583JUnitTest.java       |   101 +
 .../internal/cache/Bug37241DUnitTest.java       |   231 +
 .../internal/cache/Bug37244JUnitTest.java       |   279 +
 .../internal/cache/Bug37377DUnitTest.java       |   380 +
 .../internal/cache/Bug37500JUnitTest.java       |   184 +
 .../internal/cache/Bug39079DUnitTest.java       |   410 +
 .../internal/cache/Bug40299DUnitTest.java       |   304 +
 .../internal/cache/Bug40632DUnitTest.java       |   148 +
 .../internal/cache/Bug41091DUnitTest.java       |   174 +
 .../internal/cache/Bug41733DUnitTest.java       |   216 +
 .../internal/cache/Bug41957DUnitTest.java       |   161 +
 .../internal/cache/Bug42055DUnitTest.java       |    88 +
 .../internal/cache/Bug45164DUnitTest.java       |   104 +
 .../internal/cache/Bug45934DUnitTest.java       |   134 +
 .../internal/cache/Bug47667DUnitTest.java       |    87 +
 .../internal/cache/Bug48182JUnitTest.java       |   200 +
 .../internal/cache/CacheAdvisorDUnitTest.java   |   281 +
 .../cache/CacheLifecycleListenerJUnitTest.java  |   324 +
 .../internal/cache/CacheServiceJUnitTest.java   |    59 +
 .../cache/ChunkValueWrapperJUnitTest.java       |   188 +
 .../internal/cache/ClearDAckDUnitTest.java      |   286 +
 .../internal/cache/ClearGlobalDUnitTest.java    |   214 +
 ...ssagesRegionCreationAndDestroyJUnitTest.java |   173 +
 .../cache/ClientServerGetAllDUnitTest.java      |   817 +
 ...ServerInvalidAndDestroyedEntryDUnitTest.java |   514 +
 .../ClientServerTransactionCCEDUnitTest.java    |   108 +
 .../cache/ClientServerTransactionDUnitTest.java |  3389 ++++
 .../cache/ComplexDiskRegionJUnitTest.java       |   169 +
 .../ConcurrentDestroySubRegionDUnitTest.java    |   173 +
 ...entFlushingAndRegionOperationsJUnitTest.java |   641 +
 .../cache/ConcurrentMapLocalJUnitTest.java      |   105 +
 .../cache/ConcurrentMapOpsDUnitTest.java        |  1238 ++
 .../ConcurrentRegionOperationsJUnitTest.java    |   925 +
 ...rentRollingAndRegionOperationsJUnitTest.java |   996 +
 .../internal/cache/ConflationJUnitTest.java     |   409 +
 .../cache/ConnectDisconnectDUnitTest.java       |   185 +
 .../cache/CustomerIDPartitionResolver.java      |    86 +
 .../internal/cache/DeltaFaultInDUnitTest.java   |   145 +
 .../cache/DeltaPropagationDUnitTest.java        |  1463 ++
 .../cache/DeltaPropagationStatsDUnitTest.java   |   608 +
 .../internal/cache/DeltaSizingDUnitTest.java    |   265 +
 .../gemfire/internal/cache/DiskIFJUnitTest.java |   796 +
 .../gemfire/internal/cache/DiskIdJUnitTest.java |   238 +
 .../internal/cache/DiskInitFileJUnitTest.java   |   113 +
 .../cache/DiskOfflineCompactionJUnitTest.java   |   826 +
 .../internal/cache/DiskOldAPIsJUnitTest.java    |   437 +
 ...iskRandomOperationsAndRecoveryJUnitTest.java |   715 +
 .../cache/DiskRegByteArrayDUnitTest.java        |   270 +
 .../cache/DiskRegCacheXmlJUnitTest.java         |   299 +
 .../DiskRegCachexmlGeneratorJUnitTest.java      |   302 +
 .../internal/cache/DiskRegCbkChkJUnitTest.java  |   118 +
 .../DiskRegOplogSwtchingAndRollerJUnitTest.java |  1021 +
 .../cache/DiskRegRecoveryJUnitTest.java         |  1495 ++
 .../cache/DiskRegionAsyncRecoveryJUnitTest.java |   538 +
 ...RegionChangingRegionAttributesJUnitTest.java |   143 +
 .../cache/DiskRegionClearJUnitTest.java         |   288 +
 .../internal/cache/DiskRegionHelperFactory.java |   263 +
 .../DiskRegionIllegalArguementsJUnitTest.java   |   281 +
 ...iskRegionIllegalCacheXMLvaluesJUnitTest.java |   146 +
 .../internal/cache/DiskRegionJUnitTest.java     |  3141 +++
 .../internal/cache/DiskRegionProperties.java    |   222 +
 .../internal/cache/DiskRegionTestingBase.java   |   404 +
 .../cache/DiskStoreFactoryJUnitTest.java        |   450 +
 .../cache/DiskWriteAttributesJUnitTest.java     |   223 +
 ...DistrbutedRegionProfileOffHeapDUnitTest.java |   252 +
 .../cache/DistributedCacheTestCase.java         |   472 +
 .../cache/EnumListenerEventJUnitTest.java       |    73 +
 .../internal/cache/EventTrackerDUnitTest.java   |   418 +
 .../internal/cache/EvictionDUnitTest.java       |   247 +
 .../cache/EvictionObjectSizerDUnitTest.java     |   358 +
 .../internal/cache/EvictionStatsDUnitTest.java  |   553 +
 .../internal/cache/EvictionTestBase.java        |   577 +
 .../internal/cache/FaultingInJUnitTest.java     |   236 +
 .../cache/FixedPRSinglehopDUnitTest.java        |   876 +
 .../internal/cache/GIIDeltaDUnitTest.java       |  2632 +++
 .../internal/cache/GIIFlowControlDUnitTest.java |   455 +
 .../internal/cache/GridAdvisorDUnitTest.java    |  1081 ++
 .../HAOverflowMemObjectSizerDUnitTest.java      |   288 +
 .../cache/IncrementalBackupDUnitTest.java       |  1104 ++
 .../cache/InterruptClientServerDUnitTest.java   |   252 +
 .../internal/cache/InterruptDiskJUnitTest.java  |   135 +
 ...InterruptsConserveSocketsFalseDUnitTest.java |    37 +
 .../internal/cache/InterruptsDUnitTest.java     |   213 +
 .../internal/cache/IteratorDUnitTest.java       |   104 +
 .../LIFOEvictionAlgoEnabledRegionJUnitTest.java |   343 +
 ...victionAlgoMemoryEnabledRegionJUnitTest.java |   436 +
 .../internal/cache/MapClearGIIDUnitTest.java    |   285 +
 .../internal/cache/MapInterface2JUnitTest.java  |   281 +
 .../internal/cache/MapInterfaceJUnitTest.java   |   301 +
 .../internal/cache/MockCacheService.java        |    24 +
 .../internal/cache/MockCacheServiceImpl.java    |    39 +
 .../MultipleOplogsRollingFeatureJUnitTest.java  |   257 +
 .../cache/NetSearchMessagingDUnitTest.java      |   442 +
 .../cache/OffHeapEvictionDUnitTest.java         |   135 +
 .../cache/OffHeapEvictionStatsDUnitTest.java    |    88 +
 .../gemfire/internal/cache/OffHeapTestUtil.java |    64 +
 .../cache/OfflineSnapshotJUnitTest.java         |   137 +
 .../gemfire/internal/cache/OldVLJUnitTest.java  |    92 +
 .../cache/OldValueImporterTestBase.java         |   181 +
 .../cache/OplogEntryIdMapJUnitTest.java         |    99 +
 .../cache/OplogEntryIdSetJUnitTest.java         |    83 +
 .../gemfire/internal/cache/OplogJUnitTest.java  |  4034 ++++
 .../internal/cache/OplogRVVJUnitTest.java       |   173 +
 .../cache/OrderedTombstoneMapJUnitTest.java     |    59 +
 .../cache/P2PDeltaPropagationDUnitTest.java     |   599 +
 .../internal/cache/PRBadToDataDUnitTest.java    |   109 +
 .../cache/PRConcurrentMapOpsJUnitTest.java      |   231 +
 .../cache/PRDataStoreMemoryJUnitTest.java       |   154 +
 .../PRDataStoreMemoryOffHeapJUnitTest.java      |    51 +
 .../gemfire/internal/cache/PRTXJUnitTest.java   |   150 +
 .../cache/PartitionAttributesImplJUnitTest.java |   543 +
 .../cache/PartitionListenerDUnitTest.java       |   203 +
 ...dRegionAPIConserveSocketsFalseDUnitTest.java |    45 +
 .../cache/PartitionedRegionAPIDUnitTest.java    |  1512 ++
 .../PartitionedRegionAsSubRegionDUnitTest.java  |   337 +
 ...gionBucketCreationDistributionDUnitTest.java |  1543 ++
 .../PartitionedRegionCacheCloseDUnitTest.java   |   297 +
 ...rtitionedRegionCacheLoaderForRootRegion.java |    62 +
 ...artitionedRegionCacheLoaderForSubRegion.java |    65 +
 ...rtitionedRegionCacheXMLExampleDUnitTest.java |   134 +
 .../PartitionedRegionCreationDUnitTest.java     |   914 +
 .../PartitionedRegionCreationJUnitTest.java     |   548 +
 .../cache/PartitionedRegionDUnitTestCase.java   |   531 +
 .../PartitionedRegionDataStoreJUnitTest.java    |   260 +
 ...rtitionedRegionDelayedRecoveryDUnitTest.java |   310 +
 .../PartitionedRegionDestroyDUnitTest.java      |   309 +
 .../PartitionedRegionEntryCountDUnitTest.java   |   149 +
 .../PartitionedRegionEvictionDUnitTest.java     |  1762 ++
 .../cache/PartitionedRegionHADUnitTest.java     |   506 +
 ...onedRegionHAFailureAndRecoveryDUnitTest.java |   535 +
 .../cache/PartitionedRegionHelperJUnitTest.java |    48 +
 .../PartitionedRegionInvalidateDUnitTest.java   |   212 +
 ...artitionedRegionLocalMaxMemoryDUnitTest.java |   318 +
 ...nedRegionLocalMaxMemoryOffHeapDUnitTest.java |    73 +
 .../PartitionedRegionMultipleDUnitTest.java     |   600 +
 ...rtitionedRegionOffHeapEvictionDUnitTest.java |    94 +
 .../cache/PartitionedRegionPRIDDUnitTest.java   |   270 +
 .../cache/PartitionedRegionQueryDUnitTest.java  |  1160 ++
 ...artitionedRegionQueryEvaluatorJUnitTest.java |   307 +
 ...artitionedRegionRedundancyZoneDUnitTest.java |   165 +
 ...tionedRegionSerializableObjectJUnitTest.java |   178 +
 .../PartitionedRegionSingleHopDUnitTest.java    |  2258 +++
 ...RegionSingleHopWithServerGroupDUnitTest.java |  1665 ++
 ...onedRegionSingleNodeOperationsJUnitTest.java |  1542 ++
 .../cache/PartitionedRegionSizeDUnitTest.java   |   609 +
 .../cache/PartitionedRegionStatsDUnitTest.java  |   649 +
 .../cache/PartitionedRegionStatsJUnitTest.java  |   534 +
 .../cache/PartitionedRegionTestHelper.java      |   337 +
 .../PartitionedRegionTestUtilsDUnitTest.java    |   576 +
 .../PartitionedRegionWithSameNameDUnitTest.java |   924 +
 .../PersistentPartitionedRegionJUnitTest.java   |   225 +
 .../internal/cache/PutAllDAckDUnitTest.java     |   228 +
 .../internal/cache/PutAllGlobalDUnitTest.java   |   296 +
 .../cache/RegionEntryFlagsJUnitTest.java        |    97 +
 .../internal/cache/RegionListenerJUnitTest.java |    63 +
 .../cache/RemotePutReplyMessageJUnitTest.java   |    53 +
 .../cache/RemoteTransactionCCEDUnitTest.java    |    35 +
 .../cache/RemoteTransactionDUnitTest.java       |  4322 +++++
 .../internal/cache/RemoveAllDAckDUnitTest.java  |   173 +
 .../internal/cache/RemoveDAckDUnitTest.java     |   201 +
 .../internal/cache/RemoveGlobalDUnitTest.java   |   250 +
 .../internal/cache/RunCacheInOldGemfire.java    |   188 +
 .../cache/SimpleDiskRegionJUnitTest.java        |   390 +
 .../internal/cache/SingleHopStatsDUnitTest.java |   523 +
 .../internal/cache/SizingFlagDUnitTest.java     |  1039 +
 .../internal/cache/SnapshotTestUtil.java        |    47 +
 .../internal/cache/SystemFailureDUnitTest.java  |   877 +
 .../internal/cache/TXManagerImplJUnitTest.java  |   334 +
 .../cache/TXReservationMgrJUnitTest.java        |   150 +
 .../gemfire/internal/cache/TestDelta.java       |    96 +
 .../internal/cache/TestHelperForHydraTests.java |    32 +
 .../internal/cache/TestNonSizerObject.java      |    63 +
 .../internal/cache/TestObjectSizerImpl.java     |    72 +
 .../gemfire/internal/cache/TestUtils.java       |    32 +
 .../cache/TombstoneCreationJUnitTest.java       |   231 +
 .../cache/TransactionsWithDeltaDUnitTest.java   |   376 +
 .../internal/cache/UnitTestValueHolder.java     |    43 +
 .../gemfire/internal/cache/UnzipUtil.java       |    84 +
 .../internal/cache/UpdateVersionJUnitTest.java  |   407 +
 .../gemfire/internal/cache/VLJUnitTest.java     |   130 +
 .../cache/control/FilterByPathJUnitTest.java    |    96 +
 .../cache/control/MemoryMonitorJUnitTest.java   |   762 +
 .../control/MemoryMonitorOffHeapJUnitTest.java  |   338 +
 .../control/MemoryThresholdsJUnitTest.java      |   152 +
 .../control/RebalanceOperationDUnitTest.java    |  3267 ++++
 .../control/TestMemoryThresholdListener.java    |   169 +
 ...skRegOverflowAsyncGetInMemPerfJUnitTest.java |   136 +
 ...iskRegOverflowAsyncJUnitPerformanceTest.java |   167 +
 ...lowSyncGetInMemPerfJUnitPerformanceTest.java |   129 +
 ...DiskRegOverflowSyncJUnitPerformanceTest.java |   169 +
 ...egionOverflowAsyncRollingOpLogJUnitTest.java |   225 +
 ...RegionOverflowSyncRollingOpLogJUnitTest.java |   223 +
 .../DiskRegionPerfJUnitPerformanceTest.java     |   570 +
 .../DiskRegionPersistOnlySyncJUnitTest.java     |   234 +
 ...DiskRegionRollOpLogJUnitPerformanceTest.java |   638 +
 ...ltiThreadedOplogPerJUnitPerformanceTest.java |   216 +
 .../cache/execute/Bug51193DUnitTest.java        |   245 +
 .../ClientServerFunctionExecutionDUnitTest.java |   892 +
 .../execute/ColocationFailoverDUnitTest.java    |   528 +
 .../cache/execute/CustomResultCollector.java    |    50 +
 .../execute/CustomerIDPartitionResolver.java    |    82 +
 ...ributedRegionFunctionExecutionDUnitTest.java |  1356 ++
 .../FunctionExecution_ExceptionDUnitTest.java   |   646 +
 .../execute/FunctionServiceStatsDUnitTest.java  |  1364 ++
 .../cache/execute/LocalDataSetDUnitTest.java    |   390 +
 .../cache/execute/LocalDataSetFunction.java     |    90 +
 .../execute/LocalDataSetIndexingDUnitTest.java  |   303 +
 .../LocalFunctionExecutionDUnitTest.java        |   185 +
 .../MemberFunctionExecutionDUnitTest.java       |   673 +
 .../MultiRegionFunctionExecutionDUnitTest.java  |   298 +
 .../execute/MyFunctionExecutionException.java   |    59 +
 .../cache/execute/MyTransactionFunction.java    |   517 +
 .../OnGroupsFunctionExecutionDUnitTest.java     |  1246 ++
 ...ntServerFunctionExecutionNoAckDUnitTest.java |   250 +
 ...tServerRegionFunctionExecutionDUnitTest.java |  1638 ++
 ...egionFunctionExecutionFailoverDUnitTest.java |   499 +
 ...onFunctionExecutionNoSingleHopDUnitTest.java |  1189 ++
 ...onExecutionSelectorNoSingleHopDUnitTest.java |  1153 ++
 ...gionFunctionExecutionSingleHopDUnitTest.java |  1177 ++
 .../cache/execute/PRClientServerTestBase.java   |   819 +
 .../cache/execute/PRColocationDUnitTest.java    |  2652 +++
 .../execute/PRCustomPartitioningDUnitTest.java  |   575 +
 .../execute/PRFunctionExecutionDUnitTest.java   |  3213 +++
 .../PRFunctionExecutionTimeOutDUnitTest.java    |   885 +
 ...ctionExecutionWithResultSenderDUnitTest.java |   663 +
 .../execute/PRPerformanceTestDUnitTest.java     |   425 +
 .../cache/execute/PRTransactionDUnitTest.java   |   749 +
 .../PRTransactionWithVersionsDUnitTest.java     |    29 +
 .../internal/cache/execute/PerfFunction.java    |    69 +
 .../internal/cache/execute/PerfTxFunction.java  |    74 +
 .../cache/execute/PerformanceTestFunction.java  |    74 +
 .../execute/SingleHopGetAllPutAllDUnitTest.java |   198 +
 .../internal/cache/execute/TestFunction.java    |   150 +
 .../internal/cache/execute/data/CustId.java     |    72 +
 .../internal/cache/execute/data/Customer.java   |    77 +
 .../internal/cache/execute/data/Order.java      |    65 +
 .../internal/cache/execute/data/OrderId.java    |    82 +
 .../internal/cache/execute/data/Shipment.java   |    65 +
 .../internal/cache/execute/data/ShipmentId.java |    89 +
 .../SimpleExtensionPointJUnitTest.java          |   215 +
 .../extension/mock/AbstractMockExtension.java   |    61 +
 .../mock/AbstractMockExtensionXmlGenerator.java |    41 +
 .../mock/AlterMockCacheExtensionFunction.java   |    90 +
 .../mock/AlterMockRegionExtensionFunction.java  |   104 +
 .../mock/CreateMockCacheExtensionFunction.java  |    86 +
 .../mock/CreateMockRegionExtensionFunction.java |   101 +
 .../mock/DestroyMockCacheExtensionFunction.java |    89 +
 .../DestroyMockRegionExtensionFunction.java     |    99 +
 .../extension/mock/MockCacheExtension.java      |    53 +
 .../mock/MockCacheExtensionXmlGenerator.java    |    57 +
 .../extension/mock/MockExtensionCommands.java   |   228 +
 .../extension/mock/MockExtensionXmlParser.java  |   102 +
 .../extension/mock/MockRegionExtension.java     |    47 +
 .../mock/MockRegionExtensionXmlGenerator.java   |    57 +
 ...gionFunctionFunctionInvocationException.java |    60 +
 .../functions/DistributedRegionFunction.java    |    97 +
 .../cache/functions/LocalDataSetFunction.java   |    89 +
 .../internal/cache/functions/TestFunction.java  |  1148 ++
 .../ha/BlockingHARQAddOperationJUnitTest.java   |   239 +
 .../cache/ha/BlockingHARQStatsJUnitTest.java    |    77 +
 .../cache/ha/BlockingHARegionJUnitTest.java     |   480 +
 .../ha/BlockingHARegionQueueJUnitTest.java      |   213 +
 .../cache/ha/Bug36853EventsExpiryDUnitTest.java |   304 +
 .../internal/cache/ha/Bug48571DUnitTest.java    |   262 +
 .../internal/cache/ha/Bug48879DUnitTest.java    |   219 +
 .../internal/cache/ha/ConflatableObject.java    |   221 +
 .../cache/ha/EventIdOptimizationDUnitTest.java  |   583 +
 .../cache/ha/EventIdOptimizationJUnitTest.java  |   253 +
 .../internal/cache/ha/FailoverDUnitTest.java    |   345 +
 .../internal/cache/ha/HABugInPutDUnitTest.java  |   181 +
 .../internal/cache/ha/HAClearDUnitTest.java     |   657 +
 .../cache/ha/HAConflationDUnitTest.java         |   443 +
 .../internal/cache/ha/HADuplicateDUnitTest.java |   327 +
 .../cache/ha/HAEventIdPropagationDUnitTest.java |   851 +
 .../internal/cache/ha/HAExpiryDUnitTest.java    |   285 +
 .../internal/cache/ha/HAGIIBugDUnitTest.java    |   418 +
 .../internal/cache/ha/HAGIIDUnitTest.java       |   470 +
 .../gemfire/internal/cache/ha/HAHelper.java     |    51 +
 .../cache/ha/HARQAddOperationJUnitTest.java     |  1203 ++
 .../cache/ha/HARQueueNewImplDUnitTest.java      |  1276 ++
 .../internal/cache/ha/HARegionDUnitTest.java    |   406 +
 .../internal/cache/ha/HARegionJUnitTest.java    |   222 +
 .../cache/ha/HARegionQueueDUnitTest.java        |  1149 ++
 .../cache/ha/HARegionQueueJUnitTest.java        |  2153 +++
 .../ha/HARegionQueueStartStopJUnitTest.java     |   133 +
 .../cache/ha/HARegionQueueStatsJUnitTest.java   |   504 +
 .../cache/ha/HASlowReceiverDUnitTest.java       |   290 +
 .../ha/OperationsPropagationDUnitTest.java      |   498 +
 .../internal/cache/ha/PutAllDUnitTest.java      |   585 +
 .../internal/cache/ha/StatsBugDUnitTest.java    |   371 +
 .../cache/ha/TestBlockingHARegionQueue.java     |   129 +
 .../cache/ha/ThreadIdentifierJUnitTest.java     |   116 +
 .../cache/locks/TXLockServiceDUnitTest.java     |   726 +
 .../internal/cache/lru/LRUClockJUnitTest.java   |   519 +
 .../cache/lru/TransactionsWithOverflowTest.java |    85 +
 .../cache/partitioned/Bug39356DUnitTest.java    |   236 +
 .../cache/partitioned/Bug43684DUnitTest.java    |   343 +
 .../cache/partitioned/Bug47388DUnitTest.java    |   287 +
 .../cache/partitioned/Bug51400DUnitTest.java    |   207 +
 .../partitioned/ElidedPutAllDUnitTest.java      |   123 +
 .../OfflineMembersDetailsJUnitTest.java         |    59 +
 .../partitioned/PartitionResolverDUnitTest.java |   411 +
 .../PartitionedRegionLoadModelJUnitTest.java    |  1560 ++
 .../PartitionedRegionLoaderWriterDUnitTest.java |   210 +
 ...rtitionedRegionMetaDataCleanupDUnitTest.java |   193 +
 .../partitioned/PersistPRKRFDUnitTest.java      |   234 +
 ...tentColocatedPartitionedRegionDUnitTest.java |  1597 ++
 .../PersistentPartitionedRegionDUnitTest.java   |  2227 +++
 ...tentPartitionedRegionOldConfigDUnitTest.java |    51 +
 .../PersistentPartitionedRegionTestBase.java    |   807 +
 ...rtitionedRegionWithTransactionDUnitTest.java |   185 +
 .../PutPutReplyMessageJUnitTest.java            |    54 +
 .../cache/partitioned/ShutdownAllDUnitTest.java |   847 +
 ...treamingPartitionOperationManyDUnitTest.java |   250 +
 ...StreamingPartitionOperationOneDUnitTest.java |   233 +
 .../fixed/CustomerFixedPartitionResolver.java   |   113 +
 .../fixed/FixedPartitioningDUnitTest.java       |  1482 ++
 .../fixed/FixedPartitioningTestBase.java        |  1407 ++
 ...ngWithColocationAndPersistenceDUnitTest.java |  1170 ++
 .../cache/partitioned/fixed/MyDate1.java        |    72 +
 .../cache/partitioned/fixed/MyDate2.java        |    52 +
 .../cache/partitioned/fixed/MyDate3.java        |    72 +
 .../fixed/QuarterPartitionResolver.java         |   142 +
 .../SingleHopQuarterPartitionResolver.java      |   173 +
 .../persistence/BackupInspectorJUnitTest.java   |   236 +
 .../PersistentRVVRecoveryDUnitTest.java         |  1006 +
 .../PersistentRecoveryOrderDUnitTest.java       |  1843 ++
 ...rsistentRecoveryOrderOldConfigDUnitTest.java |    66 +
 .../PersistentReplicatedTestBase.java           |   240 +
 .../TemporaryResultSetFactoryJUnitTest.java     |   136 +
 .../RegionEntryFactoryBuilderJUnitTest.java     |    85 +
 .../GFSnapshotJUnitPerformanceTest.java         |   158 +
 .../internal/cache/tier/Bug40396DUnitTest.java  |   213 +
 .../tier/sockets/AcceptorImplJUnitTest.java     |   276 +
 ...mpatibilityHigherVersionClientDUnitTest.java |   249 +
 .../cache/tier/sockets/Bug36269DUnitTest.java   |   226 +
 .../cache/tier/sockets/Bug36457DUnitTest.java   |   213 +
 .../cache/tier/sockets/Bug36805DUnitTest.java   |   244 +
 .../cache/tier/sockets/Bug36829DUnitTest.java   |   170 +
 .../cache/tier/sockets/Bug36995DUnitTest.java   |   256 +
 .../cache/tier/sockets/Bug37210DUnitTest.java   |   294 +
 .../cache/tier/sockets/Bug37805DUnitTest.java   |   139 +
 .../CacheServerMaxConnectionsJUnitTest.java     |   225 +
 ...heServerSelectorMaxConnectionsJUnitTest.java |    35 +
 .../cache/tier/sockets/CacheServerTestUtil.java |   646 +
 .../CacheServerTransactionsDUnitTest.java       |   817 +
 ...acheServerTransactionsSelectorDUnitTest.java |    35 +
 .../tier/sockets/ClearPropagationDUnitTest.java |   480 +
 .../tier/sockets/ClientConflationDUnitTest.java |   540 +
 .../sockets/ClientHealthMonitorJUnitTest.java   |   261 +
 .../ClientHealthMonitorSelectorJUnitTest.java   |    35 +
 .../sockets/ClientInterestNotifyDUnitTest.java  |   639 +
 .../tier/sockets/ClientServerMiscDUnitTest.java |  1411 ++
 .../ClientServerMiscSelectorDUnitTest.java      |    36 +
 .../cache/tier/sockets/ConflationDUnitTest.java |   910 +
 .../tier/sockets/ConnectionProxyJUnitTest.java  |   857 +
 .../DataSerializerPropogationDUnitTest.java     |  1325 ++
 .../cache/tier/sockets/DeltaEOFException.java   |   113 +
 .../DestroyEntryPropagationDUnitTest.java       |   497 +
 .../sockets/DurableClientBug39997DUnitTest.java |   126 +
 .../DurableClientQueueSizeDUnitTest.java        |   416 +
 .../DurableClientReconnectAutoDUnitTest.java    |    59 +
 .../DurableClientReconnectDUnitTest.java        |   763 +
 .../sockets/DurableClientStatsDUnitTest.java    |   381 +
 .../sockets/DurableRegistrationDUnitTest.java   |   777 +
 .../sockets/DurableResponseMatrixDUnitTest.java |   498 +
 .../sockets/EventIDVerificationDUnitTest.java   |   491 +
 .../EventIDVerificationInP2PDUnitTest.java      |   325 +
 .../cache/tier/sockets/FaultyDelta.java         |   162 +
 .../FilterProfileIntegrationJUnitTest.java      |   110 +
 .../tier/sockets/FilterProfileJUnitTest.java    |   412 +
 .../ForceInvalidateEvictionDUnitTest.java       |   401 +
 ...ForceInvalidateOffHeapEvictionDUnitTest.java |    65 +
 .../cache/tier/sockets/HABug36738DUnitTest.java |   194 +
 .../sockets/HAInterestDistributedTestCase.java  |    31 +
 .../tier/sockets/HAInterestPart1DUnitTest.java  |   213 +
 .../tier/sockets/HAInterestPart2DUnitTest.java  |   376 +
 .../cache/tier/sockets/HAInterestTestCase.java  |  1021 +
 .../sockets/HAStartupAndFailoverDUnitTest.java  |   742 +
 .../internal/cache/tier/sockets/HaHelper.java   |    33 +
 .../InstantiatorPropagationDUnitTest.java       |  1723 ++
 .../tier/sockets/InterestListDUnitTest.java     |  1165 ++
 .../sockets/InterestListEndpointDUnitTest.java  |   503 +
 .../InterestListEndpointPRDUnitTest.java        |    42 +
 .../InterestListEndpointSelectorDUnitTest.java  |    35 +
 .../sockets/InterestListFailoverDUnitTest.java  |   318 +
 .../sockets/InterestListRecoveryDUnitTest.java  |   519 +
 .../sockets/InterestRegrListenerDUnitTest.java  |   469 +
 .../sockets/InterestResultPolicyDUnitTest.java  |   398 +
 .../cache/tier/sockets/MessageJUnitTest.java    |   112 +
 .../sockets/NewRegionAttributesDUnitTest.java   |   489 +
 .../tier/sockets/ObjectPartListJUnitTest.java   |   130 +
 .../tier/sockets/RedundancyLevelJUnitTest.java  |   130 +
 .../sockets/RedundancyLevelPart1DUnitTest.java  |   538 +
 .../sockets/RedundancyLevelPart2DUnitTest.java  |   535 +
 .../sockets/RedundancyLevelPart3DUnitTest.java  |   249 +
 .../tier/sockets/RedundancyLevelTestBase.java   |   653 +
 .../tier/sockets/RegionCloseDUnitTest.java      |   246 +
 ...erInterestBeforeRegionCreationDUnitTest.java |   276 +
 .../sockets/RegisterInterestKeysDUnitTest.java  |   248 +
 .../RegisterInterestKeysPRDUnitTest.java        |    41 +
 .../sockets/ReliableMessagingDUnitTest.java     |   438 +
 .../internal/cache/tier/sockets/TestFilter.java |    58 +
 .../sockets/UnregisterInterestDUnitTest.java    |   342 +
 .../sockets/UpdatePropagationDUnitTest.java     |   586 +
 .../sockets/UpdatePropagationPRDUnitTest.java   |    37 +
 .../VerifyEventIDGenerationInP2PDUnitTest.java  |   185 +
 ...UpdatesFromNonInterestEndPointDUnitTest.java |   256 +
 .../tier/sockets/command/CommitCommandTest.java |    61 +
 .../cache/versions/RVVExceptionJUnitTest.java   |    48 +
 .../versions/RegionVersionHolder2JUnitTest.java |   178 +
 .../versions/RegionVersionHolderJUnitTest.java  |  1894 ++
 .../RegionVersionHolderRandomJUnitTest.java     |   191 +
 ...RegionVersionHolderSmallBitSetJUnitTest.java |    46 +
 .../versions/RegionVersionVectorJUnitTest.java  |   546 +
 .../cache/wan/AsyncEventQueueTestBase.java      |  1672 ++
 .../cache/wan/CustomAsyncEventListener.java     |    57 +
 .../gemfire/internal/cache/wan/Filter70.java    |    63 +
 .../cache/wan/MyAsyncEventListener.java         |    53 +
 .../cache/wan/MyAsyncEventListener2.java        |    98 +
 .../cache/wan/MyDistributedSystemListener.java  |    65 +
 .../cache/wan/MyGatewaySenderEventListener.java |    77 +
 .../wan/MyGatewaySenderEventListener2.java      |    77 +
 .../cache/wan/MyGatewayTransportFilter1.java    |    57 +
 .../cache/wan/MyGatewayTransportFilter2.java    |    56 +
 .../cache/wan/MyGatewayTransportFilter3.java    |    56 +
 .../cache/wan/MyGatewayTransportFilter4.java    |    56 +
 .../internal/cache/wan/QueueListener.java       |    79 +
 .../asyncqueue/AsyncEventListenerDUnitTest.java |  1529 ++
 .../AsyncEventListenerOffHeapDUnitTest.java     |    33 +
 .../AsyncEventQueueStatsDUnitTest.java          |   289 +
 .../AsyncEventQueueValidationsJUnitTest.java    |    82 +
 .../ConcurrentAsyncEventQueueDUnitTest.java     |   274 +
 ...ncurrentAsyncEventQueueOffHeapDUnitTest.java |    32 +
 .../CommonParallelAsyncEventQueueDUnitTest.java |    58 +
 ...ParallelAsyncEventQueueOffHeapDUnitTest.java |    32 +
 .../ParallelGatewaySenderQueueJUnitTest.java    |    87 +
 ...ialGatewaySenderEventProcessorJUnitTest.java |    42 +
 .../xmlcache/AbstractXmlParserJUnitTest.java    |   168 +
 .../cache/xmlcache/CacheCreationJUnitTest.java  |   209 +
 .../cache/xmlcache/CacheXmlParserJUnitTest.java |   169 +
 .../xmlcache/CacheXmlVersionJUnitTest.java      |    75 +
 .../PivotalEntityResolverJUnitTest.java         |   145 +
 .../cache/xmlcache/RegionCreationJUnitTest.java |    57 +
 .../xmlcache/XmlGeneratorUtilsJUnitTest.java    |   250 +
 .../classpathloaderjunittest/DoesExist.java     |    21 +
 .../CompressionCacheConfigDUnitTest.java        |   190 +
 .../CompressionCacheListenerDUnitTest.java      |   362 +
 ...ompressionCacheListenerOffHeapDUnitTest.java |    76 +
 .../CompressionRegionConfigDUnitTest.java       |   527 +
 .../CompressionRegionFactoryDUnitTest.java      |   148 +
 .../CompressionRegionOperationsDUnitTest.java   |   541 +
 ...ressionRegionOperationsOffHeapDUnitTest.java |    69 +
 .../compression/CompressionStatsDUnitTest.java  |   681 +
 .../compression/SnappyCompressorJUnitTest.java  |    76 +
 .../datasource/AbstractPoolCacheJUnitTest.java  |   251 +
 .../internal/datasource/CleanUpJUnitTest.java   |   126 +
 .../ConnectionPoolCacheImplJUnitTest.java       |   213 +
 .../datasource/ConnectionPoolingJUnitTest.java  |   339 +
 .../datasource/DataSourceFactoryJUnitTest.java  |   115 +
 .../internal/datasource/RestartJUnitTest.java   |    82 +
 .../internal/i18n/BasicI18nJUnitTest.java       |   407 +
 .../io/CompositeOutputStreamJUnitTest.java      |   453 +
 .../gemfire/internal/jndi/ContextJUnitTest.java |   440 +
 .../internal/jta/BlockingTimeOutJUnitTest.java  |   311 +
 .../gemfire/internal/jta/CacheUtils.java        |   226 +
 .../internal/jta/DataSourceJTAJUnitTest.java    |  1024 +
 .../internal/jta/ExceptionJUnitTest.java        |   126 +
 .../jta/GlobalTransactionJUnitTest.java         |   254 +
 .../gemstone/gemfire/internal/jta/JTAUtils.java |   386 +
 .../internal/jta/JtaIntegrationJUnitTest.java   |   134 +
 .../gemstone/gemfire/internal/jta/SyncImpl.java |    39 +
 .../internal/jta/TransactionImplJUnitTest.java  |   109 +
 .../jta/TransactionManagerImplJUnitTest.java    |   298 +
 .../jta/TransactionTimeOutJUnitTest.java        |   333 +
 .../jta/UserTransactionImplJUnitTest.java       |   130 +
 .../internal/jta/dunit/CommitThread.java        |   176 +
 .../internal/jta/dunit/ExceptionsDUnitTest.java |   316 +
 .../jta/dunit/IdleTimeOutDUnitTest.java         |   344 +
 .../jta/dunit/LoginTimeOutDUnitTest.java        |   348 +
 .../jta/dunit/MaxPoolSizeDUnitTest.java         |   314 +
 .../internal/jta/dunit/RollbackThread.java      |   176 +
 .../jta/dunit/TransactionTimeOutDUnitTest.java  |   502 +
 .../dunit/TxnManagerMultiThreadDUnitTest.java   |   520 +
 .../internal/jta/dunit/TxnTimeOutDUnitTest.java |   310 +
 .../internal/jta/functional/CacheJUnitTest.java |  1199 ++
 .../jta/functional/TestXACacheLoader.java       |   104 +
 .../internal/lang/ClassUtilsJUnitTest.java      |   165 +
 .../internal/lang/InOutParameterJUnitTest.java  |    74 +
 .../internal/lang/InitializerJUnitTest.java     |    75 +
 .../internal/lang/ObjectUtilsJUnitTest.java     |   189 +
 .../internal/lang/StringUtilsJUnitTest.java     |   351 +
 .../internal/lang/SystemUtilsJUnitTest.java     |   101 +
 .../internal/lang/ThreadUtilsJUnitTest.java     |   214 +
 .../DistributedSystemLogFileJUnitTest.java      |  1505 ++
 .../logging/LocatorLogFileJUnitTest.java        |   125 +
 .../logging/LogServiceIntegrationJUnitTest.java |   223 +
 .../LogServiceIntegrationTestSupport.java       |    40 +
 .../internal/logging/LogServiceJUnitTest.java   |   120 +
 .../LogWriterDisabledPerformanceTest.java       |    64 +
 .../logging/LogWriterImplJUnitTest.java         |    83 +
 .../logging/LogWriterPerformanceTest.java       |   127 +
 .../logging/LoggingIntegrationTestSuite.java    |    35 +
 .../logging/LoggingPerformanceTestCase.java     |   200 +
 .../internal/logging/LoggingUnitTestSuite.java  |    42 +
 .../logging/MergeLogFilesJUnitTest.java         |   247 +
 .../gemfire/internal/logging/NullLogWriter.java |   146 +
 .../internal/logging/SortLogFileJUnitTest.java  |   115 +
 .../internal/logging/TestLogWriterFactory.java  |   134 +
 .../logging/log4j/AlertAppenderJUnitTest.java   |   257 +
 .../logging/log4j/ConfigLocatorJUnitTest.java   |   222 +
 .../log4j/FastLoggerIntegrationJUnitTest.java   |   575 +
 .../logging/log4j/FastLoggerJUnitTest.java      |   178 +
 .../FastLoggerWithDefaultConfigJUnitTest.java   |    90 +
 .../log4j/LocalizedMessageJUnitTest.java        |    64 +
 .../log4j/Log4J2DisabledPerformanceTest.java    |    73 +
 .../logging/log4j/Log4J2PerformanceTest.java    |   151 +
 .../log4j/Log4jIntegrationTestSuite.java        |    28 +
 .../logging/log4j/Log4jUnitTestSuite.java       |    32 +
 .../log4j/LogWriterAppenderJUnitTest.java       |   224 +
 .../LogWriterLoggerDisabledPerformanceTest.java |    72 +
 .../log4j/LogWriterLoggerPerformanceTest.java   |   150 +
 .../internal/net/SocketUtilsJUnitTest.java      |   130 +
 .../offheap/AbstractStoredObjectTestBase.java   |   203 +
 .../offheap/ByteArrayMemoryChunkJUnitTest.java  |    30 +
 .../offheap/DataAsAddressJUnitTest.java         |   368 +
 .../internal/offheap/DataTypeJUnitTest.java     |   913 +
 .../DirectByteBufferMemoryChunkJUnitTest.java   |    33 +
 ...tingOutOfOffHeapMemoryListenerJUnitTest.java |   100 +
 .../internal/offheap/FragmentJUnitTest.java     |   238 +
 .../offheap/FreeListOffHeapRegionJUnitTest.java |    46 +
 .../HeapByteBufferMemoryChunkJUnitTest.java     |    33 +
 .../internal/offheap/InlineKeyJUnitTest.java    |   185 +
 .../offheap/LifecycleListenerJUnitTest.java     |   230 +
 .../offheap/MemoryBlockNodeJUnitTest.java       |   435 +
 .../offheap/MemoryChunkJUnitTestBase.java       |   290 +
 .../internal/offheap/MemoryChunkTestSuite.java  |    32 +
 .../offheap/MemoryInspectorImplJUnitTest.java   |   142 +
 .../offheap/NullOffHeapMemoryStats.java         |   114 +
 .../offheap/NullOutOfOffHeapMemoryListener.java |    39 +
 .../internal/offheap/ObjectChunkJUnitTest.java  |   902 +
 .../offheap/ObjectChunkSliceJUnitTest.java      |    72 +
 .../ObjectChunkWithHeapFormJUnitTest.java       |    64 +
 .../offheap/OffHeapHelperJUnitTest.java         |   314 +
 .../internal/offheap/OffHeapIndexJUnitTest.java |    92 +
 .../internal/offheap/OffHeapRegionBase.java     |   593 +
 .../OffHeapRegionEntryHelperJUnitTest.java      |   870 +
 .../offheap/OffHeapStorageJUnitTest.java        |   285 +
 .../offheap/OffHeapValidationJUnitTest.java     |   540 +
 .../OffHeapWriteObjectAsByteArrayJUnitTest.java |   115 +
 .../OldFreeListOffHeapRegionJUnitTest.java      |    47 +
 .../offheap/OutOfOffHeapMemoryDUnitTest.java    |   304 +
 .../offheap/RefCountChangeInfoJUnitTest.java    |   207 +
 ...moryAllocatorFillPatternIntegrationTest.java |   246 +
 ...mpleMemoryAllocatorFillPatternJUnitTest.java |   183 +
 .../offheap/SimpleMemoryAllocatorJUnitTest.java |   631 +
 .../internal/offheap/StoredObjectTestSuite.java |    32 +
 .../offheap/SyncChunkStackJUnitTest.java        |   289 +
 .../TxReleasesOffHeapOnCloseJUnitTest.java      |    63 +
 .../offheap/UnsafeMemoryChunkJUnitTest.java     |    87 +
 .../BlockingProcessStreamReaderJUnitTest.java   |   480 +
 ...leProcessControllerIntegrationJUnitTest.java |   155 +
 .../LocalProcessControllerJUnitTest.java        |   119 +
 .../process/LocalProcessLauncherDUnitTest.java  |   148 +
 .../process/LocalProcessLauncherJUnitTest.java  |   182 +
 ...NonBlockingProcessStreamReaderJUnitTest.java |   411 +
 .../internal/process/PidFileJUnitTest.java      |   274 +
 .../ProcessControllerFactoryJUnitTest.java      |   159 +
 .../process/ProcessStreamReaderTestCase.java    |   238 +
 .../gemfire/internal/process/mbean/Process.java |    60 +
 .../internal/process/mbean/ProcessMBean.java    |    28 +
 ...tractSignalNotificationHandlerJUnitTest.java |   460 +
 .../internal/size/ObjectSizerJUnitTest.java     |    89 +
 .../internal/size/ObjectTraverserJUnitTest.java |   122 +
 .../internal/size/ObjectTraverserPerf.java      |   100 +
 .../size/SizeClassOnceObjectSizerJUnitTest.java |    70 +
 .../gemfire/internal/size/SizeTestUtil.java     |    33 +
 .../size/WellKnownClassSizerJUnitTest.java      |    62 +
 .../internal/statistics/DummyStatistics.java    |   209 +
 .../statistics/SampleCollectorJUnitTest.java    |   347 +
 .../statistics/StatMonitorHandlerJUnitTest.java |   256 +
 .../statistics/StatisticsDUnitTest.java         |   948 +
 .../statistics/StatisticsMonitorJUnitTest.java  |   227 +
 .../internal/statistics/TestSampleHandler.java  |   177 +
 .../statistics/TestStatArchiveWriter.java       |    60 +
 .../statistics/TestStatisticsManager.java       |    42 +
 .../statistics/TestStatisticsSampler.java       |    59 +
 .../statistics/ValueMonitorJUnitTest.java       |   374 +
 .../internal/stats50/AtomicStatsJUnitTest.java  |   128 +
 .../internal/tcp/ConnectionJUnitTest.java       |    88 +
 .../util/AbortableTaskServiceJUnitTest.java     |   199 +
 .../internal/util/ArrayUtilsJUnitTest.java      |   179 +
 .../gemfire/internal/util/BytesJUnitTest.java   |   116 +
 .../internal/util/CollectionUtilsJUnitTest.java |   487 +
 .../internal/util/DelayedActionJUnitTest.java   |    56 +
 .../gemfire/internal/util/IOUtilsJUnitTest.java |   315 +
 .../gemfire/internal/util/SerializableImpl.java |    38 +
 .../util/SerializableImplWithValue.java         |    57 +
 .../gemfire/internal/util/Valuable.java         |    40 +
 .../CompactConcurrentHashSetJUnitTest.java      |   103 +
 .../ConcurrentHashMapIteratorJUnitTest.java     |   124 +
 .../concurrent/CopyOnWriteHashMapJUnitTest.java |   505 +
 .../concurrent/ReentrantSemaphoreJUnitTest.java |   112 +
 .../SemaphoreReadWriteLockJUnitTest.java        |   185 +
 .../cm/ConcurrentHashMapJUnitTest.java          |   631 +
 .../concurrent/cm/CountedMapLoopsJUnitTest.java |   225 +
 .../concurrent/cm/IntMapCheckJUnitTest.java     |   618 +
 .../util/concurrent/cm/LoopHelpers.java         |   219 +
 .../util/concurrent/cm/MapCheckJUnitTest.java   |   631 +
 .../util/concurrent/cm/MapLoopsJUnitTest.java   |   230 +
 .../util/concurrent/cm/RLJBarJUnitTest.java     |   197 +
 .../concurrent/cm/StringMapLoopsJUnitTest.java  |   240 +
 .../management/CacheManagementDUnitTest.java    |   947 +
 .../management/ClientHealthStatsDUnitTest.java  |   446 +
 .../gemfire/management/CompositeStats.java      |   103 +
 .../gemfire/management/CompositeTestMBean.java  |    65 +
 .../gemfire/management/CompositeTestMXBean.java |    33 +
 .../management/CompositeTypeTestDUnitTest.java  |   170 +
 .../gemfire/management/CustomMBean.java         |    76 +
 .../gemfire/management/CustomMXBean.java        |    36 +
 .../management/DLockManagementDUnitTest.java    |   473 +
 .../DataBrowserJSONValidationJUnitTest.java     |   350 +
 .../management/DiskManagementDUnitTest.java     |   728 +
 .../management/DistributedSystemDUnitTest.java  |   894 +
 .../management/LocatorManagementDUnitTest.java  |   353 +
 .../gemstone/gemfire/management/MBeanUtil.java  |   550 +
 .../gemfire/management/ManagementTestBase.java  |   760 +
 .../MemberMBeanAttributesDUnitTest.java         |   270 +
 .../management/OffHeapManagementDUnitTest.java  |   978 +
 .../gemfire/management/QueryDataDUnitTest.java  |   873 +
 .../management/RegionManagementDUnitTest.java   |  1450 ++
 .../gemfire/management/TypedJsonJUnitTest.java  |   288 +
 ...ersalMembershipListenerAdapterDUnitTest.java |  2153 +++
 .../stats/AsyncEventQueueStatsJUnitTest.java    |    66 +
 .../bean/stats/CacheServerStatsJUnitTest.java   |   167 +
 .../bean/stats/DiskStatsJUnitTest.java          |   122 +
 .../stats/DistributedSystemStatsDUnitTest.java  |   108 +
 .../stats/DistributedSystemStatsJUnitTest.java  |   122 +
 .../bean/stats/GatewayMBeanBridgeJUnitTest.java |   108 +
 .../stats/GatewayReceiverStatsJUnitTest.java    |   207 +
 .../bean/stats/MBeanStatsTestCase.java          |    86 +
 .../bean/stats/MemberLevelStatsJUnitTest.java   |   581 +
 .../bean/stats/RegionStatsJUnitTest.java        |   271 +
 .../bean/stats/StatsRateJUnitTest.java          |   191 +
 .../internal/JettyHelperJUnitTest.java          |    80 +
 .../beans/DistributedSystemBridgeJUnitTest.java |   106 +
 .../cli/ClasspathScanLoadHelperJUnitTest.java   |    92 +
 .../internal/cli/CliUtilDUnitTest.java          |   435 +
 .../internal/cli/CommandManagerJUnitTest.java   |   340 +
 .../cli/CommandSeparatorEscapeJUnitTest.java    |   138 +
 .../internal/cli/DataCommandJsonJUnitTest.java  |    61 +
 .../internal/cli/GfshParserJUnitTest.java       |  1162 ++
 .../management/internal/cli/HeadlessGfsh.java   |   374 +
 .../internal/cli/HeadlessGfshJUnitTest.java     |    86 +
 .../management/internal/cli/ResultHandler.java  |    23 +
 .../internal/cli/TableBuilderJUnitTest.java     |   314 +
 .../cli/annotations/CliArgumentJUnitTest.java   |   214 +
 .../AbstractCommandsSupportJUnitTest.java       |   404 +
 .../cli/commands/CliCommandTestBase.java        |   565 +
 .../cli/commands/ConfigCommandsDUnitTest.java   |   502 +
 ...eateAlterDestroyRegionCommandsDUnitTest.java |  1150 ++
 .../cli/commands/DeployCommandsDUnitTest.java   |   478 +
 .../commands/DiskStoreCommandsDUnitTest.java    |  1157 ++
 .../commands/DiskStoreCommandsJUnitTest.java    |   405 +
 .../cli/commands/FunctionCommandsDUnitTest.java |   595 +
 .../commands/GemfireDataCommandsDUnitTest.java  |  2088 ++
 ...WithCacheLoaderDuringCacheMissDUnitTest.java |   374 +
 .../HTTPServiceSSLSupportJUnitTest.java         |   158 +
 .../cli/commands/IndexCommandsDUnitTest.java    |   815 +
 .../cli/commands/IndexCommandsJUnitTest.java    |   208 +
 ...stAndDescribeDiskStoreCommandsDUnitTest.java |   194 +
 .../ListAndDescribeRegionDUnitTest.java         |   321 +
 .../cli/commands/ListIndexCommandDUnitTest.java |   669 +
 .../cli/commands/MemberCommandsDUnitTest.java   |   288 +
 .../MiscellaneousCommandsDUnitTest.java         |   498 +
 ...laneousCommandsExportLogsPart1DUnitTest.java |   140 +
 ...laneousCommandsExportLogsPart2DUnitTest.java |   144 +
 ...laneousCommandsExportLogsPart3DUnitTest.java |   151 +
 ...laneousCommandsExportLogsPart4DUnitTest.java |   137 +
 .../cli/commands/QueueCommandsDUnitTest.java    |   392 +
 .../SharedConfigurationCommandsDUnitTest.java   |   341 +
 .../cli/commands/ShellCommandsDUnitTest.java    |   367 +
 .../cli/commands/ShowDeadlockDUnitTest.java     |   274 +
 .../cli/commands/ShowMetricsDUnitTest.java      |   345 +
 .../cli/commands/ShowStackTraceDUnitTest.java   |   150 +
 .../cli/commands/UserCommandsDUnitTest.java     |   164 +
 .../RegionPathConverterJUnitTest.java           |    82 +
 .../internal/cli/domain/AbstractImpl.java       |    21 +
 .../management/internal/cli/domain/Impl1.java   |    21 +
 .../management/internal/cli/domain/Impl12.java  |    21 +
 .../internal/cli/domain/Interface1.java         |    21 +
 .../internal/cli/domain/Interface2.java         |    21 +
 .../management/internal/cli/domain/Stock.java   |    37 +
 .../management/internal/cli/dto/Car.java        |    75 +
 .../management/internal/cli/dto/Key1.java       |    67 +
 .../management/internal/cli/dto/Key2.java       |    64 +
 .../internal/cli/dto/ObjectWithCharAttr.java    |    60 +
 .../management/internal/cli/dto/Value1.java     |    97 +
 .../management/internal/cli/dto/Value2.java     |    90 +
 .../functions/DataCommandFunctionJUnitTest.java |   132 +
 .../DescribeDiskStoreFunctionJUnitTest.java     |  1676 ++
 .../ListDiskStoresFunctionJUnitTest.java        |   328 +
 .../functions/ListIndexFunctionJUnitTest.java   |   435 +
 .../cli/parser/ParserUtilsJUnitTest.java        |    82 +
 .../preprocessor/PreprocessorJUnitTest.java     |   302 +
 .../PreprocessorUtilsJUnitTest.java             |   127 +
 .../cli/shell/GfshConfigInitFileJUnitTest.java  |   186 +
 .../shell/GfshExecutionStrategyJUnitTest.java   |   144 +
 .../cli/shell/GfshHistoryJUnitTest.java         |    89 +
 .../cli/shell/GfshInitFileJUnitTest.java        |   476 +
 .../SharedConfigurationDUnitTest.java           |   443 +
 .../configuration/ZipUtilsJUnitTest.java        |    96 +
 .../domain/CacheElementJUnitTest.java           |   144 +
 .../utils/XmlUtilsAddNewNodeJUnitTest.java      |   415 +
 .../configuration/utils/XmlUtilsJUnitTest.java  |   248 +
 .../internal/pulse/TestClientIdsDUnitTest.java  |   301 +
 .../internal/pulse/TestFunctionsDUnitTest.java  |   112 +
 .../internal/pulse/TestHeapDUnitTest.java       |   108 +
 .../internal/pulse/TestLocatorsDUnitTest.java   |    87 +
 .../pulse/TestSubscriptionsDUnitTest.java       |   307 +
 ...rDistributedSystemMXBeanIntegrationTest.java |    50 +
 ...horizeOperationForMBeansIntegrationTest.java |   325 +
 ...erationForRegionCommandsIntegrationTest.java |   136 +
 ...tionCodesForDataCommandsIntegrationTest.java |   101 +
 ...tionCodesForDistributedSystemMXBeanTest.java |    76 +
 .../ReadOpFileAccessControllerJUnitTest.java    |   201 +
 .../WanCommandsControllerJUnitTest.java         |   140 +
 .../gemfire/management/model/EmptyObject.java   |    24 +
 .../gemstone/gemfire/management/model/Item.java |    95 +
 .../gemfire/management/model/Order.java         |    88 +
 .../gemfire/management/model/SubOrder.java      |    30 +
 .../DomainObjectsAsValuesJUnitTest.java         |   129 +
 .../GemcachedBinaryClientJUnitTest.java         |   148 +
 .../GemcachedDevelopmentJUnitTest.java          |   265 +
 .../gemfire/memcached/IntegrationJUnitTest.java |    94 +
 .../gemfire/pdx/AutoSerializableJUnitTest.java  |  1401 ++
 .../gemfire/pdx/ByteSourceJUnitTest.java        |   752 +
 .../ClientsWithVersioningRetryDUnitTest.java    |   513 +
 .../com/gemstone/gemfire/pdx/DSInsidePdx.java   |   109 +
 .../pdx/DistributedSystemIdDUnitTest.java       |   157 +
 .../com/gemstone/gemfire/pdx/DomainObject.java  |   106 +
 .../gemstone/gemfire/pdx/DomainObjectBad.java   |    25 +
 .../gemfire/pdx/DomainObjectClassLoadable.java  |    27 +
 .../gemfire/pdx/DomainObjectPdxAuto.java        |   192 +
 ...DomainObjectPdxAutoNoDefaultConstructor.java |    63 +
 .../java/com/gemstone/gemfire/pdx/Employee.java |    92 +
 .../pdx/JSONPdxClientServerDUnitTest.java       |   629 +
 .../com/gemstone/gemfire/pdx/NestedPdx.java     |   114 +
 .../gemfire/pdx/NonDelegatingLoader.java        |    66 +
 .../OffHeapByteBufferByteSourceJUnitTest.java   |    52 +
 .../gemfire/pdx/OffHeapByteSourceJUnitTest.java |    65 +
 .../pdx/PDXAsyncEventQueueDUnitTest.java        |   154 +
 .../gemfire/pdx/PdxAttributesJUnitTest.java     |   250 +
 .../gemfire/pdx/PdxClientServerDUnitTest.java   |   799 +
 .../pdx/PdxDeserializationDUnitTest.java        |   413 +
 .../pdx/PdxFormatterPutGetJUnitTest.java        |   208 +
 .../com/gemstone/gemfire/pdx/PdxInsideDS.java   |   107 +
 .../pdx/PdxInstanceFactoryJUnitTest.java        |  1210 ++
 .../gemfire/pdx/PdxInstanceJUnitTest.java       |   396 +
 .../gemfire/pdx/PdxSerializableDUnitTest.java   |   196 +
 .../gemfire/pdx/PdxSerializableJUnitTest.java   |  2171 +++
 .../gemfire/pdx/PdxStringJUnitTest.java         |   167 +
 .../gemfire/pdx/PdxTypeExportDUnitTest.java     |   130 +
 .../gemfire/pdx/SeparateClassloaderPdx.java     |    43 +
 .../com/gemstone/gemfire/pdx/SimpleClass.java   |    83 +
 .../com/gemstone/gemfire/pdx/SimpleClass1.java  |   151 +
 .../com/gemstone/gemfire/pdx/SimpleClass2.java  |    32 +
 .../gemfire/pdx/TestObjectForPdxFormatter.java  |  1003 +
 .../gemfire/pdx/VersionClassLoader.java         |    98 +
 .../gemstone/gemfire/redis/AuthJUnitTest.java   |   160 +
 .../gemfire/redis/ConcurrentStartTest.java      |    98 +
 .../gemstone/gemfire/redis/HashesJUnitTest.java |   191 +
 .../gemstone/gemfire/redis/ListsJUnitTest.java  |   254 +
 .../gemfire/redis/RedisDistDUnitTest.java       |   258 +
 .../gemstone/gemfire/redis/SetsJUnitTest.java   |   258 +
 .../gemfire/redis/SortedSetsJUnitTest.java      |   430 +
 .../gemfire/redis/StringsJunitTest.java         |   312 +
 .../web/controllers/AddFreeItemToOrders.java    |   153 +
 .../rest/internal/web/controllers/Customer.java |   109 +
 .../internal/web/controllers/DateTimeUtils.java |    40 +
 .../rest/internal/web/controllers/Gender.java   |    30 +
 .../internal/web/controllers/GetAllEntries.java |    68 +
 .../web/controllers/GetDeliveredOrders.java     |   106 +
 .../internal/web/controllers/GetRegions.java    |    76 +
 .../web/controllers/GetValueForKey.java         |    77 +
 .../rest/internal/web/controllers/Item.java     |   160 +
 .../rest/internal/web/controllers/Order.java    |   189 +
 .../rest/internal/web/controllers/Person.java   |   185 +
 .../web/controllers/PutKeyFunction.java         |    63 +
 .../web/controllers/RestAPITestBase.java        |   123 +
 .../internal/web/controllers/RestTestUtils.java |   120 +
 .../security/ClientAuthenticationDUnitTest.java |   905 +
 .../ClientAuthenticationPart2DUnitTest.java     |    88 +
 .../security/ClientAuthorizationDUnitTest.java  |   785 +
 .../security/ClientAuthorizationTestBase.java   |  1387 ++
 .../security/ClientMultiUserAuthzDUnitTest.java |   523 +
 .../DeltaClientAuthorizationDUnitTest.java      |   352 +
 .../DeltaClientPostAuthorizationDUnitTest.java  |   538 +
 .../security/P2PAuthenticationDUnitTest.java    |   604 +
 .../gemfire/security/SecurityTestUtil.java      |  1875 ++
 .../com/gemstone/gemfire/test/dunit/Assert.java |    66 +
 .../gemfire/test/dunit/AsyncInvocation.java     |   216 +
 .../gemstone/gemfire/test/dunit/DUnitEnv.java   |    78 +
 .../gemfire/test/dunit/DebuggerUtils.java       |    52 +
 .../gemfire/test/dunit/DistributedTestCase.java |   532 +
 .../test/dunit/DistributedTestUtils.java        |   167 +
 .../com/gemstone/gemfire/test/dunit/Host.java   |   213 +
 .../gemfire/test/dunit/IgnoredException.java    |   208 +
 .../com/gemstone/gemfire/test/dunit/Invoke.java |   160 +
 .../com/gemstone/gemfire/test/dunit/Jitter.java |    87 +
 .../gemfire/test/dunit/LogWriterUtils.java      |   111 +
 .../gemfire/test/dunit/NetworkUtils.java        |    69 +
 .../gemfire/test/dunit/RMIException.java        |   170 +
 .../gemfire/test/dunit/RepeatableRunnable.java  |    31 +
 .../test/dunit/SerializableCallable.java        |    70 +
 .../test/dunit/SerializableCallableIF.java      |    26 +
 .../test/dunit/SerializableRunnable.java        |    91 +
 .../test/dunit/SerializableRunnableIF.java      |    26 +
 .../test/dunit/StoppableWaitCriterion.java      |    35 +
 .../gemfire/test/dunit/ThreadUtils.java         |   155 +
 .../com/gemstone/gemfire/test/dunit/VM.java     |   450 +
 .../com/gemstone/gemfire/test/dunit/Wait.java   |   204 +
 .../gemfire/test/dunit/WaitCriterion.java       |    33 +
 .../dunit/rules/DistributedDisconnectRule.java  |   121 +
 .../rules/DistributedExternalResource.java      |    58 +
 .../DistributedRestoreSystemProperties.java     |    74 +
 .../gemfire/test/dunit/rules/RemoteInvoker.java |    43 +
 .../test/dunit/standalone/BounceResult.java     |    36 +
 .../gemfire/test/dunit/standalone/ChildVM.java  |    81 +
 .../test/dunit/standalone/DUnitLauncher.java    |   464 +
 .../test/dunit/standalone/ProcessManager.java   |   259 +
 .../test/dunit/standalone/RemoteDUnitVM.java    |   143 +
 .../test/dunit/standalone/RemoteDUnitVMIF.java  |    36 +
 .../dunit/standalone/StandAloneDUnitEnv.java    |    74 +
 .../test/dunit/tests/BasicDUnitTest.java        |   156 +
 .../tests/GetDefaultDiskStoreNameDUnitTest.java |    67 +
 .../dunit/tests/GetTestMethodNameDUnitTest.java |    54 +
 .../gemfire/test/dunit/tests/VMDUnitTest.java   |   206 +
 .../com/gemstone/gemfire/test/fake/Fakes.java   |    99 +
 .../gemfire/test/golden/ExecutableProcess.java  |    24 +
 .../gemfire/test/golden/FailOutputTestCase.java |    52 +
 .../golden/FailWithErrorInOutputJUnitTest.java  |    47 +
 .../FailWithExtraLineInOutputJUnitTest.java     |    76 +
 ...WithLineMissingFromEndOfOutputJUnitTest.java |    75 +
 ...hLineMissingFromMiddleOfOutputJUnitTest.java |    74 +
 .../FailWithLoggerErrorInOutputJUnitTest.java   |    46 +
 .../FailWithLoggerFatalInOutputJUnitTest.java   |    46 +
 .../FailWithLoggerWarnInOutputJUnitTest.java    |    46 +
 .../golden/FailWithProblemInOutputTestCase.java |    61 +
 .../golden/FailWithSevereInOutputJUnitTest.java |    47 +
 ...hTimeoutOfWaitForOutputToMatchJUnitTest.java |    68 +
 .../FailWithWarningInOutputJUnitTest.java       |    47 +
 .../gemfire/test/golden/GoldenComparator.java   |   142 +
 .../test/golden/GoldenStringComparator.java     |    39 +
 .../gemfire/test/golden/GoldenTestCase.java     |   157 +
 .../golden/GoldenTestFrameworkTestSuite.java    |    43 +
 .../gemfire/test/golden/PassJUnitTest.java      |    86 +
 .../golden/PassWithExpectedErrorJUnitTest.java  |    47 +
 .../golden/PassWithExpectedProblemTestCase.java |    91 +
 .../golden/PassWithExpectedSevereJUnitTest.java |    47 +
 .../PassWithExpectedWarningJUnitTest.java       |    47 +
 .../test/golden/RegexGoldenComparator.java      |    37 +
 .../test/golden/StringGoldenComparator.java     |    37 +
 .../gemfire/test/golden/log4j2-test.xml         |    18 +
 .../gemfire/test/process/MainLauncher.java      |    48 +
 .../test/process/MainLauncherJUnitTest.java     |   159 +
 .../gemfire/test/process/OutputFormatter.java   |    37 +
 .../test/process/ProcessOutputReader.java       |    89 +
 .../test/process/ProcessStreamReader.java       |    74 +
 .../process/ProcessTestFrameworkTestSuite.java  |    28 +
 .../gemfire/test/process/ProcessWrapper.java    |   464 +
 .../test/process/ProcessWrapperJUnitTest.java   |    72 +
 .../gemstone/gemfire/util/JSR166TestCase.java   |   482 +
 .../gemstone/gemfire/util/test/TestUtil.java    |    65 +
 .../com/gemstone/persistence/admin/Logger.java  |   278 +
 .../gemstone/persistence/logging/Formatter.java |    41 +
 .../gemstone/persistence/logging/Handler.java   |    98 +
 .../com/gemstone/persistence/logging/Level.java |   128 +
 .../gemstone/persistence/logging/LogRecord.java |   185 +
 .../gemstone/persistence/logging/Logger.java    |   566 +
 .../persistence/logging/SimpleFormatter.java    |    77 +
 .../persistence/logging/StreamHandler.java      |    61 +
 .../test/java/com/gemstone/sequence/Arrow.java  |   124 +
 .../java/com/gemstone/sequence/Lifeline.java    |    98 +
 .../com/gemstone/sequence/LifelineState.java    |   114 +
 .../java/com/gemstone/sequence/LineMapper.java  |    36 +
 .../com/gemstone/sequence/SequenceDiagram.java  |   315 +
 .../com/gemstone/sequence/SequencePanel.java    |    83 +
 .../com/gemstone/sequence/StateColorMap.java    |    66 +
 .../java/com/gemstone/sequence/TimeAxis.java    |   122 +
 .../com/gemstone/sequence/ZoomingPanel.java     |   188 +
 .../sequence/gemfire/DefaultLineMapper.java     |    42 +
 .../gemfire/GemfireSequenceDisplay.java         |   336 +
 .../sequence/gemfire/HydraLineMapper.java       |   135 +
 .../sequence/gemfire/SelectGraphDialog.java     |   155 +
 .../com/main/MyDistributedSystemListener.java   |   115 +
 .../com/main/WANBootStrapping_Site1_Add.java    |   122 +
 .../com/main/WANBootStrapping_Site1_Remove.java |    75 +
 .../com/main/WANBootStrapping_Site2_Add.java    |   107 +
 .../com/main/WANBootStrapping_Site2_Remove.java |    73 +
 geode-core/src/test/java/hydra/GsRandom.java    |   311 +
 .../test/java/hydra/HydraRuntimeException.java  |    33 +
 geode-core/src/test/java/hydra/Log.java         |   219 +
 .../src/test/java/hydra/LogVersionHelper.java   |    45 +
 .../src/test/java/hydra/MethExecutor.java       |   393 +
 .../src/test/java/hydra/MethExecutorResult.java |   186 +
 .../src/test/java/hydra/SchedulingOrder.java    |    36 +
 .../src/test/java/hydra/log/AnyLogWriter.java   |   555 +
 .../java/hydra/log/CircularOutputStream.java    |   131 +
 .../parReg/query/unittest/NewPortfolio.java     |   272 +
 .../java/parReg/query/unittest/Position.java    |   162 +
 .../src/test/java/perffmwk/Formatter.java       |   147 +
 .../java/security/AuthzCredentialGenerator.java |   462 +
 .../test/java/security/CredentialGenerator.java |   343 +
 .../security/DummyAuthzCredentialGenerator.java |   145 +
 .../java/security/DummyCredentialGenerator.java |    94 +
 .../security/LdapUserCredentialGenerator.java   |   160 +
 .../java/security/PKCSCredentialGenerator.java  |   112 +
 .../java/security/SSLCredentialGenerator.java   |   117 +
 .../UserPasswordWithExtraPropsAuthInit.java     |    77 +
 .../security/XmlAuthzCredentialGenerator.java   |   264 +
 .../templates/security/DummyAuthenticator.java  |    87 +
 .../templates/security/DummyAuthorization.java  |   118 +
 .../security/FunctionSecurityPrmsHolder.java    |    55 +
 .../security/LdapUserAuthenticator.java         |   117 +
 .../java/templates/security/PKCSAuthInit.java   |   133 +
 .../templates/security/PKCSAuthenticator.java   |   167 +
 .../java/templates/security/PKCSPrincipal.java  |    42 +
 .../security/UserPasswordAuthInit.java          |    84 +
 .../templates/security/UsernamePrincipal.java   |    46 +
 .../templates/security/XmlAuthorization.java    |   675 +
 .../templates/security/XmlErrorHandler.java     |    82 +
 .../src/test/java/util/TestException.java       |    35 +
 ...gemstone.gemfire.internal.cache.CacheService |     1 +
 ...ne.gemfire.internal.cache.xmlcache.XmlParser |     5 +
 ...org.springframework.shell.core.CommandMarker |     8 +
 .../ClientCacheFactoryJUnitTest_single_pool.xml |    30 +
 .../cache/client/internal/cacheserver.cer       |   Bin 0 -> 782 bytes
 .../cache/client/internal/cacheserver.keystore  |   Bin 0 -> 1253 bytes
 .../client/internal/cacheserver.truststore      |   Bin 0 -> 844 bytes
 .../gemfire/cache/client/internal/client.cer    |   Bin 0 -> 782 bytes
 .../cache/client/internal/client.keystore       |   Bin 0 -> 1251 bytes
 .../cache/client/internal/client.truststore     |   Bin 0 -> 846 bytes
 .../cache/client/internal/default.keystore      |   Bin 0 -> 1115 bytes
 .../cache/client/internal/trusted.keystore      |   Bin 0 -> 1078 bytes
 .../gemfire/cache/query/dunit/IndexCreation.xml |   131 +
 .../functional/index-creation-with-eviction.xml |    56 +
 .../index-creation-without-eviction.xml         |    67 +
 .../functional/index-recovery-overflow.xml      |    57 +
 .../query/internal/index/cachequeryindex.xml    |   125 +
 .../internal/index/cachequeryindexwitherror.xml |   134 +
 .../cache/query/partitioned/PRIndexCreation.xml |    44 +
 .../gemfire/cache30/attributesUnordered.xml     |    39 +
 .../com/gemstone/gemfire/cache30/badFloat.xml   |    30 +
 .../com/gemstone/gemfire/cache30/badInt.xml     |    33 +
 .../gemfire/cache30/badKeyConstraintClass.xml   |    31 +
 .../com/gemstone/gemfire/cache30/badScope.xml   |    30 +
 .../com/gemstone/gemfire/cache30/bug44710.xml   |    31 +
 .../gemfire/cache30/callbackNotDeclarable.xml   |    34 +
 .../gemfire/cache30/callbackWithException.xml   |    34 +
 .../com/gemstone/gemfire/cache30/coLocation.xml |    31 +
 .../gemstone/gemfire/cache30/coLocation3.xml    |    31 +
 .../com/gemstone/gemfire/cache30/ewtest.xml     |    68 +
 .../cache30/examples_3_0/example-cache.xml      |    87 +
 .../cache30/examples_4_0/example-cache.xml      |    94 +
 .../gemfire/cache30/loaderNotLoader.xml         |    33 +
 .../com/gemstone/gemfire/cache30/malformed.xml  |    29 +
 .../gemfire/cache30/namedAttributes.xml         |    59 +
 .../gemfire/cache30/partitionedRegion.xml       |    39 +
 .../gemfire/cache30/partitionedRegion51.xml     |    31 +
 .../gemstone/gemfire/cache30/sameRootRegion.xml |    37 +
 .../gemstone/gemfire/cache30/sameSubregion.xml  |    42 +
 .../gemfire/cache30/unknownNamedAttributes.xml  |    30 +
 .../gemfire/codeAnalysis/excludedClasses.txt    |   118 +
 .../gemstone/gemfire/codeAnalysis/openBugs.txt  |    23 +
 .../sanctionedDataSerializables.txt             |  2172 +++
 .../codeAnalysis/sanctionedSerializables.txt    |   827 +
 .../internal/SharedConfigurationJUnitTest.xml   |    23 +
 ...st_testWriteAfterSamplingBegins_expected.gfs |   Bin 0 -> 1970 bytes
 ...est_testWriteWhenSamplingBegins_expected.gfs |   Bin 0 -> 1933 bytes
 .../internal/cache/BackupJUnitTest.cache.xml    |    23 +
 .../internal/cache/DiskRegCacheXmlJUnitTest.xml |   233 +
 .../cache/PartitionRegionCacheExample1.xml      |    43 +
 .../cache/PartitionRegionCacheExample2.xml      |    42 +
 .../incorrect_bytes_threshold.xml               |    35 +
 .../faultyDiskXMLsForTesting/incorrect_dir.xml  |    35 +
 .../incorrect_dir_size.xml                      |    35 +
 .../incorrect_max_oplog_size.xml                |    35 +
 .../incorrect_roll_oplogs_value.xml             |    35 +
 .../incorrect_sync_value.xml                    |    35 +
 .../incorrect_time_interval.xml                 |    35 +
 .../mixed_diskstore_diskdir.xml                 |    38 +
 .../mixed_diskstore_diskwriteattrs.xml          |    38 +
 .../tier/sockets/RedundancyLevelJUnitTest.xml   |    38 +
 ...testDTDFallbackWithNonEnglishLocal.cache.xml |    23 +
 .../gemstone/gemfire/internal/jta/cachejta.xml  |   273 +
 .../domain/CacheElementJUnitTest.xml            |     7 +
 ...dNewNodeJUnitTest.testAddNewNodeNewNamed.xml |    25 +
 ...ewNodeJUnitTest.testAddNewNodeNewUnnamed.xml |    27 +
 ...itTest.testAddNewNodeNewUnnamedExtension.xml |    25 +
 ...NodeJUnitTest.testAddNewNodeReplaceNamed.xml |    22 +
 ...deJUnitTest.testAddNewNodeReplaceUnnamed.xml |    24 +
 ...st.testAddNewNodeReplaceUnnamedExtension.xml |    24 +
 ...sAddNewNodeJUnitTest.testDeleteNodeNamed.xml |    21 +
 ...ddNewNodeJUnitTest.testDeleteNodeUnnamed.xml |    23 +
 ...JUnitTest.testDeleteNodeUnnamedExtension.xml |    23 +
 .../utils/XmlUtilsAddNewNodeJUnitTest.xml       |    24 +
 ...Test.testBuildSchemaLocationMapAttribute.xml |    10 +
 ...testBuildSchemaLocationMapEmptyAttribute.xml |     8 +
 ...ationMapMapOfStringListOfStringAttribute.xml |    10 +
 ....testBuildSchemaLocationMapNullAttribute.xml |     7 +
 ...XmlUtilsJUnitTest.testQuerySingleElement.xml |    24 +
 .../management/internal/security/auth1.json     |    14 +
 .../management/internal/security/auth2.json     |    21 +
 .../management/internal/security/auth3.json     |    25 +
 .../internal/security/testInheritRole.json      |    40 +
 .../security/testSimpleUserAndRole.json         |    14 +
 .../testUserAndRoleRegionServerGroup.json       |    16 +
 .../internal/security/testUserMultipleRole.json |    20 +
 .../gemstone/gemfire/pdx/jsonStrings/array.txt  |    22 +
 .../gemfire/pdx/jsonStrings/attachment.txt      |    11 +
 .../gemfire/pdx/jsonStrings/attachment2.txt     |    13 +
 .../gemstone/gemfire/pdx/jsonStrings/book.txt   |    17 +
 .../gemstone/gemfire/pdx/jsonStrings/image.txt  |    13 +
 .../gemstone/gemfire/pdx/jsonStrings/json1.txt  |    22 +
 .../gemstone/gemfire/pdx/jsonStrings/json10.txt |    20 +
 .../gemstone/gemfire/pdx/jsonStrings/json11.txt |    33 +
 .../gemstone/gemfire/pdx/jsonStrings/json12.txt |    32 +
 .../gemstone/gemfire/pdx/jsonStrings/json13.txt |    42 +
 .../gemstone/gemfire/pdx/jsonStrings/json14.txt |    15 +
 .../gemstone/gemfire/pdx/jsonStrings/json15.txt |     1 +
 .../gemstone/gemfire/pdx/jsonStrings/json16.txt |    31 +
 .../gemfire/pdx/jsonStrings/json16_2.txt        |    31 +
 .../gemstone/gemfire/pdx/jsonStrings/json17.txt |    27 +
 .../gemstone/gemfire/pdx/jsonStrings/json18.txt |    71 +
 .../gemstone/gemfire/pdx/jsonStrings/json19.txt |    18 +
 .../gemstone/gemfire/pdx/jsonStrings/json2.txt  |    11 +
 .../gemstone/gemfire/pdx/jsonStrings/json20.txt |    36 +
 .../gemstone/gemfire/pdx/jsonStrings/json21.txt |    36 +
 .../gemstone/gemfire/pdx/jsonStrings/json22.txt |    36 +
 .../gemstone/gemfire/pdx/jsonStrings/json23.txt |    23 +
 .../gemstone/gemfire/pdx/jsonStrings/json24.txt |    15 +
 .../gemstone/gemfire/pdx/jsonStrings/json25.txt |    33 +
 .../gemstone/gemfire/pdx/jsonStrings/json26.txt |    13 +
 .../gemstone/gemfire/pdx/jsonStrings/json27.txt |    25 +
 .../gemstone/gemfire/pdx/jsonStrings/json28.txt |    84 +
 .../gemstone/gemfire/pdx/jsonStrings/json29.txt |    11 +
 .../gemstone/gemfire/pdx/jsonStrings/json3.txt  |    26 +
 .../gemstone/gemfire/pdx/jsonStrings/json31.txt |     9 +
 .../gemstone/gemfire/pdx/jsonStrings/json4.txt  |    88 +
 .../gemstone/gemfire/pdx/jsonStrings/json5.txt  |    27 +
 .../gemstone/gemfire/pdx/jsonStrings/json6.txt  |    11 +
 .../gemstone/gemfire/pdx/jsonStrings/json7.txt  |    32 +
 .../gemstone/gemfire/pdx/jsonStrings/json8.txt  |    53 +
 .../gemstone/gemfire/pdx/jsonStrings/json9.txt  |    77 +
 .../gemfire/pdx/jsonStrings/jsonMongo.txt       |    10 +
 .../pdx/jsonStrings/jsonMongoSingleQuote.tx0    |    10 +
 .../gemfire/pdx/jsonStrings/jsonProductdb.txt   |    33 +
 .../gemfire/pdx/jsonStrings/json_google.txt     |    33 +
 .../gemfire/pdx/jsonStrings/jsoncustomer.txt    |    24 +
 .../gemfire/pdx/jsonStrings/jsonemptyobject.txo |    44 +
 .../gemfire/pdx/jsonStrings/jsonemptyobject.txt |    23 +
 .../gemfire/pdx/jsonStrings/jsonfacebook.txt    |    45 +
 .../gemfire/pdx/jsonStrings/jsonfeed.txt        |    33 +
 .../gemfire/pdx/jsonStrings/jsonfeed2.txt       |    47 +
 .../gemfire/pdx/jsonStrings/jsonflicker.txt     |    21 +
 .../gemfire/pdx/jsonStrings/jsoniphone.txt      |    78 +
 .../pdx/jsonStrings/jsonsolrwithcomment.tx0     |    29 +
 .../pdx/jsonStrings/jsonsolrwithcomment.txt     |    29 +
 .../gemfire/pdx/jsonStrings/jsontwitter1.txt    |   430 +
 .../gemfire/pdx/jsonStrings/jsontwitter2.txt    |   574 +
 .../gemfire/pdx/jsonStrings/jsontwitter3.txt    |    70 +
 .../gemfire/pdx/jsonStrings/jsonutf.tx0         |     2 +
 .../gemfire/pdx/jsonStrings/jsonyahoo.txt       |    11 +
 .../gemfire/pdx/jsonStrings/jsonyoutube.txt     |    54 +
 .../gemfire/pdx/jsonStrings/linkden1.txt        |    16 +
 .../gemstone/gemfire/pdx/jsonStrings/odata.txt  |    16 +
 .../gemstone/gemfire/pdx/jsonStrings/odata2.txt |    18 +
 .../jsonStrings/unquoteJsonStrings/json1.txt    |    31 +
 .../gemfire/pdx/jsonStrings/weather.txt         |     1 +
 .../gemfire/test/golden/log4j2-test.xml         |    18 +
 geode-core/src/test/resources/jta/cachejta.xml  |   273 +
 .../src/test/resources/lib/authz-dummy.xml      |   126 +
 .../src/test/resources/lib/authz-ldap.xml       |    85 +
 .../resources/lib/authz-multiUser-dummy.xml     |   106 +
 .../test/resources/lib/authz-multiUser-ldap.xml |    83 +
 .../test/resources/lib/keys/gemfire1.keystore   |   Bin 0 -> 1536 bytes
 .../test/resources/lib/keys/gemfire10.keystore  |   Bin 0 -> 1546 bytes
 .../test/resources/lib/keys/gemfire11.keystore  |   Bin 0 -> 1546 bytes
 .../test/resources/lib/keys/gemfire2.keystore   |   Bin 0 -> 1536 bytes
 .../test/resources/lib/keys/gemfire3.keystore   |   Bin 0 -> 1536 bytes
 .../test/resources/lib/keys/gemfire4.keystore   |   Bin 0 -> 1536 bytes
 .../test/resources/lib/keys/gemfire5.keystore   |   Bin 0 -> 1536 bytes
 .../test/resources/lib/keys/gemfire6.keystore   |   Bin 0 -> 1536 bytes
 .../test/resources/lib/keys/gemfire7.keystore   |   Bin 0 -> 1536 bytes
 .../test/resources/lib/keys/gemfire8.keystore   |   Bin 0 -> 1536 bytes
 .../test/resources/lib/keys/gemfire9.keystore   |   Bin 0 -> 1536 bytes
 .../resources/lib/keys/ibm/gemfire1.keystore    |   Bin 0 -> 1426 bytes
 .../resources/lib/keys/ibm/gemfire10.keystore   |   Bin 0 -> 1434 bytes
 .../resources/lib/keys/ibm/gemfire11.keystore   |   Bin 0 -> 1434 bytes
 .../resources/lib/keys/ibm/gemfire2.keystore    |   Bin 0 -> 1434 bytes
 .../resources/lib/keys/ibm/gemfire3.keystore    |   Bin 0 -> 1426 bytes
 .../resources/lib/keys/ibm/gemfire4.keystore    |   Bin 0 -> 1434 bytes
 .../resources/lib/keys/ibm/gemfire5.keystore    |   Bin 0 -> 1434 bytes
 .../resources/lib/keys/ibm/gemfire6.keystore    |   Bin 0 -> 1434 bytes
 .../resources/lib/keys/ibm/gemfire7.keystore    |   Bin 0 -> 1426 bytes
 .../resources/lib/keys/ibm/gemfire8.keystore    |   Bin 0 -> 1434 bytes
 .../resources/lib/keys/ibm/gemfire9.keystore    |   Bin 0 -> 1426 bytes
 .../test/resources/lib/keys/ibm/publickeyfile   |   Bin 0 -> 4535 bytes
 .../src/test/resources/lib/keys/publickeyfile   |   Bin 0 -> 4535 bytes
 .../resources/spring/spring-gemfire-context.xml |    42 +
 .../src/test/resources/ssl/trusted.keystore     |   Bin 0 -> 1176 bytes
 .../src/test/resources/ssl/untrusted.keystore   |   Bin 0 -> 1181 bytes
 .../resources/templates/security/authz5_5.dtd   |   105 +
 .../resources/templates/security/authz6_0.dtd   |   110 +
 geode-cq/build.gradle                           |    23 +
 .../cache/client/internal/CloseCQOp.java        |    72 +
 .../cache/client/internal/CreateCQOp.java       |   163 +
 .../cache/client/internal/CreateCQWithIROp.java |    92 +
 .../cache/client/internal/GetDurableCQsOp.java  |   135 +
 .../client/internal/ServerCQProxyImpl.java      |   111 +
 .../gemfire/cache/client/internal/StopCQOp.java |    72 +
 .../cache/query/internal/cq/ClientCQImpl.java   |   615 +
 .../internal/cq/CqAttributesMutatorImpl.java    |    68 +
 .../cache/query/internal/cq/CqConflatable.java  |   223 +
 .../cache/query/internal/cq/CqEventImpl.java    |   162 +
 .../cache/query/internal/cq/CqListenerImpl.java |    56 +
 .../cache/query/internal/cq/CqQueryImpl.java    |   383 +
 .../query/internal/cq/CqServiceFactoryImpl.java |    69 +
 .../cache/query/internal/cq/CqServiceImpl.java  |  2087 ++
 .../internal/cq/CqServiceStatisticsImpl.java    |   100 +
 .../query/internal/cq/CqServiceVsdStats.java    |   411 +
 .../query/internal/cq/CqStatisticsImpl.java     |    75 +
 .../cache/query/internal/cq/ServerCQImpl.java   |   655 +
 .../tier/sockets/command/BaseCQCommand.java     |    59 +
 .../cache/tier/sockets/command/CloseCQ.java     |   131 +
 .../cache/tier/sockets/command/ExecuteCQ.java   |   168 +
 .../cache/tier/sockets/command/ExecuteCQ61.java |   220 +
 .../cache/tier/sockets/command/GetCQStats.java  |   100 +
 .../tier/sockets/command/GetDurableCQs.java     |   143 +
 .../cache/tier/sockets/command/MonitorCQ.java   |   100 +
 .../cache/tier/sockets/command/StopCQ.java      |   135 +
 ...cache.query.internal.cq.spi.CqServiceFactory |    15 +
 .../gemfire/cache/query/cq/CQJUnitTest.java     |   150 +
 .../cache/query/cq/dunit/CqDataDUnitTest.java   |  1165 ++
 .../dunit/CqDataOptimizedExecuteDUnitTest.java  |    55 +
 .../cq/dunit/CqDataUsingPoolDUnitTest.java      |  1559 ++
 ...qDataUsingPoolOptimizedExecuteDUnitTest.java |    54 +
 .../cache/query/cq/dunit/CqPerfDUnitTest.java   |  1048 +
 .../cq/dunit/CqPerfUsingPoolDUnitTest.java      |  1008 +
 .../cache/query/cq/dunit/CqQueryDUnitTest.java  |  3995 ++++
 .../dunit/CqQueryOptimizedExecuteDUnitTest.java |   310 +
 .../cq/dunit/CqQueryUsingPoolDUnitTest.java     |  3325 ++++
 ...QueryUsingPoolOptimizedExecuteDUnitTest.java |    50 +
 .../cq/dunit/CqResultSetUsingPoolDUnitTest.java |  1134 ++
 ...ltSetUsingPoolOptimizedExecuteDUnitTest.java |   235 +
 .../cache/query/cq/dunit/CqStateDUnitTest.java  |   138 +
 .../cache/query/cq/dunit/CqStatsDUnitTest.java  |   445 +
 .../dunit/CqStatsOptimizedExecuteDUnitTest.java |    50 +
 .../cq/dunit/CqStatsUsingPoolDUnitTest.java     |   456 +
 ...StatsUsingPoolOptimizedExecuteDUnitTest.java |    50 +
 .../query/cq/dunit/CqTimeTestListener.java      |   266 +
 .../PartitionedRegionCqQueryDUnitTest.java      |  1792 ++
 ...dRegionCqQueryOptimizedExecuteDUnitTest.java |   246 +
 .../query/cq/dunit/PrCqUsingPoolDUnitTest.java  |  2033 ++
 .../PrCqUsingPoolOptimizedExecuteDUnitTest.java |    50 +
 .../cache/query/dunit/PdxQueryCQDUnitTest.java  |   706 +
 .../cache/query/dunit/PdxQueryCQTestBase.java   |   496 +
 .../dunit/QueryIndexUpdateRIDUnitTest.java      |   815 +
 .../query/dunit/QueryMonitorDUnitTest.java      |  1299 ++
 .../cache/snapshot/ClientSnapshotDUnitTest.java |   286 +
 .../AnalyzeCQSerializablesJUnitTest.java        |    79 +
 .../cache/PRDeltaPropagationDUnitTest.java      |  1183 ++
 .../internal/cache/PutAllCSDUnitTest.java       |  4426 +++++
 .../cache/RemoteCQTransactionDUnitTest.java     |  1119 ++
 .../internal/cache/ha/CQListGIIDUnitTest.java   |   812 +
 .../cache/ha/HADispatcherDUnitTest.java         |   692 +
 .../sockets/ClientToServerDeltaDUnitTest.java   |   984 +
 .../DeltaPropagationWithCQDUnitTest.java        |   337 +
 ...ToRegionRelationCQRegistrationDUnitTest.java |   754 +
 .../sockets/DurableClientCrashDUnitTest.java    |    99 +
 .../sockets/DurableClientNetDownDUnitTest.java  |    79 +
 .../sockets/DurableClientSimpleDUnitTest.java   |  3343 ++++
 .../tier/sockets/DurableClientTestCase.java     |  2058 ++
 .../CacheServerManagementDUnitTest.java         |   574 +
 .../cli/commands/ClientCommandsDUnitTest.java   |  1446 ++
 .../DurableClientCommandsDUnitTest.java         |   436 +
 .../internal/pulse/TestCQDUnitTest.java         |   145 +
 .../internal/pulse/TestClientsDUnitTest.java    |   106 +
 .../internal/pulse/TestServerDUnitTest.java     |    97 +
 .../ClientAuthorizationTwoDUnitTest.java        |   239 +
 .../security/ClientAuthzObjectModDUnitTest.java |   412 +
 .../ClientCQPostAuthorizationDUnitTest.java     |   514 +
 .../ClientPostAuthorizationDUnitTest.java       |   390 +
 .../gemfire/security/MultiuserAPIDUnitTest.java |   383 +
 .../MultiuserDurableCQAuthzDUnitTest.java       |   477 +
 .../gemfire/codeAnalysis/excludedClasses.txt    |     2 +
 .../gemstone/gemfire/codeAnalysis/openBugs.txt  |    21 +
 .../sanctionedDataSerializables.txt             |     4 +
 .../codeAnalysis/sanctionedSerializables.txt    |     1 +
 .../tier/sockets/durablecq-client-cache.xml     |    37 +
 .../tier/sockets/durablecq-server-cache.xml     |    32 +
 .../java/joptsimple/AbstractOptionSpec.java     |   127 +
 .../joptsimple/AlternativeLongOptionSpec.java   |    54 +
 .../joptsimple/ArgumentAcceptingOptionSpec.java |   349 +
 .../src/main/java/joptsimple/ArgumentList.java  |    59 +
 .../java/joptsimple/BuiltinHelpFormatter.java   |   149 +
 .../src/main/java/joptsimple/HelpFormatter.java |    45 +
 .../IllegalOptionSpecificationException.java    |    52 +
 .../MissingRequiredOptionException.java         |    52 +
 .../MultipleArgumentsForOptionException.java    |    52 +
 .../java/joptsimple/NoArgumentOptionSpec.java   |    82 +
 .../OptionArgumentConversionException.java      |    63 +
 .../main/java/joptsimple/OptionDescriptor.java  |    94 +
 .../main/java/joptsimple/OptionException.java   |   111 +
 .../OptionMissingRequiredArgumentException.java |    52 +
 .../src/main/java/joptsimple/OptionParser.java  |   568 +
 .../main/java/joptsimple/OptionParserState.java |    81 +
 .../src/main/java/joptsimple/OptionSet.java     |   309 +
 .../src/main/java/joptsimple/OptionSpec.java    |    98 +
 .../main/java/joptsimple/OptionSpecBuilder.java |    96 +
 .../java/joptsimple/OptionSpecTokenizer.java    |   127 +
 .../joptsimple/OptionalArgumentOptionSpec.java  |    69 +
 .../src/main/java/joptsimple/ParserRules.java   |    84 +
 .../joptsimple/RequiredArgumentOptionSpec.java  |    54 +
 .../joptsimple/UnrecognizedOptionException.java |    52 +
 .../joptsimple/ValueConversionException.java    |    54 +
 .../main/java/joptsimple/ValueConverter.java    |    58 +
 .../joptsimple/internal/AbbreviationMap.java    |   233 +
 .../main/java/joptsimple/internal/Classes.java  |    74 +
 .../main/java/joptsimple/internal/Column.java   |   133 +
 .../internal/ColumnWidthCalculator.java         |    41 +
 .../java/joptsimple/internal/ColumnarData.java  |   163 +
 .../ConstructorInvokingValueConverter.java      |    58 +
 .../internal/MethodInvokingValueConverter.java  |    60 +
 .../main/java/joptsimple/internal/Objects.java  |    46 +
 .../java/joptsimple/internal/Reflection.java    |   143 +
 .../internal/ReflectionException.java           |    39 +
 .../main/java/joptsimple/internal/Strings.java  |   117 +
 .../java/joptsimple/util/DateConverter.java     |   104 +
 .../main/java/joptsimple/util/KeyValuePair.java |    83 +
 .../main/java/joptsimple/util/RegexMatcher.java |    88 +
 geode-json/src/main/java/org/json/CDL.java      |   279 +
 geode-json/src/main/java/org/json/Cookie.java   |   169 +
 .../src/main/java/org/json/CookieList.java      |    90 +
 geode-json/src/main/java/org/json/HTTP.java     |   163 +
 .../src/main/java/org/json/HTTPTokener.java     |    77 +
 .../src/main/java/org/json/JSONArray.java       |   906 +
 .../src/main/java/org/json/JSONException.java   |    28 +
 geode-json/src/main/java/org/json/JSONML.java   |   467 +
 .../src/main/java/org/json/JSONObject.java      |  1611 ++
 .../src/main/java/org/json/JSONString.java      |    18 +
 .../src/main/java/org/json/JSONStringer.java    |    78 +
 .../src/main/java/org/json/JSONTokener.java     |   446 +
 .../src/main/java/org/json/JSONWriter.java      |   327 +
 geode-json/src/main/java/org/json/XML.java      |   508 +
 .../src/main/java/org/json/XMLTokener.java      |   365 +
 geode-junit/build.gradle                        |    21 +
 .../gemfire/test/junit/ConditionalIgnore.java   |    49 +
 .../gemfire/test/junit/IgnoreCondition.java     |    32 +
 .../gemfire/test/junit/IgnoreUntil.java         |    49 +
 .../com/gemstone/gemfire/test/junit/Repeat.java |    43 +
 .../com/gemstone/gemfire/test/junit/Retry.java  |    38 +
 .../test/junit/categories/ContainerTest.java    |    25 +
 .../test/junit/categories/DistributedTest.java  |    25 +
 .../categories/DistributedTransactionsTest.java |    26 +
 .../test/junit/categories/HydraTest.java        |    24 +
 .../test/junit/categories/IntegrationTest.java  |    25 +
 .../test/junit/categories/PerformanceTest.java  |    25 +
 .../gemfire/test/junit/categories/UITest.java   |    24 +
 .../gemfire/test/junit/categories/UnitTest.java |    25 +
 .../gemfire/test/junit/categories/WanTest.java  |    24 +
 .../test/junit/rules/ConditionalIgnoreRule.java |   123 +
 .../test/junit/rules/ExpectedTimeout.java       |   180 +
 .../test/junit/rules/ExpectedTimeoutRule.java   |   180 +
 .../test/junit/rules/IgnoreUntilRule.java       |   123 +
 .../gemfire/test/junit/rules/RepeatRule.java    |    81 +
 .../gemfire/test/junit/rules/RetryRule.java     |   181 +
 .../rules/SerializableExternalResource.java     |   107 +
 .../test/junit/rules/SerializableRuleChain.java |   119 +
 .../rules/SerializableTemporaryFolder.java      |    70 +
 .../test/junit/rules/SerializableTestName.java  |    54 +
 .../test/junit/rules/SerializableTestRule.java  |    33 +
 .../junit/rules/SerializableTestWatcher.java    |    29 +
 .../test/junit/rules/SerializableTimeout.java   |   119 +
 .../junit/support/DefaultIgnoreCondition.java   |    57 +
 .../IgnoreConditionEvaluationException.java     |    43 +
 .../junit/rules/ExpectedTimeoutJUnitTest.java   |   204 +
 .../examples/RepeatingTestCasesExampleTest.java |    94 +
 .../rules/examples/RetryRuleExampleTest.java    |    43 +
 .../rules/tests/ExpectedTimeoutRuleTest.java    |   214 +
 .../junit/rules/tests/IgnoreUntilRuleTest.java  |   121 +
 .../junit/rules/tests/JUnitRuleTestSuite.java   |    33 +
 .../test/junit/rules/tests/RepeatRuleTest.java  |   304 +
 .../tests/RetryRuleGlobalWithErrorTest.java     |   250 +
 .../tests/RetryRuleGlobalWithExceptionTest.java |   254 +
 .../tests/RetryRuleLocalWithErrorTest.java      |   207 +
 .../tests/RetryRuleLocalWithExceptionTest.java  |   213 +
 .../junit/rules/tests/RuleAndClassRuleTest.java |   138 +
 .../test/junit/rules/tests/TestRunner.java      |    37 +
 geode-lucene/build.gradle                       |    40 +
 .../gemfire/cache/lucene/LuceneIndex.java       |    60 +
 .../gemfire/cache/lucene/LuceneQuery.java       |    48 +
 .../cache/lucene/LuceneQueryFactory.java        |   100 +
 .../cache/lucene/LuceneQueryProvider.java       |    45 +
 .../cache/lucene/LuceneQueryResults.java        |    58 +
 .../cache/lucene/LuceneResultStruct.java        |    62 +
 .../gemfire/cache/lucene/LuceneService.java     |   118 +
 .../cache/lucene/LuceneServiceProvider.java     |    46 +
 .../lucene/internal/InternalLuceneIndex.java    |    29 +
 .../lucene/internal/InternalLuceneService.java  |    29 +
 .../lucene/internal/LuceneEventListener.java    |    99 +
 .../LuceneIndexForPartitionedRegion.java        |   136 +
 .../LuceneIndexForReplicatedRegion.java         |    48 +
 .../cache/lucene/internal/LuceneIndexImpl.java  |   107 +
 .../lucene/internal/LuceneQueryFactoryImpl.java |    67 +
 .../cache/lucene/internal/LuceneQueryImpl.java  |    87 +
 .../lucene/internal/LuceneQueryResultsImpl.java |   120 +
 .../lucene/internal/LuceneResultStructImpl.java |    94 +
 .../lucene/internal/LuceneServiceImpl.java      |   273 +
 .../internal/PartitionedRepositoryManager.java  |   163 +
 .../lucene/internal/StringQueryProvider.java    |   106 +
 .../internal/directory/FileIndexInput.java      |   131 +
 .../internal/directory/RegionDirectory.java     |   119 +
 .../internal/distributed/CollectorManager.java  |    55 +
 .../lucene/internal/distributed/EntryScore.java |    82 +
 .../internal/distributed/LuceneFunction.java    |   137 +
 .../distributed/LuceneFunctionContext.java      |   115 +
 .../lucene/internal/distributed/TopEntries.java |   133 +
 .../distributed/TopEntriesCollector.java        |   102 +
 .../distributed/TopEntriesCollectorManager.java |   178 +
 .../TopEntriesFunctionCollector.java            |   163 +
 .../lucene/internal/filesystem/ChunkKey.java    |   123 +
 .../cache/lucene/internal/filesystem/File.java  |   155 +
 .../internal/filesystem/FileInputStream.java    |   166 +
 .../internal/filesystem/FileOutputStream.java   |   103 +
 .../lucene/internal/filesystem/FileSystem.java  |   156 +
 .../filesystem/SeekableInputStream.java         |    43 +
 .../internal/repository/IndexRepository.java    |    74 +
 .../repository/IndexRepositoryImpl.java         |   113 +
 .../repository/IndexResultCollector.java        |    47 +
 .../internal/repository/RepositoryManager.java  |    44 +
 .../HeterogenousLuceneSerializer.java           |    83 +
 .../repository/serializer/LuceneSerializer.java |    35 +
 .../serializer/PdxLuceneSerializer.java         |    47 +
 .../serializer/ReflectionLuceneSerializer.java  |    74 +
 .../repository/serializer/SerializerUtil.java   |   168 +
 .../internal/xml/LuceneIndexCreation.java       |   111 +
 .../internal/xml/LuceneIndexXmlGenerator.java   |    65 +
 .../internal/xml/LuceneServiceXmlGenerator.java |    39 +
 .../lucene/internal/xml/LuceneXmlConstants.java |    31 +
 .../lucene/internal/xml/LuceneXmlParser.java    |    97 +
 .../geode.apache.org/lucene/lucene-1.0.xsd      |    57 +
 ...gemstone.gemfire.internal.cache.CacheService |     1 +
 ...ne.gemfire.internal.cache.xmlcache.XmlParser |     1 +
 .../internal/LuceneEventListenerJUnitTest.java  |   109 +
 .../LuceneIndexRecoveryHAJUnitTest.java         |   201 +
 .../LuceneQueryFactoryImplJUnitTest.java        |    50 +
 .../internal/LuceneQueryImplJUnitTest.java      |   123 +
 .../LuceneQueryResultsImplJUnitTest.java        |   126 +
 .../LuceneResultStructImpJUnitTest.java         |    51 +
 .../internal/LuceneServiceImplJUnitTest.java    |   226 +
 .../PartitionedRepositoryManagerJUnitTest.java  |   230 +
 .../internal/StringQueryProviderJUnitTest.java  |    90 +
 .../directory/RegionDirectoryJUnitTest.java     |    56 +
 .../DistributedScoringJUnitTest.java            |   155 +
 .../distributed/EntryScoreJUnitTest.java        |    40 +
 .../LuceneFunctionContextJUnitTest.java         |    64 +
 .../distributed/LuceneFunctionJUnitTest.java    |   423 +
 .../LuceneFunctionReadPathDUnitTest.java        |   242 +
 .../TopEntriesCollectorJUnitTest.java           |   139 +
 .../TopEntriesFunctionCollectorJUnitTest.java   |   323 +
 .../distributed/TopEntriesJUnitTest.java        |   146 +
 .../internal/filesystem/ChunkKeyJUnitTest.java  |    48 +
 .../internal/filesystem/FileJUnitTest.java      |    53 +
 .../filesystem/FileSystemJUnitTest.java         |   578 +
 .../IndexRepositoryImplJUnitTest.java           |   208 +
 .../IndexRepositoryImplPerformanceTest.java     |   439 +
 .../HeterogenousLuceneSerializerJUnitTest.java  |    90 +
 .../serializer/PdxFieldMapperJUnitTest.java     |    85 +
 .../ReflectionFieldMapperJUnitTest.java         |    85 +
 .../internal/repository/serializer/Type1.java   |    48 +
 .../internal/repository/serializer/Type2.java   |    34 +
 ...neIndexXmlGeneratorIntegrationJUnitTest.java |    78 +
 .../xml/LuceneIndexXmlGeneratorJUnitTest.java   |    80 +
 ...uceneIndexXmlParserIntegrationJUnitTest.java |   107 +
 .../xml/LuceneIndexXmlParserJUnitTest.java      |    72 +
 ...erIntegrationJUnitTest.createIndex.cache.xml |    41 +
 ...serIntegrationJUnitTest.parseIndex.cache.xml |    41 +
 geode-pulse/build.gradle                        |   108 +
 .../tools/pulse/internal/PulseAppListener.java  |   703 +
 .../controllers/ExceptionHandlingAdvice.java    |    52 +
 .../internal/controllers/PulseController.java   |   537 +
 .../tools/pulse/internal/data/Cluster.java      |  3827 ++++
 .../tools/pulse/internal/data/DataBrowser.java  |   249 +
 .../pulse/internal/data/IClusterUpdater.java    |    36 +
 .../pulse/internal/data/JMXDataUpdater.java     |  2454 +++
 .../pulse/internal/data/JmxManagerFinder.java   |   171 +
 .../tools/pulse/internal/data/PulseConfig.java  |   140 +
 .../pulse/internal/data/PulseConstants.java     |   421 +
 .../tools/pulse/internal/data/PulseVersion.java |   104 +
 .../tools/pulse/internal/data/Repository.java   |   215 +
 .../gemfire/tools/pulse/internal/json/CDL.java  |   274 +
 .../tools/pulse/internal/json/Cookie.java       |   164 +
 .../tools/pulse/internal/json/CookieList.java   |    85 +
 .../gemfire/tools/pulse/internal/json/HTTP.java |   158 +
 .../tools/pulse/internal/json/HTTPTokener.java  |    72 +
 .../tools/pulse/internal/json/JSONArray.java    |   901 +
 .../pulse/internal/json/JSONException.java      |    47 +
 .../tools/pulse/internal/json/JSONML.java       |   462 +
 .../tools/pulse/internal/json/JSONObject.java   |  1585 ++
 .../tools/pulse/internal/json/JSONString.java   |    37 +
 .../tools/pulse/internal/json/JSONStringer.java |    73 +
 .../tools/pulse/internal/json/JSONTokener.java  |   441 +
 .../tools/pulse/internal/json/JSONWriter.java   |   322 +
 .../gemfire/tools/pulse/internal/json/README    |    68 +
 .../gemfire/tools/pulse/internal/json/XML.java  |   503 +
 .../tools/pulse/internal/json/XMLTokener.java   |   360 +
 .../tools/pulse/internal/log/LogWriter.java     |   266 +
 .../pulse/internal/log/MessageFormatter.java    |   103 +
 .../pulse/internal/log/PulseLogWriter.java      |   304 +
 .../tools/pulse/internal/log/PulseLogger.java   |   144 +
 .../internal/service/ClusterDetailsService.java |   105 +
 .../service/ClusterDiskThroughputService.java   |    72 +
 .../service/ClusterGCPausesService.java         |    70 +
 .../service/ClusterKeyStatisticsService.java    |    70 +
 .../internal/service/ClusterMemberService.java  |   132 +
 .../service/ClusterMembersRGraphService.java    |   360 +
 .../service/ClusterMemoryUsageService.java      |    66 +
 .../internal/service/ClusterRegionService.java  |   223 +
 .../internal/service/ClusterRegionsService.java |   218 +
 .../service/ClusterSelectedRegionService.java   |   243 +
 .../ClusterSelectedRegionsMemberService.java    |   144 +
 .../internal/service/ClusterWANInfoService.java |    76 +
 .../service/MemberAsynchEventQueuesService.java |   100 +
 .../internal/service/MemberClientsService.java  |   102 +
 .../internal/service/MemberDetailsService.java  |   122 +
 .../service/MemberDiskThroughputService.java    |    77 +
 .../internal/service/MemberGCPausesService.java |    74 +
 .../service/MemberGatewayHubService.java        |   150 +
 .../service/MemberHeapUsageService.java         |    74 +
 .../service/MemberKeyStatisticsService.java     |    77 +
 .../internal/service/MemberRegionsService.java  |   128 +
 .../internal/service/MembersListService.java    |    76 +
 .../pulse/internal/service/PulseService.java    |    41 +
 .../internal/service/PulseServiceFactory.java   |    56 +
 .../internal/service/PulseVersionService.java   |    66 +
 .../service/QueryStatisticsService.java         |   116 +
 .../internal/service/SystemAlertsService.java   |   128 +
 .../pulse/internal/util/ConnectionUtil.java     |    47 +
 .../pulse/internal/util/IPAddressUtil.java      |    66 +
 .../tools/pulse/internal/util/StringUtils.java  |    86 +
 .../tools/pulse/internal/util/TimeUtils.java    |   121 +
 .../main/resources/LogMessages_en_US.properties |    97 +
 .../main/resources/LogMessages_fr_FR.properties |    91 +
 .../src/main/resources/default.properties       |    23 +
 .../src/main/resources/gemfire.properties       |    47 +
 .../src/main/resources/pulse-users.properties   |    30 +
 geode-pulse/src/main/resources/pulse.properties |    54 +
 .../src/main/resources/pulsesecurity.properties |    26 +
 .../src/main/resources/sqlfire.properties       |    47 +
 geode-pulse/src/main/webapp/DataBrowser.html    |   345 +
 geode-pulse/src/main/webapp/Login.html          |   114 +
 .../src/main/webapp/META-INF/MANIFEST.MF        |     3 +
 geode-pulse/src/main/webapp/MemberDetails.html  |   603 +
 .../src/main/webapp/QueryStatistics.html        |   308 +
 .../webapp/WEB-INF/mvc-dispatcher-servlet.xml   |    35 +
 .../src/main/webapp/WEB-INF/spring-security.xml |    83 +
 geode-pulse/src/main/webapp/WEB-INF/web.xml     |    62 +
 geode-pulse/src/main/webapp/clusterDetail.html  |   662 +
 .../src/main/webapp/css/ForceDirected.css       |    46 +
 geode-pulse/src/main/webapp/css/Treemap.css     |   134 +
 geode-pulse/src/main/webapp/css/base.css        |    74 +
 geode-pulse/src/main/webapp/css/common.css      |   240 +
 .../webapp/css/fonts/DroidSans-Bold-webfont.eot |   Bin 0 -> 43462 bytes
 .../webapp/css/fonts/DroidSans-Bold-webfont.svg |   271 +
 .../webapp/css/fonts/DroidSans-Bold-webfont.ttf |   Bin 0 -> 43260 bytes
 .../css/fonts/DroidSans-Bold-webfont.woff       |   Bin 0 -> 27120 bytes
 .../main/webapp/css/fonts/DroidSans-webfont.eot |   Bin 0 -> 44926 bytes
 .../main/webapp/css/fonts/DroidSans-webfont.svg |   271 +
 .../main/webapp/css/fonts/DroidSans-webfont.ttf |   Bin 0 -> 44712 bytes
 .../webapp/css/fonts/DroidSans-webfont.woff     |   Bin 0 -> 27672 bytes
 .../src/main/webapp/css/grid/ui.jqgrid.css      |   850 +
 .../src/main/webapp/css/grips/horizontal.png    |   Bin 0 -> 2753 bytes
 .../src/main/webapp/css/grips/vertical.png      |   Bin 0 -> 91 bytes
 geode-pulse/src/main/webapp/css/ie/ie.css       |    19 +
 geode-pulse/src/main/webapp/css/ie/ie7.css      |    21 +
 geode-pulse/src/main/webapp/css/ie/ie8.css      |    20 +
 geode-pulse/src/main/webapp/css/ie/ie9.css      |    20 +
 geode-pulse/src/main/webapp/css/jquery-ui.css   |   566 +
 .../src/main/webapp/css/jquery.jscrollpane.css  |   121 +
 .../src/main/webapp/css/jquery.ui.all.css       |    11 +
 .../src/main/webapp/css/jquery.ui.core.css      |    41 +
 .../src/main/webapp/css/jquery.ui.theme.css     |   248 +
 .../src/main/webapp/css/jquery.ztreestyle.css   |    90 +
 .../css/multiselect/jquery.multiselect.css      |   301 +
 .../main/webapp/css/multiselect/prettify.css    |    46 +
 .../src/main/webapp/css/multiselect/style.css   |    35 +
 geode-pulse/src/main/webapp/css/popup.css       |    55 +
 geode-pulse/src/main/webapp/css/style.css       |  3105 +++
 .../src/main/webapp/css/treeView/Treemap.css    |   134 +
 .../src/main/webapp/images/about-gemfirexd.png  |   Bin 0 -> 4440 bytes
 .../src/main/webapp/images/about-geode.png      |   Bin 0 -> 7640 bytes
 .../src/main/webapp/images/about-sqlfire.png    |   Bin 0 -> 6277 bytes
 geode-pulse/src/main/webapp/images/about.png    |   Bin 0 -> 4421 bytes
 .../src/main/webapp/images/acc-minus.png        |   Bin 0 -> 1049 bytes
 .../src/main/webapp/images/acc-n-minus.png      |   Bin 0 -> 961 bytes
 .../src/main/webapp/images/acc-n-plus.png       |   Bin 0 -> 988 bytes
 geode-pulse/src/main/webapp/images/acc-plus.png |   Bin 0 -> 1047 bytes
 .../src/main/webapp/images/activeServer.png     |   Bin 0 -> 2846 bytes
 .../main/webapp/images/apache_geode_logo.png    |   Bin 0 -> 23616 bytes
 .../src/main/webapp/images/arrow-down.png       |   Bin 0 -> 986 bytes
 geode-pulse/src/main/webapp/images/arrow-up.png |   Bin 0 -> 988 bytes
 geode-pulse/src/main/webapp/images/bg-image.png |   Bin 0 -> 948 bytes
 .../src/main/webapp/images/bg-imageLogin.png    |   Bin 0 -> 946 bytes
 .../src/main/webapp/images/blue-msg-icon.png    |   Bin 0 -> 1194 bytes
 .../src/main/webapp/images/border-left-grid.png |   Bin 0 -> 927 bytes
 .../src/main/webapp/images/bread-crumb.png      |   Bin 0 -> 1182 bytes
 .../src/main/webapp/images/bubble_arrow.png     |   Bin 0 -> 1168 bytes
 .../src/main/webapp/images/chart-active.png     |   Bin 0 -> 1096 bytes
 geode-pulse/src/main/webapp/images/chart.png    |   Bin 0 -> 1095 bytes
 geode-pulse/src/main/webapp/images/checkbox.png |   Bin 0 -> 1630 bytes
 geode-pulse/src/main/webapp/images/chkbox.png   |   Bin 0 -> 1313 bytes
 .../src/main/webapp/images/copy_icon.png        |   Bin 0 -> 1172 bytes
 .../src/main/webapp/images/correct_icon.png     |   Bin 0 -> 1143 bytes
 .../main/webapp/images/correct_small_icon.png   |   Bin 0 -> 1065 bytes
 .../main/webapp/images/correct_white_icon.png   |   Bin 0 -> 1122 bytes
 geode-pulse/src/main/webapp/images/cross.png    |   Bin 0 -> 2954 bytes
 .../main/webapp/images/dataViewWanEnabled.png   |   Bin 0 -> 1204 bytes
 .../src/main/webapp/images/dd_active.png        |   Bin 0 -> 1065 bytes
 geode-pulse/src/main/webapp/images/dd_arrow.png |   Bin 0 -> 1058 bytes
 .../webapp/images/error-locators-others.png     |   Bin 0 -> 2052 bytes
 .../src/main/webapp/images/error-locators.png   |   Bin 0 -> 2023 bytes
 .../images/error-manager-locator-others.png     |   Bin 0 -> 2067 bytes
 .../webapp/images/error-manager-locator.png     |   Bin 0 -> 2047 bytes
 .../webapp/images/error-managers-others.png     |   Bin 0 -> 2051 bytes
 .../src/main/webapp/images/error-managers.png   |   Bin 0 -> 2025 bytes
 .../main/webapp/images/error-message-icon.png   |   Bin 0 -> 1193 bytes
 .../src/main/webapp/images/error-msg-icon.png   |   Bin 0 -> 1194 bytes
 .../src/main/webapp/images/error-others.png     |   Bin 0 -> 2066 bytes
 .../src/main/webapp/images/error-otheruser.png  |   Bin 0 -> 2002 bytes
 .../main/webapp/images/error-status-icon.png    |   Bin 0 -> 2024 bytes
 geode-pulse/src/main/webapp/images/error.png    |   Bin 0 -> 1110 bytes
 .../src/main/webapp/images/graph-active.png     |   Bin 0 -> 1360 bytes
 geode-pulse/src/main/webapp/images/graph.png    |   Bin 0 -> 1374 bytes
 .../images/graph/key-statistics-graph.png       |   Bin 0 -> 1617 bytes
 .../webapp/images/graph/memory-usage-graph.png  |   Bin 0 -> 4366 bytes
 .../src/main/webapp/images/graph/reads.png      |   Bin 0 -> 3423 bytes
 .../images/graph/throughput-writes-graph.png    |   Bin 0 -> 4340 bytes
 .../src/main/webapp/images/graph/topology.png   |   Bin 0 -> 14997 bytes
 .../src/main/webapp/images/graph/treeview.png   |   Bin 0 -> 3386 bytes
 .../src/main/webapp/images/graph/writes.png     |   Bin 0 -> 3527 bytes
 .../src/main/webapp/images/grid-active.png      |   Bin 0 -> 1095 bytes
 geode-pulse/src/main/webapp/images/grid.png     |   Bin 0 -> 1094 bytes
 .../webapp/images/header-bg-bottom-border.png   |   Bin 0 -> 924 bytes
 geode-pulse/src/main/webapp/images/hide_ico.png |   Bin 0 -> 3281 bytes
 .../src/main/webapp/images/history-icon.png     |   Bin 0 -> 3533 bytes
 .../src/main/webapp/images/history-remove.png   |   Bin 0 -> 1185 bytes
 .../src/main/webapp/images/hor-spiltter-dot.png |   Bin 0 -> 990 bytes
 .../webapp/images/icons members/locators.png    |   Bin 0 -> 3106 bytes
 .../images/icons members/locators_others.png    |   Bin 0 -> 3118 bytes
 .../webapp/images/icons members/managers.png    |   Bin 0 -> 3103 bytes
 .../images/icons members/managers_locators.png  |   Bin 0 -> 3120 bytes
 .../images/icons members/managers_others.png    |   Bin 0 -> 3117 bytes
 .../main/webapp/images/icons members/others.png |   Bin 0 -> 3102 bytes
 .../src/main/webapp/images/info-msg-icon.png    |   Bin 0 -> 1194 bytes
 geode-pulse/src/main/webapp/images/lastLine.png |   Bin 0 -> 948 bytes
 geode-pulse/src/main/webapp/images/line.png     |   Bin 0 -> 929 bytes
 geode-pulse/src/main/webapp/images/mask-bg.png  |   Bin 0 -> 940 bytes
 .../webapp/images/membersName_arror-off.png     |   Bin 0 -> 1148 bytes
 .../main/webapp/images/membersName_arror-on.png |   Bin 0 -> 1170 bytes
 geode-pulse/src/main/webapp/images/minus.png    |   Bin 0 -> 2959 bytes
 .../webapp/images/normal-locators-others.png    |   Bin 0 -> 2025 bytes
 .../src/main/webapp/images/normal-locators.png  |   Bin 0 -> 1995 bytes
 .../images/normal-manager-locator-others.png    |   Bin 0 -> 2037 bytes
 .../webapp/images/normal-manager-locator.png    |   Bin 0 -> 2029 bytes
 .../webapp/images/normal-managers-others.png    |   Bin 0 -> 2027 bytes
 .../src/main/webapp/images/normal-managers.png  |   Bin 0 -> 1997 bytes
 .../src/main/webapp/images/normal-others.png    |   Bin 0 -> 1988 bytes
 .../src/main/webapp/images/normal-otheruser.png |   Bin 0 -> 1968 bytes
 .../main/webapp/images/normal-status-icon.png   |   Bin 0 -> 1955 bytes
 geode-pulse/src/main/webapp/images/normal.png   |   Bin 0 -> 1110 bytes
 .../src/main/webapp/images/orange-msg-icon.png  |   Bin 0 -> 1194 bytes
 .../src/main/webapp/images/pivotal-logo.png     |   Bin 0 -> 3500 bytes
 geode-pulse/src/main/webapp/images/plus.png     |   Bin 0 -> 1178 bytes
 .../src/main/webapp/images/plusMinusIcon.png    |   Bin 0 -> 1192 bytes
 .../src/main/webapp/images/popup-arrow.png      |   Bin 0 -> 1075 bytes
 .../main/webapp/images/popup-close-button.png   |   Bin 0 -> 1026 bytes
 .../images/pulse-monitoring-gemfirexd-old.png   |   Bin 0 -> 6606 bytes
 .../images/pulse-monitoring-gemfirexd.png       |   Bin 0 -> 4440 bytes
 .../webapp/images/pulse-monitoring-sqlfire.png  |   Bin 0 -> 6467 bytes
 .../src/main/webapp/images/pulse-monitoring.png |   Bin 0 -> 4741 bytes
 .../src/main/webapp/images/radio-off.png        |   Bin 0 -> 1252 bytes
 geode-pulse/src/main/webapp/images/radio-on.png |   Bin 0 -> 1306 bytes
 geode-pulse/src/main/webapp/images/radio.png    |   Bin 0 -> 2476 bytes
 .../src/main/webapp/images/regionIcons.png      |   Bin 0 -> 1495 bytes
 .../src/main/webapp/images/rightBorder.png      |   Bin 0 -> 927 bytes
 .../src/main/webapp/images/searchIcon.png       |   Bin 0 -> 1592 bytes
 .../src/main/webapp/images/seperator.png        |   Bin 0 -> 929 bytes
 geode-pulse/src/main/webapp/images/server.png   |   Bin 0 -> 1233 bytes
 .../webapp/images/severe-locators-others.png    |   Bin 0 -> 2026 bytes
 .../src/main/webapp/images/severe-locators.png  |   Bin 0 -> 1980 bytes
 .../images/severe-manager-locator-others.png    |   Bin 0 -> 2032 bytes
 .../webapp/images/severe-manager-locator.png    |   Bin 0 -> 2026 bytes
 .../webapp/images/severe-managers-others.png    |   Bin 0 -> 2026 bytes
 .../src/main/webapp/images/severe-managers.png  |   Bin 0 -> 1985 bytes
 .../src/main/webapp/images/severe-msg-icon.png  |   Bin 0 -> 1194 bytes
 .../src/main/webapp/images/severe-others.png    |   Bin 0 -> 2007 bytes
 .../src/main/webapp/images/severe-otheruser.png |   Bin 0 -> 1959 bytes
 .../main/webapp/images/severe-status-icon.png   |   Bin 0 -> 2218 bytes
 geode-pulse/src/main/webapp/images/severe.png   |   Bin 0 -> 1110 bytes
 geode-pulse/src/main/webapp/images/show_ico.png |   Bin 0 -> 3296 bytes
 geode-pulse/src/main/webapp/images/spacer.png   |   Bin 0 -> 922 bytes
 geode-pulse/src/main/webapp/images/sqlfire.png  |   Bin 0 -> 6467 bytes
 .../src/main/webapp/images/status-down.png      |   Bin 0 -> 1125 bytes
 .../src/main/webapp/images/status-up.png        |   Bin 0 -> 1104 bytes
 .../src/main/webapp/images/subServer.png        |   Bin 0 -> 2201 bytes
 .../src/main/webapp/images/tab-bottom-bg.png    |   Bin 0 -> 929 bytes
 .../src/main/webapp/images/treeView-img.png     |   Bin 0 -> 962 bytes
 .../main/webapp/images/ui-anim_basic_16x16.gif  |   Bin 0 -> 1459 bytes
 .../src/main/webapp/images/ver-spiltter-dot.png |   Bin 0 -> 979 bytes
 .../webapp/images/warning-locators-others.png   |   Bin 0 -> 2048 bytes
 .../src/main/webapp/images/warning-locators.png |   Bin 0 -> 2032 bytes
 .../images/warning-manager-locator-others.png   |   Bin 0 -> 2071 bytes
 .../webapp/images/warning-manager-locator.png   |   Bin 0 -> 2052 bytes
 .../webapp/images/warning-managers-others.png   |   Bin 0 -> 2023 bytes
 .../src/main/webapp/images/warning-managers.png |   Bin 0 -> 2030 bytes
 .../src/main/webapp/images/warning-msg-icon.png |   Bin 0 -> 1194 bytes
 .../src/main/webapp/images/warning-others.png   |   Bin 0 -> 2027 bytes
 .../main/webapp/images/warning-otheruser.png    |   Bin 0 -> 2010 bytes
 .../main/webapp/images/warning-status-icon.png  |   Bin 0 -> 1714 bytes
 geode-pulse/src/main/webapp/images/warning.png  |   Bin 0 -> 1107 bytes
 .../src/main/webapp/images/yellow-msg-icon.png  |   Bin 0 -> 1194 bytes
 geode-pulse/src/main/webapp/index.html          |    67 +
 .../main/webapp/properties/default.properties   |    21 +
 .../webapp/properties/default_en.properties     |    21 +
 .../main/webapp/properties/gemfire.properties   |    45 +
 .../webapp/properties/gemfire_en.properties     |    45 +
 .../main/webapp/properties/gemfirexd.properties |    45 +
 .../webapp/properties/gemfirexd_en.properties   |    45 +
 .../src/main/webapp/properties/index.properties |    18 +
 .../main/webapp/properties/index_fr.properties  |    19 +
 .../main/webapp/properties/sqlfire.properties   |    45 +
 geode-pulse/src/main/webapp/regionDetail.html   |   552 +
 .../src/main/webapp/scripts/lib/common.js       |   536 +
 .../src/main/webapp/scripts/lib/excanvas.js     |  1416 ++
 .../main/webapp/scripts/lib/grid.locale-en.js   |   169 +
 .../src/main/webapp/scripts/lib/html5.js        |     3 +
 geode-pulse/src/main/webapp/scripts/lib/jit.js  | 17208 +++++++++++++++++
 .../src/main/webapp/scripts/lib/jquery-1.7.2.js |  9404 +++++++++
 .../webapp/scripts/lib/jquery.generateFile.js   |    77 +
 .../scripts/lib/jquery.i18n.properties.js       |   336 +
 .../webapp/scripts/lib/jquery.jqGrid.src.js     | 12182 ++++++++++++
 .../webapp/scripts/lib/jquery.jscrollpane.js    |  1340 ++
 .../webapp/scripts/lib/jquery.mousewheel.js     |    84 +
 .../webapp/scripts/lib/jquery.placeholder.js    |   106 +
 .../main/webapp/scripts/lib/jquery.sparkline.js |  3001 +++
 .../main/webapp/scripts/lib/jquery.tablednd.js  |   383 +
 .../main/webapp/scripts/lib/jquery.timeago.js   |   193 +
 .../webapp/scripts/lib/jquery.ztree.core-3.5.js |  1650 ++
 .../scripts/lib/jquery.ztree.excheck-3.5.js     |   624 +
 .../src/main/webapp/scripts/lib/split.js        |   375 +
 .../src/main/webapp/scripts/lib/tooltip.js      |   357 +
 .../webapp/scripts/multiselect/jquery-ui.js     | 14988 ++++++++++++++
 .../scripts/multiselect/jquery.multiselect.js   |   816 +
 .../main/webapp/scripts/multiselect/prettify.js |  1522 ++
 .../webapp/scripts/pulsescript/MemberDetails.js |  1045 +
 .../scripts/pulsescript/PulseCallbacks.js       |  1735 ++
 .../scripts/pulsescript/PulseFunctions.js       |   227 +
 .../webapp/scripts/pulsescript/clusterDetail.js |  2370 +++
 .../scripts/pulsescript/clusterRGraphMembers.js |  1515 ++
 .../main/webapp/scripts/pulsescript/common.js   |  1626 ++
 .../scripts/pulsescript/pages/DataBrowser.js    |   667 +
 .../pulsescript/pages/DataBrowserQuery.js       |   964 +
 .../pages/DataBrowserQueryHistory.js            |    95 +
 .../webapp/scripts/pulsescript/pages/Login.js   |   170 +
 .../webapp/scripts/pulsescript/pages/index.js   |    26 +
 .../scripts/pulsescript/queryStatistics.js      |   315 +
 .../webapp/scripts/pulsescript/regionView.js    |   757 +
 .../controllers/PulseControllerJUnitTest.java   |   836 +
 .../pulse/testbed/GemFireDistributedSystem.java |   323 +
 .../tools/pulse/testbed/GemfireTopology.java    |    24 +
 .../tools/pulse/testbed/PropFileHelper.java     |   115 +
 .../pulse/testbed/PropMockDataUpdater.java      |   513 +
 .../gemfire/tools/pulse/testbed/TestBed.java    |    84 +
 .../tools/pulse/testbed/driver/PulseUITest.java |   281 +
 .../tools/pulse/tests/AggregateStatement.java   |   217 +
 .../pulse/tests/AggregateStatementMBean.java    |   168 +
 .../pulse/tests/DataBrowserResultLoader.java    |    84 +
 .../pulse/tests/GemFireXDAggregateTable.java    |    46 +
 .../tests/GemFireXDAggregateTableMBean.java     |    28 +
 .../tools/pulse/tests/GemFireXDCluster.java     |    95 +
 .../pulse/tests/GemFireXDClusterMBean.java      |    32 +
 .../tools/pulse/tests/GemFireXDMember.java      |    80 +
 .../tools/pulse/tests/GemFireXDMemberMBean.java |    31 +
 .../gemfire/tools/pulse/tests/JMXBaseBean.java  |    67 +
 .../tools/pulse/tests/JMXProperties.java        |    47 +
 .../gemfire/tools/pulse/tests/Member.java       |   193 +
 .../gemfire/tools/pulse/tests/MemberMBean.java  |    86 +
 .../tools/pulse/tests/PulseAutomatedTest.java   |   775 +
 .../tools/pulse/tests/PulseBaseTest.java        |   690 +
 .../gemfire/tools/pulse/tests/PulseTest.java    |  1036 +
 .../tools/pulse/tests/PulseTestData.java        |   106 +
 .../tools/pulse/tests/PulseTestLocators.java    |   225 +
 .../gemfire/tools/pulse/tests/Region.java       |   192 +
 .../gemfire/tools/pulse/tests/RegionMBean.java  |    59 +
 .../tools/pulse/tests/RegionOnMember.java       |    96 +
 .../tools/pulse/tests/RegionOnMemberMBean.java  |    50 +
 .../gemfire/tools/pulse/tests/Server.java       |   253 +
 .../gemfire/tools/pulse/tests/ServerObject.java |   267 +
 .../tools/pulse/tests/ServerObjectMBean.java    |    79 +
 .../pulse/tests/junit/BaseServiceTest.java      |   257 +
 .../junit/ClusterSelectedRegionServiceTest.java |   350 +
 ...ClusterSelectedRegionsMemberServiceTest.java |   362 +
 .../junit/MemberGatewayHubServiceTest.java      |   423 +
 geode-pulse/src/test/resources/NoDataFound1.txt |     1 +
 geode-pulse/src/test/resources/NoDataFound2.txt |    35 +
 geode-pulse/src/test/resources/NoDataFound3.txt |     6 +
 geode-pulse/src/test/resources/message.txt      |     1 +
 geode-pulse/src/test/resources/test.properties  |   326 +
 geode-pulse/src/test/resources/test1.txt        |     5 +
 geode-pulse/src/test/resources/test2.txt        |     7 +
 geode-pulse/src/test/resources/test3.txt        |     5 +
 geode-pulse/src/test/resources/test4.txt        |     4 +
 geode-pulse/src/test/resources/test5.txt        |     7 +
 geode-pulse/src/test/resources/test6.txt        |    11 +
 geode-pulse/src/test/resources/test7.txt        |    13 +
 .../resources/testNullObjectsAtRootLevel1.txt   |    25 +
 .../resources/testNullObjectsAtRootLevel2.txt   |    30 +
 .../src/test/resources/testQueryResult.txt      |   198 +
 .../src/test/resources/testQueryResult1000.txt  |  1023 +
 .../testQueryResultArrayAndArrayList.txt        |     8 +
 .../test/resources/testQueryResultArrayList.txt |     6 +
 .../resources/testQueryResultArrayOfList.txt    |    15 +
 .../resources/testQueryResultClusterSmall.txt   |    23 +
 .../testQueryResultClusterWithStruct.txt        |    10 +
 .../test/resources/testQueryResultHashMap.txt   |     8 +
 .../resources/testQueryResultHashMapSmall.txt   |    12 +
 .../src/test/resources/testQueryResultSmall.txt |    12 +
 .../resources/testQueryResultWithStruct.txt     |  1744 ++
 .../testQueryResultWithStructSmall.txt          |    15 +
 geode-pulse/src/test/resources/test_pp.txt      |     7 +
 .../src/test/resources/testbed.properties       |   157 +
 geode-rebalancer/build.gradle                   |    28 +
 .../gemfire/cache/util/AutoBalancer.java        |   554 +
 .../util/AutoBalancerIntegrationJUnitTest.java  |   206 +
 .../cache/util/AutoBalancerJUnitTest.java       |   604 +
 geode-site/.gitignore                           |     1 +
 geode-site/website/.gitignore                   |     1 +
 geode-site/website/README.md                    |    54 +
 geode-site/website/Rules                        |    69 +
 geode-site/website/build.sh                     |    18 +
 .../website/content/bootstrap/bootstrap.min.css |     9 +
 geode-site/website/content/community/index.html |   292 +
 .../website/content/css/bootflat-extensions.css |   356 +
 .../website/content/css/bootflat-square.css     |    69 +
 geode-site/website/content/css/bootflat.css     |  1559 ++
 .../website/content/css/font-awesome.min.css    |   405 +
 geode-site/website/content/css/geode-site.css   |  1617 ++
 geode-site/website/content/favicon.ico          |   Bin 0 -> 20805 bytes
 geode-site/website/content/font/FontAwesome.otf |   Bin 0 -> 61896 bytes
 .../content/font/fontawesome-webfont-eot.eot    |   Bin 0 -> 37405 bytes
 .../content/font/fontawesome-webfont-svg.svg    |   399 +
 .../content/font/fontawesome-webfont-ttf.ttf    |   Bin 0 -> 79076 bytes
 .../content/font/fontawesome-webfont-woff.woff  |   Bin 0 -> 43572 bytes
 .../website/content/img/apache_geode_logo.png   |   Bin 0 -> 23616 bytes
 .../content/img/apache_geode_logo_white.png     |   Bin 0 -> 22695 bytes
 .../img/apache_geode_logo_white_small.png       |   Bin 0 -> 52948 bytes
 .../website/content/img/check_flat/default.png  |   Bin 0 -> 25851 bytes
 geode-site/website/content/img/egg-logo.png     |   Bin 0 -> 9938 bytes
 geode-site/website/content/img/github.png       |   Bin 0 -> 8936 bytes
 geode-site/website/content/index.html           |   142 +
 geode-site/website/content/js/bootstrap.min.js  |     8 +
 geode-site/website/content/js/head.js           |   708 +
 geode-site/website/content/js/html5shiv.js      |     8 +
 .../website/content/js/jquery-1.10.1.min.js     |     6 +
 geode-site/website/content/js/jquery.icheck.js  |   397 +
 geode-site/website/content/js/respond.min.js    |     6 +
 geode-site/website/content/js/usergrid-site.js  |    66 +
 geode-site/website/content/releases/index.html  |   129 +
 geode-site/website/layouts/community.html       |     1 +
 geode-site/website/layouts/default.html         |    44 +
 geode-site/website/layouts/docs.html            |     1 +
 geode-site/website/layouts/footer.html          |    96 +
 geode-site/website/layouts/header.html          |   248 +
 geode-site/website/lib/default.rb               |    60 +
 geode-site/website/lib/helpers_.rb              |    16 +
 geode-site/website/lib/pandoc.template          |     4 +
 geode-site/website/nanoc.yaml                   |    94 +
 geode-site/website/run.sh                       |    18 +
 geode-site/website/utilities/map-markers.rb     |    75 +
 geode-site/website/utilities/markers.txt        |   440 +
 geode-site/website/utilities/snapshot-apigee.rb |    88 +
 geode-spark-connector/.gitignore                |     1 +
 geode-spark-connector/README.md                 |    32 +
 geode-spark-connector/doc/10_demos.md           |    84 +
 geode-spark-connector/doc/1_building.md         |    36 +
 geode-spark-connector/doc/2_quick.md            |   178 +
 geode-spark-connector/doc/3_connecting.md       |    55 +
 geode-spark-connector/doc/4_loading.md          |   108 +
 geode-spark-connector/doc/5_rdd_join.md         |   237 +
 geode-spark-connector/doc/6_save_rdd.md         |    81 +
 geode-spark-connector/doc/7_save_dstream.md     |    68 +
 geode-spark-connector/doc/8_oql.md              |    58 +
 geode-spark-connector/doc/9_java_api.md         |   129 +
 .../connector/internal/RegionMetadata.java      |    93 +
 .../gemfirefunctions/QueryFunction.java         |    99 +
 .../RetrieveRegionFunction.java                 |   208 +
 .../RetrieveRegionMetadataFunction.java         |   118 +
 .../StructStreamingResultSender.java            |   219 +
 .../gemfire/spark/connector/Employee.java       |    54 +
 .../spark/connector/JavaApiIntegrationTest.java |   424 +
 .../gemfire/spark/connector/Portfolio.java      |   109 +
 .../gemfire/spark/connector/Position.java       |    73 +
 .../src/it/resources/test-regions.xml           |    49 +
 .../src/it/resources/test-retrieve-regions.xml  |    57 +
 .../spark/connector/BasicIntegrationTest.scala  |   598 +
 .../RDDJoinRegionIntegrationTest.scala          |   300 +
 .../RetrieveRegionIntegrationTest.scala         |   253 +
 .../gemfire/spark/connector/package.scala       |    29 +
 .../connector/testkit/GemFireCluster.scala      |    47 +
 .../spark/connector/testkit/GemFireRunner.scala |   148 +
 .../spark/connector/testkit/IOUtils.scala       |    94 +
 .../spark/streaming/ManualClockHelper.scala     |    28 +
 .../spark/streaming/TestInputDStream.scala      |    44 +
 .../javaapi/GemFireJavaDStreamFunctions.java    |    86 +
 .../GemFireJavaPairDStreamFunctions.java        |    77 +
 .../javaapi/GemFireJavaPairRDDFunctions.java    |   238 +
 .../javaapi/GemFireJavaRDDFunctions.java        |   178 +
 .../javaapi/GemFireJavaSQLContextFunctions.java |    49 +
 .../GemFireJavaSparkContextFunctions.java       |    87 +
 .../connector/javaapi/GemFireJavaUtil.java      |   122 +
 .../spark/connector/GemFireConnection.scala     |    67 +
 .../spark/connector/GemFireConnectionConf.scala |    73 +
 .../connector/GemFireConnectionManager.scala    |    31 +
 .../connector/GemFireFunctionDeployer.scala     |    81 +
 .../connector/GemFireKryoRegistrator.scala      |    29 +
 .../connector/GemFirePairRDDFunctions.scala     |   140 +
 .../spark/connector/GemFireRDDFunctions.scala   |   120 +
 .../connector/GemFireSQLContextFunctions.scala  |    42 +
 .../GemFireSparkContextFunctions.scala          |    39 +
 .../internal/DefaultGemFireConnection.scala     |   164 +
 .../DefaultGemFireConnectionManager.scala       |    77 +
 .../connector/internal/LocatorHelper.scala      |   135 +
 .../StructStreamingResultCollector.scala        |   152 +
 .../connector/internal/oql/QueryParser.scala    |    58 +
 .../spark/connector/internal/oql/QueryRDD.scala |    83 +
 .../internal/oql/QueryResultCollector.scala     |    69 +
 .../connector/internal/oql/RDDConverter.scala   |    40 +
 .../connector/internal/oql/RowBuilder.scala     |    38 +
 .../connector/internal/oql/SchemaBuilder.scala  |    73 +
 .../internal/oql/UndefinedSerializer.scala      |    46 +
 .../connector/internal/rdd/GemFireJoinRDD.scala |    67 +
 .../internal/rdd/GemFireOuterJoinRDD.scala      |    69 +
 .../internal/rdd/GemFireRDDPartition.scala      |    36 +
 .../internal/rdd/GemFireRDDPartitioner.scala    |    59 +
 .../rdd/GemFireRDDPartitionerImpl.scala         |    89 +
 .../internal/rdd/GemFireRDDWriter.scala         |    82 +
 .../internal/rdd/GemFireRegionRDD.scala         |   138 +
 .../javaapi/GemFireJavaRegionRDD.scala          |    26 +
 .../spark/connector/javaapi/JavaAPIHelper.scala |    53 +
 .../gemfire/spark/connector/package.scala       |    69 +
 .../streaming/GemFireDStreamFunctions.scala     |    89 +
 .../spark/connector/streaming/package.scala     |    32 +
 .../gemfire/spark/connector/JavaAPITest.java    |   163 +
 .../connector/GemFireFunctionDeployerTest.scala |    58 +
 .../DefaultGemFireConnectionManagerTest.scala   |    82 +
 ...tStreamingResultSenderAndCollectorTest.scala |   254 +
 .../internal/oql/QueryParserTest.scala          |    83 +
 .../connector/ConnectorImplicitsTest.scala      |    50 +
 .../connector/GemFireConnectionConfTest.scala   |   100 +
 .../connector/GemFireDStreamFunctionsTest.scala |    79 +
 .../connector/GemFireRDDFunctionsTest.scala     |   139 +
 .../spark/connector/LocatorHelperTest.scala     |   168 +
 .../rdd/GemFireRDDPartitionerTest.scala         |   190 +
 .../connector/rdd/GemFireRegionRDDTest.scala    |   117 +
 .../basic-demos/src/main/java/demo/Emp.java     |    95 +
 .../src/main/java/demo/OQLJavaDemo.java         |    59 +
 .../src/main/java/demo/PairRDDSaveJavaDemo.java |    86 +
 .../src/main/java/demo/RDDSaveJavaDemo.java     |    85 +
 .../src/main/java/demo/RegionToRDDJavaDemo.java |    57 +
 .../src/main/scala/demo/NetworkWordCount.scala  |    75 +
 .../project/Dependencies.scala                  |    45 +
 .../project/GemFireSparkBuild.scala             |    76 +
 geode-spark-connector/project/Settings.scala    |    57 +
 geode-spark-connector/project/build.properties  |     1 +
 geode-spark-connector/project/plugins.sbt       |     8 +
 geode-spark-connector/scalastyle-config.xml     |   117 +
 geode-wan/build.gradle                          |    23 +
 .../client/internal/GatewaySenderBatchOp.java   |   313 +
 .../cache/client/internal/SenderProxy.java      |    43 +
 .../internal/locator/wan/LocatorDiscovery.java  |   227 +
 .../internal/locator/wan/LocatorHelper.java     |   143 +
 .../locator/wan/LocatorJoinMessage.java         |   105 +
 .../wan/LocatorMembershipListenerImpl.java      |   230 +
 .../locator/wan/RemoteLocatorJoinRequest.java   |    87 +
 .../locator/wan/RemoteLocatorJoinResponse.java  |    89 +
 .../locator/wan/RemoteLocatorPingRequest.java   |    56 +
 .../locator/wan/RemoteLocatorPingResponse.java  |    55 +
 .../locator/wan/RemoteLocatorRequest.java       |    66 +
 .../locator/wan/RemoteLocatorResponse.java      |    74 +
 .../internal/locator/wan/WANFactoryImpl.java    |    74 +
 .../locator/wan/WanLocatorDiscovererImpl.java   |   138 +
 .../cache/wan/AbstractRemoteGatewaySender.java  |   169 +
 .../cache/wan/GatewayReceiverFactoryImpl.java   |   147 +
 .../internal/cache/wan/GatewayReceiverImpl.java |   253 +
 .../wan/GatewaySenderEventRemoteDispatcher.java |   766 +
 .../cache/wan/GatewaySenderFactoryImpl.java     |   389 +
 .../wan/parallel/ParallelGatewaySenderImpl.java |   267 +
 ...rentParallelGatewaySenderEventProcessor.java |    67 +
 ...moteParallelGatewaySenderEventProcessor.java |   122 +
 ...urrentSerialGatewaySenderEventProcessor.java |    45 +
 ...RemoteSerialGatewaySenderEventProcessor.java |    50 +
 .../wan/serial/SerialGatewaySenderImpl.java     |   260 +
 ...ternal.locator.wan.LocatorMembershipListener |    15 +
 ...ne.gemfire.internal.cache.wan.spi.WANFactory |    15 +
 .../cache/CacheXml70GatewayDUnitTest.java       |   243 +
 .../cache/CacheXml80GatewayDUnitTest.java       |   137 +
 .../AnalyzeWANSerializablesJUnitTest.java       |    91 +
 .../internal/cache/UpdateVersionDUnitTest.java  |   965 +
 .../gemfire/internal/cache/wan/WANTestBase.java |  5188 +++++
 ...oncurrentParallelGatewaySenderDUnitTest.java |   805 +
 ...ntParallelGatewaySenderOffHeapDUnitTest.java |    32 +
 ...allelGatewaySenderOperation_1_DUnitTest.java |   830 +
 ...allelGatewaySenderOperation_2_DUnitTest.java |   528 +
 ...tSerialGatewaySenderOperationsDUnitTest.java |   111 +
 ...GatewaySenderOperationsOffHeapDUnitTest.java |    32 +
 .../ConcurrentWANPropogation_1_DUnitTest.java   |   590 +
 .../ConcurrentWANPropogation_2_DUnitTest.java   |   466 +
 .../cache/wan/disttx/DistTXWANDUnitTest.java    |   205 +
 .../CommonParallelGatewaySenderDUnitTest.java   |   470 +
 ...onParallelGatewaySenderOffHeapDUnitTest.java |    32 +
 ...wWANConcurrencyCheckForDestroyDUnitTest.java |   514 +
 .../cache/wan/misc/PDXNewWanDUnitTest.java      |   753 +
 ...dRegion_ParallelWANPersistenceDUnitTest.java |   688 +
 ...dRegion_ParallelWANPropogationDUnitTest.java |  1074 +
 .../SenderWithTransportFilterDUnitTest.java     |   231 +
 ...downAllPersistentGatewaySenderDUnitTest.java |   199 +
 .../wan/misc/WANConfigurationJUnitTest.java     |   609 +
 .../wan/misc/WANLocatorServerDUnitTest.java     |   195 +
 .../cache/wan/misc/WANSSLDUnitTest.java         |   145 +
 .../wan/misc/WanAutoDiscoveryDUnitTest.java     |   469 +
 .../cache/wan/misc/WanValidationsDUnitTest.java |  1542 ++
 ...tewaySenderOperation_2_OffHeapDUnitTest.java |    32 +
 ...tewaySenderOperation_2_OffHeapDUnitTest.java |    32 +
 ...GatewaySenderOperationsOffHeapDUnitTest.java |    34 +
 ...ewaySenderQueueOverflowOffHeapDUnitTest.java |    34 +
 .../ParallelWANConflationOffHeapDUnitTest.java  |    34 +
 ...nceEnabledGatewaySenderOffHeapDUnitTest.java |    34 +
 ...ropogationConcurrentOpsOffHeapDUnitTest.java |    34 +
 .../ParallelWANPropogationOffHeapDUnitTest.java |    34 +
 ...erialGatewaySenderQueueOffHeapDUnitTest.java |    34 +
 ...nceEnabledGatewaySenderOffHeapDUnitTest.java |    34 +
 .../SerialWANPropogationOffHeapDUnitTest.java   |    34 +
 ...ation_PartitionedRegionOffHeapDUnitTest.java |    34 +
 ...allelGatewaySenderOperation_2_DUnitTest.java |    38 +
 ...arallelGatewaySenderOperationsDUnitTest.java |   634 +
 ...llelGatewaySenderQueueOverflowDUnitTest.java |   522 +
 .../ParallelWANConflationDUnitTest.java         |   497 +
 ...ersistenceEnabledGatewaySenderDUnitTest.java |  1731 ++
 ...llelWANPropagationClientServerDUnitTest.java |   108 +
 ...lelWANPropagationConcurrentOpsDUnitTest.java |   285 +
 .../ParallelWANPropagationDUnitTest.java        |  1358 ++
 ...ParallelWANPropagationLoopBackDUnitTest.java |   418 +
 .../wan/parallel/ParallelWANStatsDUnitTest.java |   486 +
 ...tewaySenderDistributedDeadlockDUnitTest.java |   395 +
 ...rialGatewaySenderEventListenerDUnitTest.java |   387 +
 .../SerialGatewaySenderOperationsDUnitTest.java |   654 +
 .../SerialGatewaySenderQueueDUnitTest.java      |   333 +
 ...ersistenceEnabledGatewaySenderDUnitTest.java |   563 +
 .../SerialWANPropagationLoopBackDUnitTest.java  |   494 +
 .../serial/SerialWANPropogationDUnitTest.java   |  1501 ++
 ...NPropogation_PartitionedRegionDUnitTest.java |   423 +
 .../SerialWANPropogationsFeatureDUnitTest.java  |   353 +
 .../wan/serial/SerialWANStatsDUnitTest.java     |   580 +
 .../wan/wancommand/WANCommandTestBase.java      |   513 +
 ...anCommandCreateGatewayReceiverDUnitTest.java |   623 +
 .../WanCommandCreateGatewaySenderDUnitTest.java |   700 +
 ...WanCommandGatewayReceiverStartDUnitTest.java |   273 +
 .../WanCommandGatewayReceiverStopDUnitTest.java |   278 +
 .../WanCommandGatewaySenderStartDUnitTest.java  |   399 +
 .../WanCommandGatewaySenderStopDUnitTest.java   |   352 +
 .../wan/wancommand/WanCommandListDUnitTest.java |   380 +
 .../WanCommandPauseResumeDUnitTest.java         |   683 +
 .../wancommand/WanCommandStatusDUnitTest.java   |   543 +
 .../management/WANManagementDUnitTest.java      |   501 +
 .../ClusterConfigurationDUnitTest.java          |  1057 +
 .../pulse/TestRemoteClusterDUnitTest.java       |   262 +
 .../gemfire/codeAnalysis/excludedClasses.txt    |     2 +
 .../gemstone/gemfire/codeAnalysis/openBugs.txt  |    21 +
 .../sanctionedDataSerializables.txt             |    28 +
 .../codeAnalysis/sanctionedSerializables.txt    |     0
 geode-web-api/build.gradle                      |    67 +
 .../web/controllers/AbstractBaseController.java |   859 +
 .../web/controllers/BaseControllerAdvice.java   |   187 +
 .../web/controllers/CommonCrudController.java   |   312 +
 .../controllers/FunctionAccessController.java   |   293 +
 .../web/controllers/PdxBasedCrudController.java |   444 +
 .../web/controllers/QueryAccessController.java  |   459 +
 .../web/controllers/support/JSONTypes.java      |    25 +
 .../controllers/support/QueryResultTypes.java   |    32 +
 .../web/controllers/support/RegionData.java     |   170 +
 .../controllers/support/RegionEntryData.java    |   105 +
 .../support/RestServersResultCollector.java     |    55 +
 .../web/controllers/support/UpdateOp.java       |    31 +
 .../DataTypeNotSupportedException.java          |    50 +
 .../web/exception/GemfireRestException.java     |    48 +
 .../web/exception/MalformedJsonException.java   |    51 +
 .../web/exception/RegionNotFoundException.java  |    44 +
 .../exception/ResourceNotFoundException.java    |    45 +
 ...stomMappingJackson2HttpMessageConverter.java |   161 +
 .../web/swagger/config/RestApiPathProvider.java |    77 +
 .../web/swagger/config/SwaggerConfig.java       |   181 +
 .../rest/internal/web/util/ArrayUtils.java      |    60 +
 .../rest/internal/web/util/DateTimeUtils.java   |    54 +
 .../internal/web/util/IdentifiableUtils.java    |   109 +
 .../rest/internal/web/util/JSONUtils.java       |   253 +
 .../rest/internal/web/util/JsonWriter.java      |   597 +
 .../rest/internal/web/util/NumberUtils.java     |   146 +
 .../rest/internal/web/util/ValidationUtils.java |    41 +
 .../main/webapp/WEB-INF/gemfire-api-servlet.xml |    85 +
 geode-web-api/src/main/webapp/WEB-INF/web.xml   |    75 +
 .../src/main/webapp/docs/css/reset.css          |   125 +
 .../src/main/webapp/docs/css/screen.css         |  1221 ++
 .../main/webapp/docs/images/explorer_icons.png  |   Bin 0 -> 5763 bytes
 .../src/main/webapp/docs/images/logo_small.png  |   Bin 0 -> 770 bytes
 .../main/webapp/docs/images/pet_store_api.png   |   Bin 0 -> 824 bytes
 .../src/main/webapp/docs/images/throbber.gif    |   Bin 0 -> 9257 bytes
 .../src/main/webapp/docs/images/wordnik_api.png |   Bin 0 -> 980 bytes
 geode-web-api/src/main/webapp/docs/index.html   |    81 +
 .../src/main/webapp/docs/lib/backbone-min.js    |    38 +
 .../main/webapp/docs/lib/handlebars-1.0.0.js    |  2278 +++
 .../main/webapp/docs/lib/highlight.7.3.pack.js  |     1 +
 .../main/webapp/docs/lib/jquery-1.8.0.min.js    |     2 +
 .../main/webapp/docs/lib/jquery.ba-bbq.min.js   |    18 +
 .../main/webapp/docs/lib/jquery.slideto.min.js  |     1 +
 .../main/webapp/docs/lib/jquery.wiggle.min.js   |     8 +
 .../src/main/webapp/docs/lib/shred.bundle.js    |  2765 +++
 .../src/main/webapp/docs/lib/shred/content.js   |   193 +
 .../src/main/webapp/docs/lib/swagger-oauth.js   |   211 +
 .../src/main/webapp/docs/lib/swagger.js         |  1527 ++
 .../src/main/webapp/docs/lib/underscore-min.js  |    32 +
 geode-web-api/src/main/webapp/docs/o2c.html     |    15 +
 .../src/main/webapp/docs/swagger-ui.js          |  2269 +++
 .../src/main/webapp/docs/swagger-ui.min.js      |     1 +
 geode-web/build.gradle                          |    55 +
 .../src/main/webapp/WEB-INF/gemfire-servlet.xml |    59 +
 geode-web/src/main/webapp/WEB-INF/web.xml       |    56 +
 .../internal/web/AbstractWebTestCase.java       |    97 +
 .../ShellCommandsControllerJUnitTest.java       |   240 +
 ...entVariablesHandlerInterceptorJUnitTest.java |   268 +
 .../internal/web/domain/LinkIndexJUnitTest.java |   237 +
 .../internal/web/domain/LinkJUnitTest.java      |   124 +
 .../domain/QueryParameterSourceJUnitTest.java   |    93 +
 .../web/http/ClientHttpRequestJUnitTest.java    |   510 +
 ...ableObjectHttpMessageConverterJUnitTest.java |   166 +
 .../RestHttpOperationInvokerJUnitTest.java      |   454 +
 .../SimpleHttpOperationInvokerJUnitTest.java    |   199 +
 .../web/util/ConvertUtilsJUnitTest.java         |   171 +
 .../internal/web/util/UriUtilsJUnitTest.java    |   119 +
 gradle.properties                               |     8 +-
 gradle/dependency-versions.properties           |    12 +-
 gradle/publish.gradle                           |    23 +
 gradle/rat.gradle                               |   194 +-
 settings.gradle                                 |    38 +-
 12793 files changed, 1819028 insertions(+), 1825738 deletions(-)
----------------------------------------------------------------------



[04/50] [abbrv] incubator-geode git commit: GEODE-907: Converted core functionality to use jackson

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java
index 5d47d3f..ff94b20 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java
@@ -19,30 +19,26 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
+import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-
-import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
-import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
-
 /**
  * Class ClusterRegionsService
  * 
@@ -57,43 +53,36 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class ClusterRegionsService implements PulseService {
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   // String constants used for forming a json response
   private final String ENTRY_SIZE = "entrySize";
 
   // Comparator based upon regions entry count
-  private static Comparator<Cluster.Region> regionEntryCountComparator = new Comparator<Cluster.Region>() {
-    @Override
-    public int compare(Cluster.Region r1, Cluster.Region r2) {
-      long r1Cnt = r1.getSystemRegionEntryCount();
-      long r2Cnt = r2.getSystemRegionEntryCount();
-      if (r1Cnt < r2Cnt) {
-        return -1;
-      } else if (r1Cnt > r2Cnt) {
-        return 1;
-      } else {
-        return 0;
-      }
+  private static Comparator<Cluster.Region> regionEntryCountComparator = (r1, r2) -> {
+    long r1Cnt = r1.getSystemRegionEntryCount();
+    long r2Cnt = r2.getSystemRegionEntryCount();
+    if (r1Cnt < r2Cnt) {
+      return -1;
+    } else if (r1Cnt > r2Cnt) {
+      return 1;
+    } else {
+      return 0;
     }
   };
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
-
-    String userName = request.getUserPrincipal().getName();
-
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-      // getting cluster's Regions
-      responseJSON.put("regions", getRegionJson(cluster));
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    // getting cluster's Regions
+    responseJSON.put("regions", getRegionJson(cluster));
+
+    // Send json response
+    return responseJSON;
   }
 
   /**
@@ -104,7 +93,7 @@ public class ClusterRegionsService implements PulseService {
    * @param cluster
    * @return JSONObject Array List
    */
-  private List<JSONObject> getRegionJson(Cluster cluster) throws JSONException {
+  private ArrayNode getRegionJson(Cluster cluster) {
 
     Long totalHeapSize = cluster.getTotalHeapSize();
     Long totalDiskUsage = cluster.getTotalBytesOnDisk();
@@ -116,10 +105,10 @@ public class ClusterRegionsService implements PulseService {
 
     Collections.sort(clusterRegionsList, regionEntryCountComparator);
 
-    List<JSONObject> regionListJson = new ArrayList<JSONObject>();
+    ArrayNode regionListJson = mapper.createArrayNode();
     for (int count = 0; count < clusterRegionsList.size(); count++) {
       Cluster.Region reg = clusterRegionsList.get(count);
-      JSONObject regionJSON = new JSONObject();
+      ObjectNode regionJSON = mapper.createObjectNode();
 
       regionJSON.put("name", reg.getName());
       regionJSON.put("totalMemory", totalHeapSize);
@@ -133,7 +122,7 @@ public class ClusterRegionsService implements PulseService {
 
       Cluster.Member[] clusterMembersList = cluster.getMembers();
 
-      JSONArray memberNameArray = new JSONArray();
+      ArrayNode memberNameArray = mapper.createArrayNode();
       for (String memberName : reg.getMemberName()) {
         for (Cluster.Member member : clusterMembersList) {
           String name = member.getName();
@@ -142,10 +131,10 @@ public class ClusterRegionsService implements PulseService {
           id = id.replace(":", "-");
 
           if ((memberName.equals(id)) || (memberName.equals(name))) {
-            JSONObject regionMember = new JSONObject();
+            ObjectNode regionMember = mapper.createObjectNode();
             regionMember.put("id", member.getId());
             regionMember.put("name", member.getName());
-            memberNameArray.put(regionMember);
+            memberNameArray.add(regionMember);
             break;
           }
         }
@@ -186,8 +175,7 @@ public class ClusterRegionsService implements PulseService {
         regionJSON.put("compressionCodec", this.VALUE_NA);
       }
 
-      if (PulseConstants.PRODUCT_NAME_SQLFIRE.equalsIgnoreCase(PulseController
-          .getPulseProductSupport())) {
+      if (PulseConstants.PRODUCT_NAME_SQLFIRE.equalsIgnoreCase(PulseController.getPulseProductSupport())) {
         // Convert region path to dot separated region path
         regionJSON.put("regionPath",
             StringUtils.getTableNameFromRegionName(reg.getFullPath()));
@@ -198,30 +186,17 @@ public class ClusterRegionsService implements PulseService {
         regionJSON.put("id", reg.getFullPath());
       }
 
-      regionJSON
-          .put(
-              "memoryReadsTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_GETS_PER_SEC_TREND)));
-      regionJSON
-          .put(
-              "memoryWritesTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_PUTS_PER_SEC_TREND)));
-      regionJSON
-          .put(
-              "diskReadsTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_READS_PER_SEC_TREND)));
-      regionJSON
-          .put(
-              "diskWritesTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_WRITES_PER_SEC_TREND)));
+      regionJSON.put("memoryReadsTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_GETS_PER_SEC_TREND)));
+      regionJSON.put("memoryWritesTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_PUTS_PER_SEC_TREND)));
+      regionJSON.put("diskReadsTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_READS_PER_SEC_TREND)));
+      regionJSON.put("diskWritesTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_WRITES_PER_SEC_TREND)));
       regionJSON.put("emptyNodes", reg.getEmptyNode());
       Long entrySize = reg.getEntrySize();
-      DecimalFormat form = new DecimalFormat(
-          PulseConstants.DECIMAL_FORMAT_PATTERN_2);
+      DecimalFormat form = new DecimalFormat(PulseConstants.DECIMAL_FORMAT_PATTERN_2);
       String entrySizeInMB = form.format(entrySize / (1024f * 1024f));
 
       if (entrySize < 0) {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
index f19e78b..5c4fa0c 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java
@@ -19,28 +19,27 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import com.vmware.gemfire.tools.pulse.internal.util.TimeUtils;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 
 /**
  * Class ClusterSelectedRegionService
@@ -56,65 +55,61 @@ import com.vmware.gemfire.tools.pulse.internal.util.TimeUtils;
 @Scope("singleton")
 public class ClusterSelectedRegionService implements PulseService {
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   // String constants used for forming a json response
   private final String ENTRY_SIZE = "entrySize";
 
   // Comparator based upon regions entry count
-  private static Comparator<Cluster.Member> memberCurrentHeapUsageComparator = new Comparator<Cluster.Member>() {
-    @Override
-    public int compare(Cluster.Member m1, Cluster.Member m2) {
-      long m1HeapUsage = m1.getCurrentHeapSize();
-      long m2HeapUsage = m2.getCurrentHeapSize();
-      if (m1HeapUsage < m2HeapUsage) {
-        return -1;
-      } else if (m1HeapUsage > m2HeapUsage) {
-        return 1;
-      } else {
-        return 0;
-      }
+  private static Comparator<Cluster.Member> memberCurrentHeapUsageComparator = (m1, m2) -> {
+    long m1HeapUsage = m1.getCurrentHeapSize();
+    long m2HeapUsage = m2.getCurrentHeapSize();
+    if (m1HeapUsage < m2HeapUsage) {
+      return -1;
+    } else if (m1HeapUsage > m2HeapUsage) {
+      return 1;
+    } else {
+      return 0;
     }
   };
 
   @Override
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     String userName = request.getUserPrincipal().getName();
     String pulseData = request.getParameter("pulseData");
-    JSONObject parameterMap = new JSONObject(pulseData);
-    String selectedRegionFullPath = parameterMap.getJSONObject("ClusterSelectedRegion").getString("regionFullPath");
+    JsonNode parameterMap = mapper.readTree(pulseData);
+    String selectedRegionFullPath = parameterMap.get("ClusterSelectedRegion").get("regionFullPath").textValue();
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-      // getting cluster's Regions
-      responseJSON.put("clusterName", cluster.getServerName());
-      responseJSON.put("userName", userName);
-      responseJSON.put("selectedRegion", getSelectedRegionJson(cluster, selectedRegionFullPath));
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    // getting cluster's Regions
+    responseJSON.put("clusterName", cluster.getServerName());
+    responseJSON.put("userName", userName);
+    responseJSON.put("selectedRegion", getSelectedRegionJson(cluster, selectedRegionFullPath));
+
+    // Send json response
+    return responseJSON;
   }
 
   /**
    * Create JSON for selected cluster region
    *
    * @param cluster
-   * @return JSONObject Array List
+   * @return ObjectNode Array List
    */
-  private JSONObject getSelectedRegionJson(Cluster cluster, String selectedRegionFullPath) throws JSONException {
+  private ObjectNode getSelectedRegionJson(Cluster cluster, String selectedRegionFullPath) {
     PulseLogWriter LOGGER = PulseLogWriter.getLogger();
     Long totalHeapSize = cluster.getTotalHeapSize();
     Long totalDiskUsage = cluster.getTotalBytesOnDisk();
 
     Cluster.Region reg = cluster.getClusterRegion(selectedRegionFullPath);
-    if(reg != null){
-      JSONObject regionJSON = new JSONObject();
+    if (reg != null){
+      ObjectNode regionJSON = mapper.createObjectNode();
 
       regionJSON.put("name", reg.getName());
       regionJSON.put("path", reg.getFullPath());
@@ -128,8 +123,7 @@ public class ClusterSelectedRegionService implements PulseService {
       regionJSON.put("putsRate", reg.getPutsRate());
       regionJSON.put("lruEvictionRate", reg.getLruEvictionRate());
 
-      DecimalFormat df2 = new DecimalFormat(
-          PulseConstants.DECIMAL_FORMAT_PATTERN);
+      DecimalFormat df2 = new DecimalFormat(PulseConstants.DECIMAL_FORMAT_PATTERN);
       Cluster.Member[] clusterMembersList = cluster.getMembers();
 
       // collect members of this region
@@ -149,11 +143,11 @@ public class ClusterSelectedRegionService implements PulseService {
 
       // sort members of this region
       Collections.sort(clusterMembersL, memberCurrentHeapUsageComparator);
+
       // return sorted member list by heap usage
-      JSONArray memberArray = new JSONArray();
+      ArrayNode memberArray = mapper.createArrayNode();
       for (Cluster.Member member : clusterMembersL) {
-
-          JSONObject regionMember = new JSONObject();
+          ObjectNode regionMember = mapper.createObjectNode();
           regionMember.put("memberId", member.getId());
           regionMember.put("name", member.getName());
           regionMember.put("host", member.getHost());
@@ -184,33 +178,18 @@ public class ClusterSelectedRegionService implements PulseService {
             regionMember.put("clients", member.getMemberClientsHMap().size());
           }
           regionMember.put("queues", member.getQueueBacklog());
-          memberArray.put(regionMember);
+          memberArray.add(regionMember);
       }
 
       regionJSON.put("members", memberArray);
       regionJSON.put("entryCount", reg.getSystemRegionEntryCount());
 
-      Boolean persistent = reg.getPersistentEnabled();
-      if (persistent) {
-        regionJSON.put("persistence", PulseService.VALUE_ON);
-      } else {
-        regionJSON.put("persistence", PulseService.VALUE_OFF);
-      }
+      regionJSON.put("persistence", reg.getPersistentEnabled() ? PulseService.VALUE_ON : PulseService.VALUE_OFF);
 
-      Boolean isEnableOffHeapMemory = reg.isEnableOffHeapMemory();
-      if (isEnableOffHeapMemory) {
-        regionJSON.put("isEnableOffHeapMemory", PulseService.VALUE_ON);
-      } else {
-        regionJSON.put("isEnableOffHeapMemory", PulseService.VALUE_OFF);
-      }
+      regionJSON.put("isEnableOffHeapMemory", reg.isEnableOffHeapMemory() ? PulseService.VALUE_ON : PulseService.VALUE_OFF);
 
-      Boolean isHDFSWriteOnly = reg.isHdfsWriteOnly();
       if (regionType.startsWith("HDFS")) {
-        if (isHDFSWriteOnly) {
-          regionJSON.put("isHDFSWriteOnly", PulseService.VALUE_ON);
-        } else {
-          regionJSON.put("isHDFSWriteOnly", PulseService.VALUE_OFF);
-        }
+        regionJSON.put("isHDFSWriteOnly", reg.isHdfsWriteOnly() ? PulseService.VALUE_ON : PulseService.VALUE_OFF);
       } else {
         regionJSON.put("isHDFSWriteOnly", PulseService.VALUE_NA);
       }
@@ -222,35 +201,22 @@ public class ClusterSelectedRegionService implements PulseService {
         regionJSON.put("compressionCodec", PulseService.VALUE_NA);
       }
 
-      if (PulseConstants.PRODUCT_NAME_SQLFIRE.equalsIgnoreCase(PulseController
-          .getPulseProductSupport())) {
+      if (PulseConstants.PRODUCT_NAME_SQLFIRE.equalsIgnoreCase(PulseController.getPulseProductSupport())) {
         // Convert region path to dot separated region path
-        regionJSON.put("regionPath",
-            StringUtils.getTableNameFromRegionName(reg.getFullPath()));
+        regionJSON.put("regionPath", StringUtils.getTableNameFromRegionName(reg.getFullPath()));
       } else {
         regionJSON.put("regionPath", reg.getFullPath());
       }
 
-      regionJSON
-          .put(
-              "memoryReadsTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_GETS_PER_SEC_TREND)));
-      regionJSON
-          .put(
-              "memoryWritesTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_PUTS_PER_SEC_TREND)));
-      regionJSON
-          .put(
-              "diskReadsTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_READS_PER_SEC_TREND)));
-      regionJSON
-          .put(
-              "diskWritesTrend",
-              new JSONArray(
-                  reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_WRITES_PER_SEC_TREND)));
+      regionJSON.put("memoryReadsTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_GETS_PER_SEC_TREND)));
+      regionJSON.put("memoryWritesTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_PUTS_PER_SEC_TREND)));
+      regionJSON.put("diskReadsTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_READS_PER_SEC_TREND)));
+      regionJSON.put("diskWritesTrend",
+          mapper.valueToTree(reg.getRegionStatisticTrend(Cluster.Region.REGION_STAT_DISK_WRITES_PER_SEC_TREND)));
+
       regionJSON.put("emptyNodes", reg.getEmptyNode());
       Long entrySize = reg.getEntrySize();
       DecimalFormat form = new DecimalFormat(
@@ -269,9 +235,8 @@ public class ClusterSelectedRegionService implements PulseService {
       LOGGER.fine("calling getSelectedRegionJson :: regionJSON = " + regionJSON);
       return regionJSON;
     } else {
-      JSONObject responseJSON = new JSONObject();
-      responseJSON.put("errorOnRegion", "Region [" + selectedRegionFullPath
-          + "] is not available");
+      ObjectNode responseJSON = mapper.createObjectNode();
+      responseJSON.put("errorOnRegion", "Region [" + selectedRegionFullPath + "] is not available");
       return responseJSON;
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java
index f4430d5..ecdd14e 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java
@@ -19,24 +19,22 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster.RegionOnMember;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 
 /**
  * Class ClusterSelectedRegionsMemberService
@@ -53,57 +51,53 @@ import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
 @Scope("singleton")
 public class ClusterSelectedRegionsMemberService implements PulseService {
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   //Comparator based upon regions entry count
-  private static Comparator<Cluster.RegionOnMember> romEntryCountComparator = new Comparator<Cluster.RegionOnMember>() {
-   @Override
-     public int compare(Cluster.RegionOnMember m1, Cluster.RegionOnMember m2) {
-       long m1EntryCount = m1.getEntryCount();
-       long m2EntryCount = m2.getEntryCount();
-       if (m1EntryCount < m2EntryCount) {
-         return -1;
-       } else if (m1EntryCount > m2EntryCount) {
-         return 1;
-       } else {
-         return 0;
-       }
-     }
-  };
+  private static Comparator<Cluster.RegionOnMember> romEntryCountComparator = (m1, m2) -> {
+      long m1EntryCount = m1.getEntryCount();
+      long m2EntryCount = m2.getEntryCount();
+      if (m1EntryCount < m2EntryCount) {
+        return -1;
+      } else if (m1EntryCount > m2EntryCount) {
+        return 1;
+      } else {
+        return 0;
+      }
+    };
 
   @Override
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
     PulseLogWriter LOGGER = PulseLogWriter.getLogger();
     String userName = request.getUserPrincipal().getName();
     String pulseData = request.getParameter("pulseData");
-    JSONObject parameterMap = new JSONObject(pulseData);
-    String selectedRegionFullPath = parameterMap.getJSONObject("ClusterSelectedRegionsMember").getString("regionFullPath");
+    JsonNode parameterMap = mapper.readTree(pulseData);
+    String selectedRegionFullPath = parameterMap.get("ClusterSelectedRegionsMember").get("regionFullPath").textValue();
     LOGGER.finest("ClusterSelectedRegionsMemberService selectedRegionFullPath = " + selectedRegionFullPath);
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-      // getting cluster's Regions
-      responseJSON.put("clusterName", cluster.getServerName());
-      responseJSON.put("userName", userName);
-      responseJSON.put("selectedRegionsMembers", getSelectedRegionsMembersJson(cluster, selectedRegionFullPath));
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    // getting cluster's Regions
+    responseJSON.put("clusterName", cluster.getServerName());
+    responseJSON.put("userName", userName);
+    responseJSON.put("selectedRegionsMembers", getSelectedRegionsMembersJson(cluster, selectedRegionFullPath));
+    // Send json response
+    return responseJSON;
   }
 
   /**
    * Create JSON for selected cluster region's all members
    */
-  private JSONObject getSelectedRegionsMembersJson(Cluster cluster, String selectedRegionFullPath) throws JSONException {
+  private ObjectNode getSelectedRegionsMembersJson(Cluster cluster, String selectedRegionFullPath) {
     PulseLogWriter LOGGER = PulseLogWriter.getLogger();
     Cluster.Region reg = cluster.getClusterRegion(selectedRegionFullPath);
-    if(reg != null){
-      JSONObject regionMemberJSON = new JSONObject();
+
+    if (reg != null){
+      ObjectNode regionMemberJSON = mapper.createObjectNode();
       RegionOnMember[] regionOnMembers = reg.getRegionOnMembers();
 
       //sort on entry count
@@ -111,35 +105,39 @@ public class ClusterSelectedRegionsMemberService implements PulseService {
       Collections.sort(romList, romEntryCountComparator);
 
       for(RegionOnMember rom : romList) {
-
-        JSONObject memberJSON = new JSONObject();
+        ObjectNode memberJSON = mapper.createObjectNode();
         memberJSON.put("memberName", rom.getMemberName());
         memberJSON.put("regionFullPath", rom.getRegionFullPath());
         memberJSON.put("entryCount", rom.getEntryCount());
         memberJSON.put("entrySize", rom.getEntrySize());
+
         memberJSON.put("accessor", ((rom.getLocalMaxMemory() == 0) ? "True" : "False"));
         LOGGER.finest("calling getSelectedRegionsMembersJson :: rom.getLocalMaxMemory() = " + rom.getLocalMaxMemory());
-        memberJSON.put(
-            "memoryReadsTrend", new JSONArray(rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_GETS_PER_SEC_TREND)));
+
+        memberJSON.put("memoryReadsTrend",
+            mapper.valueToTree(rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_GETS_PER_SEC_TREND)));
         LOGGER.finest("memoryReadsTrend = " + rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_GETS_PER_SEC_TREND).length);
-        memberJSON.put(
-            "memoryWritesTrend", new JSONArray(rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_PUTS_PER_SEC_TREND)));
+
+        memberJSON.put("memoryWritesTrend",
+            mapper.valueToTree(rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_PUTS_PER_SEC_TREND)));
         LOGGER.finest("memoryWritesTrend = " + rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_PUTS_PER_SEC_TREND).length);
-        memberJSON.put(
-            "diskReadsTrend", new JSONArray(rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_DISK_READS_PER_SEC_TREND)));
+
+        memberJSON.put("diskReadsTrend",
+            mapper.valueToTree(rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_DISK_READS_PER_SEC_TREND)));
         LOGGER.finest("diskReadsTrend = " + rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_DISK_READS_PER_SEC_TREND).length);
-        memberJSON.put(
-            "diskWritesTrend", new JSONArray(rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_DISK_WRITES_PER_SEC_TREND)));
+
+        memberJSON.put("diskWritesTrend",
+            mapper.valueToTree(rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_DISK_WRITES_PER_SEC_TREND)));
         LOGGER.finest("diskWritesTrend = " + rom.getRegionOnMemberStatisticTrend(RegionOnMember.REGION_ON_MEMBER_STAT_DISK_WRITES_PER_SEC_TREND).length);
+
         regionMemberJSON.put(rom.getMemberName(), memberJSON);
       }
 
       LOGGER.fine("calling getSelectedRegionsMembersJson :: regionJSON = " + regionMemberJSON);
       return regionMemberJSON;
     } else {
-      JSONObject responseJSON = new JSONObject();
-      responseJSON.put("errorOnRegion", "Region [" + selectedRegionFullPath
-          + "] is not available");
+      ObjectNode responseJSON = mapper.createObjectNode();
+      responseJSON.put("errorOnRegion", "Region [" + selectedRegionFullPath + "] is not available");
       return responseJSON;
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java
index 57172bd..21d93a7 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java
@@ -19,19 +19,17 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
 
 /**
  * Class ClusterWANInfoService
@@ -47,36 +45,32 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 @Scope("singleton")
 public class ClusterWANInfoService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     // members list
-    // ArrayList<Cluster> connectedClusters = cluster.getConnectedClusterList();
-    JSONArray connectedClusterListJson = new JSONArray();
-
-    try {
+    ArrayNode connectedClusterListJson = mapper.createArrayNode();
 
-      for (Map.Entry<String, Boolean> entry : cluster.getWanInformation()
-          .entrySet()) {
-        JSONObject clusterJSON = new JSONObject();
-        clusterJSON.put("clusterId", entry.getKey());
-        clusterJSON.put("name", entry.getKey());
-        clusterJSON.put("status", entry.getValue());
+    for (Map.Entry<String, Boolean> entry : cluster.getWanInformation()
+        .entrySet()) {
+      ObjectNode clusterJSON = mapper.createObjectNode();
+      clusterJSON.put("clusterId", entry.getKey());
+      clusterJSON.put("name", entry.getKey());
+      clusterJSON.put("status", entry.getValue());
 
-        connectedClusterListJson.put(clusterJSON);
-      }
-      // Response JSON
-      responseJSON.put("connectedClusters", connectedClusterListJson);
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+      connectedClusterListJson.add(clusterJSON);
     }
+    // Response JSON
+    responseJSON.put("connectedClusters", connectedClusterListJson);
+    // Send json response
+    return responseJSON;
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java
index 70be387..190fc6d 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java
@@ -19,18 +19,18 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
+import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
-import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class MemberAsynchEventQueuesService
@@ -46,62 +46,55 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class MemberAsynchEventQueuesService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      String memberName = requestDataJSON.getJSONObject(
-          "MemberAsynchEventQueues").getString("memberName");
-
-      Cluster.Member clusterMember = cluster.getMember(StringUtils
-          .makeCompliantName(memberName));
-
-      if (clusterMember != null) {
-        // response
-        Cluster.AsyncEventQueue[] asyncEventQueues = clusterMember
-            .getMemberAsyncEventQueueList();
-        JSONArray asyncEventQueueJsonList = new JSONArray();
-
-        if (asyncEventQueues != null && asyncEventQueues.length > 0) {
-
-          responseJSON.put("isAsyncEventQueuesPresent", true);
-
-          for (Cluster.AsyncEventQueue asyncEventQueue : asyncEventQueues) {
-            JSONObject asyncEventQueueJSON = new JSONObject();
-            asyncEventQueueJSON.put("id", asyncEventQueue.getId());
-            asyncEventQueueJSON.put("primary", asyncEventQueue.getPrimary());
-            asyncEventQueueJSON.put("senderType", asyncEventQueue.isParallel());
-            asyncEventQueueJSON
-                .put("batchSize", asyncEventQueue.getBatchSize());
-            asyncEventQueueJSON.put("batchTimeInterval",
-                asyncEventQueue.getBatchTimeInterval());
-            asyncEventQueueJSON.put("batchConflationEnabled",
-                asyncEventQueue.isBatchConflationEnabled());
-            asyncEventQueueJSON.put("asyncEventListener",
-                asyncEventQueue.getAsyncEventListener());
-            asyncEventQueueJSON.put("queueSize",
-                asyncEventQueue.getEventQueueSize());
-
-            asyncEventQueueJsonList.put(asyncEventQueueJSON);
-          }
-          responseJSON.put("asyncEventQueues", asyncEventQueueJsonList);
-        } else {
-          responseJSON.put("isAsyncEventQueuesPresent", false);
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    String memberName = requestDataJSON.get("MemberAsynchEventQueues").get("memberName").textValue();
+
+    Cluster.Member clusterMember = cluster.getMember(StringUtils.makeCompliantName(memberName));
+
+    if (clusterMember != null) {
+      // response
+      Cluster.AsyncEventQueue[] asyncEventQueues = clusterMember
+          .getMemberAsyncEventQueueList();
+      ArrayNode asyncEventQueueJsonList = mapper.createArrayNode();
+
+      if (asyncEventQueues != null && asyncEventQueues.length > 0) {
+        responseJSON.put("isAsyncEventQueuesPresent", true);
+
+        for (Cluster.AsyncEventQueue asyncEventQueue : asyncEventQueues) {
+          ObjectNode asyncEventQueueJSON = mapper.createObjectNode();
+          asyncEventQueueJSON.put("id", asyncEventQueue.getId());
+          asyncEventQueueJSON.put("primary", asyncEventQueue.getPrimary());
+          asyncEventQueueJSON.put("senderType", asyncEventQueue.isParallel());
+          asyncEventQueueJSON
+              .put("batchSize", asyncEventQueue.getBatchSize());
+          asyncEventQueueJSON.put("batchTimeInterval",
+              asyncEventQueue.getBatchTimeInterval());
+          asyncEventQueueJSON.put("batchConflationEnabled",
+              asyncEventQueue.isBatchConflationEnabled());
+          asyncEventQueueJSON.put("asyncEventListener",
+              asyncEventQueue.getAsyncEventListener());
+          asyncEventQueueJSON.put("queueSize",
+              asyncEventQueue.getEventQueueSize());
+
+          asyncEventQueueJsonList.add(asyncEventQueueJSON);
         }
-
+        responseJSON.put("asyncEventQueues", asyncEventQueueJsonList);
+      } else {
+        responseJSON.put("isAsyncEventQueuesPresent", false);
       }
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+
     }
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java
index cb4a9e0..a2b5819 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java
@@ -19,21 +19,19 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import java.util.Formatter;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import com.vmware.gemfire.tools.pulse.internal.util.TimeUtils;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class MemberClientsService
@@ -48,76 +46,57 @@ import com.vmware.gemfire.tools.pulse.internal.util.TimeUtils;
 @Scope("singleton")
 public class MemberClientsService implements PulseService {
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   // String constants used for forming a json response
   private final String NAME = "name";
   private final String HOST = "host";
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      String memberName = requestDataJSON.getJSONObject("MemberClients")
-          .getString("memberName");
-
-      JSONArray clientListJson = new JSONArray();
-
-      Cluster.Member clusterMember = cluster.getMember(StringUtils
-          .makeCompliantName(memberName));
-      if (clusterMember != null) {
-        responseJSON.put("memberId", clusterMember.getId());
-        responseJSON.put(this.NAME, clusterMember.getName());
-        responseJSON.put(this.HOST, clusterMember.getHost());
-
-        // member's clients
-
-        Cluster.Client[] memberClients = clusterMember.getMemberClients();
-        for (Cluster.Client memberClient : memberClients) {
-          JSONObject regionJSON = new JSONObject();
-          regionJSON.put("clientId", memberClient.getId());
-          regionJSON.put(this.NAME, memberClient.getName());
-          regionJSON.put(this.HOST, memberClient.getHost());
-          regionJSON.put("queueSize", memberClient.getQueueSize());
-          regionJSON.put("clientCQCount", memberClient.getClientCQCount()); 
-          if(memberClient.isConnected()){
-            regionJSON.put("isConnected", "Yes");
-          }else{
-            regionJSON.put("isConnected", "No");
-          }
-          
-          if(memberClient.isSubscriptionEnabled()){ 
-            regionJSON.put("isSubscriptionEnabled", "Yes"); 
-          }else{ 
-            regionJSON.put("isSubscriptionEnabled", "No"); 
-          } 
-
-          regionJSON.put("uptime",
-              TimeUtils.convertTimeSecondsToHMS(memberClient.getUptime()));
-          Formatter fmt = new Formatter();
-          regionJSON.put("cpuUsage",
-              fmt.format("%.4f", memberClient.getCpuUsage()).toString());
-          // regionJSON.put("cpuUsage", memberClient.getCpuUsage());
-          regionJSON.put("threads", memberClient.getThreads());
-          regionJSON.put("gets", memberClient.getGets());
-          regionJSON.put("puts", memberClient.getPuts());
-
-          clientListJson.put(regionJSON);
-          fmt.close();
-
-        }
-        responseJSON.put("memberClients", clientListJson);
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    String memberName = requestDataJSON.get("MemberClients").get("memberName").textValue();
+
+    ArrayNode clientListJson = mapper.createArrayNode();
+
+    Cluster.Member clusterMember = cluster.getMember(StringUtils.makeCompliantName(memberName));
+    if (clusterMember != null) {
+      responseJSON.put("memberId", clusterMember.getId());
+      responseJSON.put(this.NAME, clusterMember.getName());
+      responseJSON.put(this.HOST, clusterMember.getHost());
+
+      // member's clients
+
+      Cluster.Client[] memberClients = clusterMember.getMemberClients();
+      for (Cluster.Client memberClient : memberClients) {
+        ObjectNode regionJSON = mapper.createObjectNode();
+        regionJSON.put("clientId", memberClient.getId());
+        regionJSON.put(this.NAME, memberClient.getName());
+        regionJSON.put(this.HOST, memberClient.getHost());
+        regionJSON.put("queueSize", memberClient.getQueueSize());
+        regionJSON.put("clientCQCount", memberClient.getClientCQCount());
+        regionJSON.put("isConnected", memberClient.isConnected() ? "Yes" : "No");
+        regionJSON.put("isSubscriptionEnabled", memberClient.isSubscriptionEnabled() ? "Yes" : "No");
+        regionJSON.put("uptime", TimeUtils.convertTimeSecondsToHMS(memberClient.getUptime()));
+
+        regionJSON.put("cpuUsage", String.format("%.4f", memberClient.getCpuUsage()).toString());
+        // regionJSON.put("cpuUsage", memberClient.getCpuUsage());
+        regionJSON.put("threads", memberClient.getThreads());
+        regionJSON.put("gets", memberClient.getGets());
+        regionJSON.put("puts", memberClient.getPuts());
+
+        clientListJson.add(regionJSON);
       }
-      // Send json response
-      return responseJSON;
-
-    } catch (JSONException e) {
-      throw new Exception(e);
+      responseJSON.put("memberClients", clientListJson);
     }
+    // Send json response
+    return responseJSON;
+
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java
index 7e55712..9a227a2 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java
@@ -19,12 +19,13 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
@@ -46,7 +47,9 @@ import java.text.DecimalFormat;
 @Scope("singleton")
 public class MemberDetailsService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     String userName = request.getUserPrincipal().getName();
 
@@ -54,75 +57,66 @@ public class MemberDetailsService implements PulseService {
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-    try {
-
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      String memberName = requestDataJSON.getJSONObject("MemberDetails")
-          .getString("memberName");
-
-      Cluster.Member clusterMember = cluster.getMember(StringUtils
-          .makeCompliantName(memberName));
-      if (clusterMember != null) {
-        responseJSON.put("memberId", clusterMember.getId());
-        responseJSON.put("name", clusterMember.getName());
-        responseJSON.put("host", clusterMember.getHost());
-        responseJSON.put("hostnameForClients", clusterMember.getHostnameForClients());
-        responseJSON.put("clusterId", cluster.getId());
-        responseJSON.put("clusterName", cluster.getServerName());
-        responseJSON.put("userName", userName);
-        responseJSON.put("loadAverage", clusterMember.getLoadAverage());
-        responseJSON.put("sockets", clusterMember.getTotalFileDescriptorOpen());
-        responseJSON.put("threads", clusterMember.getNumThreads());
-        responseJSON.put("offHeapFreeSize", clusterMember.getOffHeapFreeSize());
-        responseJSON.put("offHeapUsedSize", clusterMember.getOffHeapUsedSize());
-        responseJSON.put("regionsCount", clusterMember.getMemberRegionsList().length);
-
-        // Number of member clients
-        if (PulseController.getPulseProductSupport().equalsIgnoreCase(
-            PulseConstants.PRODUCT_NAME_SQLFIRE)){
-          responseJSON.put("numClients", clusterMember.getNumSqlfireClients());
-        }else{
-          responseJSON.put("numClients", clusterMember.getMemberClientsHMap().size());
-        }
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    String memberName = requestDataJSON.get("MemberDetails").get("memberName").textValue();
+
+    Cluster.Member clusterMember = cluster.getMember(StringUtils
+        .makeCompliantName(memberName));
+    if (clusterMember != null) {
+      responseJSON.put("memberId", clusterMember.getId());
+      responseJSON.put("name", clusterMember.getName());
+      responseJSON.put("host", clusterMember.getHost());
+      responseJSON.put("clusterId", cluster.getId());
+      responseJSON.put("clusterName", cluster.getServerName());
+      responseJSON.put("userName", userName);
+      responseJSON.put("loadAverage", clusterMember.getLoadAverage());
+      responseJSON.put("sockets", clusterMember.getTotalFileDescriptorOpen());
+      responseJSON.put("threads", clusterMember.getNumThreads());
+      responseJSON.put("offHeapFreeSize", clusterMember.getOffHeapFreeSize());
+      responseJSON.put("offHeapUsedSize", clusterMember.getOffHeapUsedSize());
+      responseJSON.put("regionsCount", clusterMember.getMemberRegionsList().length);
+
+      // Number of member clients
+      if (PulseController.getPulseProductSupport().equalsIgnoreCase(
+          PulseConstants.PRODUCT_NAME_SQLFIRE)){
+        responseJSON.put("numClients", clusterMember.getNumSqlfireClients());
+      } else {
+        responseJSON.put("numClients", clusterMember.getMemberClientsHMap().size());
+      }
 
-        DecimalFormat df2 = new DecimalFormat(
-            PulseConstants.DECIMAL_FORMAT_PATTERN);
-        Long diskUsageVal = clusterMember.getTotalDiskUsage();
-        Double diskUsage = diskUsageVal.doubleValue() / 1024;
+      DecimalFormat df2 = new DecimalFormat(PulseConstants.DECIMAL_FORMAT_PATTERN);
+      Long diskUsageVal = clusterMember.getTotalDiskUsage();
+      Double diskUsage = diskUsageVal.doubleValue() / 1024;
 
-        responseJSON.put("diskStorageUsed",
-            Double.valueOf(df2.format(diskUsage)));
+      responseJSON.put("diskStorageUsed", Double.valueOf(df2.format(diskUsage)));
 
-        Cluster.Alert[] alertsList = cluster.getAlertsList();
+      Cluster.Alert[] alertsList = cluster.getAlertsList();
 
-        String status = "Normal";
+      String status = "Normal";
 
-        for (Cluster.Alert alert : alertsList) {
-          if (clusterMember.getName().equals(alert.getMemberName())) {
-            if (alert.getSeverity() == Cluster.Alert.SEVERE) {
-              status = "Severe";
-              break;
-            } else if (alert.getSeverity() == Cluster.Alert.ERROR) {
-              status = "Error";
-            } else if (alert.getSeverity() == Cluster.Alert.WARNING) {
-              status = "Warning";
-            }
+      for (Cluster.Alert alert : alertsList) {
+        if (clusterMember.getName().equals(alert.getMemberName())) {
+          if (alert.getSeverity() == Cluster.Alert.SEVERE) {
+            status = "Severe";
+            break;
+          } else if (alert.getSeverity() == Cluster.Alert.ERROR) {
+            status = "Error";
+          } else if (alert.getSeverity() == Cluster.Alert.WARNING) {
+            status = "Warning";
           }
         }
-
-        responseJSON.put("status", status);
-
-      } else {
-        responseJSON.put("errorOnMember", "Member [" + memberName
-            + "] is not available");
       }
 
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+      responseJSON.put("status", status);
+
+    } else {
+      responseJSON.put("errorOnMember", "Member [" + memberName
+          + "] is not available");
     }
+
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
index ce9fb59..f75479c 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
@@ -19,18 +19,18 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
 import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class MemberDiskThroughputService
@@ -46,48 +46,33 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class MemberDiskThroughputService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception, JSONException {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     // members list
-    try {
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      String memberName = requestDataJSON.getJSONObject("MemberDiskThroughput")
-          .getString("memberName");
-
-      Cluster.Member clusterMember = cluster.getMember(StringUtils
-          .makeCompliantName(memberName));
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    String memberName = requestDataJSON.get("MemberDiskThroughput").get("memberName").textValue();
 
-      if (clusterMember != null) {
-        // response
-        responseJSON.put("throughputWrites",
-            clusterMember.getThroughputWrites());
-        responseJSON
-            .put(
-                "throughputWritesTrend",
-                new JSONArray(
-                    clusterMember
-                        .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_THROUGHPUT_WRITES)));
-        responseJSON
-            .put("throughputReads", clusterMember.getThroughputWrites());
-        responseJSON
-            .put(
-                "throughputReadsTrend",
-                new JSONArray(
-                    clusterMember
-                        .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_THROUGHPUT_READS)));
-      }
+    Cluster.Member clusterMember = cluster.getMember(StringUtils.makeCompliantName(memberName));
 
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+    if (clusterMember != null) {
+      // response
+      responseJSON.put("throughputWrites", clusterMember.getThroughputWrites());
+      responseJSON.put("throughputWritesTrend",
+          mapper.valueToTree(clusterMember.getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_THROUGHPUT_WRITES)));
+      responseJSON.put("throughputReads", clusterMember.getThroughputWrites());
+      responseJSON.put("throughputReadsTrend",
+          mapper.valueToTree(clusterMember.getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_THROUGHPUT_READS)));
     }
+
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java
index adc01e1..77792d5 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java
@@ -19,18 +19,17 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
+import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
-import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class MemberGCPausesService
@@ -47,39 +46,29 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class MemberGCPausesService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     // members list
-    try {
-
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      String memberName = requestDataJSON.getJSONObject("MemberGCPauses")
-          .getString("memberName");
-      Cluster.Member clusterMember = cluster.getMember(StringUtils
-          .makeCompliantName(memberName));
-      if (clusterMember != null) {
-        // response
-        responseJSON
-            .put(
-                "gcPausesTrend",
-                new JSONArray(
-                    clusterMember
-                        .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_GARBAGE_COLLECTION)));
-        responseJSON.put("gcPausesCount",
-            clusterMember.getGarbageCollectionCount());
-      }
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    String memberName = requestDataJSON.get("MemberGCPauses").get("memberName").textValue();
+    Cluster.Member clusterMember = cluster.getMember(StringUtils.makeCompliantName(memberName));
 
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+    if (clusterMember != null) {
+      // response
+      responseJSON.put("gcPausesTrend",
+          mapper.valueToTree(clusterMember.getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_GARBAGE_COLLECTION)));
+      responseJSON.put("gcPausesCount", clusterMember.getGarbageCollectionCount());
     }
+
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java
index f1efd55..2f7b717 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java
@@ -19,22 +19,21 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
+import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
-import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Class MemberGatewayHubService
@@ -50,114 +49,102 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class MemberGatewayHubService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      String memberName = requestDataJSON.getJSONObject("MemberGatewayHub")
-          .getString("memberName");
-
-      Cluster.Member clusterMember = cluster.getMember(StringUtils
-          .makeCompliantName(memberName));
-
-      if (clusterMember != null) {
-        // response
-        // get gateway receiver
-        Cluster.GatewayReceiver gatewayReceiver = clusterMember
-            .getGatewayReceiver();
-
-        Boolean isGateway = false;
-
-        if (gatewayReceiver != null) {
-          responseJSON.put("isGatewayReceiver", true);
-          responseJSON.put("listeningPort", gatewayReceiver.getListeningPort());
-          responseJSON
-              .put("linkTroughput", gatewayReceiver.getLinkThroughput());
-          responseJSON.put("avgBatchLatency",
-              gatewayReceiver.getAvgBatchProcessingTime());
-        } else {
-          responseJSON.put("isGatewayReceiver", false);
-        }
+    ObjectNode responseJSON = mapper.createObjectNode();
 
-        // get gateway senders
-        Cluster.GatewaySender[] gatewaySenders = clusterMember
-            .getMemberGatewaySenders();
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    String memberName = requestDataJSON.get("MemberGatewayHub").get("memberName").textValue();
 
-        if (gatewaySenders.length > 0) {
-          isGateway = true;
-        }
-        responseJSON.put("isGatewaySender", isGateway);
-        // Senders
-        JSONArray gatewaySendersJsonList = new JSONArray();
-
-        for (Cluster.GatewaySender gatewaySender : gatewaySenders) {
-          JSONObject gatewaySenderJSON = new JSONObject();
-          gatewaySenderJSON.put("id", gatewaySender.getId());
-          gatewaySenderJSON.put("queueSize", gatewaySender.getQueueSize());
-          gatewaySenderJSON.put("status", gatewaySender.getStatus());
-          gatewaySenderJSON.put("primary", gatewaySender.getPrimary());
-          gatewaySenderJSON.put("senderType", gatewaySender.getSenderType());
-          gatewaySenderJSON.put("batchSize", gatewaySender.getBatchSize());
-          gatewaySenderJSON.put("PersistenceEnabled",
-              gatewaySender.getPersistenceEnabled());
-          gatewaySenderJSON.put("remoteDSId",
-              gatewaySender.getRemoteDSId());
-          gatewaySenderJSON.put("eventsExceedingAlertThreshold",
-              gatewaySender.getEventsExceedingAlertThreshold());
-
-          gatewaySendersJsonList.put(gatewaySenderJSON);
-        }
-        // senders response
-        responseJSON.put("gatewaySenders", gatewaySendersJsonList);
-
-        // async event queues
-        Cluster.AsyncEventQueue[] asyncEventQueues = clusterMember.getMemberAsyncEventQueueList();
-        JSONArray asyncEventQueueJsonList = new JSONArray();
-
-        for (Cluster.AsyncEventQueue asyncEventQueue : asyncEventQueues) {
-          JSONObject asyncEventQueueJSON = new JSONObject();
-          asyncEventQueueJSON.put("id", asyncEventQueue.getId());
-          asyncEventQueueJSON.put("primary", asyncEventQueue.getPrimary());
-          asyncEventQueueJSON.put("senderType", asyncEventQueue.isParallel());
-          asyncEventQueueJSON.put("batchSize", asyncEventQueue.getBatchSize());
-          asyncEventQueueJSON.put("batchTimeInterval", asyncEventQueue.getBatchTimeInterval());
-          asyncEventQueueJSON.put("batchConflationEnabled", asyncEventQueue.isBatchConflationEnabled());
-          asyncEventQueueJSON.put("asyncEventListener", asyncEventQueue.getAsyncEventListener());
-          asyncEventQueueJSON.put("queueSize", asyncEventQueue.getEventQueueSize());
-
-          asyncEventQueueJsonList.put(asyncEventQueueJSON);
-        }
-        responseJSON.put("asyncEventQueues", asyncEventQueueJsonList);
+    Cluster.Member clusterMember = cluster.getMember(StringUtils
+        .makeCompliantName(memberName));
+
+    if (clusterMember != null) {
+      // response
+      // get gateway receiver
+      Cluster.GatewayReceiver gatewayReceiver = clusterMember.getGatewayReceiver();
 
+      Boolean isGateway = false;
 
-        Map<String,Cluster.Region> clusterRegions = cluster.getClusterRegions();
+      if (gatewayReceiver != null) {
+        responseJSON.put("isGatewayReceiver", true);
+        responseJSON.put("listeningPort", gatewayReceiver.getListeningPort());
+        responseJSON.put("linkTroughput", gatewayReceiver.getLinkThroughput());
+        responseJSON.put("avgBatchLatency", gatewayReceiver.getAvgBatchProcessingTime());
+      } else {
+        responseJSON.put("isGatewayReceiver", false);
+      }
 
-        List<Cluster.Region> clusterRegionsList = new ArrayList<Cluster.Region>();
-        clusterRegionsList.addAll(clusterRegions.values());
-        
-        JSONArray regionsList = new JSONArray();
+      // get gateway senders
+      Cluster.GatewaySender[] gatewaySenders = clusterMember.getMemberGatewaySenders();
 
-        for (Cluster.Region region : clusterRegionsList) {
-          if (region.getWanEnabled()) {
-            JSONObject regionJSON = new JSONObject();
-            regionJSON.put("name", region.getName());
-            regionsList.put(regionJSON);
-          }
+      if (gatewaySenders.length > 0) {
+        isGateway = true;
+      }
+      responseJSON.put("isGatewaySender", isGateway);
+      // Senders
+      ArrayNode gatewaySendersJsonList = mapper.createArrayNode();
+
+      for (Cluster.GatewaySender gatewaySender : gatewaySenders) {
+        ObjectNode gatewaySenderJSON = mapper.createObjectNode();
+        gatewaySenderJSON.put("id", gatewaySender.getId());
+        gatewaySenderJSON.put("queueSize", gatewaySender.getQueueSize());
+        gatewaySenderJSON.put("status", gatewaySender.getStatus());
+        gatewaySenderJSON.put("primary", gatewaySender.getPrimary());
+        gatewaySenderJSON.put("senderType", gatewaySender.getSenderType());
+        gatewaySenderJSON.put("batchSize", gatewaySender.getBatchSize());
+        gatewaySenderJSON.put("PersistenceEnabled", gatewaySender.getPersistenceEnabled());
+        gatewaySenderJSON.put("remoteDSId", gatewaySender.getRemoteDSId());
+        gatewaySenderJSON.put("eventsExceedingAlertThreshold", gatewaySender.getEventsExceedingAlertThreshold());
+
+        gatewaySendersJsonList.add(gatewaySenderJSON);
+      }
+      // senders response
+      responseJSON.put("gatewaySenders", gatewaySendersJsonList);
+
+      // async event queues
+      Cluster.AsyncEventQueue[] asyncEventQueues = clusterMember.getMemberAsyncEventQueueList();
+      ArrayNode asyncEventQueueJsonList = mapper.createArrayNode();
+
+      for (Cluster.AsyncEventQueue asyncEventQueue : asyncEventQueues) {
+        ObjectNode asyncEventQueueJSON = mapper.createObjectNode();
+        asyncEventQueueJSON.put("id", asyncEventQueue.getId());
+        asyncEventQueueJSON.put("primary", asyncEventQueue.getPrimary());
+        asyncEventQueueJSON.put("senderType", asyncEventQueue.isParallel());
+        asyncEventQueueJSON.put("batchSize", asyncEventQueue.getBatchSize());
+        asyncEventQueueJSON.put("batchTimeInterval", asyncEventQueue.getBatchTimeInterval());
+        asyncEventQueueJSON.put("batchConflationEnabled", asyncEventQueue.isBatchConflationEnabled());
+        asyncEventQueueJSON.put("asyncEventListener", asyncEventQueue.getAsyncEventListener());
+        asyncEventQueueJSON.put("queueSize", asyncEventQueue.getEventQueueSize());
+
+        asyncEventQueueJsonList.add(asyncEventQueueJSON);
+      }
+      responseJSON.put("asyncEventQueues", asyncEventQueueJsonList);
+
+      Map<String,Cluster.Region> clusterRegions = cluster.getClusterRegions();
+
+      List<Cluster.Region> clusterRegionsList = new ArrayList<Cluster.Region>();
+      clusterRegionsList.addAll(clusterRegions.values());
+
+      ArrayNode regionsList = mapper.createArrayNode();
+
+      for (Cluster.Region region : clusterRegionsList) {
+        if (region.getWanEnabled()) {
+          ObjectNode regionJSON = mapper.createObjectNode();
+          regionJSON.put("name", region.getName());
+          regionsList.add(regionJSON);
         }
-        responseJSON.put("regionsInvolved", regionsList);
       }
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+      responseJSON.put("regionsInvolved", regionsList);
     }
+
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java
index 0073881..914b053 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java
@@ -19,18 +19,17 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
+import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
-import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class MemberHeapUsageService
@@ -46,40 +45,30 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class MemberHeapUsageService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     // members list
-    try {
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      String memberName = requestDataJSON.getJSONObject("MemberHeapUsage")
-          .getString("memberName");
-
-      Cluster.Member clusterMember = cluster.getMember(StringUtils
-          .makeCompliantName(memberName));
-      if (clusterMember != null) {
-        // response
-        responseJSON
-            .put(
-                "heapUsageTrend",
-                new JSONArray(
-                    clusterMember
-                        .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_HEAP_USAGE_SAMPLE)));
-        responseJSON
-            .put("currentHeapUsage", clusterMember.getCurrentHeapSize());
-      }
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    String memberName = requestDataJSON.get("MemberHeapUsage").get("memberName").textValue();
 
-      // Send json response
-      return responseJSON;
+    Cluster.Member clusterMember = cluster.getMember(StringUtils.makeCompliantName(memberName));
 
-    } catch (JSONException e) {
-      throw new Exception(e);
+    if (clusterMember != null) {
+      // response
+      responseJSON.put("heapUsageTrend",
+          mapper.valueToTree(clusterMember.getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_HEAP_USAGE_SAMPLE)));
+      responseJSON.put("currentHeapUsage", clusterMember.getCurrentHeapSize());
     }
+
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
index 9dc6126..4509918 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
@@ -19,18 +19,18 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
 import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class MemberKeyStatisticsService
@@ -46,53 +46,33 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class MemberKeyStatisticsService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception, JSONException {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    String memberName = requestDataJSON.get("MemberKeyStatistics").get("memberName").textValue();
 
-    try {
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      String memberName = requestDataJSON.getJSONObject("MemberKeyStatistics")
-          .getString("memberName");
+    Cluster.Member clusterMember = cluster.getMember(StringUtils.makeCompliantName(memberName));
 
-      Cluster.Member clusterMember = cluster.getMember(StringUtils
-          .makeCompliantName(memberName));
-      if (clusterMember != null) {
-        // response
-        responseJSON
-            .put(
-                "cpuUsageTrend",
-                new JSONArray(
-                    clusterMember
-                        .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_CPU_USAGE_SAMPLE)));
-        responseJSON
-            .put(
-                "memoryUsageTrend",
-                new JSONArray(
-                    clusterMember
-                        .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_HEAP_USAGE_SAMPLE)));
-        responseJSON
-            .put(
-                "readPerSecTrend",
-                new JSONArray(
-                    clusterMember
-                        .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_GETS_PER_SECOND)));
-        responseJSON
-            .put(
-                "writePerSecTrend",
-                new JSONArray(
-                    clusterMember
-                        .getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_PUTS_PER_SECOND)));
-      }
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+    if (clusterMember != null) {
+      // response
+      responseJSON.put("cpuUsageTrend",
+          mapper.valueToTree(clusterMember.getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_CPU_USAGE_SAMPLE)));
+      responseJSON.put("memoryUsageTrend",
+          mapper.valueToTree(clusterMember.getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_HEAP_USAGE_SAMPLE)));
+      responseJSON.put("readPerSecTrend",
+          mapper.valueToTree(clusterMember.getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_GETS_PER_SECOND)));
+      responseJSON.put("writePerSecTrend",
+          mapper.valueToTree(clusterMember.getMemberStatisticTrend(Cluster.Member.MEMBER_STAT_PUTS_PER_SECOND)));
     }
+    // Send json response
+    return responseJSON;
   }
 }


[19/50] [abbrv] incubator-geode git commit: GEODE-998: Fix javadoc warning in LogConfig

Posted by je...@apache.org.
GEODE-998: Fix javadoc warning in LogConfig


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/37993890
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/37993890
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/37993890

Branch: refs/heads/feature/GEODE-17
Commit: 37993890cb9a4f6ddb094191a438adb0356e9b23
Parents: d8522c2
Author: Kirk Lund <kl...@pivotal.io>
Authored: Wed Feb 24 14:08:31 2016 -0800
Committer: Kirk Lund <kl...@pivotal.io>
Committed: Wed Feb 24 14:09:19 2016 -0800

----------------------------------------------------------------------
 .../java/com/gemstone/gemfire/internal/logging/LogConfig.java    | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/37993890/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java
old mode 100644
new mode 100755
index 3e4fbc6..edd66c2
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogConfig.java
@@ -16,6 +16,8 @@
  */
 package com.gemstone.gemfire.internal.logging;
 
+import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+
 import java.io.File;
 
 public interface LogConfig {
@@ -54,7 +56,7 @@ public interface LogConfig {
    * A name is optional and by default empty.
    * If set it must be unique in the ds.
    * When set its used by tools to help identify the member.
-   * <p> The default value is: {@link #DEFAULT_NAME}.
+   * <p> The default value is: {@link DistributionConfig#DEFAULT_NAME}.
    * @return the system's name.
    */
   public String getName();


[38/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DurableClientCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DurableClientCommands.java
index 0000000,b844e85..e6de2ec
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DurableClientCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DurableClientCommands.java
@@@ -1,0 -1,430 +1,437 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ 
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.TreeMap;
+ import java.util.TreeSet;
+ 
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.internal.cli.domain.DurableCqNamesResult;
+ import com.gemstone.gemfire.management.internal.cli.domain.IndexDetails.IndexStatisticsDetails;
+ import com.gemstone.gemfire.management.internal.cli.domain.MemberResult;
+ import com.gemstone.gemfire.management.internal.cli.domain.SubscriptionQueueSizeResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.CloseDurableClientFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.CloseDurableCqFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.GetSubscriptionQueueSizeFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.ListDurableCqNamesFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.InfoResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * The DurableClientCommands class encapsulates all GemFire shell (Gfsh) commands related to 
+  * durable clients and cqs defined in GemFire.
+  * </p>
+  * @author jhuynh
+  * @author bansods
+  */
+ @SuppressWarnings("unused")
+ public class DurableClientCommands extends AbstractCommandsSupport {
+ 
+ 	private static final ListDurableCqNamesFunction listDurableCqNamesFunction = new ListDurableCqNamesFunction();
+ 	private static final CloseDurableClientFunction closeDurableClientFunction = new CloseDurableClientFunction();
+ 	private static final CloseDurableCqFunction closeDurableCqFunction = new CloseDurableCqFunction();
+ 	private static final GetSubscriptionQueueSizeFunction countDurableCqEvents = new GetSubscriptionQueueSizeFunction();
+ 
+ 	@CliCommand(value = CliStrings.LIST_DURABLE_CQS, help = CliStrings.LIST_DURABLE_CQS__HELP)
+ 	@CliMetaData(shellOnly = false)
++	@ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+ 	public Result listDurableClientCqs(
+ 	@CliOption (key = CliStrings.LIST_DURABLE_CQS__DURABLECLIENTID,
+ 	mandatory=true,
+ 	help = CliStrings.LIST_DURABLE_CQS__DURABLECLIENTID__HELP
+ 	) final String durableClientId,
+ 	
+ 	@CliOption (key = CliStrings.LIST_DURABLE_CQS__MEMBER,
+ 	help = CliStrings.LIST_DURABLE_CQS__MEMBER__HELP,
+ 	optionContext=ConverterHint.MEMBERIDNAME
+ 	) final String memberNameOrId,
+ 	
+ 	@CliOption (key = CliStrings.LIST_DURABLE_CQS__GROUP,
+ 	help = CliStrings.LIST_DURABLE_CQS__GROUP__HELP,
+ 	optionContext=ConverterHint.MEMBERGROUP
+ 	) final String group) {
+ 	  Result result = null;
+ 	  try {
+ 
+ 	    boolean noResults = true;
+ 	    Set<DistributedMember> targetMembers;
+ 	    try {
+ 	      targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrId);
+ 	    } catch (CommandResultException e) {
+ 	      return e.getResult();
+ 	    }
+ 	    final ResultCollector<?,?> rc = CliUtil.executeFunction(new ListDurableCqNamesFunction(), durableClientId, targetMembers);
+ 	    final List<DurableCqNamesResult> results = (List<DurableCqNamesResult>) rc.getResult();
+ 	    Map<String, List<String>> memberCqNamesMap = new TreeMap<String, List<String>>();
+ 	    Map<String, List<String>> errorMessageNodes = new HashMap<String, List<String>>();
+ 	    Map<String, List<String>> exceptionMessageNodes = new HashMap<String, List<String>>();
+ 
+ 	    for (DurableCqNamesResult memberResult : results) {
+ 	      if (memberResult != null) {
+ 	        if (memberResult.isSuccessful()) {
+ 	          memberCqNamesMap.put(memberResult.getMemberNameOrId(), memberResult.getCqNamesList());
+ 	        } else {
+ 	          if (memberResult.isOpPossible()) {
+ 	            groupByMessage(memberResult.getExceptionMessage(), memberResult.getMemberNameOrId(), exceptionMessageNodes);
+ 	          } else {
+ 	            groupByMessage(memberResult.getErrorMessage(), memberResult.getMemberNameOrId(), errorMessageNodes);
+ 	          }
+ 	        }
+ 	      }
+ 	    }
+ 
+ 	    if (!memberCqNamesMap.isEmpty()) {
+ 	      TabularResultData table = ResultBuilder.createTabularResultData();
+ 	      Set<String> members = memberCqNamesMap.keySet();
+ 
+ 	      for (String member : members) {
+ 	        boolean isFirst = true;
+ 	        List<String> cqNames = memberCqNamesMap.get(member);
+ 	        for (String cqName : cqNames) {
+ 	          if (isFirst) {
+ 	            isFirst = false;
+ 	            table.accumulate(CliStrings.LIST_DURABLE_CQS__MEMBER, member);
+ 	          } else {
+ 	            table.accumulate(CliStrings.LIST_DURABLE_CQS__MEMBER, "");
+ 	          }
+ 	          table.accumulate(CliStrings.LIST_DURABLE_CQS__NAME, cqName);
+ 	        }
+ 	      }
+ 	      result = ResultBuilder.buildResult(table);
+ 	    } else {
+ 	      String errorHeader = CliStrings.format(CliStrings.LIST_DURABLE_CQS__FAILURE__HEADER, durableClientId);
+ 	      result = ResultBuilder.buildResult(buildFailureData(null, exceptionMessageNodes, errorMessageNodes, errorHeader));
+ 	    }
+ 	  } catch (Exception e) {
+ 	    result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+ 	  }
+ 
+ 	  return result;
+ 	}
+ 
+ 	@CliCommand(value = CliStrings.COUNT_DURABLE_CQ_EVENTS, help = CliStrings.COUNT_DURABLE_CQ_EVENTS__HELP)
+ 	@CliMetaData(shellOnly = false)
++	@ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+ 	public Result countDurableCqEvents(
+ 	@CliOption (key = CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CLIENT__ID,
+ 	mandatory=true,
+ 	help = CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CLIENT__ID__HELP
+ 	) final String durableClientId,
+ 	@CliOption (key = CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CQ__NAME,
+ 	mandatory = false,
+ 	help = CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CQ__NAME__HELP
+ 	) final String cqName,
+ 	@CliOption (key = CliStrings.COUNT_DURABLE_CQ_EVENTS__MEMBER,
+ 	mandatory=false,
+ 	help = CliStrings.COUNT_DURABLE_CQ_EVENTS__MEMBER__HELP,
+ 	optionContext = ConverterHint.MEMBERIDNAME
+ 	) final String memberNameOrId,
+ 	@CliOption (key = CliStrings.COUNT_DURABLE_CQ_EVENTS__GROUP,
+ 	mandatory=false,
+ 	help = CliStrings.COUNT_DURABLE_CQ_EVENTS__GROUP__HELP,
+ 	optionContext = ConverterHint.MEMBERGROUP
+ 	) final String group) {
+ 		
+ 	  Result result = null;
+ 	  try {
+ 	    Set<DistributedMember> targetMembers;
+ 	    try {
+ 	      targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrId);
+ 	    } catch (CommandResultException e) {
+ 	      return e.getResult();
+ 	    }
+ 	    String [] params =  new String[2];
+ 	    params[0] = durableClientId;
+ 	    params[1] = cqName;
+ 	    final ResultCollector<?,?> rc = CliUtil.executeFunction(new GetSubscriptionQueueSizeFunction(), params, targetMembers);
+ 	    final List<SubscriptionQueueSizeResult> funcResults = (List<SubscriptionQueueSizeResult>) rc.getResult();
+ 	    
+ 	    String queueSizeColumnName;
+ 	   
+ 	    if (cqName != null && !cqName.isEmpty()) {
+ 	      queueSizeColumnName = CliStrings.format(CliStrings.COUNT_DURABLE_CQ_EVENTS__SUBSCRIPTION__QUEUE__SIZE__CLIENT, cqName);
+ 	    } else {
+ 	      queueSizeColumnName = CliStrings.format(CliStrings.COUNT_DURABLE_CQ_EVENTS__SUBSCRIPTION__QUEUE__SIZE__CLIENT, durableClientId);
+ 	    }
+ 	    result = buildTableResultForQueueSize(funcResults, queueSizeColumnName);
+ 	  } catch (Exception e) {
+ 	    result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+ 	  }
+ 
+ 	  return result;	
+ 	}
+ 
+ 	@CliCommand(value = CliStrings.CLOSE_DURABLE_CLIENTS, help = CliStrings.CLOSE_DURABLE_CLIENTS__HELP)
+ 	@CliMetaData(shellOnly = false)
++	@ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.CLOSE_DURABLE_CLIENT)
+ 	public Result closeDurableClient(
+ 	@CliOption (key = CliStrings.CLOSE_DURABLE_CLIENTS__CLIENT__ID,
+ 				mandatory=true,
+ 				help = CliStrings.CLOSE_DURABLE_CLIENTS__CLIENT__ID__HELP
+ 	) final String durableClientId,
+ 	@CliOption (key = CliStrings.CLOSE_DURABLE_CLIENTS__MEMBER,
+ 				mandatory=false,
+ 				help = CliStrings.CLOSE_DURABLE_CLIENTS__MEMBER__HELP,
+ 				optionContext = ConverterHint.MEMBERIDNAME
+ 	) final String memberNameOrId,
+ 	@CliOption (key = CliStrings.CLOSE_DURABLE_CLIENTS__GROUP,
+ 			    mandatory=false,
+ 			    help = CliStrings.COUNT_DURABLE_CQ_EVENTS__GROUP__HELP,
+ 			    optionContext = ConverterHint.MEMBERGROUP
+ 	) final String group) {
+ 	 
+ 	  Result result = null;
+ 	  try {
+ 	    Set<DistributedMember> targetMembers;
+ 	    try {
+ 	      targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrId);
+ 	    } catch (CommandResultException e) {
+ 	      return e.getResult();
+ 	    }
+ 	    final ResultCollector<?,?> rc = CliUtil.executeFunction(new CloseDurableClientFunction(), durableClientId, targetMembers);
+ 	    final List<MemberResult> results = (List<MemberResult>) rc.getResult();
+ 	    String failureHeader = CliStrings.format(CliStrings.CLOSE_DURABLE_CLIENTS__FAILURE__HEADER, durableClientId);
+ 	    String successHeader = CliStrings.format(CliStrings.CLOSE_DURABLE_CLIENTS__SUCCESS, durableClientId);
+ 	    result = buildResult(results, successHeader, failureHeader);
+ 	  } catch (Exception e) {
+ 	    result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+ 	  }
+ 	  return result;
+ 	}
+ 
+ 	
+ 	@CliCommand(value = CliStrings.CLOSE_DURABLE_CQS, help = CliStrings.CLOSE_DURABLE_CQS__HELP)
+ 	@CliMetaData(shellOnly = false)
++	@ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.CLOSE_DURABLE_CQ)
+ 	public Result closeDurableCqs(
+ 	@CliOption (key = CliStrings.CLOSE_DURABLE_CQS__DURABLE__CLIENT__ID,
+ 	mandatory=true,
+ 	help = CliStrings.CLOSE_DURABLE_CQS__DURABLE__CLIENT__ID__HELP
+ 	) final String durableClientId,
+ 			
+ 	@CliOption(key = CliStrings.CLOSE_DURABLE_CQS__NAME,
+ 	mandatory = true,
+ 	help = CliStrings.CLOSE_DURABLE_CQS__NAME__HELP)
+ 	final String cqName,
+ 	
+ 	@CliOption (key = CliStrings.CLOSE_DURABLE_CQS__MEMBER,
+ 	mandatory=false,
+ 	help = CliStrings.CLOSE_DURABLE_CQS__MEMBER__HELP,
+ 	optionContext = ConverterHint.MEMBERIDNAME
+ 	) final String memberNameOrId,
+ 	
+ 	@CliOption (key = CliStrings.CLOSE_DURABLE_CQS__GROUP,
+ 	mandatory=false,
+ 	help = CliStrings.CLOSE_DURABLE_CQS__GROUP__HELP,
+ 	optionContext = ConverterHint.MEMBERGROUP
+ 	) final String group) {
+ 	  Result result = null;
+ 	  try{
+ 	    Set<DistributedMember> targetMembers;
+ 	    try {
+ 	      targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrId);
+ 	    } catch (CommandResultException e) {
+ 	      return e.getResult();
+ 	    }
+ 
+ 	    String [] params =  new String[2];
+ 	    params[0] = durableClientId;
+ 	    params[1] = cqName;
+ 
+ 	    final ResultCollector<?,?> rc = CliUtil.executeFunction(new CloseDurableCqFunction(), params, targetMembers);
+ 	    final List<MemberResult> results = (List<MemberResult>) rc.getResult();
+ 	    String failureHeader = CliStrings.format(CliStrings.CLOSE_DURABLE_CQS__FAILURE__HEADER, cqName, durableClientId);
+ 	    String successHeader = CliStrings.format(CliStrings.CLOSE_DURABLE_CQS__SUCCESS, cqName, durableClientId);
+ 	    result = buildResult(results, successHeader, failureHeader);
+ 	  } catch (Exception e) {
+ 	    result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+ 	  }
+ 	  return result;
+ 	}
+ 
+ 	
+ 	private Result buildResult (List<MemberResult> results, String successHeader, String failureHeader) {
+ 	  Result result = null;
+ 	  boolean failure = true;
+ 	  boolean partialFailure = false;
+ 	  Map<String, List<String>> errorMap = new HashMap<String, List<String>>();
+ 	  Map<String, List<String>> successMap = new HashMap<String, List<String>>();
+ 	  Map<String, List<String>> exceptionMap = new HashMap<String, List<String>>();
+ 
+ 	  /***
+ 	   * Aggregate the results  from the members
+ 	   */
+ 	  for (MemberResult memberResult : results) {
+ 
+ 	    if (memberResult.isSuccessful()) {
+ 	      failure = false;
+ 	      groupByMessage(memberResult.getSuccessMessage(), memberResult.getMemberNameOrId(), successMap);
+ 	    } else {
+ 
+ 	      if (memberResult.isOpPossible()) {
+ 	        partialFailure = true;
+ 	        groupByMessage(memberResult.getExceptionMessage(), memberResult.getMemberNameOrId(), exceptionMap);
+ 
+ 	      }else {
+ 	        groupByMessage(memberResult.getErrorMessage(), memberResult.getMemberNameOrId(), errorMap);
+ 	      }
+ 	    }
+ 	  }
+ 
+ 	  if  (!failure && !partialFailure) {
+ 	    result = ResultBuilder.buildResult(buildSuccessData(successMap));
+ 	  } else {
+ 	    result = ResultBuilder.buildResult(buildFailureData(successMap, exceptionMap, errorMap, failureHeader));
+ 	  }
+ 	  return result ;
+ 	}
+ 
+ 	private Result buildTableResultForQueueSize (List<SubscriptionQueueSizeResult> results, String queueSizeColumnName) {
+ 	  Result result = null;
+ 	  boolean failure = true;
+ 
+ 	  Map<String, List<String>> failureMap = new HashMap<String, List<String>>();
+ 	  Map<String, Long> memberQueueSizeTable = new TreeMap<String, Long>();
+ 
+ 	  /***
+ 	   * Aggregate the results  from the members
+ 	   */
+ 	  for (SubscriptionQueueSizeResult memberResult : results) {
+ 
+ 	    if (memberResult.isSuccessful()) {
+ 	      failure = false;
+ 	      memberResult.getSubscriptionQueueSize();
+ 	      memberQueueSizeTable.put(memberResult.getMemberNameOrId(), memberResult.getSubscriptionQueueSize());
+ 	    } else {
+ 	      groupByMessage(memberResult.getErrorMessage(), memberResult.getMemberNameOrId(), failureMap);
+ 	    }
+ 	  }
+ 
+ 	  if (!failure) {
+ 	    TabularResultData table = ResultBuilder.createTabularResultData();
+ 
+ 	    Set<String> members = memberQueueSizeTable.keySet();
+ 
+ 	    for (String member : members) {
+ 	      long queueSize = memberQueueSizeTable.get(member);
+ 	      table.accumulate(CliStrings.COUNT_DURABLE_CQ_EVENTS__MEMBER, member);
+ 	      table.accumulate(queueSizeColumnName, queueSize);
+ 	    }
+ 	    result = ResultBuilder.buildResult(table);
+ 
+ 	  } else{
+ 	    ErrorResultData erd = ResultBuilder.createErrorResultData();
+ 	    buildErrorResult(erd, failureMap);
+ 	    result = ResultBuilder.buildResult(erd);
+ 	  }
+ 	  return result ;
+ 	}
+ 
+ 	private void groupByMessage (String message, String memberNameOrId, Map<String, List<String>> map){
+ 	  List<String> members = map.get(message);
+ 
+ 	  if (members == null) {
+ 	    members = new LinkedList<String>();
+ 	  }
+ 	  members.add(memberNameOrId);
+ 	  map.put(message, members);
+ 	}
+ 
+ 
+ 	private InfoResultData buildSuccessData(Map<String, List<String>> successMap) {
+ 	  InfoResultData ird = ResultBuilder.createInfoResultData();
+ 	  Set<String> successMessages = successMap.keySet();
+ 
+ 	  for (String successMessage : successMessages) {
+ 	    ird.addLine(CliStrings.format(CliStrings.ACTION_SUCCCEEDED_ON_MEMBER, successMessage));
+ 	    
+ 	    List<String> successfullMembers = successMap.get(successMessage);
+ 	    int num = 0;
+ 	    for (String member : successfullMembers) {
+ 	      ird.addLine("" + ++num + "." + member);
+ 	    }
+ 	    ird.addLine("\n");
+ 	  }
+ 	  return ird;
+ 	}
+ 
+ 	private ErrorResultData buildFailureData(Map<String, List<String>> successMap, Map<String, List<String>> exceptionMap, Map<String, List<String>> errorMap, String errorHeader) {
+ 	  ErrorResultData erd = ResultBuilder.createErrorResultData();
+ 	  buildErrorResult(erd, successMap);
+ 	  erd.addLine("\n");
+ 	  erd.addLine(errorHeader);
+ 	  buildErrorResult(erd, exceptionMap);
+ 	  buildErrorResult(erd, errorMap);
+ 	  return erd;
+ 	}
+ 	
+ 	private void buildErrorResult(ErrorResultData erd, Map<String, List<String>> resultMap) {
+ 		if (resultMap != null && !resultMap.isEmpty()) {
+ 		    Set<String> messages = resultMap.keySet();
+ 
+ 		    for (String message : messages) {
+ 		      erd.addLine("\n");
+ 		      erd.addLine(message);
+ 		      erd.addLine(CliStrings.OCCURRED_ON_MEMBERS);
+ 		      List<String> members = resultMap.get(message);
+ 		      int num = 0;
+ 		      for (String member : members) {
+ 		        ++num;
+ 	                erd.addLine(""+num + "." + member);
+ 		      }
+ 		    }
+ 		  }
+ 	}
+ 	@CliAvailabilityIndicator({ CliStrings.LIST_DURABLE_CQS, CliStrings.CLOSE_DURABLE_CLIENTS, CliStrings.CLOSE_DURABLE_CQS, CliStrings.COUNT_DURABLE_CQ_EVENTS })
+ 	public boolean durableCommandsAvailable() {
+ 	  boolean isAvailable = true;
+ 	  if (CliUtil.isGfshVM()) { 
+ 	    isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+ 	  }
+ 	  return isAvailable;
+ 	}
+ }
+ 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ExportImportSharedConfigurationCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ExportImportSharedConfigurationCommands.java
index 0000000,2e8447a..60eea3e
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ExportImportSharedConfigurationCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ExportImportSharedConfigurationCommands.java
@@@ -1,0 -1,292 +1,297 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.io.File;
+ import java.io.FileNotFoundException;
+ import java.io.IOException;
+ import java.util.HashSet;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.AbstractCliAroundInterceptor;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.GfshParseResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.ExportSharedConfigurationFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.ImportSharedConfigurationArtifactsFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.LoadSharedConfigurationFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.remote.CommandExecutionContext;
+ import com.gemstone.gemfire.management.internal.cli.result.FileResult;
+ import com.gemstone.gemfire.management.internal.cli.result.InfoResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ /****
+  * Commands for the shared configuration
+  * @author bansods
+  *
+  */
+ @SuppressWarnings("unused")
+ public class ExportImportSharedConfigurationCommands extends AbstractCommandsSupport {
+ 
+   private final ExportSharedConfigurationFunction exportSharedConfigurationFunction = new ExportSharedConfigurationFunction();
+   private final ImportSharedConfigurationArtifactsFunction importSharedConfigurationFunction = new ImportSharedConfigurationArtifactsFunction();
+   private final LoadSharedConfigurationFunction loadSharedConfiguration = new LoadSharedConfigurationFunction();
+ 
+   @CliCommand(value = { CliStrings.EXPORT_SHARED_CONFIG }, help = CliStrings.EXPORT_SHARED_CONFIG__HELP)
+   @CliMetaData(interceptor = "com.gemstone.gemfire.management.internal.cli.commands.ExportImportSharedConfigurationCommands$ExportInterceptor",  readsSharedConfiguration=true, relatedTopic = {CliStrings.TOPIC_GEMFIRE_CONFIG})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.EXPORT_CONFIG)
+   public Result exportSharedConfig(
+       @CliOption(key = { CliStrings.EXPORT_SHARED_CONFIG__FILE}, 
+       mandatory = true,
+       help = CliStrings.EXPORT_SHARED_CONFIG__FILE__HELP)
+       String zipFileName,
+ 
+       @CliOption(key = { CliStrings.EXPORT_SHARED_CONFIG__DIR},
+       help = CliStrings.EXPORT_SHARED_CONFIG__DIR__HELP)
+       String dir
+       ) {
+     Result result;
+ 
+     InfoResultData infoData = ResultBuilder.createInfoResultData();
+     TabularResultData errorTable = ResultBuilder.createTabularResultData();
+     GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
+     Set<DistributedMember> locators = new HashSet<DistributedMember>(cache.getDistributionManager().getAllHostedLocatorsWithSharedConfiguration().keySet());
+     byte [] byteData;
+     boolean success = false;
+ 
+     if (!locators.isEmpty()) {
+       for (DistributedMember locator : locators) {
+         ResultCollector<?, ?> rc = CliUtil.executeFunction(exportSharedConfigurationFunction, null, locator);
+         @SuppressWarnings("unchecked")
+         List<CliFunctionResult> results = (List<CliFunctionResult>) rc.getResult();
+         CliFunctionResult functionResult = results.get(0);
+ 
+         if (functionResult.isSuccessful()) {
+           byteData = functionResult.getByteData();
+           infoData.addAsFile(zipFileName, byteData, InfoResultData.FILE_TYPE_BINARY, CliStrings.EXPORT_SHARED_CONFIG__DOWNLOAD__MSG, false);
+           success = true;
+           break;
+         } else {
+           errorTable.accumulate(CliStrings.LOCATOR_HEADER, functionResult.getMemberIdOrName());
+           errorTable.accumulate(CliStrings.ERROR__MSG__HEADER, functionResult.getMessage());
+         }
+       }
+       if (success) {
+         result = ResultBuilder.buildResult(infoData);
+       } else {
+         errorTable.setStatus(Result.Status.ERROR);
+         result = ResultBuilder.buildResult(errorTable);
+       }
+     } else {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.SHARED_CONFIGURATION_NO_LOCATORS_WITH_SHARED_CONFIGURATION);
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = { CliStrings.IMPORT_SHARED_CONFIG }, help = CliStrings.IMPORT_SHARED_CONFIG__HELP)
+   @CliMetaData(interceptor = "com.gemstone.gemfire.management.internal.cli.commands.ExportImportSharedConfigurationCommands$ImportInterceptor", writesToSharedConfiguration=true, relatedTopic = {CliStrings.TOPIC_GEMFIRE_CONFIG})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.IMPORT_CONFIG)
+   @SuppressWarnings("unchecked")
+   public Result importSharedConfig(
+       @CliOption(key = { CliStrings.IMPORT_SHARED_CONFIG__ZIP},
+       mandatory = true,
+       help = CliStrings.IMPORT_SHARED_CONFIG__ZIP__HELP)
+       String zip) {
+ 
+     GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
+ 
+     if (!CliUtil.getAllNormalMembers(cache).isEmpty()) {
+       return ResultBuilder.createGemFireErrorResult(CliStrings.IMPORT_SHARED_CONFIG__CANNOT__IMPORT__MSG);
+     }
+ 
+     Set<DistributedMember> locators = new HashSet<DistributedMember>(cache.getDistributionManager().getAllHostedLocatorsWithSharedConfiguration().keySet());
+ 
+     if (locators.isEmpty()) {
+       return ResultBuilder.createGemFireErrorResult(CliStrings.NO_LOCATORS_WITH_SHARED_CONFIG);
+     }
+ 
+     Result result;
+     byte[][] shellBytesData = CommandExecutionContext.getBytesFromShell();
+     String[] names = CliUtil.bytesToNames(shellBytesData);
+     byte[][] bytes = CliUtil.bytesToData(shellBytesData);
+ 
+     String zipFileName = names[0];
+     byte[] zipBytes = bytes[0];
+ 
+     Object [] args = new Object[] {zipFileName, zipBytes};
+ 
+     InfoResultData infoData = ResultBuilder.createInfoResultData();
+     TabularResultData errorTable = ResultBuilder.createTabularResultData();
+ 
+     boolean success = false;
+     boolean copySuccess = false;
+ 
+     ResultCollector<?, ?> rc =  CliUtil.executeFunction(importSharedConfigurationFunction, args, locators);
+     List<CliFunctionResult> functionResults =  CliFunctionResult.cleanResults((List<CliFunctionResult>) rc.getResult());
+ 
+     for (CliFunctionResult functionResult : functionResults) {
+       if (!functionResult.isSuccessful()) {
+         errorTable.accumulate(CliStrings.LOCATOR_HEADER, functionResult.getMemberIdOrName());
+         errorTable.accumulate(CliStrings.ERROR__MSG__HEADER, functionResult.getMessage());
+       } else {
+         copySuccess = true;
+       }
+     }
+ 
+     if (!copySuccess ) {
+       errorTable.setStatus(Result.Status.ERROR);
+       return ResultBuilder.buildResult(errorTable);
+     }
+     
+     errorTable = ResultBuilder.createTabularResultData();
+ 
+     for (DistributedMember locator : locators) {
+       rc = CliUtil.executeFunction(loadSharedConfiguration, args, locator);
+       functionResults = (List<CliFunctionResult>) rc.getResult();
+       CliFunctionResult functionResult = functionResults.get(0);
+       if (functionResult.isSuccessful()) {
+         success = true;
+         infoData.addLine(functionResult.getMessage());
+         break; 
+       } else {
+         errorTable.accumulate(CliStrings.LOCATOR_HEADER, functionResult.getMemberIdOrName());
+         errorTable.accumulate(CliStrings.ERROR__MSG__HEADER, functionResult.getMessage());
+       }
+     }
+ 
+     if (success) {
+       result = ResultBuilder.buildResult(infoData);
+     } else {
+       errorTable.setStatus(Result.Status.ERROR);
+       result = ResultBuilder.buildResult(errorTable);
+     }
+     return result;
+   }
+ 
+ 
+   @CliAvailabilityIndicator({CliStrings.EXPORT_SHARED_CONFIG, CliStrings.IMPORT_SHARED_CONFIG})
+   public boolean sharedConfigCommandsAvailable() {
+     boolean isAvailable = true; // always available on server
+     if (CliUtil.isGfshVM()) { // in gfsh check if connected
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;
+   }
+ 
+   /**
+    * Interceptor used by gfsh to intercept execution of export shared config command at "shell".
+    */
+   public static class ExportInterceptor extends AbstractCliAroundInterceptor {
+     private String saveDirString;
+ 
+     @Override
+     public Result preExecution(GfshParseResult parseResult) {
+       Map<String, String> paramValueMap = parseResult.getParamValueStrings();
+       String zip = paramValueMap.get(CliStrings.EXPORT_SHARED_CONFIG__FILE);
+       
+       if (!zip.endsWith(".zip")) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.INVALID_FILE_EXTENTION, ".zip"));
+       }
+       return ResultBuilder.createInfoResult("OK");
+     }
+ 
+     @Override
+     public Result postExecution(GfshParseResult parseResult, Result commandResult) {
+       if (commandResult.hasIncomingFiles()) {
+         try {
+           Map<String, String> paramValueMap = parseResult.getParamValueStrings();
+           String dir = paramValueMap.get(CliStrings.EXPORT_SHARED_CONFIG__DIR);
+           dir = (dir == null) ? null : dir.trim();
+ 
+           File saveDirFile = new File(".");
+           
+           if (dir != null && !dir.isEmpty()) {
+             saveDirFile = new File(dir);
+             if (saveDirFile.exists()) {
+               if (!saveDirFile.isDirectory())
+                 return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.EXPORT_SHARED_CONFIG__MSG__NOT_A_DIRECTORY, dir));
+             } else if (!saveDirFile.mkdirs()) {
+               return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.EXPORT_SHARED_CONFIG__MSG__CANNOT_CREATE_DIR, dir));
+             }
+           }
+           try {
+             if (!saveDirFile.canWrite()) {
+               return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.EXPORT_SHARED_CONFIG__MSG__NOT_WRITEABLE, saveDirFile
+                   .getCanonicalPath()));
+             }
+           } catch (IOException ioex) {
+           }
+           saveDirString = saveDirFile.getAbsolutePath();
+           commandResult.saveIncomingFiles(saveDirString);
+           return commandResult;
+         } catch (IOException ioex) {
+           return ResultBuilder.createShellClientErrorResult(CliStrings.EXPORT_SHARED_CONFIG__UNABLE__TO__EXPORT__CONFIG);
+         }
+       }
+       return null;
+     }
+   }
+ 
+ 
+   public static class ImportInterceptor extends AbstractCliAroundInterceptor {
+ 
+     public Result preExecution(GfshParseResult parseResult) {
+       Map<String, String> paramValueMap = parseResult.getParamValueStrings();
+ 
+       String zip = paramValueMap.get(CliStrings.IMPORT_SHARED_CONFIG__ZIP);
+ 
+       zip = StringUtils.trim(zip);
+ 
+       if (zip == null) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.IMPORT_SHARED_CONFIG__PROVIDE__ZIP, CliStrings.IMPORT_SHARED_CONFIG__ZIP));
+       } 
+       if (!zip.endsWith(CliStrings.ZIP_FILE_EXTENSION)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.INVALID_FILE_EXTENTION, CliStrings.ZIP_FILE_EXTENSION));
+       }
+ 
+       FileResult fileResult;
+ 
+       try {
+         fileResult = new FileResult(new String[] { zip });
+       } catch (FileNotFoundException fnfex) {
+         return ResultBuilder.createUserErrorResult("'" + zip + "' not found.");
+       } catch (IOException ioex) {
+         return ResultBuilder.createGemFireErrorResult(ioex.getClass().getName() + ": "
+             + ioex.getMessage());
+       }
+ 
+       return fileResult;
+     }
+     @Override
+     public Result postExecution(GfshParseResult parseResult, Result commandResult) {
+       return null;
+     }
+   }
+   
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommands.java
index 0000000,7930e1e..7e9a128
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommands.java
@@@ -1,0 -1,642 +1,648 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Map.Entry;
+ import java.util.Set;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.SystemFailure;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.execute.Execution;
+ import com.gemstone.gemfire.cache.execute.Function;
+ import com.gemstone.gemfire.cache.execute.FunctionException;
+ import com.gemstone.gemfire.cache.execute.FunctionService;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.internal.ClassPathLoader;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.management.DistributedRegionMXBean;
+ import com.gemstone.gemfire.management.ManagementService;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.cli.Result.Status;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.cli.AbstractCliAroundInterceptor;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.GfshParseResult;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.ListFunctionFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.UnregisterFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.UserFunctionExecution;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * @author David Hoots
+  * 
+  * @since 7.0
+  */
+ @SuppressWarnings("unused")
+ public class FunctionCommands implements CommandMarker {
+   private final ListFunctionFunction listFunctionFunction = new ListFunctionFunction();
+   
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+   
+   @CliCommand(value = CliStrings.EXECUTE_FUNCTION, help = CliStrings.EXECUTE_FUNCTION__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_FUNCTION })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.EXECUTE_FUNCTION)
+   public Result executeFunction(
+       //TODO: Add optioncontext for functionID
+       @CliOption(key = CliStrings.EXECUTE_FUNCTION__ID, 
+           mandatory = true, help = CliStrings.EXECUTE_FUNCTION__ID__HELP) String functionId,
+       @CliOption(key = CliStrings.EXECUTE_FUNCTION__ONGROUPS, 
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, 
+           optionContext = ConverterHint.MEMBERGROUP,
+           help = CliStrings.EXECUTE_FUNCTION__ONGROUPS__HELP) String[] onGroups,
+       @CliOption(key = CliStrings.EXECUTE_FUNCTION__ONMEMBER, 
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, 
+           optionContext = ConverterHint.MEMBERIDNAME,
+           help = CliStrings.EXECUTE_FUNCTION__ONMEMBER__HELP) String onMember,
+       @CliOption(key = CliStrings.EXECUTE_FUNCTION__ONREGION, 
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, 
+           optionContext = ConverterHint.REGIONPATH,
+           help = CliStrings.EXECUTE_FUNCTION__ONREGION__HELP) String onRegion,
+       @CliOption(key = CliStrings.EXECUTE_FUNCTION__ARGUMENTS, 
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, 
+           help = CliStrings.EXECUTE_FUNCTION__ARGUMENTS__HELP) String[] arguments,
+       @CliOption(key = CliStrings.EXECUTE_FUNCTION__RESULTCOLLECTOR, 
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, 
+           help = CliStrings.EXECUTE_FUNCTION__RESULTCOLLECTOR__HELP) String resultCollector,
+       @CliOption(key = CliStrings.EXECUTE_FUNCTION__FILTER, 
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, 
+           help = CliStrings.EXECUTE_FUNCTION__FILTER__HELP) String filterString) {
+ 
+     Result result = null;
+     CompositeResultData executeFunctionResultTable = ResultBuilder
+         .createCompositeResultData();
+     TabularResultData resultTable = executeFunctionResultTable.addSection().addTable(
+         "Table1");
+     String headerText = "Execution summary";
+     resultTable.setHeader(headerText);
+     ResultCollector resultCollectorInstance = null;
+     Function function;
+     Set<String> filters = new HashSet<String>();
+     Execution execution = null;
+     if (functionId != null){
+       functionId = functionId.trim();
+     }
+     if (onRegion != null){
+       onRegion = onRegion.trim();
+     }
+     if (onMember != null){
+       onMember = onMember.trim();
+     }
+     if (filterString != null){
+       filterString = filterString.trim();
+     }
+ 
+     try {
+       // validate otherwise return right away. no need to process anything
+       if (functionId == null || functionId.length() == 0) {
+         ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+             .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+                 CliStrings.EXECUTE_FUNCTION__MSG__MISSING_FUNCTIONID);
+         result = ResultBuilder.buildResult(errorResultData);
+         return result;
+       }
+ 
+       if (onRegion != null && onMember != null && onGroups != null) {
+         ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+             .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+                 CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS);
+         result = ResultBuilder.buildResult(errorResultData);
+         return result;
+       } else if (onRegion != null && onMember != null) {
+         ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+             .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+                 CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS);
+         result = ResultBuilder.buildResult(errorResultData);
+         return result;
+       } else if (onMember != null && onGroups != null) {
+         ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+             .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+                 CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS);
+         result = ResultBuilder.buildResult(errorResultData);
+         return result;
+       } else if (onRegion != null && onGroups != null) {
+         ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+             .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+                 CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS);
+         result = ResultBuilder.buildResult(errorResultData);
+         return result;
+       } else if (onRegion != null && onMember != null && onGroups != null) {
+         ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+             .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+                 CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS);
+         result = ResultBuilder.buildResult(errorResultData);
+         return result;
+       }else if ( (onRegion == null || onRegion.length() == 0) && (filterString != null ) ){
+         ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+         .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+             CliStrings.EXECUTE_FUNCTION__MSG__MEMBER_SHOULD_NOT_HAVE_FILTER_FOR_EXECUTION);
+         result = ResultBuilder.buildResult(errorResultData);
+         return result;
+       }
+       
+       Cache cache = CacheFactory.getAnyInstance();   
+      
+ 
+       if (resultCollector != null) {
+         resultCollectorInstance = (ResultCollector) ClassPathLoader.getLatest().forName(resultCollector).newInstance();        
+       }
+ 
+       if (filterString != null && filterString.length() > 0) {
+         filters.add(filterString);
+       }
+ 
+       if (onRegion == null && onMember == null && onGroups == null) {
+         // run function on all the members excluding locators bug#46113
+         //if user wish to execute on locator then he can choose --member or --group option
+         Set<DistributedMember> dsMembers = CliUtil.getAllNormalMembers(cache);
+         if (dsMembers.size() > 0) {          
+           function = new UserFunctionExecution();
+           LogWrapper.getInstance().info(
+               CliStrings.format(
+                   CliStrings.EXECUTE_FUNCTION__MSG__EXECUTING_0_ON_ENTIRE_DS,
+                   functionId));
+           for (DistributedMember member : dsMembers) {
+             executeAndGetResults(functionId, filterString, resultCollector,
+                 arguments, cache, member, resultTable, onRegion);
+           }
+           return ResultBuilder.buildResult(resultTable);
+         } else {
+           return ResultBuilder
+               .createUserErrorResult(CliStrings.EXECUTE_FUNCTION__MSG__DS_HAS_NO_MEMBERS);
+         }
+       } else if (onRegion != null && onRegion.length() > 0) {
+         if (cache.getRegion(onRegion) == null) {
+           // find a member where region is present
+           DistributedRegionMXBean bean = ManagementService
+               .getManagementService(GemFireCacheImpl.getInstance())
+               .getDistributedRegionMXBean(onRegion);
+           if (bean == null) {
+             bean = ManagementService.getManagementService(
+                 GemFireCacheImpl.getInstance()).getDistributedRegionMXBean(Region.SEPARATOR + onRegion);
+ 
+             if (bean == null) {
+               return ResultBuilder.createGemFireErrorResult(CliStrings.format(
+                   CliStrings.EXECUTE_FUNCTION__MSG__MXBEAN_0_FOR_NOT_FOUND,
+                   onRegion));
+             }
+           }
+ 
+           DistributedMember member = null;
+           String[] membersName = bean.getMembers();
+           Set<DistributedMember> dsMembers = CliUtil.getAllMembers(cache);
+           Iterator it = dsMembers.iterator();
+           boolean matchFound = false;
+ 
+           if (membersName.length > 0) {
+             while (it.hasNext() && matchFound == false) {
+               DistributedMember dsmember = (DistributedMember) it.next();
+               for (String memberName : membersName) {
+                 if (MBeanJMXAdapter.getMemberNameOrId(dsmember).equals(
+                     memberName)) {
+                   member = dsmember;
+                   matchFound = true;
+                   break;
+                 }
+               }
+             }
+           }
+           if (matchFound == true) {
+             executeAndGetResults(functionId, filterString, resultCollector,
+                 arguments, cache, member, resultTable, onRegion);
+             return ResultBuilder.buildResult(resultTable);
+           } else {
+             return ResultBuilder.createGemFireErrorResult(CliStrings.format(
+                 CliStrings.EXECUTE_FUNCTION__MSG__NO_ASSOCIATED_MEMBER_REGION,
+                 " " + onRegion));
+           }
+         } else {
+           execution = FunctionService.onRegion(cache.getRegion(onRegion));
+           if (execution != null) {
+             if (resultCollectorInstance != null) {
+               execution = execution.withCollector(resultCollectorInstance);
+             }
+             if (filters != null && filters.size() > 0) {
+               execution = execution.withFilter(filters);
+             }
+             if (arguments != null && arguments.length > 0) {
+               execution = execution.withArgs(arguments);
+             }
+ 
+             try {
+               List<Object> results = (List<Object>) execution.execute(
+                   functionId).getResult();
+               if (results.size() > 0) {
+                 StringBuilder strResult = new StringBuilder();
+                 for (Object obj : results) {
+                   strResult.append(obj);
+                 }
+                 toTabularResultData(resultTable, cache.getDistributedSystem()
+                     .getDistributedMember().getId(), strResult.toString());
+               }
+               return ResultBuilder.buildResult(resultTable);
+             } catch (FunctionException e) {
+               return ResultBuilder
+                   .createGemFireErrorResult(CliStrings
+                       .format(
+                           CliStrings.EXECUTE_FUNCTION__MSG__ERROR_IN_EXECUTING_0_ON_REGION_1_DETAILS_2,
+                           functionId, onRegion, e.getMessage()));
+             }
+           } else {
+             return ResultBuilder
+                 .createGemFireErrorResult(CliStrings
+                     .format(
+                         CliStrings.EXECUTE_FUNCTION__MSG__ERROR_IN_EXECUTING_0_ON_REGION_1_DETAILS_2,
+                         functionId,
+                         onRegion,
+                         CliStrings.EXECUTE_FUNCTION__MSG__ERROR_IN_RETRIEVING_EXECUTOR));
+           }
+         }
+       } else if (onGroups != null) {
+         // execute on group members
+         Set<DistributedMember> dsMembers = new HashSet<DistributedMember>();
+         for(String grp : onGroups){
+           dsMembers.addAll(cache.getDistributedSystem().getGroupMembers(grp));
+         }
+         
+         StringBuilder successMessage = new StringBuilder();
+         if (dsMembers.size() > 0) {
+           for (DistributedMember member : dsMembers) {
+             executeAndGetResults(functionId, filterString, resultCollector,
+                 arguments, cache, member, resultTable, onRegion);
+           }
+           return ResultBuilder.buildResult(resultTable);
+         } else {
+           StringBuilder grps = new StringBuilder();
+           for(String grp : onGroups){
+             grps.append(grp);
+             grps.append(", ");
+           }
+           return ResultBuilder.createUserErrorResult(CliStrings.format(
+               CliStrings.EXECUTE_FUNCTION__MSG__GROUPS_0_HAS_NO_MEMBERS, grps.toString().substring(0,grps.toString().length() -1)));
+         }
+       } else if (onMember != null && onMember.length() > 0) {
+         DistributedMember member = CliUtil
+             .getDistributedMemberByNameOrId(onMember); // fix for bug 45658
+         if (member != null) {
+           executeAndGetResults(functionId, filterString, resultCollector,
+               arguments, cache, member, resultTable, onRegion);
+         } else {
+           toTabularResultData(resultTable, onMember, CliStrings
+               .format(CliStrings.EXECUTE_FUNCTION__MSG__NO_ASSOCIATED_MEMBER
+                   + " " + onMember));
+         }
+         return ResultBuilder.buildResult(resultTable);
+       }
+     } catch (InstantiationException e) {
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+           .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+           .addLine(e.getMessage());
+       result = ResultBuilder.buildResult(errorResultData);
+       return result;
+     } catch (IllegalAccessException e) {
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+           .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+           .addLine(e.getMessage());
+       result = ResultBuilder.buildResult(errorResultData);
+       return result;
+     } catch (IllegalArgumentException e) {
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+           .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+           .addLine(e.getMessage());
+       result = ResultBuilder.buildResult(errorResultData);
+       return result;
+     } catch (SecurityException e) {
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+           .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+           .addLine(e.getMessage());
+       result = ResultBuilder.buildResult(errorResultData);
+       return result;
+     } catch (Exception e) {
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+       .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+       .addLine(e.getMessage());
+       result = ResultBuilder.buildResult(errorResultData);
+       return result;
+     }
+ 
+     return result;
+   }
+ 
+   DistributedMember getMember(Cache cache, String memberNameOrId) {
+     DistributedMember member = null;
+     Set<DistributedMember> dsMembers = CliUtil.getAllMembers(cache) ;
+     Iterator<DistributedMember> it = dsMembers.iterator();
+     while (it.hasNext()) {
+       DistributedMember tempMember = (DistributedMember) it.next();
+       if (memberNameOrId.equals(tempMember.getId())
+           || memberNameOrId.equals(tempMember.getName())) {
+         return tempMember;
+       }
+     }
+     return member;
+   }
+ 
+   void executeAndGetResults(String functionId, String filterString,
+       String resultCollector, String[] arguments, Cache cache,
+       DistributedMember member, TabularResultData resultTable, String onRegion) {
+     StringBuilder resultMessege = new StringBuilder();
+     try {      
+       Function function = new UserFunctionExecution();
+       Object[] args = new Object[5];
+       args[0] = functionId;
+       if(filterString != null){
+         args[1] = filterString;
+       }
+       if (resultCollector != null) {
+         args[2] = resultCollector;
+       }
+       if (arguments != null && arguments.length > 0) {        
+         args[3] = new String();
+         for (String str : arguments) {
+           // send via CSV separated value format          
+           if(str != null){
+             args[3] = args[3] + str + ",";            
+           }
+         }
+       }
+       args[4] = onRegion;
+ 
+       Execution execution = FunctionService.onMember(member).withArgs(args);
+       if (execution != null) {
+         List<Object> results = (List<Object>) execution.execute(function)
+             .getResult();
+         if (results != null) {
+           for (Object resultObj : results) {
+             if (resultObj != null) {
+               if (resultObj instanceof String) {
+                 resultMessege.append(((String) resultObj));
+               } else if (resultObj instanceof Exception) {
+                 resultMessege.append(((Exception)resultObj).getMessage());
+               } else {
+                 resultMessege.append(resultObj);
+               }
+             }
+           }
+         }
+         toTabularResultData(resultTable, member.getId(), resultMessege
+             .toString());
+       }else{
+         toTabularResultData(resultTable, member.getId(), CliStrings.EXECUTE_FUNCTION__MSG__ERROR_IN_RETRIEVING_EXECUTOR);        
+       }
+     } catch (FunctionException e) {
+       resultMessege.append(CliStrings.format(
+           CliStrings.EXECUTE_FUNCTION__MSG__COULD_NOT_EXECUTE_FUNCTION_0_ON_MEMBER_1_ERROR_2, functionId,
+           member.getId(), e.getMessage()));
+       toTabularResultData(resultTable, member.getId(), resultMessege
+           .toString());
+     } catch (Exception e) {
+       resultMessege.append(CliStrings.format(
+           CliStrings.EXECUTE_FUNCTION__MSG__COULD_NOT_EXECUTE_FUNCTION_0_ON_MEMBER_1_ERROR_2, functionId,
+           member.getId(), e.getMessage()));
+       toTabularResultData(resultTable, member.getId(), resultMessege
+           .toString());
+     }
+   }
+ 
+   protected void toTabularResultData(TabularResultData table,
+       String memberId, String memberResult) {
+     String newLine = System.getProperty("line.separator");
+     table.accumulate("Member ID/Name", memberId);
+     table.accumulate("Function Execution Result", memberResult);
+   }
+   
+   @CliCommand(value = CliStrings.DESTROY_FUNCTION, help = CliStrings.DESTROY_FUNCTION__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_FUNCTION } ,
 -      interceptor = "com.gemstone.gemfire.management.internal.cli.commands.FunctionCommands$Interceptor")  
++      interceptor = "com.gemstone.gemfire.management.internal.cli.commands.FunctionCommands$Interceptor")
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.DESTROY_FUNCTION)
+   //TODO: Add optioncontext for functionId
+   public Result destroyFunction(
+       @CliOption(key = CliStrings.DESTROY_FUNCTION__ID, 
+                  mandatory = true, help = CliStrings.DESTROY_FUNCTION__HELP) String functionId,
+       @CliOption(key = CliStrings.DESTROY_FUNCTION__ONGROUPS, 
+                  unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                  optionContext = ConverterHint.MEMBERGROUP,
+                  help = CliStrings.DESTROY_FUNCTION__ONGROUPS__HELP) String[] groups,
+       @CliOption(key = CliStrings.DESTROY_FUNCTION__ONMEMBER, 
+                  unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                  optionContext = ConverterHint.MEMBERIDNAME,
+                  help = CliStrings.DESTROY_FUNCTION__ONMEMBER__HELP) String memberId) {
+     Result result = null;
+     try {    
+       Cache cache = CacheFactory.getAnyInstance();
+       Set<DistributedMember> dsMembers = new HashSet<DistributedMember>();
+       if(groups != null && memberId != null){
+         return ResultBuilder.createUserErrorResult(CliStrings.DESTROY_FUNCTION__MSG__PROVIDE_OPTION);
+       }else if (groups != null && groups.length > 0 ) {   
+         //execute on group members
+         for(String grp : groups){
+           dsMembers.addAll(cache.getDistributedSystem().getGroupMembers(grp));
+         }
+         @SuppressWarnings("unchecked")
+         Result results = executeFunction(cache,  dsMembers,  functionId);
+         return results;
+       }else if (memberId != null){
+         //execute on member
+         dsMembers.add(getMember(cache , memberId));
+          @SuppressWarnings("unchecked")
+         Result results =  executeFunction(cache,  dsMembers,  functionId);   
+         return results;           
+       }  
+       else{
+         //no option provided. 
+         @SuppressWarnings("unchecked")
+         Result results =  executeFunction(cache,  cache.getMembers(),  functionId);        
+         return results;   
+       }
+     } catch (Exception e) {
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+           .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+               e.getMessage());
+       result = ResultBuilder.buildResult(errorResultData);
+       return result;
+     }
+ 
+   }
+   /**
+    * Interceptor used by gfsh to intercept execution of destroy.
+    */
+   public static class Interceptor extends AbstractCliAroundInterceptor {
+     @Override
+     public Result preExecution(GfshParseResult parseResult) {
+       Map<String, String> paramValueMap = parseResult.getParamValueStrings();
+       Set< Entry<String, String> > setEnvMap = paramValueMap.entrySet();    
+       String onGroup = paramValueMap.get(CliStrings.DESTROY_FUNCTION__ONGROUPS);
+       String onMember = paramValueMap.get(CliStrings.DESTROY_FUNCTION__ONMEMBER);
+       
+       if ((onGroup == null && onMember == null ) ){      
+         Response response = readYesNo("Do you really want to destroy "+paramValueMap.get(CliStrings.DESTROY_FUNCTION__ID)+ " on entire DS?", Response.NO);
+         if (response == Response.NO) {          
+           return ResultBuilder.createShellClientAbortOperationResult("Aborted destroy of " +paramValueMap.get(CliStrings.DESTROY_FUNCTION__ID) );
+         }else{          
+           return ResultBuilder.createInfoResult("Destroying " +paramValueMap.get(CliStrings.DESTROY_FUNCTION__ID) );
+         }
+       }else{        
+         return ResultBuilder.createInfoResult("Destroying " +paramValueMap.get(CliStrings.DESTROY_FUNCTION__ID) );
+       }     
+     }
+ 
+     @Override
+     public Result postExecution(GfshParseResult parseResult, Result commandResult) {     
+       return commandResult;
+     }
+   }
+   
+   Result executeFunction(Cache cache, Set<DistributedMember> DsMembers, String functionId){
+     //unregister on a set of of members
+     Function unregisterFunction = new UnregisterFunction();
+     FunctionService.registerFunction(unregisterFunction);
+     List resultList = null;
+     
+     if(DsMembers.isEmpty()){      
+      return  ResultBuilder.createInfoResult("No members for execution");
+     }
+     Object[] obj = new Object[1];
+     obj[0] = functionId;
+     
+     Execution execution = FunctionService.onMembers(DsMembers).withArgs(obj);
+ 
+     if (execution == null) {
+       cache.getLogger().error("executeUnregister execution is null") ;
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+           .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+               CliStrings.DESTROY_FUNCTION__MSG__CANNOT_EXECUTE);
+       return (ResultBuilder.buildResult(errorResultData));
+     }
+     try {
+       resultList = (ArrayList) execution.execute(unregisterFunction)
+           .getResult();
+     } catch (FunctionException ex) {     
+       ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+           .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+               ex.getMessage());
+       return (ResultBuilder.buildResult(errorResultData));
+     }
+     String resultStr = ((String) resultList.get(0));    
+     if (resultStr.equals("Succeeded in unregistering")){
+       StringBuilder members = new StringBuilder();
+       for(DistributedMember member : DsMembers){
+         members.append(member.getId());
+         members.append(",");
+       }
+       return ResultBuilder.createInfoResult("Destroyed " + functionId
+         + " Successfully on " + members.toString().substring(0,members.toString().length() -1));       
+     }else{
+       return ResultBuilder.createInfoResult("Failed in unregistering");
+     }
+   }     
+   
+   @CliCommand(value = CliStrings.LIST_FUNCTION, help = CliStrings.LIST_FUNCTION__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_FUNCTION })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result listFunction(
+       @CliOption(key = CliStrings.LIST_FUNCTION__MATCHES, 
+                  help = CliStrings.LIST_FUNCTION__MATCHES__HELP)String matches,
+       @CliOption(key = CliStrings.LIST_FUNCTION__GROUP, 
+                  optionContext = ConverterHint.MEMBERGROUP,
+                  help = CliStrings.LIST_FUNCTION__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",") String groups,
+       @CliOption(key = CliStrings.LIST_FUNCTION__MEMBER, 
+                  optionContext = ConverterHint.MEMBERIDNAME,
+                  help = CliStrings.LIST_FUNCTION__MEMBER__HELP)
+       @CliMetaData (valueSeparator = ",") String members) {
+     TabularResultData tabularData = ResultBuilder.createTabularResultData();
+     boolean accumulatedData = false;
+ 
+     Cache cache = CacheFactory.getAnyInstance();
+ 
+     Set<DistributedMember> targetMembers;
+     try {
+       targetMembers = CliUtil.findAllMatchingMembers(groups, members);
+     } catch (CommandResultException crex) {
+       return crex.getResult();
+     }
+     
+     try {
+       ResultCollector<?, ?> rc = CliUtil.executeFunction(this.listFunctionFunction, new Object[] { matches }, targetMembers);
+       List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) rc.getResult());
+       
+       for (CliFunctionResult result : results) {
+         if (result.getThrowable() != null) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Function", "<ERROR: " + result.getThrowable().getMessage() + ">");
+           accumulatedData = true;
+           tabularData.setStatus(Status.ERROR);
+         } else if (result.isSuccessful()) {
+           String[] strings = (String[]) result.getSerializables();
+           Arrays.sort(strings);
+           for (int i = 0; i < strings.length; i++) {
+             tabularData.accumulate("Member", result.getMemberIdOrName());
+             tabularData.accumulate("Function", strings[i]);
+             accumulatedData = true;
+           }
+         }
+       }
+ 
+       if (!accumulatedData) {
+         return ResultBuilder.createInfoResult(CliStrings.LIST_FUNCTION__NO_FUNCTIONS_FOUND_ERROR_MESSAGE);
+       }
+       return ResultBuilder.buildResult(tabularData);
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult("Exception while attempting to list functions: " + th.getMessage());
+     }
+   }
+   
+   @CliAvailabilityIndicator({CliStrings.EXECUTE_FUNCTION, CliStrings.DESTROY_FUNCTION, CliStrings.LIST_FUNCTION})  
+   public boolean functionCommandsAvailable() {
+     boolean isAvailable = true; //always available on server
+     if (CliUtil.isGfshVM()) { //in gfsh check if connected
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;  
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/GfshHelpCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/GfshHelpCommands.java
index 0000000,24fd117..d946ffb
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/GfshHelpCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/GfshHelpCommands.java
@@@ -1,0 -1,106 +1,111 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.util.Map;
+ import java.util.Map.Entry;
+ import java.util.Set;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliCommand;
+ 
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.CommandManager;
+ import com.gemstone.gemfire.management.internal.cli.GfshParser;
+ import com.gemstone.gemfire.management.internal.cli.annotation.CliArgument;
+ import com.gemstone.gemfire.management.internal.cli.help.CliTopic;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData.SectionResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * 
+  * @author Nikhil Jadhav
+  * @author Abhishek Chaudhari
+  * 
+  * @since 7.0
+  */
+ public class GfshHelpCommands implements CommandMarker{
+ 
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+   
+   @CliCommand(value = CliStrings.HELP, help = CliStrings.HELP__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GEMFIRE_HELP})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result obtainHelp(
+       @CliArgument(name = CliStrings.HELP__COMMAND, 
+                  argumentContext = CliStrings.PARAM_CONTEXT_HELP, 
+                  help = CliStrings.HELP__COMMAND__HELP) 
+                  String commandString) {
+     return ResultBuilder.createInfoResult(getGfsh().obtainHelp(commandString, null));
+   }
+   
+   
+   
+   @CliCommand(value = CliStrings.HINT, help = CliStrings.HINT__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GEMFIRE_HELP})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result hint(
+       @CliArgument(name = CliStrings.HINT__TOPICNAME, 
+                 argumentContext = ConverterHint.HINTTOPIC, 
+                 help = CliStrings.HINT__TOPICNAME) 
+                 String topicName) {
+     Result result = null;
+     CommandManager commandManager = CommandManager.getExisting();
+     if (commandManager == null) {
+       result= ResultBuilder.createShellClientErrorResult(CliStrings.HINT__MSG__SHELL_NOT_INITIALIZED);
+     } else { 
+       StringBuilder builder = new StringBuilder();
+       if (topicName == null) {
+         builder.append(CliStrings.HINT__MSG__TOPICS_AVAILABLE).append(GfshParser.LINE_SEPARATOR);
+         Set<String> topicNameSet = commandManager.getTopicNames();
+         for (String topic : topicNameSet) {
+           builder.append(topic).append(GfshParser.LINE_SEPARATOR);
+         }
+         result = ResultBuilder.createInfoResult(builder.toString());
+       } else {
+         CliTopic topic = commandManager.getTopic(topicName);
+         if (topic == null) {
+           result = ResultBuilder.createInfoResult(CliStrings.format(CliStrings.HINT__MSG__UNKNOWN_TOPIC, topicName));
+         } else {
+           CompositeResultData compositeResultData = ResultBuilder.createCompositeResultData();
+           SectionResultData commandHelpSection = compositeResultData.addSection("Commands And Help");
+           compositeResultData.setHeader(topic.getOneLinerDescription());
+           Map<String, String> commandsNameHelp = topic.getCommandsNameHelp();
+           Set<Entry<String, String>> entries = commandsNameHelp.entrySet();
+           
+           for (Entry<String, String> entry : entries) {
+             commandHelpSection.addData(entry.getKey(), entry.getValue());
+           }
+ 
+           result = ResultBuilder.buildResult(compositeResultData);
+         }
+       }
+     }
+     
+     return result;
+   }
+ }


[06/50] [abbrv] incubator-geode git commit: GEODE-907: Fixing rebase merge conflicts

Posted by je...@apache.org.
GEODE-907: Fixing rebase merge conflicts


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/e623d8e1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/e623d8e1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/e623d8e1

Branch: refs/heads/feature/GEODE-17
Commit: e623d8e12e33b2850d3cb0b0cdb92782d28fc515
Parents: b4d4ceb
Author: Jens Deppe <jd...@pivotal.io>
Authored: Thu Feb 18 19:49:36 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Feb 23 14:04:50 2016 -0800

----------------------------------------------------------------------
 .../gemfire/tools/pulse/internal/data/Cluster.java    | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e623d8e1/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
index 471cc01..60b353e 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
@@ -19,10 +19,9 @@
 
 package com.vmware.gemfire.tools.pulse.internal.data;
 
-
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import org.apache.commons.collections.buffer.CircularFifoBuffer;
@@ -54,13 +53,6 @@ import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.apache.commons.collections.buffer.CircularFifoBuffer;
-
-import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
-
 /**
  * Class Cluster This class is the Data Model for the data used for the Pulse
  * Web UI.


[13/50] [abbrv] incubator-geode git commit: GEODE-448: Replace Tomcat with Jetty as test container

Posted by je...@apache.org.
GEODE-448: Replace Tomcat with Jetty as test container


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/177f12c7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/177f12c7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/177f12c7

Branch: refs/heads/feature/GEODE-17
Commit: 177f12c71e2383200ddc8ff4f6659202860b2607
Parents: 9028aa8
Author: Jens Deppe <jd...@pivotal.io>
Authored: Mon Feb 22 07:53:48 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Feb 23 14:45:31 2016 -0800

----------------------------------------------------------------------
 geode-pulse/build.gradle                        |  4 +-
 .../tools/pulse/testbed/driver/PulseUITest.java | 93 +++++++++----------
 .../pulse/testbed/driver/TomcatHelper.java      | 77 ---------------
 .../gemfire/tools/pulse/tests/PulseTest.java    | 98 ++++++++------------
 .../gemfire/tools/pulse/tests/TomcatHelper.java | 97 -------------------
 5 files changed, 86 insertions(+), 283 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/177f12c7/geode-pulse/build.gradle
----------------------------------------------------------------------
diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle
index 4879345..0cd1ef4 100755
--- a/geode-pulse/build.gradle
+++ b/geode-pulse/build.gradle
@@ -46,10 +46,8 @@ dependencies {
   provided 'com.google.guava:guava:' + project.'guava.version'
 
   testCompile project(':geode-junit')
+  testCompile project(':geode-core')
 
-  testCompile 'org.apache.tomcat.embed:tomcat-embed-core:' + project.'tomcat7.version'
-  testCompile 'org.apache.tomcat.embed:tomcat-embed-jasper:' + project.'tomcat7.version'
-  testCompile 'org.apache.tomcat.embed:tomcat-embed-logging-juli:' + project.'tomcat7.version'
   testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:' + project.'selenium.version'
   testCompile 'org.seleniumhq.selenium:selenium-api:' + project.'selenium.version'
   testCompile 'org.seleniumhq.selenium:selenium-remote-driver:' + project.'selenium.version'

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/177f12c7/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java
index 53fc3bd..452a536 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java
@@ -16,16 +16,19 @@
  */
 package com.vmware.gemfire.tools.pulse.testbed.driver;
 
-import java.net.InetAddress;
-import java.util.List;
-
+import com.gemstone.gemfire.management.internal.JettyHelper;
 import com.gemstone.gemfire.test.junit.categories.UITest;
-import com.vmware.gemfire.tools.pulse.tests.PulseTest;
+import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Locator;
+import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Peer;
+import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Region;
+import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Server;
+import com.vmware.gemfire.tools.pulse.testbed.TestBed;
 import junit.framework.Assert;
-
-import org.apache.catalina.LifecycleException;
-import org.apache.catalina.startup.Tomcat;
-import org.junit.*;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
@@ -34,11 +37,10 @@ import org.openqa.selenium.firefox.FirefoxDriver;
 import org.openqa.selenium.support.ui.ExpectedCondition;
 import org.openqa.selenium.support.ui.WebDriverWait;
 
-import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Locator;
-import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Peer;
-import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Region;
-import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Server;
-import com.vmware.gemfire.tools.pulse.testbed.TestBed;
+import java.net.InetAddress;
+import java.util.List;
+
+import static com.vmware.gemfire.tools.pulse.tests.PulseTest.getPulseWarPath;
 
 /**
  * @author Sushant Rawal
@@ -53,6 +55,7 @@ public class PulseUITest {
   private static TestBed testBed;
   private static String pulseURL;
   private static String path;
+  private static org.eclipse.jetty.server.Server jetty = null;
 
   private static final String userName = "admin";
   private static final String pasword = "admin";
@@ -62,25 +65,37 @@ public class PulseUITest {
   private static final String CLUSTER_VIEW_SERVERS_ID = "clusterServersText";
   private static final String CLUSTER_VIEW_LOCATORS_ID = "clusterLocatorsText";
   private static final String CLUSTER_VIEW_REGIONS_ID = "clusterTotalRegionsText";
-  
-  private static Tomcat tomcat = null;
-  
+
   @BeforeClass
-  public static void setUpTomcat() throws Exception{
-      String host = InetAddress.getLocalHost().getHostAddress();
-      int port = 8080;      
-      String context = "/pulse";
-      path = PulseTest.getPulseWarPath();
-      //System.setProperty("pulse.propMockDataUpdaterClass", "com.vmware.gemfire.tools.pulse.testbed.PropMockDataUpdater");      
-      tomcat = TomcatHelper.startTomcat(host, port, context, path);
-      pulseURL = "http://" + host  + ":" + port + context;
-      Thread.sleep(1000); //wait till tomcat settles down
-      driver = new FirefoxDriver();
-      driver.manage().window().maximize();//required to make all elements visible
+  public static void setUpJetty() throws Exception {
+    String host = InetAddress.getLocalHost().getHostAddress();
+    int port = 8080;
+    String context = "/pulse";
+    path = getPulseWarPath();
+    //System.setProperty("pulse.propMockDataUpdaterClass", "com.vmware.gemfire.tools.pulse.testbed.PropMockDataUpdater");
 
-      Thread.sleep(5000); //wait till pulse starts polling threads...
-      testBed = new TestBed();
-      loginToPulse(driver, userName, pasword);
+    jetty = JettyHelper.initJetty(host, port, false, false, null, null, null);
+    JettyHelper.addWebApplication(jetty, context, getPulseWarPath());
+    jetty.start();
+
+    pulseURL = "http://" + host + ":" + port + context;
+    Thread.sleep(1000); //wait till tomcat settles down
+    driver = new FirefoxDriver();
+    driver.manage().window().maximize();//required to make all elements visible
+
+    Thread.sleep(5000); //wait till pulse starts polling threads...
+    testBed = new TestBed();
+    loginToPulse(driver, userName, pasword);
+  }
+
+  @AfterClass
+  public static void stopJetty() throws Exception {
+    jetty.stop();
+  }
+
+  @After
+  public void closeSession() {
+    driver.close();
   }
 
   private static void loginToPulse(WebDriver driver, String userName,String password){
@@ -263,22 +278,4 @@ public class PulseUITest {
         });
     Assert.assertNotNull(memberNameOnPulsePage);    
   }  
-
-  @After
-  public void closeSession() {      
-    driver.close();
-  }
-  
-  @AfterClass
-  public static void stopTomcat(){
-    try {
-      if(tomcat!=null){
-        tomcat.stop();
-        tomcat.destroy();
-      }
-    } catch (LifecycleException e) {     
-      e.printStackTrace();
-    }
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/177f12c7/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/TomcatHelper.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/TomcatHelper.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/TomcatHelper.java
deleted file mode 100644
index 860698f..0000000
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/TomcatHelper.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package com.vmware.gemfire.tools.pulse.testbed.driver;
-
-import java.net.InetAddress;
-
-import org.apache.catalina.connector.Connector;
-import org.apache.catalina.core.StandardHost;
-import org.apache.catalina.startup.Tomcat;
-import org.apache.tomcat.util.IntrospectionUtils;
-
-public class TomcatHelper {
-  public static Tomcat startTomcat(String bindAddress, int port, String context, String path) throws Exception {
-
-    Tomcat tomcat = new Tomcat();
-
-    // Set up logging - first we're going to remove all existing handlers. Don't do this before Tomcat is
-    // instantiated otherwise there isn't anything to remove.
-    /*
-
-    Logger globalLogger = Logger.getLogger("");
-    for (Handler handler : globalLogger.getHandlers()) {
-      globalLogger.removeHandler(handler);
-    }
-
-    // Now let's add our handler
-    Handler gfHandler = new GemFireHandler((LogWriterImpl) log);
-    Logger logger = Logger.getLogger("");
-    logger.addHandler(gfHandler);
-    
-    */
-
-    // Set up for commons-logging which is used by Spring.
-    // This forces JCL to use the JDK logger otherwise it defaults to trying to use Log4J.
-    if (System.getProperty("org.apache.commons.logging.Log") == null) {
-      System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.Jdk14Logger");
-    }
-
-    if (bindAddress != null && bindAddress.length() > 0) {
-      Connector c = tomcat.getConnector();
-      IntrospectionUtils.setProperty(c, "address", bindAddress);
-    }
-    tomcat.setPort(port);
-
-    // Working (scratch) dir
-    String scratch = System.getProperty("java.io.tmpdir") + System.getProperty("file.separator") + "Pulse_"
-        + ((bindAddress == null || bindAddress.length() == 0) ? "0.0.0.0" : bindAddress) + "_" + port + "_"
-        + String.format("%x", path.hashCode());
-    
-    
-    tomcat.setBaseDir(scratch);
-    StandardHost stdHost = (StandardHost) tomcat.getHost();
-    //stdHost.setUnpackWARs(false);   
-    //tomcat.addContext(context, path);
-    tomcat.addWebapp(stdHost, context, path);
-    stdHost.setDeployOnStartup(true);    
-    tomcat.start();
-
-    return tomcat;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/177f12c7/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
index e945156..3bf7ecc 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseTest.java
@@ -18,10 +18,14 @@
  */
 package com.vmware.gemfire.tools.pulse.tests;
 
+import com.gemstone.gemfire.management.internal.JettyHelper;
 import com.gemstone.gemfire.test.junit.categories.UITest;
 import junit.framework.Assert;
-import org.apache.catalina.startup.Tomcat;
-import org.junit.*;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
+import org.junit.Ignore;
+import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.runners.MethodSorters;
 import org.openqa.selenium.By;
@@ -49,7 +53,7 @@ public class PulseTest {
   private static String jmxPropertiesFile;
   private static String path;
 
-  private static Tomcat tomcat = null;
+  private static org.eclipse.jetty.server.Server jetty = null;
   private static Server server = null;
   private static String pulseURL = null;
   public static WebDriver driver;
@@ -133,20 +137,22 @@ public class PulseTest {
 
   @BeforeClass
   public static void setUpBeforeClass() throws Exception {
-      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-      jmxPropertiesFile = classLoader.getResource("test.properties").getPath();
-      path = getPulseWarPath();
-      server = Server.createServer(9999, jmxPropertiesFile);
+    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+    jmxPropertiesFile = classLoader.getResource("test.properties").getPath();
+    path = getPulseWarPath();
+    server = Server.createServer(9999, jmxPropertiesFile);
 
-      String host = "localhost";// InetAddress.getLocalHost().getHostAddress();
-      int port = 8080;
-      String context = "/pulse";
-      
-      tomcat = TomcatHelper.startTomcat(host, port, context, path);
-      pulseURL = "http://" + host + ":" + port + context;
+    String host = "localhost";// InetAddress.getLocalHost().getHostAddress();
+    int port = 8080;
+    String context = "/pulse";
 
-      Thread.sleep(5000); // wait till tomcat settles down
+    jetty = JettyHelper.initJetty(host, port, false, false, null, null, null);
+    JettyHelper.addWebApplication(jetty, context, getPulseWarPath());
+    jetty.start();
 
+    pulseURL = "http://" + host + ":" + port + context;
+
+    Thread.sleep(5000); // wait till tomcat settles down
 
     driver = new FirefoxDriver();
     driver.manage().window().maximize();
@@ -171,19 +177,24 @@ public class PulseTest {
     Thread.sleep(7000);
   }
 
-    public static String getPulseWarPath() throws Exception{
-        String warPath = null;
-        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-        InputStream inputStream = classLoader
-                .getResourceAsStream("GemFireVersion.properties");
-        Properties properties = new Properties();
-        properties.load(inputStream);
-        String version = properties.getProperty("Product-Version");
-        warPath = "geode-pulse-"+version+".war";
-        String propFilePath = classLoader.getResource("GemFireVersion.properties").getPath();
-        warPath = propFilePath.substring(0, propFilePath.indexOf("generated-resources"))+"libs/"+warPath;
-        return warPath;
-    }
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception {
+    driver.close();
+    jetty.stop();
+  }
+
+  public static String getPulseWarPath() throws Exception {
+    String warPath = null;
+    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+    InputStream inputStream = classLoader.getResourceAsStream("GemFireVersion.properties");
+    Properties properties = new Properties();
+    properties.load(inputStream);
+    String version = properties.getProperty("Product-Version");
+    warPath = "gemfire-pulse-" + version + ".war";
+    String propFilePath = classLoader.getResource("GemFireVersion.properties").getPath();
+    warPath = propFilePath.substring(0, propFilePath.indexOf("generated-resources")) + "libs/" + warPath;
+    return warPath;
+  }
 
   protected void searchByLinkAndClick(String linkText) {
     WebElement element = By.linkText(linkText).findElement(driver);
@@ -1015,40 +1026,11 @@ public class PulseTest {
 	  
 	  Assert.assertTrue(driver.findElement(By.id("historyIcon")).isDisplayed());
 	  
-	  //Acutal query execution
+	  //Actual query execution
 	  
 	  driver.findElement(By.id("dataBrowserQueryText")).sendKeys("Query1");
-	  
-	  
-	  
-	 
+
 	  // Assert data regions are displayed 
 	  Assert.assertTrue(driver.findElement(By.id("treeDemo_1")).isDisplayed());
-	
-	  
-  }
-
-  @AfterClass
-  public static void tearDownAfterClass() throws Exception {
-	  //Thread.sleep(200000000);
-    driver.close();
-    /*try {
-      if (tomcat != null) {
-        tomcat.stop();
-        tomcat.destroy();
-      }
-
-      System.out.println("Tomcat Stopped");
-
-      if (server != null) {
-        server.stop();
-      }
-
-      System.out.println("Server Stopped");
-    } catch (LifecycleException e) {
-      e.printStackTrace();
-    }
-*/
   }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/177f12c7/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/TomcatHelper.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/TomcatHelper.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/TomcatHelper.java
deleted file mode 100644
index 0f320a3..0000000
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/TomcatHelper.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package com.vmware.gemfire.tools.pulse.tests;
-
-import java.net.InetAddress;
-
-import org.apache.catalina.connector.Connector;
-import org.apache.catalina.core.StandardHost;
-import org.apache.catalina.startup.Tomcat;
-import org.apache.tomcat.util.IntrospectionUtils;
-
-public class TomcatHelper {
-  public static Tomcat startTomcat(String bindAddress, int port,
-      String context, String path) throws Exception {
-
-    Tomcat tomcat = new Tomcat();
-
-    // Set up logging - first we're going to remove all existing handlers. Don't do this before Tomcat is
-    // instantiated otherwise there isn't anything to remove.
-    /*
-
-    Logger globalLogger = Logger.getLogger("");
-    for (Handler handler : globalLogger.getHandlers()) {
-      globalLogger.removeHandler(handler);
-    }
-
-    // Now let's add our handler
-    Handler gfHandler = new GemFireHandler((LogWriterImpl) log);
-    Logger logger = Logger.getLogger("");
-    logger.addHandler(gfHandler);
-    
-    */
-
-    // Set up for commons-logging which is used by Spring.
-    // This forces JCL to use the JDK logger otherwise it defaults to trying to
-    // use Log4J.
-    if (System.getProperty("org.apache.commons.logging.Log") == null) {
-      System.setProperty("org.apache.commons.logging.Log",
-          "org.apache.commons.logging.impl.Jdk14Logger");
-    }
-
-    if (bindAddress != null && bindAddress.length() > 0) {
-      Connector c = tomcat.getConnector();
-      IntrospectionUtils.setProperty(c, "address", bindAddress);
-    }
-    tomcat.setPort(port);
-
-    // Working (scratch) dir
-    String scratch = System.getProperty("java.io.tmpdir")
-        + System.getProperty("file.separator")
-        + "Pulse_"
-        + ((bindAddress == null || bindAddress.length() == 0) ? "0.0.0.0"
-            : bindAddress) + "_" + port + "_"
-        + String.format("%x", path.hashCode());
-
-    tomcat.setBaseDir(scratch);
-    StandardHost stdHost = (StandardHost) tomcat.getHost();
-    // stdHost.setUnpackWARs(false);
-    // tomcat.addContext(context, path);
-    tomcat.addWebapp(stdHost, context, path);
-    stdHost.setDeployOnStartup(true);
-    tomcat.start();
-
-    return tomcat;
-  }
-
-  public static void main(String[] args) throws Exception {
-    String host = InetAddress.getLocalHost().getHostAddress();
-    int port = 9090;
-    String path = "D:/springsource/springsourceWS/VMware-Pulse-cheetah-dev-jun13/build-artifacts/win/dist/pulse-7.0.1.war";
-    String context = "/pulse";
-    System.setProperty("pulse.propMockDataUpdaterClass",
-        "com.vmware.gemfire.tools.pulse.testbed.PropMockDataUpdater");
-    Tomcat tomcat = TomcatHelper.startTomcat("localhost", port, context, path);
-    Thread.sleep(30000);
-    System.out.println("Sleep completed");
-    System.out.println("Exiting ....");
-    tomcat.stop();
-    tomcat.destroy();
-  }
-}


[40/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
index 0000000,78f8bd0..35aa445
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
@@@ -1,0 -1,1402 +1,1404 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.util.ArrayList;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.StringTokenizer;
+ import java.util.concurrent.Callable;
+ import java.util.concurrent.CancellationException;
+ import java.util.concurrent.ExecutorService;
+ import java.util.concurrent.Executors;
+ import java.util.concurrent.Future;
+ import java.util.concurrent.TimeUnit;
+ import java.util.concurrent.TimeoutException;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.LogWriter;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheClosedException;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.DataPolicy;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.control.RebalanceFactory;
+ import com.gemstone.gemfire.cache.control.RebalanceOperation;
+ import com.gemstone.gemfire.cache.control.RebalanceResults;
+ import com.gemstone.gemfire.cache.control.ResourceManager;
+ import com.gemstone.gemfire.cache.execute.Function;
+ import com.gemstone.gemfire.cache.execute.FunctionInvocationTargetException;
+ import com.gemstone.gemfire.cache.execute.FunctionService;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.cache.partition.PartitionRebalanceInfo;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.management.DistributedRegionMXBean;
+ import com.gemstone.gemfire.management.ManagementService;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.domain.DataCommandRequest;
+ import com.gemstone.gemfire.management.internal.cli.domain.DataCommandResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.DataCommandFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.ExportDataFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.ImportDataFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.RebalanceFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.multistep.CLIMultiStepHelper;
+ import com.gemstone.gemfire.management.internal.cli.multistep.CLIStep;
+ import com.gemstone.gemfire.management.internal.cli.multistep.MultiStepCommand;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.security.Resource;
+ import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+ import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ import com.gemstone.gemfire.management.internal.security.ResourceOperationContext.ResourceOperationCode;
+ 
+ /**
+  * 
+  * @author ajayp
+  * @author tushark
+  * @since 7.0
+  */
+ public class DataCommands implements CommandMarker {
+ 
+   final int resultItemCount = 9;
+   private final ExportDataFunction exportDataFunction = new ExportDataFunction();
+   private final ImportDataFunction importDataFunction = new ImportDataFunction();
+ 
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+ 
+   @CliCommand(value = CliStrings.REBALANCE, help = CliStrings.REBALANCE__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_DATA,
+       CliStrings.TOPIC_GEMFIRE_REGION })
+   @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.REBALANCE)
+   public Result rebalance(
+       @CliOption(key = CliStrings.REBALANCE__INCLUDEREGION, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.REBALANCE__INCLUDEREGION__HELP) String[] includeRegions,
+       @CliOption(key = CliStrings.REBALANCE__EXCLUDEREGION, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.REBALANCE__EXCLUDEREGION__HELP) String[] excludeRegions,
+       @CliOption(key = CliStrings.REBALANCE__TIMEOUT, unspecifiedDefaultValue = "-1", help = CliStrings.REBALANCE__TIMEOUT__HELP) long timeout,
+       @CliOption(key = CliStrings.REBALANCE__SIMULATE, specifiedDefaultValue = "true", unspecifiedDefaultValue = "false", help = CliStrings.REBALANCE__SIMULATE__HELP) boolean simulate) {
+     ExecutorService commandExecutors = Executors.newSingleThreadExecutor();
+     List<Future<Result>> commandResult = new ArrayList<Future<Result>>();
+     Result result = null;
+     try {
+       commandResult.add(commandExecutors
+           .submit(new ExecuteRebalanceWithTimeout(includeRegions,
+               excludeRegions, simulate)));
+ 
+       Future<Result> fs = commandResult.get(0);
+       if (timeout > 0) {
+         result = fs.get(timeout, TimeUnit.SECONDS);
+       } else {
+         result = fs.get();
+ 
+       }
+     } catch (TimeoutException timeoutException) {
+       result = ResultBuilder
+           .createInfoResult(CliStrings.REBALANCE__MSG__REBALANCE_WILL_CONTINUE);
+ 
+     } catch (Exception ex) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(
+           CliStrings.REBALANCE__MSG__EXCEPTION_OCCRED_WHILE_REBALANCING_0,
+           ex.getMessage()));
+     }
+     LogWrapper.getInstance().info("Rebalance returning result >>>" + result);
+     return result;
+     
+     
+   }
+   
+   private class ExecuteRebalanceWithTimeout implements
+     Callable<Result> {
+   String[] includeRegions = null;
+   String[] excludeRegions = null;
+   boolean simulate;
+   Cache cache = CacheFactory.getAnyInstance();;
+   
+   @Override
+   public Result call() throws Exception {
+     return executeRebalanceWithTimeout(includeRegions, excludeRegions,
+         simulate);
+   }
+   
+   public ExecuteRebalanceWithTimeout(String[] includedRegions,
+       String[] excludedRegions, boolean toSimulate) {
+     includeRegions = includedRegions;
+     excludeRegions = excludedRegions;
+     simulate = toSimulate;
+   }
+   
+   public Result executeRebalanceWithTimeout(String[] includeRegions,
+       String[] excludeRegions, boolean simulate) {
+   
+     Result result = null;
+     try {
+       RebalanceOperation op = null;
+       new HashSet<String>();
+       new HashSet<String>();
+   
+       if (includeRegions != null && includeRegions.length > 0) {
+         CompositeResultData rebalanceResulteData = ResultBuilder
+             .createCompositeResultData();
+         int index = 0;
+   
+         for (String regionName : includeRegions) {
+           
+           //To be removed after region Name specification with "/" is fixed
+           regionName= regionName.startsWith("/") == true ? regionName : ("/"+regionName);
+           Region region = cache.getRegion(regionName);
+   
+           if (region == null) {
+             DistributedMember member = getAssociatedMembers(regionName, cache);
+   
+             if (member == null) {
+               LogWrapper
+                   .getInstance()
+                   .info(
+                       CliStrings
+                           .format(
+                               CliStrings.REBALANCE__MSG__NO_ASSOCIATED_DISTRIBUTED_MEMBER,
+                               regionName));
+               continue;
+             }
+   
+             Function rebalanceFunction = new RebalanceFunction();
+             Object[] functionArgs = new Object[3];
+             functionArgs[0] = simulate ? "true" : "false";
+             Set<String> setRegionName = new HashSet<String>();
+             setRegionName.add(regionName);
+             functionArgs[1] = setRegionName;
+   
+             Set<String> excludeRegionSet = new HashSet<String>();
+             if (excludeRegions != null && excludeRegions.length > 0) {
+   
+               for (String str : excludeRegions) {
+                 excludeRegionSet.add(str);
+               }
+             }
+             functionArgs[2] = excludeRegionSet;
+   
+             if (simulate == true) {
+               List resultList = null;
+               try {
+                 resultList = (ArrayList) CliUtil.executeFunction(
+                     rebalanceFunction, functionArgs, member).getResult();
+               } catch (Exception ex) {
+                 LogWrapper
+                     .getInstance()
+                     .info(
+                         CliStrings.format(
+                             CliStrings.REBALANCE__MSG__EXCEPTION_IN_REBALANCE_FOR_MEMBER_0_Exception_1,
+                             member.getId(), ex.getMessage()), ex);
+                 rebalanceResulteData
+                     .addSection()
+                     .addData(
+                         CliStrings.format(
+                             CliStrings.REBALANCE__MSG__EXCEPTION_IN_REBALANCE_FOR_MEMBER_0_Exception,
+                             member.getId()), ex.getMessage());
+                 result = ResultBuilder.buildResult(rebalanceResulteData);
+                 continue;
+               }
+   
+               if (checkResultList(rebalanceResulteData, resultList, member) == true) {
+                 result = ResultBuilder.buildResult(rebalanceResulteData);
+                 continue;
+               }
+               List<String> rstList = tokenize((String) resultList.get(0), ",");
+   
+               result = ResultBuilder.buildResult(toCompositeResultData(
+                   rebalanceResulteData, (ArrayList) rstList, index, simulate,
+                   cache));
+             } else {
+               List resultList = null;
+               try {
+                 resultList = (ArrayList) CliUtil.executeFunction(
+                     rebalanceFunction, functionArgs, member).getResult();
+               } catch (Exception ex) {
+                 LogWrapper
+                     .getInstance()
+                     .info(
+                         CliStrings.format(
+                             CliStrings.REBALANCE__MSG__EXCEPTION_IN_REBALANCE_FOR_MEMBER_0_Exception_1,
+                             member.getId(), ex.getMessage()), ex);
+                 rebalanceResulteData
+                     .addSection()
+                     .addData(
+                         CliStrings.format(
+                             CliStrings.REBALANCE__MSG__EXCEPTION_IN_REBALANCE_FOR_MEMBER_0_Exception,
+                             member.getId()), ex.getMessage());
+                 result = ResultBuilder.buildResult(rebalanceResulteData);
+                 continue;
+               }
+   
+               if (checkResultList(rebalanceResulteData, resultList, member) == true) {
+                 result = ResultBuilder.buildResult(rebalanceResulteData);
+                 continue;
+               }
+               List<String> rstList = tokenize((String) resultList.get(0), ",");
+   
+               result = ResultBuilder.buildResult(toCompositeResultData(
+                   rebalanceResulteData, (ArrayList) rstList, index, simulate,
+                   cache));
+   
+             }
+   
+           } else {
+             ResourceManager manager = cache.getResourceManager();
+             RebalanceFactory rbFactory = manager.createRebalanceFactory();
+             Set<String> excludeRegionSet = new HashSet<String>();
+             if (excludeRegions != null) {
+               for (String excludeRegion : excludeRegions)
+                 excludeRegionSet.add(excludeRegion);
+             }
+             rbFactory.excludeRegions(excludeRegionSet);
+             Set<String> includeRegionSet = new HashSet<String>();
+             includeRegionSet.add(regionName);
+             rbFactory.includeRegions(includeRegionSet);
+   
+             if (simulate == true) {
+               op = manager.createRebalanceFactory().simulate();
+               result = ResultBuilder.buildResult(buildResultForRebalance(
+                   rebalanceResulteData, op.getResults(), index, simulate,
+                   cache));
+   
+             } else {
+               op = manager.createRebalanceFactory().start();
+               // Wait until the rebalance is complete and then get the results
+               result = ResultBuilder.buildResult(buildResultForRebalance(
+                   rebalanceResulteData, op.getResults(), index, simulate,
+                   cache));
+   
+             }
+           }
+           index++;
+         }
+         LogWrapper.getInstance().info("Rebalance returning result" + result);
+         return result;
+       } else {
+         result = executeRebalanceOnDS(cache, String.valueOf(simulate),
+             excludeRegions);
+         LogWrapper.getInstance().info(
+             "Starting Rebalance simulate false result >> " + result);
+       }
+     } catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     }
+     LogWrapper.getInstance().info("Rebalance returning result >>>" + result);
+     return result;
+   }
+ }
+ 
+   List<String> tokenize(String str, String separator) {
+     StringTokenizer st = new StringTokenizer(str, separator);
+     List<String> rstList = new ArrayList<String>();
+ 
+     while (st.hasMoreTokens()) {
+       rstList.add(st.nextToken());
+ 
+     }
+     return rstList;
+ 
+   }
+ 
+   boolean checkResultList(CompositeResultData rebalanceResulteData,
+       List resultList, DistributedMember member) {
+     boolean toContinueForOtherMembers = false;
+ 
+     if (resultList != null && !resultList.isEmpty()) {
+       for (int i = 0; i < resultList.size(); i++) {
+         Object object = resultList.get(i);
+         if (object instanceof Exception) {
+ 
+           rebalanceResulteData.addSection().addData(
+               CliStrings.format(CliStrings.REBALANCE__MSG__NO_EXECUTION,
+                   member.getId()), ((Exception) object).getMessage());
+ 
+           LogWrapper.getInstance().info(
+               CliStrings.REBALANCE__MSG__NO_EXECUTION + member.getId()
+                   + " exception=" + ((Throwable) object).getMessage(),
+               ((Throwable) object));
+ 
+           toContinueForOtherMembers = true;
+           break;
+         } else if (object instanceof Throwable) {
+           rebalanceResulteData.addSection().addData(
+               CliStrings.format(CliStrings.REBALANCE__MSG__NO_EXECUTION,
+                   member.getId()), ((Throwable) object).getMessage());
+ 
+           LogWrapper.getInstance().info(
+               CliStrings.REBALANCE__MSG__NO_EXECUTION + member.getId()
+                   + " exception=" + ((Throwable) object).getMessage(),
+               ((Throwable) object));
+ 
+           toContinueForOtherMembers = true;
+           break;
+         }
+       }
+     } else {
+       LogWrapper.getInstance().info(
+           "Rebalancing for member=" + member.getId()
+               + ", resultList is either null or empty");
+       rebalanceResulteData.addSection().addData(
+           "Rebalancing for member=" + member.getId(),
+           ", resultList is either null or empty");
+       toContinueForOtherMembers = true;
+     }
+ 
+     return toContinueForOtherMembers;
+ 
+   }
+ 
+   Result executeRebalanceOnDS(Cache cache, String simulate,
+       String[] excludeRegionsList) {
+     Result result = null;
+     int index = 1;
+     CompositeResultData rebalanceResulteData = ResultBuilder
+         .createCompositeResultData();
+     List<String> listExcludedRegion = new ArrayList<String>();
+     if (excludeRegionsList != null) {
+       for (String str : excludeRegionsList) {
+         listExcludedRegion.add(str);
+       }
+     }
+     List<MemberPRInfo> listMemberRegion = getMemberRegionList(cache, listExcludedRegion);
+     
+     if (listMemberRegion.size() == 0) {
+       return ResultBuilder
+           .createInfoResult(CliStrings.REBALANCE__MSG__NO_REBALANCING_REGIONS_ON_DS);
+     }
+ 
+    
+     Iterator<MemberPRInfo> iterator = listMemberRegion.iterator();
+     boolean flagToContinueWithRebalance = false;
+ 
+     // check if list has some members that can be rebalanced
+     while (iterator.hasNext()) {
+       if (iterator.next().dsMemberList.size() > 1) {
+         flagToContinueWithRebalance = true;
+         break;
+       }
+     }
+     
+     if (flagToContinueWithRebalance == false) {
+       return ResultBuilder
+           .createInfoResult(CliStrings.REBALANCE__MSG__NO_REBALANCING_REGIONS_ON_DS);
+     }
+ 
+     Iterator<MemberPRInfo> it1 = listMemberRegion.iterator();
+     while (it1.hasNext() && flagToContinueWithRebalance) {
+       try {
+         MemberPRInfo memberPR = (MemberPRInfo) it1.next();
+         // check if there are more than one members associated with region for
+         // rebalancing        
+         if (memberPR.dsMemberList.size() > 1) {        
+           for (int i = 0; i < memberPR.dsMemberList.size(); i++) {
+             DistributedMember dsMember = memberPR.dsMemberList.get(i);
+             Function rebalanceFunction = new RebalanceFunction();
+             Object[] functionArgs = new Object[3];
+             functionArgs[0] = simulate;
+             Set<String> regionSet = new HashSet<String>();
+ 
+             regionSet.add(memberPR.region);
+             functionArgs[1] = regionSet;
+ 
+             Set<String> excludeRegionSet = new HashSet<String>();
+             functionArgs[2] = excludeRegionSet;
+ 
+             List resultList = null;
+ 
+             try {
+               if (checkMemberPresence(dsMember, cache)) {
+                 resultList = (ArrayList) CliUtil.executeFunction(
+                     rebalanceFunction, functionArgs, dsMember).getResult();
+ 
+                 if (checkResultList(rebalanceResulteData, resultList, dsMember) == true) {
+                   result = ResultBuilder.buildResult(rebalanceResulteData);
+                   continue;
+                 }
+ 
+                 List<String> rstList = tokenize((String) resultList.get(0), ",");
+                 result = ResultBuilder.buildResult(toCompositeResultData(
+                     rebalanceResulteData, (ArrayList) rstList, index,
+                     simulate.equals("true") ? true : false, cache));
+                 index++;
+ 
+                 // Rebalancing for region is done so break and continue with
+                 // other region
+                 break;
+               } else {
+                 if (i == memberPR.dsMemberList.size() - 1) {
+                   rebalanceResulteData
+                       .addSection()
+                       .addData(
+                           CliStrings.format(
+                               CliStrings.REBALANCE__MSG__NO_EXECUTION_FOR_REGION_0_ON_MEMBERS_1,
+                               memberPR.region,
+                               listOfAllMembers(memberPR.dsMemberList)),
+                           CliStrings.REBALANCE__MSG__MEMBERS_MIGHT_BE_DEPARTED);
+                   result = ResultBuilder.buildResult(rebalanceResulteData);
+                 } else {
+                   continue;
+                 }
+               }
+             } catch (Exception ex) {
+               if (i == memberPR.dsMemberList.size() - 1) {
+                 rebalanceResulteData
+                     .addSection()
+                     .addData(
+                         CliStrings.format(
+                             CliStrings.REBALANCE__MSG__NO_EXECUTION_FOR_REGION_0_ON_MEMBERS_1,
+                             memberPR.region,
+                             listOfAllMembers(memberPR.dsMemberList)),
+                         CliStrings.REBALANCE__MSG__REASON + ex.getMessage());
+                 result = ResultBuilder.buildResult(rebalanceResulteData);
+               } else {
+                 continue;
+               }
+             }
+ 
+             if (checkResultList(rebalanceResulteData, resultList, dsMember) == true) {
+               result = ResultBuilder.buildResult(rebalanceResulteData);
+               continue;
+             }
+ 
+             List<String> rstList = tokenize((String) resultList.get(0), ",");
+             result = ResultBuilder.buildResult(toCompositeResultData(
+                 rebalanceResulteData, (ArrayList) rstList, index,
+                 simulate.equals("true") ? true : false, cache));
+             index++;
+           }
+         }
+       } catch (Exception e) {
+         ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+             .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT)
+             .addLine(e.getMessage());
+         return (ResultBuilder.buildResult(errorResultData));
+       }
+     }
+     return result;
+   }
+ 
+   public boolean checkMemberPresence(DistributedMember dsMember, Cache cache) {
+     // check if member's presence just before executing function
+     // this is to avoid running a function on departed members #47248
+     Set<DistributedMember> dsMemberList = CliUtil.getAllNormalMembers(cache);
+     return dsMemberList.contains(dsMember);
+   }
+ 
+   public String listOfAllMembers(ArrayList<DistributedMember> dsMemberList) {
+     StringBuilder listMembersId = new StringBuilder();    
+     for (int j = 0; j < dsMemberList.size() - 1; j++) {
+       listMembersId.append(dsMemberList.get(j).getId());      
+       listMembersId.append(" ; ");
+     }
+     return listMembersId.toString();
+   }
+ 
+   protected CompositeResultData toCompositeResultData(
+       CompositeResultData rebalanceResulteData, ArrayList<String> rstlist,
+       int index, boolean simulate, Cache cache) {
+ 
+     // add only if there are any valid regions in results
+     if (rstlist.size() > resultItemCount
+         && rstlist.get(resultItemCount) != null
+         && rstlist.get(resultItemCount).length() > 0) {
+       TabularResultData table1 = rebalanceResulteData.addSection().addTable(
+           "Table" + index);
+       String newLine = System.getProperty("line.separator");
+       StringBuilder resultStr = new StringBuilder();
+       resultStr.append(newLine);
+       table1.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES);
+       table1.accumulate("Value", rstlist.get(0));
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES
+           + " = " + rstlist.get(0));
+       resultStr.append(newLine);
+ 
+       table1.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM);
+       table1.accumulate("Value", rstlist.get(1));
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM + " = "
+           + rstlist.get(1));
+       resultStr.append(newLine);
+ 
+       table1.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED);
+       table1.accumulate("Value", rstlist.get(2));
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED
+           + " = " + rstlist.get(2));
+       resultStr.append(newLine);
+ 
+       table1.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES);
+       table1.accumulate("Value", rstlist.get(3));
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES
+           + " = " + rstlist.get(3));
+       resultStr.append(newLine);
+ 
+       table1.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME);
+       table1.accumulate("Value", rstlist.get(4));
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME
+           + " = " + rstlist.get(4));
+       resultStr.append(newLine);
+ 
+       table1.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED);
+       table1.accumulate("Value", rstlist.get(5));
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED
+           + " = " + rstlist.get(5));
+       resultStr.append(newLine);
+ 
+       table1.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME);
+       table1.accumulate("Value", rstlist.get(6));
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME
+           + " = " + rstlist.get(6));
+       resultStr.append(newLine);
+ 
+       table1.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED);
+       table1.accumulate("Value", rstlist.get(7));
+       resultStr
+           .append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED
+               + " = " + rstlist.get(7));
+       resultStr.append(newLine);
+ 
+       table1.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALTIME);
+       table1.accumulate("Value", rstlist.get(8));
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALTIME + " = "
+           + rstlist.get(8));
+       resultStr.append(newLine);
+ 
+       String headerText = null;
+       if (simulate) {
+         headerText = "Simulated partition regions ";
+       } else {
+         headerText = "Rebalanced partition regions ";
+       }
+       for (int i = resultItemCount; i < rstlist.size(); i++) {
+         headerText = headerText + " " + rstlist.get(i);
+       }
+       table1.setHeader(headerText);
+       cache.getLogger().info(headerText + resultStr);
+     }
+     return rebalanceResulteData;
+   }
+ 
+   CompositeResultData buildResultForRebalance(
+       CompositeResultData rebalanceResulteData, RebalanceResults results,
+       int index, boolean simulate, Cache cache) {
+     Set<PartitionRebalanceInfo> regions = results
+         .getPartitionRebalanceDetails();
+     Iterator iterator = regions.iterator();
+ 
+     // add only if there are valid number of regions
+     if (regions.size() > 0
+         && ((PartitionRebalanceInfo) iterator.next()).getRegionPath() != null
+         && ((PartitionRebalanceInfo) iterator.next()).getRegionPath().length() > 0) {
+       final TabularResultData resultData = rebalanceResulteData.addSection()
+           .addTable("Table" + index);
+       String newLine = System.getProperty("line.separator");
+       StringBuilder resultStr = new StringBuilder();
+       resultStr.append(newLine);
+ 
+       resultData.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES);
+       resultData.accumulate("Value", results.getTotalBucketCreateBytes());
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES
+           + " = " + results.getTotalBucketCreateBytes());
+       resultStr.append(newLine);
+ 
+       resultData.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM);
+       resultData.accumulate("Value", results.getTotalBucketCreateTime());
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM + " = "
+           + results.getTotalBucketCreateTime());
+       resultStr.append(newLine);
+ 
+       resultData.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED);
+       resultData.accumulate("Value", results.getTotalBucketCreatesCompleted());
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED
+           + " = " + results.getTotalBucketCreatesCompleted());
+       resultStr.append(newLine);
+ 
+       resultData.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES);
+       resultData.accumulate("Value", results.getTotalBucketTransferBytes());
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES
+           + " = " + results.getTotalBucketTransferBytes());
+       resultStr.append(newLine);
+ 
+       resultData.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME);
+       resultData.accumulate("Value", results.getTotalBucketTransferTime());
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME
+           + " = " + results.getTotalBucketTransferTime());
+       resultStr.append(newLine);
+ 
+       resultData.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED);
+       resultData
+           .accumulate("Value", results.getTotalBucketTransfersCompleted());
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED
+           + " = " + results.getTotalBucketTransfersCompleted());
+       resultStr.append(newLine);
+ 
+       resultData.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME);
+       resultData.accumulate("Value", results.getTotalPrimaryTransferTime());
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME
+           + " = " + results.getTotalPrimaryTransferTime());
+       resultStr.append(newLine);
+ 
+       resultData.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED);
+       resultData.accumulate("Value",
+           results.getTotalPrimaryTransfersCompleted());
+       resultStr
+           .append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED
+               + " = " + results.getTotalPrimaryTransfersCompleted());
+       resultStr.append(newLine);
+ 
+       resultData.accumulate("Rebalanced Stats",
+           CliStrings.REBALANCE__MSG__TOTALTIME);
+       resultData.accumulate("Value", results.getTotalTime());
+       resultStr.append(CliStrings.REBALANCE__MSG__TOTALTIME + " = "
+           + results.getTotalTime());
+       resultStr.append(newLine);
+ 
+       Iterator<PartitionRebalanceInfo> it = regions.iterator();
+ 
+       String headerText = null;
+ 
+       if (simulate) {
+         headerText = "Simulated partition regions ";
+       } else {
+         headerText = "Rebalanced partition regions ";
+       }
+ 
+       while (it.hasNext()) {
+         PartitionRebalanceInfo rgn = it.next();
+         headerText = headerText + " " + rgn.getRegionPath();
+       }
+       resultData.setHeader(resultData.getHeader() + headerText);
+ 
+       cache.getLogger().info(headerText + resultStr);
+     }
+     return rebalanceResulteData;
+ 
+   }
+ 
+   public DistributedMember getAssociatedMembers(String region, final Cache cache) {
+ 
+     DistributedRegionMXBean bean = ManagementService.getManagementService(
+         GemFireCacheImpl.getInstance()).getDistributedRegionMXBean(region);
+ 
+     DistributedMember member = null;
+ 
+     if (bean == null) {
+       return member;
+     }
+ 
+     String[] membersName = bean.getMembers();
+     Set<DistributedMember> dsMembers = CliUtil.getAllMembers(cache);
+     Iterator it = dsMembers.iterator();
+ 
+     boolean matchFound = false;
+ 
+     if (membersName.length > 1) {
+       while (it.hasNext() && matchFound == false) {
+         DistributedMember dsmember = (DistributedMember) it.next();
+         for (String memberName : membersName) {
+           if (MBeanJMXAdapter.getMemberNameOrId(dsmember).equals(memberName)) {
+             member = dsmember;
+             matchFound = true;
+             break;
+           }
+         }
+       }
+     }
+     return member;
+ 
+   }
+   
+   List<MemberPRInfo> getMemberRegionList(Cache cache, List<String> listExcludedRegion) {
+     List<MemberPRInfo> listMemberPRInfo = new ArrayList<MemberPRInfo>();
+     String[] listDSRegions = ManagementService.getManagementService(cache)
+         .getDistributedSystemMXBean().listRegions();
+     final Set<DistributedMember> dsMembers = CliUtil.getAllMembers(cache);
+ 
+     for (String regionName : listDSRegions) {
+       //check for excluded regions
+       boolean excludedRegionMatch = false;
+       Iterator<String> it = listExcludedRegion.iterator();      
+       while (it.hasNext()) {
+         // this is needed since region name may start with / or without it
+         // also        
+         String excludedRegion = it.next().trim();     
+         if(regionName.startsWith("/")){
+           if(!excludedRegion.startsWith("/")){
+             excludedRegion = "/"+excludedRegion;
+           }              
+         }
+         if(excludedRegion.startsWith("/")){
+           if(!regionName.startsWith("/")){
+             regionName = "/"+regionName;
+           }              
+         }  
+ 
+         if(excludedRegion.equals(regionName)){
+           excludedRegionMatch = true;
+           break;
+         }
+       }
+       
+       if(excludedRegionMatch == true){
+         //ignore this region
+         continue;
+       }      
+       
+       if(!regionName.startsWith("/")){
+         regionName = Region.SEPARATOR+regionName;
+         
+       }
+     //remove this prefix / once Rishi fixes this      
+       DistributedRegionMXBean bean = ManagementService.getManagementService(
+           GemFireCacheImpl.getInstance())
+           .getDistributedRegionMXBean(regionName);   
+        
+       if (bean != null) {          
+         //TODO: Ajay to call a method once Rishi provides
+         if (bean.getRegionType().equals(DataPolicy.PARTITION.toString()) || 
+             bean.getRegionType().equals(DataPolicy.PERSISTENT_PARTITION.toString() )) {
+           
+           String[] memberNames = bean.getMembers();
+           for (DistributedMember dsmember: dsMembers) {
+             for (String memberName : memberNames) {
+               if (MBeanJMXAdapter.getMemberNameOrId(
+                   dsmember).equals(memberName)) {               
+                 MemberPRInfo memberAndItsPRRegions = new MemberPRInfo();
+                 memberAndItsPRRegions.region  = regionName;
+                 memberAndItsPRRegions.dsMemberList.add(dsmember);               
+                 if (listMemberPRInfo.contains(memberAndItsPRRegions)){
+                   //add member for appropriate region                  
+                   int index = listMemberPRInfo.indexOf(memberAndItsPRRegions);                  
+                   MemberPRInfo listMember = listMemberPRInfo.get(index);
+                   listMember.dsMemberList.add(dsmember);
+                 }else{
+                   listMemberPRInfo.add(memberAndItsPRRegions);
+                
+                 }               
+                 break;
+               }
+             }
+           }
+ 
+         }
+       }
+     }
+ 
+     return listMemberPRInfo;
+   }
+ 
+   
+ 
+   @CliCommand(value = CliStrings.EXPORT_DATA, help = CliStrings.EXPORT_DATA__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_DATA,
+       CliStrings.TOPIC_GEMFIRE_REGION })
+   @ResourceOperation(resource = Resource.REGION, operation= ResourceConstants.EXPORT_DATA)
+   public Result exportData(
+       @CliOption(key = CliStrings.EXPORT_DATA__REGION, mandatory = true, optionContext = ConverterHint.REGIONPATH, help = CliStrings.EXPORT_DATA__REGION__HELP) String regionName,
+       @CliOption(key = CliStrings.EXPORT_DATA__FILE, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, mandatory = true, help = CliStrings.EXPORT_DATA__FILE__HELP) String filePath,
+       @CliOption(key = CliStrings.EXPORT_DATA__MEMBER, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.MEMBERIDNAME, mandatory = true, help = CliStrings.EXPORT_DATA__MEMBER__HELP) String memberNameOrId) {
+ 
+     final Cache cache = CacheFactory.getAnyInstance();
+     final DistributedMember targetMember = CliUtil
+         .getDistributedMemberByNameOrId(memberNameOrId);
+     Result result = null;
+ 
+     if (!filePath.endsWith(CliStrings.GEMFIRE_DATA_FILE_EXTENSION)) {
+       return ResultBuilder.createUserErrorResult(CliStrings.format(
+           CliStrings.INVALID_FILE_EXTENTION,
+           CliStrings.GEMFIRE_DATA_FILE_EXTENSION));
+     }
+     try {
+       if (targetMember != null) {
+         final String args[] = { regionName, filePath };
+ 
+         ResultCollector<?, ?> rc = CliUtil.executeFunction(exportDataFunction,
+             args, targetMember);
+         List<Object> results = (List<Object>) rc.getResult();
+ 
+         if (results != null) {
+           Object resultObj = results.get(0);
+           if (resultObj instanceof String) {
+             result = ResultBuilder.createInfoResult((String) resultObj);
+           } else if (resultObj instanceof Exception) {
+             result = ResultBuilder
+                 .createGemFireErrorResult(((Exception) resultObj).getMessage());
+           } else {
+             result = ResultBuilder.createGemFireErrorResult(CliStrings.format(
+                 CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.EXPORT_DATA));
+           }
+         } else {
+           result = ResultBuilder.createGemFireErrorResult(CliStrings.format(
+               CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.EXPORT_DATA));
+         }
+       } else {
+         result = ResultBuilder.createUserErrorResult(CliStrings.format(
+             CliStrings.EXPORT_DATA__MEMBER__NOT__FOUND, memberNameOrId));
+       }
+     } catch (CacheClosedException e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     } catch (FunctionInvocationTargetException e) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(
+           CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.IMPORT_DATA));
+     }
+ 
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.IMPORT_DATA, help = CliStrings.IMPORT_DATA__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_DATA,
+       CliStrings.TOPIC_GEMFIRE_REGION })
+   @ResourceOperation(resource = Resource.REGION, operation= ResourceConstants.IMPORT_DATA)
+   public Result importData(
+       @CliOption(key = CliStrings.IMPORT_DATA__REGION, optionContext = ConverterHint.REGIONPATH, mandatory = true, help = CliStrings.IMPORT_DATA__REGION__HELP) String regionName,
+       @CliOption(key = CliStrings.IMPORT_DATA__FILE, mandatory = true, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.IMPORT_DATA__FILE__HELP) String filePath,
+       @CliOption(key = CliStrings.IMPORT_DATA__MEMBER, mandatory = true, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.MEMBERIDNAME, help = CliStrings.IMPORT_DATA__MEMBER__HELP) String memberNameOrId) {
+ 
+     Result result = null;
+ 
+     try {
+       final Cache cache = CacheFactory.getAnyInstance();
+       final DistributedMember targetMember = CliUtil
+           .getDistributedMemberByNameOrId(memberNameOrId);
+ 
+       if (!filePath.endsWith(CliStrings.GEMFIRE_DATA_FILE_EXTENSION)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(
+             CliStrings.INVALID_FILE_EXTENTION,
+             CliStrings.GEMFIRE_DATA_FILE_EXTENSION));
+       }
+       if (targetMember != null) {
+         final String args[] = { regionName, filePath };
+         ResultCollector<?, ?> rc = CliUtil.executeFunction(importDataFunction,
+             args, targetMember);
+         List<Object> results = (List<Object>) rc.getResult();
+ 
+         if (results != null) {
+           Object resultObj = results.get(0);
+ 
+           if (resultObj instanceof String) {
+             result = ResultBuilder.createInfoResult((String) resultObj);
+           } else if (resultObj instanceof Exception) {
+             result = ResultBuilder
+                 .createGemFireErrorResult(((Exception) resultObj).getMessage());
+           } else {
+             result = ResultBuilder.createGemFireErrorResult(CliStrings.format(
+                 CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.IMPORT_DATA));
+           }
+         } else {
+           result = ResultBuilder.createGemFireErrorResult(CliStrings.format(
+               CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.IMPORT_DATA));
+         }
+       } else {
+         result = ResultBuilder.createUserErrorResult(CliStrings.format(
+             CliStrings.IMPORT_DATA__MEMBER__NOT__FOUND, memberNameOrId));
+       }
+     } catch (CacheClosedException e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     } catch (FunctionInvocationTargetException e) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(
+           CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.IMPORT_DATA));
+     }
+     return result;
+   }
+ 
+   @CliMetaData(shellOnly = false, relatedTopic = {
+       CliStrings.TOPIC_GEMFIRE_DATA, CliStrings.TOPIC_GEMFIRE_REGION })
+   @CliCommand(value = { CliStrings.PUT }, help = CliStrings.PUT__HELP)
+   @ResourceOperation(resource = Resource.REGION, operation= ResourceConstants.PUT)
+   public Result put(
+       @CliOption(key = { CliStrings.PUT__KEY }, mandatory = true, help = CliStrings.PUT__KEY__HELP) String key,
+       @CliOption(key = { CliStrings.PUT__VALUE }, mandatory = true, help = CliStrings.PUT__VALUE__HELP) String value,
+       @CliOption(key = { CliStrings.PUT__REGIONNAME }, mandatory = true, help = CliStrings.PUT__REGIONNAME__HELP, optionContext = ConverterHint.REGIONPATH) String regionPath,
+       @CliOption(key = { CliStrings.PUT__KEYCLASS }, help = CliStrings.PUT__KEYCLASS__HELP) String keyClass,
+       @CliOption(key = { CliStrings.PUT__VALUEKLASS }, help = CliStrings.PUT__VALUEKLASS__HELP) String valueClass,
+       @CliOption(key = { CliStrings.PUT__PUTIFABSENT }, help = CliStrings.PUT__PUTIFABSENT__HELP, unspecifiedDefaultValue = "false") boolean putIfAbsent) {
+ 
+     Cache cache = CacheFactory.getAnyInstance();
+     DataCommandResult dataResult = null;
+     if (regionPath == null || regionPath.isEmpty()) {
+       return makePresentationResult(DataCommandResult.createPutResult(key,
+           null, null, CliStrings.PUT__MSG__REGIONNAME_EMPTY, false));
+     }
+ 
+     if (key == null || key.isEmpty())
+       return makePresentationResult(dataResult = DataCommandResult
+           .createPutResult(key, null, null, CliStrings.PUT__MSG__KEY_EMPTY,
+               false));
+ 
+     if (value == null || value.isEmpty())
+       return makePresentationResult(dataResult = DataCommandResult
+           .createPutResult(value, null, null, CliStrings.PUT__MSG__VALUE_EMPTY,
+               false));
+ 
+     @SuppressWarnings("rawtypes")
+     Region region = cache.getRegion(regionPath);
+     DataCommandFunction putfn = new DataCommandFunction();
+     if (region == null) {
+       Set<DistributedMember> memberList = getRegionAssociatedMembers(
+           regionPath, CacheFactory.getAnyInstance(), false);
+       if (memberList != null && memberList.size() > 0) {
+         DataCommandRequest request = new DataCommandRequest();
+         request.setCommand(CliStrings.PUT);
+         request.setValue(value);
+         request.setKey(key);
+         request.setKeyClass(keyClass);
+         request.setRegionName(regionPath);
+         request.setValueClass(valueClass);
+         request.setPutIfAbsent(putIfAbsent);
+         dataResult = callFunctionForRegion(request, putfn, memberList);
+       } else
+         dataResult = DataCommandResult.createPutInfoResult(key, value, null,
+             CliStrings.format(
+                 CliStrings.PUT__MSG__REGION_NOT_FOUND_ON_ALL_MEMBERS,
+                 regionPath), false);
+     } else {
+       dataResult = putfn.put(key, value, putIfAbsent, keyClass, valueClass,
+           regionPath);
+     }
+     dataResult.setKeyClass(keyClass);
+     if (valueClass != null)
+       dataResult.setValueClass(valueClass);
+     return makePresentationResult(dataResult);
+   }
+ 
+   private Result makePresentationResult(DataCommandResult dataResult) {
+     if (dataResult != null)
+       return dataResult.toCommandResult();
+     else
+       return ResultBuilder
+           .createGemFireErrorResult("Error executing data command");
+   }
+ 
+   @CliMetaData(shellOnly = false, relatedTopic = {
+       CliStrings.TOPIC_GEMFIRE_DATA, CliStrings.TOPIC_GEMFIRE_REGION })
+   @CliCommand(value = { CliStrings.GET }, help = CliStrings.GET__HELP)
++  @ResourceOperation(resource = Resource.REGION, operation= ResourceConstants.GET)
+   public Result get(
+       @CliOption(key = { CliStrings.GET__KEY }, mandatory = true, help = CliStrings.GET__KEY__HELP) String key,
+       @CliOption(key = { CliStrings.GET__REGIONNAME }, mandatory = true, help = CliStrings.GET__REGIONNAME__HELP, optionContext = ConverterHint.REGIONPATH) String regionPath,
+       @CliOption(key = { CliStrings.GET__KEYCLASS }, help = CliStrings.GET__KEYCLASS__HELP) String keyClass,
+       @CliOption(key = { CliStrings.GET__VALUEKLASS }, help = CliStrings.GET__VALUEKLASS__HELP) String valueClass,
+       @CliOption(key = CliStrings.GET__LOAD, unspecifiedDefaultValue = "true", specifiedDefaultValue = "true", help = CliStrings.GET__LOAD__HELP) Boolean loadOnCacheMiss)
+   {
+ 
+     Cache cache = CacheFactory.getAnyInstance();
+     DataCommandResult dataResult = null;
+ 
+     if (regionPath == null || regionPath.isEmpty()) {
+       return makePresentationResult(dataResult = DataCommandResult
+           .createGetResult(key, null, null,
+               CliStrings.GET__MSG__REGIONNAME_EMPTY, false));
+     }
+ 
+     if (key == null || key.isEmpty())
+       return makePresentationResult(dataResult = DataCommandResult
+           .createGetResult(key, null, null, CliStrings.GET__MSG__KEY_EMPTY,
+               false));
+ 
+     @SuppressWarnings("rawtypes")
+     Region region = cache.getRegion(regionPath);
+     DataCommandFunction getfn = new DataCommandFunction();
+     if (region == null) {
+       Set<DistributedMember> memberList = getRegionAssociatedMembers(
+           regionPath, CacheFactory.getAnyInstance(), false);
+       if (memberList != null && memberList.size() > 0) {
+         DataCommandRequest request = new DataCommandRequest();
+         request.setCommand(CliStrings.GET);
+         request.setKey(key);
+         request.setKeyClass(keyClass);
+         request.setRegionName(regionPath);
+         request.setValueClass(valueClass);
+         request.setLoadOnCacheMiss(loadOnCacheMiss);
+         dataResult = callFunctionForRegion(request, getfn, memberList);
+       } else
+         dataResult = DataCommandResult.createGetInfoResult(key, null, null,
+             CliStrings.format(
+                 CliStrings.GET__MSG__REGION_NOT_FOUND_ON_ALL_MEMBERS,
+                 regionPath), false);
+     } else {
+       dataResult = getfn.get(key, keyClass, valueClass, regionPath, loadOnCacheMiss);
+     }
+     dataResult.setKeyClass(keyClass);
+     if (valueClass != null)
+       dataResult.setValueClass(valueClass);
+     return makePresentationResult(dataResult);
+   }
+ 
+   @CliMetaData(shellOnly = false, relatedTopic = {
+       CliStrings.TOPIC_GEMFIRE_DATA, CliStrings.TOPIC_GEMFIRE_REGION })
+   @CliCommand(value = { CliStrings.LOCATE_ENTRY }, help = CliStrings.LOCATE_ENTRY__HELP)
+   @ResourceOperation(resource = Resource.REGION, operation= ResourceConstants.LOCATE_ENTRY)
+   public Result locateEntry(
+       @CliOption(key = { CliStrings.LOCATE_ENTRY__KEY }, mandatory = true, help = CliStrings.LOCATE_ENTRY__KEY__HELP) String key,
+       @CliOption(key = { CliStrings.LOCATE_ENTRY__REGIONNAME }, mandatory = true, help = CliStrings.LOCATE_ENTRY__REGIONNAME__HELP, optionContext = ConverterHint.REGIONPATH) String regionPath,
+       @CliOption(key = { CliStrings.LOCATE_ENTRY__KEYCLASS }, help = CliStrings.LOCATE_ENTRY__KEYCLASS__HELP) String keyClass,
+       @CliOption(key = { CliStrings.LOCATE_ENTRY__VALUEKLASS }, help = CliStrings.LOCATE_ENTRY__VALUEKLASS__HELP) String valueClass,
+       @CliOption(key = { CliStrings.LOCATE_ENTRY__RECURSIVE }, help = CliStrings.LOCATE_ENTRY__RECURSIVE__HELP, unspecifiedDefaultValue = "false") boolean recursive) {
+ 
+     // Cache cache = CacheFactory.getAnyInstance();
+     DataCommandResult dataResult = null;
+ 
+     if (regionPath == null || regionPath.isEmpty()) {
+       return makePresentationResult(dataResult = DataCommandResult
+           .createLocateEntryResult(key, null, null,
+               CliStrings.LOCATE_ENTRY__MSG__REGIONNAME_EMPTY, false));
+     }
+ 
+     if (key == null || key.isEmpty())
+       return makePresentationResult(dataResult = DataCommandResult
+           .createLocateEntryResult(key, null, null,
+               CliStrings.LOCATE_ENTRY__MSG__KEY_EMPTY, false));
+ 
+     DataCommandFunction locateEntry = new DataCommandFunction();
+     Set<DistributedMember> memberList = getRegionAssociatedMembers(regionPath,
+         CacheFactory.getAnyInstance(), true);
+     if (memberList != null && memberList.size() > 0) {
+       DataCommandRequest request = new DataCommandRequest();
+       request.setCommand(CliStrings.LOCATE_ENTRY);
+       request.setKey(key);
+       request.setKeyClass(keyClass);
+       request.setRegionName(regionPath);
+       request.setValueClass(valueClass);
+       request.setRecursive(recursive);
+       dataResult = callFunctionForRegion(request, locateEntry, memberList);
+     } else
+       dataResult = DataCommandResult.createLocateEntryInfoResult(key, null,
+           null, CliStrings.format(
+               CliStrings.LOCATE_ENTRY__MSG__REGION_NOT_FOUND_ON_ALL_MEMBERS,
+               regionPath), false);
+     dataResult.setKeyClass(keyClass);
+     if (valueClass != null)
+       dataResult.setValueClass(valueClass);
+     return makePresentationResult(dataResult);
+   }
+ 
+   @CliMetaData(shellOnly = false, relatedTopic = {
+       CliStrings.TOPIC_GEMFIRE_DATA, CliStrings.TOPIC_GEMFIRE_REGION })
+   @CliCommand(value = { CliStrings.REMOVE }, help = CliStrings.REMOVE__HELP)
++  @ResourceOperation(resource = Resource.REGION, operation= ResourceConstants.REMOVE)
+   public Result remove(
+       @CliOption(key = { CliStrings.REMOVE__KEY }, help = CliStrings.REMOVE__KEY__HELP) String key,
+       @CliOption(key = { CliStrings.REMOVE__REGION }, mandatory = true, help = CliStrings.REMOVE__REGION__HELP, optionContext = ConverterHint.REGIONPATH) String regionPath,
+       @CliOption(key = CliStrings.REMOVE__ALL, help = CliStrings.REMOVE__ALL__HELP, specifiedDefaultValue = "true", unspecifiedDefaultValue = "false") boolean removeAllKeys,
+       @CliOption(key = { CliStrings.REMOVE__KEYCLASS }, help = CliStrings.REMOVE__KEYCLASS__HELP) String keyClass) {
+ 
+     Cache cache = CacheFactory.getAnyInstance();
+     DataCommandResult dataResult = null;
+ 
+     if (regionPath == null || regionPath.isEmpty()) {
+       return makePresentationResult(dataResult = DataCommandResult
+           .createRemoveResult(key, null, null,
+               CliStrings.REMOVE__MSG__REGIONNAME_EMPTY, false));
+     }
+ 
+     if (!removeAllKeys && (key == null || key.isEmpty())) {
+       return makePresentationResult(dataResult = DataCommandResult
+           .createRemoveResult(key, null, null,
+               CliStrings.REMOVE__MSG__KEY_EMPTY, false));
+     }
+ 
+     @SuppressWarnings("rawtypes")
+     Region region = cache.getRegion(regionPath);
+     DataCommandFunction removefn = new DataCommandFunction();
+     if (region == null) {
+       Set<DistributedMember> memberList = getRegionAssociatedMembers(
+           regionPath, CacheFactory.getAnyInstance(), false);
+       if (memberList != null && memberList.size() > 0) {
+         DataCommandRequest request = new DataCommandRequest();
+         request.setCommand(CliStrings.REMOVE);
+         request.setKey(key);
+         request.setKeyClass(keyClass);
+         request.setRemoveAllKeys(removeAllKeys ? "ALL" : null);
+         request.setRegionName(regionPath);
+         dataResult = callFunctionForRegion(request, removefn, memberList);
+       } else
+         dataResult = DataCommandResult.createRemoveInfoResult(key, null, null,
+             CliStrings.format(
+                 CliStrings.REMOVE__MSG__REGION_NOT_FOUND_ON_ALL_MEMBERS,
+                 regionPath), false);
+ 
+     } else {
+       dataResult = removefn.remove(key, keyClass, regionPath,
+           removeAllKeys ? "ALL" : null);
+     }
+     dataResult.setKeyClass(keyClass);
+ 
+     return makePresentationResult(dataResult);
+   }
+ 
+   @CliMetaData(shellOnly = false, relatedTopic = {
+       CliStrings.TOPIC_GEMFIRE_DATA, CliStrings.TOPIC_GEMFIRE_REGION })
+   @MultiStepCommand
+   @CliCommand(value = { CliStrings.QUERY }, help = CliStrings.QUERY__HELP)
 -  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.QUERYDATA_DS)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.QUERY)
+   public Object query(
+       @CliOption(key = CliStrings.QUERY__QUERY, help = CliStrings.QUERY__QUERY__HELP, mandatory = true) final String query,
+       @CliOption(key = CliStrings.QUERY__STEPNAME, mandatory = false, help = "Stpe name", unspecifiedDefaultValue = CliStrings.QUERY__STEPNAME__DEFAULTVALUE) String stepName,
+       @CliOption(key = CliStrings.QUERY__INTERACTIVE, mandatory = false, help = CliStrings.QUERY__INTERACTIVE__HELP, unspecifiedDefaultValue = "true") final boolean interactive) {
+ 
+     if (!CliUtil.isGfshVM()
+         && stepName.equals(CliStrings.QUERY__STEPNAME__DEFAULTVALUE)) {
+       return ResultBuilder
+           .createInfoResult(CliStrings.QUERY__MSG__NOT_SUPPORTED_ON_MEMBERS);
+     }
+ 
+     Object[] arguments = new Object[] { query, stepName, interactive };
+     CLIStep exec = new DataCommandFunction.SelectExecStep(arguments);
+     CLIStep display = new DataCommandFunction.SelectDisplayStep(arguments);
+     CLIStep move = new DataCommandFunction.SelectMoveStep(arguments);
+     CLIStep quit = new DataCommandFunction.SelectQuitStep(arguments);
+     CLIStep[] steps = { exec, display, move, quit };
+     return CLIMultiStepHelper.chooseStep(steps, stepName);
+   }
+ 
+   @CliAvailabilityIndicator({ CliStrings.REBALANCE, CliStrings.GET,
+       CliStrings.PUT, CliStrings.REMOVE, CliStrings.LOCATE_ENTRY,
+       CliStrings.QUERY, CliStrings.IMPORT_DATA, CliStrings.EXPORT_DATA })
+   public boolean dataCommandsAvailable() {
+     boolean isAvailable = true; // always available on server
+     if (CliUtil.isGfshVM()) { // in gfsh check if connected
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;
+   }
+ 
+   private static class MemberPRInfo {
+     public ArrayList<DistributedMember> dsMemberList;
+     public String region;
+ 
+     public MemberPRInfo() {
+       region = new String();
+       dsMemberList = new ArrayList<DistributedMember>();
+     }
+ 
+     public boolean equals(Object o2) {
+       if (o2 == null) {
+         return false;
+       }
+       if (this.region.equals(((MemberPRInfo) o2).region)) {
+         return true;
+       }
+       return false;
+ 
+     }
+   }
+ 
+   @SuppressWarnings("rawtypes")
+   public static DataCommandResult callFunctionForRegion(
+       DataCommandRequest request, DataCommandFunction putfn,
+       Set<DistributedMember> members) {
+ 
+     if (members.size() == 1) {
+       DistributedMember member = members.iterator().next();
+       ResultCollector collector = FunctionService.onMember(member)
+           .withArgs(request).execute(putfn);
+       List list = (List) collector.getResult();
+       Object object = list.get(0);
+       if (object instanceof Throwable) {
+         Throwable error = (Throwable) object;
+         DataCommandResult result = new DataCommandResult();
+         result.setErorr(error);
+         result.setErrorString(error.getMessage());
+         return result;
+       }
+       DataCommandResult result = (DataCommandResult) list.get(0);
+       result.aggregate(null);
+       return result;
+     } else {
+       ResultCollector collector = FunctionService.onMembers(members)
+           .withArgs(request).execute(putfn);
+       List list = (List) collector.getResult();
+       DataCommandResult result = null;
+       for (int i = 0; i < list.size(); i++) {
+         Object object = list.get(i);
+         if (object instanceof Throwable) {
+           Throwable error = (Throwable) object;
+           result = new DataCommandResult();
+           result.setErorr(error);
+           result.setErrorString(error.getMessage());
+           return result;
+         }
+ 
+         if (result == null) {
+           result = (DataCommandResult) object;
+           result.aggregate(null);
+         } else {
+           result.aggregate((DataCommandResult) object);
+         }
+       }
+       return result;
+     }
+ 
+   }
+ 
+   public static Set<DistributedMember> getQueryRegionsAssociatedMembers(
+       Set<String> regions, final Cache cache, boolean returnAll) {
+     LogWriter logger = cache.getLogger();
+     Set<DistributedMember> members = null;
+     Set<DistributedMember> newMembers = null;
+     Iterator<String> iterator = regions.iterator();
+     String region = (String) iterator.next();
+     members = getRegionAssociatedMembers(region, cache, true);
+     if (logger.fineEnabled())
+       logger.fine("Members for region " + region + " Members " + members);
+     List<String> regionAndingList = new ArrayList<String>();
+     regionAndingList.add(region);
+     if (regions.size() == 1) {
+       newMembers = members;
+     } else {
+       if (members != null && !members.isEmpty()) {
+         while (iterator.hasNext()) {
+           region = iterator.next();
+           newMembers = getRegionAssociatedMembers(region, cache, true);
+           if (newMembers == null) {
+             newMembers = new HashSet<DistributedMember>();
+           }
+           if (logger.fineEnabled())
+             logger.fine("Members for region " + region + " Members "
+                 + newMembers);
+           regionAndingList.add(region);
+           newMembers.retainAll(members);
+           members = newMembers;
+           if (logger.fineEnabled())
+             logger.fine("Members after anding for regions " + regionAndingList
+                 + " List : " + newMembers);
+         }
+       }
+     }
+     members = new HashSet<DistributedMember>();
+     if (newMembers == null)
+       return members;
+     Iterator<DistributedMember> memberIterator = newMembers.iterator();
+     while (memberIterator.hasNext()) {
+       members.add(memberIterator.next());
+       if (!returnAll) {
+         return members;
+       }
+     }
+     return members;
+   }
+ 
+   @SuppressWarnings("rawtypes")
+   public static Set<DistributedMember> getRegionAssociatedMembers(
+       String region, final Cache cache, boolean returnAll) {
+ 
+     DistributedMember member = null;
+ 
+     if (region == null || region.isEmpty())
+       return null;
+ 
+     DistributedRegionMXBean bean = ManagementService
+         .getManagementService(cache).getDistributedRegionMXBean(region);
+ 
+     if (bean == null)// try with slash ahead
+       bean = ManagementService.getManagementService(cache)
+           .getDistributedRegionMXBean(Region.SEPARATOR + region);
+ 
+     if (bean == null) {
+       return null;
+     }
+ 
+     String[] membersName = bean.getMembers();
+     Set<DistributedMember> dsMembers = cache.getMembers();
+     Set<DistributedMember> dsMembersWithThisMember = new HashSet<DistributedMember>();
+     dsMembersWithThisMember.addAll(dsMembers);
+     dsMembersWithThisMember.add(cache.getDistributedSystem()
+         .getDistributedMember());
+     Iterator it = dsMembersWithThisMember.iterator();
+     Set<DistributedMember> matchedMembers = new HashSet<DistributedMember>();
+ 
+     if (membersName.length > 0) {
+       while (it.hasNext()) {
+         DistributedMember dsmember = (DistributedMember) it.next();
+         for (String memberName : membersName) {
+           String name = MBeanJMXAdapter.getMemberNameOrId(dsmember);
+           if (name.equals(memberName)) {
+             member = dsmember;
+             matchedMembers.add(member);
+             if (!returnAll) {
+               return matchedMembers;
+             }
+           }
+         }
+       }
+     }
+     
+     //try with function calls
+     if(matchedMembers.size() == 0){
+       matchedMembers = CliUtil.getMembersForeRegionViaFunction(cache, region );
+     }
+     return matchedMembers;
+   }
+ 
+   // TODO - Abhishek revisit after adding support in Gfsh.java?
+   public static Object[] replaceGfshEnvVar(String query,
+       Map<String, String> gfshEnvVarMap) {
+     boolean done = false;
+     int startIndex = 0;
+     int replacedVars = 0;
+     while (!done) {
+       int index1 = query.indexOf("${", startIndex);
+       if (index1 == -1)
+         break;
+       int index2 = query.indexOf("}", index1);
+       if (index2 == -1)
+         break;
+       String var = query.substring(index1 + 2, index2);
+       String value = gfshEnvVarMap.get(var);
+       if (value != null) {
+         query = query.replaceAll("\\$\\{" + var + "\\}", value);
+         replacedVars++;
+       }
+       startIndex = index2 + 1;
+       if (startIndex >= query.length())
+         done = true;
+     }
+     return new Object[] { replacedVars, query };
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommands.java
index 0000000,da9ac8c..23cc687
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommands.java
@@@ -1,0 -1,345 +1,352 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.io.FileNotFoundException;
+ import java.io.IOException;
+ import java.text.DecimalFormat;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ import com.gemstone.gemfire.SystemFailure;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.cli.Result.Status;
+ import com.gemstone.gemfire.management.internal.cli.AbstractCliAroundInterceptor;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.GfshParseResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.DeployFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.ListDeployedFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.UndeployFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.remote.CommandExecutionContext;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.FileResult;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
++
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ /**
+  * Commands for deploying, un-deploying and listing files deployed using the command line shell.
+  * <p/>
+  * @author David Hoots
+  * @see com.gemstone.gemfire.management.internal.cli.commands.AbstractCommandsSupport
+  * @since 7.0
+  */
+ public final class DeployCommands extends AbstractCommandsSupport implements CommandMarker {
+ 
+   private final DeployFunction deployFunction = new DeployFunction();
+   private final UndeployFunction undeployFunction = new UndeployFunction();
+   private final ListDeployedFunction listDeployedFunction = new ListDeployedFunction();
+ 
+   /**
+    * Deploy one or more JAR files to members of a group or all members.
+    * 
+    * @param groups
+    *          Group(s) to deploy the JAR to or null for all members
+    * @param jar
+    *          JAR file to deploy
+    * @param dir
+ *          Directory of JAR files to deploy
+    * @return The result of the attempt to deploy
+    */
+   @CliCommand(value = { CliStrings.DEPLOY }, help = CliStrings.DEPLOY__HELP)
+   @CliMetaData(interceptor = "com.gemstone.gemfire.management.internal.cli.commands.DeployCommands$Interceptor", relatedTopic={CliStrings.TOPIC_GEMFIRE_CONFIG}, writesToSharedConfiguration=true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.DEPLOY)
+   public final Result deploy(
+     @CliOption(key = { CliStrings.DEPLOY__GROUP }, help = CliStrings.DEPLOY__GROUP__HELP, optionContext=ConverterHint.MEMBERGROUP)
+     @CliMetaData (valueSeparator = ",")
+     String[] groups,
+     @CliOption(key = { CliStrings.DEPLOY__JAR }, help = CliStrings.DEPLOY__JAR__HELP)
+     String jar,
+     @CliOption(key = { CliStrings.DEPLOY__DIR }, help = CliStrings.DEPLOY__DIR__HELP)
+     String dir)
+   {
+     try {
+       TabularResultData tabularData = ResultBuilder.createTabularResultData();
+ 
+       byte[][] shellBytesData = CommandExecutionContext.getBytesFromShell();
+       String[] jarNames = CliUtil.bytesToNames(shellBytesData);
+       byte[][] jarBytes = CliUtil.bytesToData(shellBytesData);
+ 
+       boolean accumulatedData = false;
+ 
+       Set<DistributedMember> targetMembers;
+       try {
+         targetMembers = CliUtil.findAllMatchingMembers(groups, null);
+       } catch (CommandResultException e) {
+         return e.getResult();
+ }
+ 
+       ResultCollector<?, ?> resultCollector = CliUtil.executeFunction(this.deployFunction,
+         new Object[] { jarNames, jarBytes }, targetMembers);
+ 
+       List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) resultCollector.getResult());
+ 
+       for (CliFunctionResult result : results) {
+         if (result.getThrowable() != null) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Deployed JAR", "");
+           tabularData.accumulate("Deployed JAR Location", "ERROR: " + result.getThrowable().getClass().getName() + ": "
+             + result.getThrowable().getMessage());
+           accumulatedData = true;
+           tabularData.setStatus(Status.ERROR);
+         } else {
+           String[] strings = (String[]) result.getSerializables();
+           for (int i = 0; i < strings.length; i += 2) {
+             tabularData.accumulate("Member", result.getMemberIdOrName());
+             tabularData.accumulate("Deployed JAR", strings[i]);
+             tabularData.accumulate("Deployed JAR Location", strings[i + 1]);
+             accumulatedData = true;
+           }
+         }
+       }
+ 
+      
+       
+       if (!accumulatedData) {
+         // This really should never happen since if a JAR file is already deployed a result is returned indicating that.
+         return ResultBuilder.createInfoResult("Unable to deploy JAR file(s)");
+       }
+       
+       Result result = ResultBuilder.buildResult(tabularData);
+       if (tabularData.getStatus().equals(Status.OK)){
+         result.setCommandPersisted((new SharedConfigurationWriter()).addJars(jarNames, jarBytes, groups));
+       }
+       return result;
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable t) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult(String.format("Exception while attempting to deploy: (%1$s)",
+         toString(t, isDebugging())));
+     }
+   }
+ 
+   /**
+    * Undeploy one or more JAR files from members of a group or all members.
+    * 
+    * @param groups
+    *          Group(s) to undeploy the JAR from or null for all members
+    * @param jars
+    *          JAR(s) to undeploy (separated by comma)
+    * @return The result of the attempt to undeploy
+    */
+   @CliCommand(value = { CliStrings.UNDEPLOY }, help = CliStrings.UNDEPLOY__HELP)
+   @CliMetaData(relatedTopic={CliStrings.TOPIC_GEMFIRE_CONFIG}, writesToSharedConfiguration=true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.UNDEPLOY)
+   public final Result undeploy(
+       @CliOption(key = { CliStrings.UNDEPLOY__GROUP },
+                  help = CliStrings.UNDEPLOY__GROUP__HELP, 
+                  optionContext=ConverterHint.MEMBERGROUP)
+       @CliMetaData (valueSeparator = ",") String[] groups,
+       @CliOption(key = { CliStrings.UNDEPLOY__JAR },
+                  help = CliStrings.UNDEPLOY__JAR__HELP, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE)
+       @CliMetaData (valueSeparator = ",") String jars) {
+ 
+     try {
+       TabularResultData tabularData = ResultBuilder.createTabularResultData();
+       boolean accumulatedData = false;
+ 
+       Set<DistributedMember> targetMembers;
+       try {
+         targetMembers = CliUtil.findAllMatchingMembers(groups, null);
+       } catch (CommandResultException crex) {
+         return crex.getResult();
+       }
+ 
+       ResultCollector<?, ?> rc = CliUtil.executeFunction(this.undeployFunction, new Object[] { jars }, targetMembers);
+       List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) rc.getResult());
+ 
+       for (CliFunctionResult result : results) {
+         if (result.getThrowable() != null) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("Un-Deployed JAR", "");
+           tabularData.accumulate("Un-Deployed JAR Location", "ERROR: " + result.getThrowable().getClass().getName() + ": "
+               + result.getThrowable().getMessage());
+           accumulatedData = true;
+           tabularData.setStatus(Status.ERROR);
+         } else {
+           String[] strings = (String[]) result.getSerializables();
+           for (int i = 0; i < strings.length; i += 2) {
+             tabularData.accumulate("Member", result.getMemberIdOrName());
+             tabularData.accumulate("Un-Deployed JAR", strings[i]);
+             tabularData.accumulate("Un-Deployed From JAR Location", strings[i + 1]);
+             accumulatedData = true;
+           }
+         }
+       }
+ 
+       if (!accumulatedData) {
+         return ResultBuilder.createInfoResult(CliStrings.UNDEPLOY__NO_JARS_FOUND_MESSAGE);
+       }
+       
+       Result result = ResultBuilder.buildResult(tabularData);
+       if (tabularData.getStatus().equals(Status.OK)) {
+         result.setCommandPersisted((new SharedConfigurationWriter()).deleteJars(jars == null ? null : jars.split(","), groups));
+       }
+       return result;
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult("Exception while attempting to un-deploy: " + th.getClass().getName() + ": "
+           + th.getMessage());
+     }
+   }
+ 
+   /**
+    * List all currently deployed JARs for members of a group or for all members.
+    * 
+    * @param group
+    *          Group for which to list JARs or null for all members
+    * @return List of deployed JAR files
+    */
+   @CliCommand(value = { CliStrings.LIST_DEPLOYED }, help = CliStrings.LIST_DEPLOYED__HELP)
+   @CliMetaData(relatedTopic={CliStrings.TOPIC_GEMFIRE_CONFIG})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public final Result listDeployed(
+       @CliOption(key = { CliStrings.LIST_DEPLOYED__GROUP },
+                  help = CliStrings.LIST_DEPLOYED__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",") String group) {
+ 
+     try {
+       TabularResultData tabularData = ResultBuilder.createTabularResultData();
+       boolean accumulatedData = false;
+ 
+       Set<DistributedMember> targetMembers;
+       try {
+         targetMembers = CliUtil.findAllMatchingMembers(group, null);
+       } catch (CommandResultException crex) {
+         return crex.getResult();
+       }
+ 
+       ResultCollector<?, ?> rc = CliUtil.executeFunction(this.listDeployedFunction, null, targetMembers);
+       List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) rc.getResult());
+ 
+       for (CliFunctionResult result : results) {
+         if (result.getThrowable() != null) {
+           tabularData.accumulate("Member", result.getMemberIdOrName());
+           tabularData.accumulate("JAR", "");
+           tabularData.accumulate("JAR Location", "ERROR: " + result.getThrowable().getClass().getName() + ": "
+               + result.getThrowable().getMessage());
+           accumulatedData = true;
+           tabularData.setStatus(Status.ERROR);
+         } else {
+           String[] strings = (String[]) result.getSerializables();
+           for (int i = 0; i < strings.length; i += 2) {
+             tabularData.accumulate("Member", result.getMemberIdOrName());
+             tabularData.accumulate("JAR", strings[i]);
+             tabularData.accumulate("JAR Location", strings[i + 1]);
+             accumulatedData = true;
+           }
+         }
+       }
+ 
+       if (!accumulatedData) {
+         return ResultBuilder.createInfoResult(CliStrings.LIST_DEPLOYED__NO_JARS_FOUND_MESSAGE);
+       }
+       return ResultBuilder.buildResult(tabularData);
+ 
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createGemFireErrorResult("Exception while attempting to list deployed: " + th.getClass().getName() + ": "
+           + th.getMessage());
+     }
+   }
+ 
+   @CliAvailabilityIndicator({ CliStrings.DEPLOY, CliStrings.UNDEPLOY, CliStrings.LIST_DEPLOYED })
+   public final boolean isConnected() {
+     if (!CliUtil.isGfshVM()) {
+       return true;
+     }
+ 
+     return (getGfsh() != null && getGfsh().isConnectedAndReady());
+   }
+   
+   /**
+    * Interceptor used by gfsh to intercept execution of deploy command at "shell".
+    */
+   public static class Interceptor extends AbstractCliAroundInterceptor {
+     private final DecimalFormat numFormatter = new DecimalFormat("###,##0.00");
+ 
+     @Override
+     public Result preExecution(GfshParseResult parseResult) {
+       Map<String, String> paramValueMap = parseResult.getParamValueStrings();
+ 
+       String jar = paramValueMap.get("jar");
+       jar = (jar == null) ? null : jar.trim();
+       
+       String dir = paramValueMap.get("dir");
+       dir = (dir == null) ? null : dir.trim();
+       
+       String group = paramValueMap.get("group");
+       group = (group == null) ? null : group.trim();
+ 
+       String jarOrDir = (jar != null ? jar : dir);
+ 
+       if (jar == null && dir == null) {
+         return ResultBuilder.createUserErrorResult("Parameter \"jar\" or \"dir\" is required. Use \"help <command name>\" for assistance.");
+       }
+ 
+       FileResult fileResult;
+       try {
+         fileResult = new FileResult(new String[] { jar != null ? jar : dir });
+       } catch (FileNotFoundException fnfex) {
+         return ResultBuilder.createGemFireErrorResult("'" + jarOrDir + "' not found.");
+       } catch (IOException ioex) {
+         return ResultBuilder.createGemFireErrorResult("I/O error when reading jar/dir: " + ioex.getClass().getName() + ": "
+             + ioex.getMessage());
+       }
+ 
+       // Only do this additional check if a dir was provided
+       if (dir != null) {
+         String message = "\nDeploying files: " + fileResult.getFormattedFileList() + "\nTotal file size is: "
+             + this.numFormatter.format(((double) fileResult.computeFileSizeTotal() / 1048576)) + "MB\n\nContinue? ";
+ 
+         if (readYesNo(message, Response.YES) == Response.NO) {
+           return ResultBuilder.createShellClientAbortOperationResult("Aborted deploy of " + jarOrDir + ".");
+         }
+       }
+ 
+       return fileResult;
+     }
+ 
+     @Override
+     public Result postExecution(GfshParseResult parseResult, Result commandResult) {
+       return null;
+     }
+   }
+ }


[31/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/WanCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/WanCommands.java
index 0000000,5630885..2892c00
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/WanCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/WanCommands.java
@@@ -1,0 -1,1281 +1,1296 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.util.ArrayList;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.TreeMap;
+ import java.util.concurrent.Callable;
+ import java.util.concurrent.ExecutionException;
+ import java.util.concurrent.ExecutorService;
+ import java.util.concurrent.Executors;
+ import java.util.concurrent.Future;
+ import java.util.concurrent.ThreadFactory;
+ import java.util.concurrent.atomic.AtomicInteger;
+ 
+ import javax.management.ObjectName;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
+ import com.gemstone.gemfire.management.GatewayReceiverMXBean;
+ import com.gemstone.gemfire.management.GatewaySenderMXBean;
+ import com.gemstone.gemfire.management.ManagementService;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.SystemManagementService;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.GatewayReceiverCreateFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.GatewayReceiverFunctionArgs;
+ import com.gemstone.gemfire.management.internal.cli.functions.GatewaySenderCreateFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.GatewaySenderFunctionArgs;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
+ import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ public class WanCommands implements CommandMarker {
+ 
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+   
+   @CliCommand(value = CliStrings.CREATE_GATEWAYSENDER, help = CliStrings.CREATE_GATEWAYSENDER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN, writesToSharedConfiguration=true)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.CREATE_GW_SENDER)
+   public Result createGatewaySender(
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__GROUP,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.CREATE_GATEWAYSENDER__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",") String[] onGroups,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.CREATE_GATEWAYSENDER__MEMBER__HELP) 
+       @CliMetaData (valueSeparator = ",") String onMember,
+           
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__ID, 
+       mandatory = true, 
+       help = CliStrings.CREATE_GATEWAYSENDER__ID__HELP) String id,
+ 
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID, 
+       mandatory = true, 
+       help = CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID__HELP) Integer remoteDistributedSystemId,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__PARALLEL, 
+       help = CliStrings.CREATE_GATEWAYSENDER__PARALLEL__HELP) Boolean parallel,
+ 
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__MANUALSTART, 
+       help = CliStrings.CREATE_GATEWAYSENDER__MANUALSTART__HELP) Boolean manualStart,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE, 
+       help = CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE__HELP) Integer socketBufferSize,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT, 
+       help = CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT__HELP) Integer socketReadTimeout,
+ 
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION, 
+       help = CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION__HELP) Boolean enableBatchConflation,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE, 
+       help = CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE__HELP) Integer batchSize,
+           
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL, 
+       help = CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL__HELP) Integer batchTimeInterval,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE, 
+       help = CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE__HELP) Boolean enablePersistence,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__DISKSTORENAME, 
+       help = CliStrings.CREATE_GATEWAYSENDER__DISKSTORENAME__HELP) String diskStoreName,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS, 
+       help = CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS__HELP) Boolean diskSynchronous,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY, 
+       help = CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY__HELP) Integer maxQueueMemory,
+           
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD, 
+       help = CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD__HELP) Integer alertThreshold,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS, 
+       help = CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS__HELP) Integer dispatcherThreads,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY, 
+       help = CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY__HELP) String orderPolicy,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__GATEWAYEVENTFILTER, 
+       help = CliStrings.CREATE_GATEWAYSENDER__GATEWAYEVENTFILTER__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] gatewayEventFilters,
+           
+       @CliOption(key = CliStrings.CREATE_GATEWAYSENDER__GATEWAYTRANSPORTFILTER, 
+       help = CliStrings.CREATE_GATEWAYSENDER__GATEWAYTRANSPORTFILTER__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] gatewayTransportFilter) {
+ 
+     Result result = null;
+ 
+     XmlEntity xmlEntity = null;
+     try {
+       GatewaySenderFunctionArgs gatewaySenderFunctionArgs = 
+         new GatewaySenderFunctionArgs(id,
+             remoteDistributedSystemId, parallel, manualStart, socketBufferSize, socketReadTimeout, 
+             enableBatchConflation, batchSize, batchTimeInterval, enablePersistence, diskStoreName, 
+             diskSynchronous, maxQueueMemory, alertThreshold, dispatcherThreads, orderPolicy, 
+             gatewayEventFilters, gatewayTransportFilter);
+       
+       Set<DistributedMember> membersToCreateGatewaySenderOn = CliUtil.findAllMatchingMembers(onGroups, onMember == null ? null : onMember.split(","));
+       
+       ResultCollector<?, ?> resultCollector = CliUtil.executeFunction(GatewaySenderCreateFunction.INSTANCE, gatewaySenderFunctionArgs, membersToCreateGatewaySenderOn);
+       @SuppressWarnings("unchecked")
+       List<CliFunctionResult> gatewaySenderCreateResults = (List<CliFunctionResult>) resultCollector.getResult();
+       
+       TabularResultData tabularResultData = ResultBuilder.createTabularResultData();
+       final String errorPrefix = "ERROR: ";
+       for (CliFunctionResult gatewaySenderCreateResult : gatewaySenderCreateResults) {
+         boolean success  = gatewaySenderCreateResult.isSuccessful();
+         tabularResultData.accumulate("Member", gatewaySenderCreateResult.getMemberIdOrName());
+         tabularResultData.accumulate("Status", (success ? "" : errorPrefix) + gatewaySenderCreateResult.getMessage());
+         
+         if (success && xmlEntity == null) {
+           xmlEntity = gatewaySenderCreateResult.getXmlEntity();
+         }
+       }
+       result = ResultBuilder.buildResult(tabularResultData);
+     } catch (IllegalArgumentException e) {
+       LogWrapper.getInstance().info(e.getMessage());
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+     } catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     }
+     
+     if (xmlEntity != null) {
+       result.setCommandPersisted((new SharedConfigurationWriter()).addXmlEntity(xmlEntity, onGroups));
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.START_GATEWAYSENDER, help = CliStrings.START_GATEWAYSENDER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.GATEWAY_SENDER, operation=ResourceConstants.START_GW_SENDER)
+   public Result startGatewaySender(
+       @CliOption(key = CliStrings.START_GATEWAYSENDER__ID, 
+       mandatory = true, 
+       optionContext = ConverterHint.GATEWAY_SENDER_ID,
+       help = CliStrings.START_GATEWAYSENDER__ID__HELP) String senderId,
+       
+       @CliOption(key = CliStrings.START_GATEWAYSENDER__GROUP,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.START_GATEWAYSENDER__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",") String onGroup,
+       
+       @CliOption(key = CliStrings.START_GATEWAYSENDER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.START_GATEWAYSENDER__MEMBER__HELP) 
+       @CliMetaData (valueSeparator = ",") String onMember) {
+     
+     Result result = null;
+     final String id = senderId.trim();
+ 
+     try {
+       final Cache cache = CacheFactory.getAnyInstance();
+       final SystemManagementService service = (SystemManagementService)ManagementService
+           .getExistingManagementService(cache);
+ 
+       TabularResultData resultData = ResultBuilder.createTabularResultData();
+       Set<DistributedMember> dsMembers = CliUtil.findAllMatchingMembers(
+           onGroup, onMember);
+ 
+       ExecutorService execService = Executors
+           .newCachedThreadPool(new ThreadFactory() {
+             AtomicInteger threadNum = new AtomicInteger();
+ 
+             public Thread newThread(final Runnable r) {
+               Thread result = new Thread(r, "Start Sender Command Thread "
+                   + threadNum.incrementAndGet());
+               result.setDaemon(true);
+               return result;
+             }
+           });
+ 
+       List<Callable<List>> callables = new ArrayList<Callable<List>>();
+ 
+       for (final DistributedMember member : dsMembers) {
+         
+         callables.add(new Callable<List>() {
+           
+           public List call() throws Exception {
+             
+             GatewaySenderMXBean bean = null;
+             ArrayList<String> statusList = new ArrayList<String>();
+             if (cache.getDistributedSystem().getDistributedMember().getId()
+                 .equals(member.getId())) {
+               bean = service.getLocalGatewaySenderMXBean(id);
+             }
+             else {
+               ObjectName objectName = service.getGatewaySenderMBeanName(member,
+                   id);
+               bean = service.getMBeanProxy(objectName,
+                   GatewaySenderMXBean.class);
+             }
+             if (bean != null) {
+               if (bean.isRunning()) {
+                 statusList.add(member.getId());
+                 statusList.add(CliStrings.GATEWAY_ERROR);
+                 statusList.add(CliStrings.format(
+                     CliStrings.GATEWAY_SENDER_0_IS_ALREADY_STARTED_ON_MEMBER_1,
+                     new Object[] { id, member.getId() }));
+               }
+               else {
+                 bean.start();
+                 statusList.add(member.getId());
+                 statusList.add(CliStrings.GATEWAY_OK);
+                 statusList.add(CliStrings.format(
+                     CliStrings.GATEWAY_SENDER_0_IS_STARTED_ON_MEMBER_1,
+                     new Object[] { id, member.getId() }));
+               }
+             }
+             else {
+               statusList.add(member.getId());
+               statusList.add(CliStrings.GATEWAY_ERROR);
+               statusList.add(CliStrings.format(
+                   CliStrings.GATEWAY_SENDER_0_IS_NOT_AVAILABLE_ON_MEMBER_1,
+                   new Object[] { id, member.getId() }));
+             }
+             return statusList;
+           }
+         });
+       }
+       
+       Iterator<DistributedMember> memberIterator = dsMembers.iterator();
+       List<Future<List>> futures = null;
+       
+       try {
+         futures = execService.invokeAll(callables);
+       }
+       catch (InterruptedException ite) {
+         accumulateStartResult(resultData, null,
+             CliStrings.GATEWAY_ERROR, CliStrings.format(
+                 CliStrings.GATEWAY_SENDER_0_COULD_NOT_BE_INVOKED_DUE_TO_1,
+                 new Object[] { id, ite.getMessage() }));
+       }
+       
+       for (Future<List> future : futures) {
+         DistributedMember member = memberIterator.next();
+         List<String> memberStatus = null;
+         try {
+           memberStatus = future.get();
+           accumulateStartResult(resultData, memberStatus.get(0),
+               memberStatus.get(1), memberStatus.get(2));
+         }
+         catch (InterruptedException ite) {
+           accumulateStartResult(resultData, member.getId(),
+               CliStrings.GATEWAY_ERROR, CliStrings.format(
+                   CliStrings.GATEWAY_SENDER_0_COULD_NOT_BE_STARTED_ON_MEMBER_DUE_TO_1,
+                   new Object[] { id, ite.getMessage() }));
+           continue;
+         }
+         catch (ExecutionException ee) {
+           accumulateStartResult(resultData, member.getId(),
+               CliStrings.GATEWAY_ERROR, CliStrings.format(
+                   CliStrings.GATEWAY_SENDER_0_COULD_NOT_BE_STARTED_ON_MEMBER_DUE_TO_1,
+                   new Object[] { id, ee.getMessage() }));
+           continue;
+         }
+       }
+       execService.shutdown();
+       result = ResultBuilder.buildResult(resultData);
+     }
+     catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     } catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+     
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.PAUSE_GATEWAYSENDER, help = CliStrings.PAUSE_GATEWAYSENDER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.GATEWAY_SENDER, operation=ResourceConstants.PAUSE_GW_SENDER)
+   public Result pauseGatewaySender(
+       @CliOption(key = CliStrings.PAUSE_GATEWAYSENDER__ID, 
+       mandatory = true, 
+       optionContext = ConverterHint.GATEWAY_SENDER_ID,
+       help = CliStrings.PAUSE_GATEWAYSENDER__ID__HELP) String senderId,
+       
+       @CliOption(key = CliStrings.PAUSE_GATEWAYSENDER__GROUP,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.PAUSE_GATEWAYSENDER__GROUP__HELP) 
+       @CliMetaData (valueSeparator = ",")  String onGroup,
+       
+       @CliOption(key = CliStrings.PAUSE_GATEWAYSENDER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.PAUSE_GATEWAYSENDER__MEMBER__HELP) 
+       @CliMetaData (valueSeparator = ",") String onMember) {
+     
+     Result result = null;
+     if (senderId != null)
+       senderId = senderId.trim();
+ //    if (memberNameOrId != null)
+ //      memberNameOrId = memberNameOrId.trim();
+ //
+ //    if (memberNameOrId != null && onGroup != null) {
+ //      return ResultBuilder
+ //          .createUserErrorResult(CliStrings.GATEWAY__MSG__OPTIONS);
+ //    }
+ 
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       SystemManagementService service = (SystemManagementService) ManagementService
+           .getExistingManagementService(cache);
+ 
+       GatewaySenderMXBean bean = null;
+ 
+ 
+       TabularResultData resultData = ResultBuilder.createTabularResultData();
+       Set<DistributedMember> dsMembers = null;
+       
+       dsMembers = CliUtil.findAllMatchingMembers(onGroup, onMember);
+       for (DistributedMember member : dsMembers) {
+         if (cache.getDistributedSystem().getDistributedMember().getId().equals(
+             member.getId())) {
+           bean = service.getLocalGatewaySenderMXBean(senderId);
+         } else {
+           ObjectName objectName = service.getGatewaySenderMBeanName(member, senderId);
+           bean = service.getMBeanProxy(objectName, GatewaySenderMXBean.class);
+         }
+         if (bean != null) {
+           if (bean.isRunning()) {
+             if (bean.isPaused()) {
+               accumulateStartResult(
+                   resultData,
+                   member.getId(),
+                   CliStrings.GATEWAY_ERROR,
+                   CliStrings
+                       .format(
+                           CliStrings.GATEWAY_SENDER_0_IS_ALREADY_PAUSED_ON_MEMBER_1,
+                           new Object[] { senderId, member.getId() }));
+             } else {
+               bean.pause();
+               accumulateStartResult(resultData, member.getId(),
+                   CliStrings.GATEWAY_OK, CliStrings.format(
+                       CliStrings.GATEWAY_SENDER_0_IS_PAUSED_ON_MEMBER_1,
+                       new Object[] { senderId, member.getId() }));
+             }
+           } else {
+             accumulateStartResult(resultData, member.getId(),
+                 CliStrings.GATEWAY_ERROR, CliStrings.format(
+                     CliStrings.GATEWAY_SENDER_0_IS_NOT_RUNNING_ON_MEMBER_1,
+                     new Object[] { senderId, member.getId() }));
+           }
+         } else {
+           accumulateStartResult(resultData, member.getId(),
+               CliStrings.GATEWAY_ERROR, CliStrings.format(
+                   CliStrings.GATEWAY_SENDER_0_IS_NOT_AVAILABLE_ON_MEMBER_1,
+                   new Object[] { senderId, member.getId() }));
+         }
+       }
+       result = ResultBuilder.buildResult(resultData);
+     } catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     } catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.RESUME_GATEWAYSENDER, help = CliStrings.RESUME_GATEWAYSENDER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.GATEWAY_SENDER, operation=ResourceConstants.RESUME_GW_SENDER)
+   public Result resumeGatewaySender(
+       @CliOption(key = CliStrings.RESUME_GATEWAYSENDER__ID, 
+       mandatory = true, 
+       optionContext = ConverterHint.GATEWAY_SENDER_ID,
+       help = CliStrings.RESUME_GATEWAYSENDER__ID__HELP) String senderId,
+       
+       @CliOption(key = CliStrings.RESUME_GATEWAYSENDER__GROUP,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.RESUME_GATEWAYSENDER__GROUP__HELP) 
+       @CliMetaData (valueSeparator = ",") String onGroup,
+       
+       @CliOption(key = CliStrings.RESUME_GATEWAYSENDER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.RESUME_GATEWAYSENDER__MEMBER__HELP) 
+       @CliMetaData (valueSeparator = ",") String onMember) {
+     
+     Result result = null;
+     if (senderId != null)
+       senderId = senderId.trim();
+ //    if (memberNameOrId != null)
+ //      memberNameOrId = memberNameOrId.trim();
+ //
+ //    if (memberNameOrId != null && onGroup != null) {
+ //      return ResultBuilder
+ //          .createUserErrorResult(CliStrings.GATEWAY__MSG__OPTIONS);
+ //    }
+ 
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       SystemManagementService service = (SystemManagementService) ManagementService
+           .getExistingManagementService(cache);
+ 
+ 
+       GatewaySenderMXBean bean = null;
+ //
+ //      if (memberNameOrId != null && memberNameOrId.length() > 0) {
+ //        InfoResultData resultData = ResultBuilder.createInfoResultData();
+ //        DistributedMember memberToBeInvoked = CliUtil
+ //            .getDistributedMemberByNameOrId(memberNameOrId);
+ //
+ //        if (memberToBeInvoked != null) {
+ //          String memberId = memberToBeInvoked.getId();
+ //          if (cache.getDistributedSystem().getDistributedMember().getId()
+ //              .equals(memberId)) {
+ //            bean = service.getLocalGatewaySenderMXBean(senderId);
+ //          } else {
+ //            ObjectName objectName = service.getGatewaySenderMBeanName(memberToBeInvoked,
+ //                senderId);
+ //            bean = service.getMBeanProxy(objectName, GatewaySenderMXBean.class);
+ //          }
+ //          if (bean != null) {
+ //            if (bean.isRunning()) {
+ //              if (bean.isPaused()) {
+ //                bean.resume();
+ //                resultData.addLine(CliStrings.format(
+ //                    CliStrings.GATEWAY_SENDER_0_IS_RESUMED_ON_MEMBER_1,
+ //                    new Object[] { senderId, memberId }));
+ //                return ResultBuilder.buildResult(resultData);
+ //              }
+ //              resultData.addLine(CliStrings.format(
+ //                  CliStrings.GATEWAY_SENDER_0_IS_NOT_PAUSED_ON_MEMBER_1,
+ //                  new Object[] { senderId, memberId }));
+ //              return ResultBuilder.buildResult(resultData);
+ //            }
+ //            resultData.addLine(CliStrings.format(
+ //                CliStrings.GATEWAY_SENDER_0_IS_NOT_RUNNING_ON_MEMBER_1,
+ //                new Object[] { senderId, memberId }));
+ //            return ResultBuilder.buildResult(resultData);
+ //          }
+ //          return ResultBuilder.createBadConfigurationErrorResult(CliStrings
+ //              .format(CliStrings.GATEWAY_SENDER_0_IS_NOT_AVAILABLE_ON_MEMBER_1,
+ //                  new Object[] { senderId, memberId }));
+ //        }
+ //        return ResultBuilder.createUserErrorResult(CliStrings.format(
+ //            CliStrings.GATEWAY_MSG_MEMBER_0_NOT_FOUND,
+ //            new Object[] { memberNameOrId }));
+ //      }
+ 
+       TabularResultData resultData = ResultBuilder.createTabularResultData();
+       Set<DistributedMember> dsMembers = null;
+ //      if (onGroup != null && onGroup.length > 0) {
+ //        dsMembers = CliUtil.getDistributedMembersByGroup(cache, onGroup);
+ //      } else {
+ //        dsMembers = CliUtil.getAllNormalMembers(cache);
+ //      }
+ //      if (dsMembers.isEmpty()) {
+ //        return ResultBuilder
+ //            .createUserErrorResult(CliStrings.GATEWAY_MSG_MEMBERS_NOT_FOUND);
+ //      }
+       dsMembers = CliUtil.findAllMatchingMembers(onGroup, onMember);
+       for (DistributedMember member : dsMembers) {
+         if (cache.getDistributedSystem().getDistributedMember().getId().equals(
+             member.getId())) {
+           bean = service.getLocalGatewaySenderMXBean(senderId);
+         } else {
+           ObjectName objectName = service.getGatewaySenderMBeanName(member, senderId);
+           bean = service.getMBeanProxy(objectName, GatewaySenderMXBean.class);
+         }
+         if (bean != null) {
+           if (bean.isRunning()) {
+             if (bean.isPaused()) {
+               bean.resume();
+               accumulateStartResult(resultData, member.getId(),
+                   CliStrings.GATEWAY_OK, CliStrings.format(
+                       CliStrings.GATEWAY_SENDER_0_IS_RESUMED_ON_MEMBER_1,
+                       new Object[] { senderId, member.getId() }));
+             } else {
+               accumulateStartResult(resultData, member.getId(),
+                   CliStrings.GATEWAY_ERROR, CliStrings.format(
+                       CliStrings.GATEWAY_SENDER_0_IS_NOT_PAUSED_ON_MEMBER_1,
+                       new Object[] { senderId, member.getId() }));
+             }
+           } else {
+             accumulateStartResult(resultData, member.getId(),
+                 CliStrings.GATEWAY_ERROR, CliStrings.format(
+                     CliStrings.GATEWAY_SENDER_0_IS_NOT_RUNNING_ON_MEMBER_1,
+                     new Object[] { senderId, member.getId() }));
+           }
+         } else {
+           accumulateStartResult(resultData, member.getId(),
+               CliStrings.GATEWAY_ERROR, CliStrings.format(
+                   CliStrings.GATEWAY_SENDER_0_IS_NOT_AVAILABLE_ON_MEMBER_1,
+                   new Object[] { senderId, member.getId() }));
+         }
+       }
+       result = ResultBuilder.buildResult(resultData);
+     } catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     } catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.STOP_GATEWAYSENDER, help = CliStrings.STOP_GATEWAYSENDER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.GATEWAY_SENDER, operation=ResourceConstants.STOP_GW_SENDER)
+   public Result stopGatewaySender(
+       @CliOption(key = CliStrings.STOP_GATEWAYSENDER__ID, 
+       mandatory = true, 
+       optionContext = ConverterHint.GATEWAY_SENDER_ID,
+       help = CliStrings.STOP_GATEWAYSENDER__ID__HELP) String senderId,
+       
+       @CliOption(key = CliStrings.STOP_GATEWAYSENDER__GROUP,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.STOP_GATEWAYSENDER__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",") String onGroup,
+       
+       @CliOption(key = CliStrings.STOP_GATEWAYSENDER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.STOP_GATEWAYSENDER__MEMBER__HELP) 
+       @CliMetaData (valueSeparator = ",") String onMember) {
+     
+     Result result = null;
+     if (senderId != null)
+       senderId = senderId.trim();
+    
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       SystemManagementService service = (SystemManagementService) ManagementService
+           .getExistingManagementService(cache);
+ 
+ 
+       GatewaySenderMXBean bean = null;
+ 
+ 
+       TabularResultData resultData = ResultBuilder.createTabularResultData();
+       Set<DistributedMember> dsMembers = CliUtil.findAllMatchingMembers(onGroup, onMember);
+ 
+       for (DistributedMember member : dsMembers) {
+         if (cache.getDistributedSystem().getDistributedMember().getId().equals(
+             member.getId())) {
+           bean = service.getLocalGatewaySenderMXBean(senderId);
+         } else {
+           ObjectName objectName = service.getGatewaySenderMBeanName(member, senderId);
+           bean = service.getMBeanProxy(objectName, GatewaySenderMXBean.class);
+         }
+         if (bean != null) {
+           if (bean.isRunning()) {
+             bean.stop();
+             accumulateStartResult(resultData, member.getId(),
+                 CliStrings.GATEWAY_OK, CliStrings.format(
+                     CliStrings.GATEWAY_SENDER_0_IS_STOPPED_ON_MEMBER_1,
+                     new Object[] { senderId, member.getId() }));
+ 
+           } else {
+             accumulateStartResult(resultData, member.getId(),
+                 CliStrings.GATEWAY_ERROR, CliStrings.format(
+                     CliStrings.GATEWAY_SENDER_0_IS_NOT_RUNNING_ON_MEMBER_1,
+                     new Object[] { senderId, member.getId() }));
+           }
+         } else {
+           accumulateStartResult(resultData, member.getId(),
+               CliStrings.GATEWAY_ERROR, CliStrings.format(
+                   CliStrings.GATEWAY_SENDER_0_IS_NOT_AVAILABLE_ON_MEMBER_1,
+                   new Object[] { senderId, member.getId() }));
+         }
+       }
+       result = ResultBuilder.buildResult(resultData);
+     } catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     } catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+     return result;
+   }
+   
+   @CliCommand(value = CliStrings.CREATE_GATEWAYRECEIVER, help = CliStrings.CREATE_GATEWAYRECEIVER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.CREATE_GW_RECEIVER)
+   public Result createGatewayReceiver(
+       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__GROUP,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.CREATE_GATEWAYRECEIVER__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",") String[] onGroups,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.CREATE_GATEWAYRECEIVER__MEMBER__HELP) 
+       @CliMetaData (valueSeparator = ",") String onMember,
+           
+       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__MANUALSTART, 
+       help = CliStrings.CREATE_GATEWAYRECEIVER__MANUALSTART__HELP) Boolean manualStart,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__STARTPORT, 
+       help = CliStrings.CREATE_GATEWAYRECEIVER__STARTPORT__HELP) Integer startPort,
+ 
+       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__ENDPORT, 
+       help = CliStrings.CREATE_GATEWAYRECEIVER__ENDPORT__HELP) Integer endPort,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__BINDADDRESS, 
+       help = CliStrings.CREATE_GATEWAYRECEIVER__BINDADDRESS__HELP) String bindAddress,
+ 
+       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__MAXTIMEBETWEENPINGS, 
+       help = CliStrings.CREATE_GATEWAYRECEIVER__MAXTIMEBETWEENPINGS__HELP) Integer maximumTimeBetweenPings,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__SOCKETBUFFERSIZE, 
+       help = CliStrings.CREATE_GATEWAYRECEIVER__SOCKETBUFFERSIZE__HELP) Integer socketBufferSize,
+       
+       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__GATEWAYTRANSPORTFILTER, 
+       help = CliStrings.CREATE_GATEWAYRECEIVER__GATEWAYTRANSPORTFILTER__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] gatewayTransportFilters) {
+ 
+     Result result = null;
+ 
+     XmlEntity xmlEntity = null;
+     try {
+       GatewayReceiverFunctionArgs gatewayReceiverFunctionArgs = new GatewayReceiverFunctionArgs(manualStart, startPort, endPort, bindAddress,
+           socketBufferSize, maximumTimeBetweenPings, gatewayTransportFilters);
+ 
+       Set<DistributedMember> membersToCreateGatewayReceiverOn = CliUtil.findAllMatchingMembers(onGroups, onMember == null ? null : onMember.split(","));
+ 
+       ResultCollector<?, ?> resultCollector = CliUtil.executeFunction(GatewayReceiverCreateFunction.INSTANCE,
+           gatewayReceiverFunctionArgs, membersToCreateGatewayReceiverOn);
+       @SuppressWarnings("unchecked")
+       List<CliFunctionResult> gatewayReceiverCreateResults = (List<CliFunctionResult>) resultCollector.getResult();
+ 
+       TabularResultData tabularResultData = ResultBuilder.createTabularResultData();
+       final String errorPrefix = "ERROR: ";
+ 
+       for (CliFunctionResult gatewayReceiverCreateResult : gatewayReceiverCreateResults) {
+         boolean success = gatewayReceiverCreateResult.isSuccessful();
+         tabularResultData.accumulate("Member", gatewayReceiverCreateResult.getMemberIdOrName());
+         tabularResultData.accumulate("Status", (success ? "" : errorPrefix) + gatewayReceiverCreateResult.getMessage());
+         
+         if (success && xmlEntity == null) {
+           xmlEntity = gatewayReceiverCreateResult.getXmlEntity();
+         }
+       }
+       result = ResultBuilder.buildResult(tabularResultData);
+     } catch (IllegalArgumentException e) {
+       LogWrapper.getInstance().info(e.getMessage());
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+     }
+     catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     }
+     
+     if (xmlEntity != null) {
+       result.setCommandPersisted((new SharedConfigurationWriter()).addXmlEntity(xmlEntity, onGroups));
+     }
+     
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.LOAD_BALANCE_GATEWAYSENDER, help = CliStrings.LOAD_BALANCE_GATEWAYSENDER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LOAD_BALANCE_GW_SENDER)
+   public Result loadBalanceGatewaySender(
+       @CliOption(key = CliStrings.LOAD_BALANCE_GATEWAYSENDER__ID, 
+       mandatory = true, 
+       optionContext = ConverterHint.GATEWAY_SENDER_ID,
+       help = CliStrings.LOAD_BALANCE_GATEWAYSENDER__ID__HELP) String senderId) {
+     
+     Result result = null;
+     if (senderId != null) {
+       senderId = senderId.trim();
+     }
+ 
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       SystemManagementService service = (SystemManagementService) ManagementService
+           .getExistingManagementService(cache);
+       TabularResultData resultData = ResultBuilder.createTabularResultData();
+       Set<DistributedMember> dsMembers = CliUtil.getAllNormalMembers(cache);
+ 
+       if (dsMembers.isEmpty()) {
+         result = ResultBuilder.createInfoResult(CliStrings.GATEWAY_MSG_MEMBERS_NOT_FOUND);
+       } else {
+         boolean gatewaySenderExists = false;
+         for (DistributedMember member : dsMembers) {
+           GatewaySenderMXBean bean = null;
+           if (cache.getDistributedSystem().getDistributedMember().getId().equals(
+               member.getId())) {
+             bean = service.getLocalGatewaySenderMXBean(senderId);
+           } else {
+             ObjectName objectName = service.getGatewaySenderMBeanName(member, senderId);
+             bean = service.getMBeanProxy(objectName, GatewaySenderMXBean.class);
+           }
+           if (bean != null) {
+             gatewaySenderExists = true;
+             bean.rebalance();
+             accumulateStartResult(resultData, member.getId(),
+                 CliStrings.GATEWAY_OK, CliStrings.format(
+                     CliStrings.GATEWAY_SENDER_0_IS_REBALANCED_ON_MEMBER_1,
+                     new Object[] { senderId, member.getId() }));
+           } else {
+             accumulateStartResult(resultData, member.getId(),
+                 CliStrings.GATEWAY_ERROR, CliStrings.format(
+                     CliStrings.GATEWAY_SENDER_0_IS_NOT_AVAILABLE_ON_MEMBER_1,
+                     new Object[] { senderId, member.getId() }));
+           }
+         }
+         if (gatewaySenderExists) {
+           result = ResultBuilder.buildResult(resultData);
+         } else {
+           result = ResultBuilder.createInfoResult(CliStrings.format(
+               CliStrings.GATEWAY_SENDER_0_IS_NOT_FOUND_ON_ANY_MEMBER,
+               new Object[] { senderId }));
+         }
+       }
+     } catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+ 
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.START_GATEWAYRECEIVER, help = CliStrings.START_GATEWAYRECEIVER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.GATEWAY_RECEIVER, operation=ResourceConstants.START_GW_RECEIVER)
+   public Result startGatewayReceiver(
+       @CliOption(key = CliStrings.START_GATEWAYRECEIVER__GROUP,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.START_GATEWAYRECEIVER__GROUP__HELP) 
+       @CliMetaData (valueSeparator = ",")  String onGroup,
+       
+       @CliOption(key = CliStrings.START_GATEWAYRECEIVER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.START_GATEWAYRECEIVER__MEMBER__HELP) 
+       @CliMetaData (valueSeparator = ",") String onMember) {
+     Result result = null;
+ 
+ 
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       SystemManagementService service = (SystemManagementService) ManagementService.getExistingManagementService(cache);
+ 
+       GatewayReceiverMXBean receieverBean = null;
+ 
+       TabularResultData resultData = ResultBuilder.createTabularResultData();
+       Set<DistributedMember> dsMembers = CliUtil.findAllMatchingMembers(onGroup, onMember);
+ 
+       for (DistributedMember member : dsMembers) {
+         ObjectName gatewayReceiverObjectName = MBeanJMXAdapter.getGatewayReceiverMBeanName(member);
+ 
+         if (gatewayReceiverObjectName != null) {
+           receieverBean = service.getMBeanProxy(gatewayReceiverObjectName, GatewayReceiverMXBean.class);
+           if (receieverBean != null) {
+             if (receieverBean.isRunning()) {
+               accumulateStartResult(resultData, member.getId(), CliStrings.GATEWAY_ERROR, CliStrings.format(
+                   CliStrings.GATEWAY_RECEIVER_IS_ALREADY_STARTED_ON_MEMBER_0, new Object[] { member.getId() }));
+             } else {
+               receieverBean.start();
+               accumulateStartResult(resultData, member.getId(), CliStrings.GATEWAY_OK, CliStrings.format(
+                   CliStrings.GATEWAY_RECEIVER_IS_STARTED_ON_MEMBER_0, new Object[] { member.getId() }));
+             }
+           } else {
+             accumulateStartResult(resultData, member.getId(), CliStrings.GATEWAY_ERROR, CliStrings.format(
+                 CliStrings.GATEWAY_RECEIVER_IS_NOT_AVAILABLE_ON_MEMBER_0, new Object[] { member.getId() }));
+           }
+         } else {
+           accumulateStartResult(resultData, member.getId(), CliStrings.GATEWAY_ERROR, CliStrings.format(
+               CliStrings.GATEWAY_RECEIVER_IS_NOT_AVAILABLE_ON_MEMBER_0, new Object[] { member.getId() }));
+         }
+       }
+       result = ResultBuilder.buildResult(resultData);
+     }
+     catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     }
+     catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.STOP_GATEWAYRECEIVER, help = CliStrings.STOP_GATEWAYRECEIVER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.GATEWAY_RECEIVER, operation=ResourceConstants.STOP_GW_RECEIVER)
+   public Result stopGatewayReceiver(
+       
+       @CliOption(key = CliStrings.STOP_GATEWAYRECEIVER__GROUP, 
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.STOP_GATEWAYRECEIVER__GROUP__HELP) 
+       @CliMetaData (valueSeparator = ",") String onGroup,
+       
+       @CliOption(key = CliStrings.STOP_GATEWAYRECEIVER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.STOP_GATEWAYRECEIVER__MEMBER__HELP) 
+       @CliMetaData (valueSeparator = ",") String onMember) {
+     
+     Result result = null;
+ 
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       SystemManagementService service = (SystemManagementService) ManagementService
+           .getExistingManagementService(cache);
+ 
+ 
+       GatewayReceiverMXBean receieverBean = null;
+ 
+ 
+       TabularResultData resultData = ResultBuilder.createTabularResultData();
+       Set<DistributedMember> dsMembers = CliUtil.findAllMatchingMembers(onGroup, onMember);
+ 
+       for (DistributedMember member : dsMembers) {
+         ObjectName gatewayReceiverObjectName = MBeanJMXAdapter
+             .getGatewayReceiverMBeanName(member);
+ 
+         if (gatewayReceiverObjectName != null) {
+           receieverBean = service.getMBeanProxy(gatewayReceiverObjectName,
+               GatewayReceiverMXBean.class);
+           if (receieverBean != null) {
+             if (receieverBean.isRunning()) {
+               receieverBean.stop();
+               accumulateStartResult(resultData, member.getId(),
+                   CliStrings.GATEWAY_OK, CliStrings.format(
+                       CliStrings.GATEWAY_RECEIVER_IS_STOPPED_ON_MEMBER_0,
+                       new Object[] { member.getId() }));
+             } else {
+               accumulateStartResult(resultData, member.getId(),
+                   CliStrings.GATEWAY_ERROR, CliStrings.format(
+                       CliStrings.GATEWAY_RECEIVER_IS_NOT_RUNNING_ON_MEMBER_0,
+                       new Object[] { member.getId() }));
+             }
+           } else {
+             accumulateStartResult(resultData, member.getId(),
+                 CliStrings.GATEWAY_ERROR, CliStrings.format(
+                     CliStrings.GATEWAY_RECEIVER_IS_NOT_AVAILABLE_ON_MEMBER_0,
+                     new Object[] { member.getId() }));
+           }
+         } else {
+           accumulateStartResult(resultData, member.getId(),
+               CliStrings.GATEWAY_ERROR, CliStrings.format(
+                   CliStrings.GATEWAY_RECEIVER_IS_NOT_AVAILABLE_ON_MEMBER_0,
+                   new Object[] { member.getId() }));
+         }
+       }
+       result = ResultBuilder.buildResult(resultData);
+     } catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     } catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.LIST_GATEWAY, help = CliStrings.LIST_GATEWAY__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result listGateway(
+       @CliOption(key = CliStrings.LIST_GATEWAY__MEMBER,
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.LIST_GATEWAY__MEMBER__HELP)
+       @CliMetaData (valueSeparator = ",") String onMember,
+       @CliOption(key = CliStrings.LIST_GATEWAY__GROUP,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.LIST_GATEWAY__GROUP__HELP) 
+       @CliMetaData (valueSeparator = ",") String onGroup) {
+     
+     Result result = null;
+     Cache cache = CacheFactory.getAnyInstance();
+     try {
+       SystemManagementService service = (SystemManagementService) ManagementService
+           .getExistingManagementService(cache);
+ 
+       Set<DistributedMember> dsMembers = null;
+ //      if (onGroup != null && onGroup.length > 0) {
+ //        dsMembers = CliUtil.getDistributedMembersByGroup(cache, onGroup);
+ //      } else {
+ //        dsMembers = CliUtil.getAllNormalMembers(cache);
+ //      }
+ //      if (dsMembers.isEmpty()) {
+ //        return ResultBuilder
+ //            .createUserErrorResult(CliStrings.GATEWAY_MSG_MEMBERS_NOT_FOUND);
+ //      }
+       dsMembers = CliUtil.findAllMatchingMembers(onGroup, onMember);
+ 
+       Map<String, Map<String, GatewaySenderMXBean>> gatewaySenderBeans = new TreeMap<String, Map<String, GatewaySenderMXBean>>();
+       Map<String, GatewayReceiverMXBean> gatewayReceiverBeans = new TreeMap<String, GatewayReceiverMXBean>();
+ 
+       DistributedSystemMXBean dsMXBean = service.getDistributedSystemMXBean();
+       for (DistributedMember member : dsMembers) {
+         String memberName = member.getName();
+         String memberNameOrId = (memberName != null  && !memberName.isEmpty())? memberName : member.getId();
+         ObjectName gatewaySenderObjectNames[] = dsMXBean
+             .listGatewaySenderObjectNames(memberNameOrId);
+         // gateway senders : a member can have multiple gateway sendersdefined
+         // on it
+         if (gatewaySenderObjectNames != null) {
+           for (ObjectName name : gatewaySenderObjectNames) {
+             GatewaySenderMXBean senderBean = service.getMBeanProxy(name,
+                 GatewaySenderMXBean.class);
+             if (senderBean != null) {
+               if (gatewaySenderBeans.containsKey(senderBean.getSenderId())) {
+                 Map<String, GatewaySenderMXBean> memberToBeanMap = gatewaySenderBeans
+                     .get(senderBean.getSenderId());
+                 memberToBeanMap.put(member.getId(), senderBean);
+               } else {
+                 Map<String, GatewaySenderMXBean> memberToBeanMap = new TreeMap<String, GatewaySenderMXBean>();
+                 memberToBeanMap.put(member.getId(), senderBean);
+                 gatewaySenderBeans.put(senderBean.getSenderId(),
+                     memberToBeanMap);
+               }
+             }
+           }
+         }
+         // gateway receivers : a member can have only one gateway receiver
+         ObjectName gatewayReceiverObjectName = MBeanJMXAdapter
+             .getGatewayReceiverMBeanName(member);
+         if (gatewayReceiverObjectName != null) {
+           GatewayReceiverMXBean receieverBean = null;
+           receieverBean = service.getMBeanProxy(gatewayReceiverObjectName,
+               GatewayReceiverMXBean.class);
+           if (receieverBean != null) {
+             gatewayReceiverBeans.put(member.getId(), receieverBean);
+           }
+         }
+       }
+       if (gatewaySenderBeans.isEmpty() && gatewayReceiverBeans.isEmpty()) {
+         return ResultBuilder
+             .createUserErrorResult(CliStrings.GATEWAYS_ARE_NOT_AVAILABLE_IN_CLUSTER);
+       }
+       CompositeResultData crd = ResultBuilder.createCompositeResultData();
+       crd.setHeader(CliStrings.HEADER_GATEWAYS);
+       accumulateListGatewayResult(crd, gatewaySenderBeans, gatewayReceiverBeans);
+       result = ResultBuilder.buildResult(crd);
+     } catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     } catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.STATUS_GATEWAYSENDER, help = CliStrings.STATUS_GATEWAYSENDER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result statusGatewaySender(
+       @CliOption(key = CliStrings.STATUS_GATEWAYSENDER__ID, 
+       mandatory = true, 
+       optionContext = ConverterHint.GATEWAY_SENDER_ID,
+       help = CliStrings.STATUS_GATEWAYSENDER__ID__HELP) String senderId,
+       
+       @CliOption(key = CliStrings.STATUS_GATEWAYSENDER__GROUP,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.STATUS_GATEWAYSENDER__GROUP__HELP) 
+       @CliMetaData (valueSeparator = ",") String onGroup,
+       
+       @CliOption(key = CliStrings.STATUS_GATEWAYSENDER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.STATUS_GATEWAYSENDER__MEMBER__HELP)
+       @CliMetaData (valueSeparator = ",") String onMember) {
+     
+     Result result = null;
+     if (senderId != null)
+       senderId = senderId.trim();
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       SystemManagementService service = (SystemManagementService) ManagementService
+           .getExistingManagementService(cache);
+ 
+       GatewaySenderMXBean bean = null;
+ 
+ 
+       CompositeResultData crd = ResultBuilder.createCompositeResultData();
+       TabularResultData availableSenderData = crd.addSection(
+           CliStrings.SECTION_GATEWAY_SENDER_AVAILABLE).addTable(
+           CliStrings.TABLE_GATEWAY_SENDER);
+ 
+       TabularResultData notAvailableSenderData = crd.addSection(
+           CliStrings.SECTION_GATEWAY_SENDER_NOT_AVAILABLE).addTable(
+           CliStrings.TABLE_GATEWAY_SENDER);
+ 
+       Set<DistributedMember> dsMembers = null;
+       dsMembers = CliUtil.findAllMatchingMembers(onGroup, onMember);
+       for (DistributedMember member : dsMembers) {
+         if (cache.getDistributedSystem().getDistributedMember().getId().equals(
+             member.getId())) {
+           bean = service.getLocalGatewaySenderMXBean(senderId);
+         } else {
+           ObjectName objectName = service.getGatewaySenderMBeanName(member, senderId);
+           bean = service.getMBeanProxy(objectName, GatewaySenderMXBean.class);
+         }
+         if (bean != null) {
+           buildSenderStatus(member.getId(), bean, availableSenderData);
+         } else {
+           buildSenderStatus(member.getId(), bean, notAvailableSenderData);
+         }
+       }
+       result = ResultBuilder.buildResult(crd);
+     } catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     } catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.STATUS_GATEWAYRECEIVER, help = CliStrings.STATUS_GATEWAYRECEIVER__HELP)
+   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEMFIRE_WAN)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.LIST_DS)
+   public Result statusGatewayReceiver(
+       @CliOption(key = CliStrings.STATUS_GATEWAYRECEIVER__GROUP, 
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.STATUS_GATEWAYRECEIVER__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",")  String onGroup,
+       
+       @CliOption(key = CliStrings.STATUS_GATEWAYRECEIVER__MEMBER, 
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.STATUS_GATEWAYRECEIVER__MEMBER__HELP) 
+       @CliMetaData (valueSeparator = ",") String onMember) {
+     
+     Result result = null;
+ 
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       SystemManagementService service = (SystemManagementService) ManagementService
+           .getExistingManagementService(cache);
+ 
+ 
+       CompositeResultData crd = ResultBuilder.createCompositeResultData();
+       TabularResultData availableReceiverData = crd.addSection(
+           CliStrings.SECTION_GATEWAY_RECEIVER_AVAILABLE).addTable(
+           CliStrings.TABLE_GATEWAY_RECEIVER);
+ 
+       TabularResultData notAvailableReceiverData = crd.addSection(
+           CliStrings.SECTION_GATEWAY_RECEIVER_NOT_AVAILABLE).addTable(
+           CliStrings.TABLE_GATEWAY_RECEIVER);
+ 
+       Set<DistributedMember> dsMembers = CliUtil.findAllMatchingMembers(onGroup, onMember);
+ 
+       for (DistributedMember member : dsMembers) {
+         ObjectName gatewayReceiverObjectName = MBeanJMXAdapter
+             .getGatewayReceiverMBeanName(member);
+         if (gatewayReceiverObjectName != null) {
+           GatewayReceiverMXBean receieverBean = service.getMBeanProxy(
+               gatewayReceiverObjectName, GatewayReceiverMXBean.class);
+           if (receieverBean != null) {
+             buildReceiverStatus(member.getId(), receieverBean, availableReceiverData);
+             continue;
+           }
+         }
+         buildReceiverStatus(member.getId(), null, notAvailableReceiverData);
+       }
+       result = ResultBuilder.buildResult(crd);
+     } catch (CommandResultException crex) {
+       result = handleCommandResultException(crex);
+     } catch (Exception e) {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(e));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + e.getMessage());
+     }
+     return result;
+   }
+ 
+   private TabularResultData buildReceiverStatus(String memberId,
+       GatewayReceiverMXBean bean, TabularResultData resultData) {
+     resultData.accumulate(CliStrings.RESULT_HOST_MEMBER, memberId);
+     if (bean != null) {
+       resultData.accumulate(CliStrings.RESULT_PORT, bean.getPort());
+       resultData.accumulate(CliStrings.RESULT_STATUS,
+           bean.isRunning() ? CliStrings.GATEWAY_RUNNING
+               : CliStrings.GATEWAY_NOT_RUNNING);
+     } else {
+       resultData.accumulate(CliStrings.GATEWAY_ERROR,
+           CliStrings.GATEWAY_RECEIVER_IS_NOT_AVAILABLE_OR_STOPPED);
+     }
+     return resultData;
+   }
+ 
+   private TabularResultData buildSenderStatus(String memberId,
+       GatewaySenderMXBean bean, TabularResultData resultData) {
+     resultData.accumulate(CliStrings.RESULT_HOST_MEMBER, memberId);
+     if (bean != null) {
+       resultData.accumulate(CliStrings.RESULT_TYPE,
+           bean.isParallel() ? CliStrings.SENDER_PARALLEL
+               : CliStrings.SENDER_SERIAL);
+       if (!bean.isParallel()) {
+         resultData.accumulate(CliStrings.RESULT_POLICY,
+             bean.isPrimary() ? CliStrings.SENDER_PRIMARY
+                 : CliStrings.SENDER_SECONADRY);
+       }
+       if (bean.isRunning()) {
+         if (bean.isPaused()) {
+           resultData.accumulate(CliStrings.RESULT_STATUS,
+               CliStrings.SENDER_PAUSED);
+         } else {
+           resultData.accumulate(CliStrings.RESULT_STATUS,
+               CliStrings.GATEWAY_RUNNING);
+         }
+       } else {
+         resultData.accumulate(CliStrings.RESULT_STATUS,
+             CliStrings.GATEWAY_NOT_RUNNING);
+       }
+     } else {
+       resultData.accumulate(CliStrings.GATEWAY_ERROR,
+           CliStrings.GATEWAY_SENDER_IS_NOT_AVAILABLE);
+     }
+ 
+     return resultData;
+   }
+ 
+   // CliStrings.format(
+   // CliStrings.GATEWAY_SENDER_0_IS_STARTED_ON_MEMBER_1,
+   // new Object[] {senderId, memberId });
+   //  
+   // CliStrings.format(
+   // CliStrings.GATEWAY_SENDER_0_IS_ALREADY_STARTED_ON_MEMBER_1,
+   // new Object[] {senderId, memberId });
+   //  
+   // CliStrings.format(
+   // CliStrings.GATEWAY_SENDER_0_IS_NOT_AVAILABLE_ON_MEMBER_1,
+   // new Object[] {senderId, memberId });
+ 
+   private void accumulateListGatewayResult(CompositeResultData crd,
+       Map<String, Map<String, GatewaySenderMXBean>> gatewaySenderBeans,
+       Map<String, GatewayReceiverMXBean> gatewayReceiverBeans) {
+ 
+     if (!gatewaySenderBeans.isEmpty()) {
+       TabularResultData gatewaySenderData = crd.addSection(
+           CliStrings.SECTION_GATEWAY_SENDER).addTable(
+           CliStrings.TABLE_GATEWAY_SENDER).setHeader(
+           CliStrings.HEADER_GATEWAY_SENDER);
+       for (Map.Entry<String, Map<String, GatewaySenderMXBean>> entry : gatewaySenderBeans
+           .entrySet()) {
+         for (Map.Entry<String, GatewaySenderMXBean> memberToBean : entry
+             .getValue().entrySet()) {
+           gatewaySenderData.accumulate(CliStrings.RESULT_GATEWAY_SENDER_ID,
+               entry.getKey());
+           gatewaySenderData.accumulate(CliStrings.RESULT_HOST_MEMBER,
+               memberToBean.getKey());
+           gatewaySenderData.accumulate(CliStrings.RESULT_REMOTE_CLUSTER,
+               memberToBean.getValue().getRemoteDSId());
+           gatewaySenderData.accumulate(CliStrings.RESULT_TYPE, memberToBean
+               .getValue().isParallel() ? CliStrings.SENDER_PARALLEL
+               : CliStrings.SENDER_SERIAL);
+           gatewaySenderData.accumulate(CliStrings.RESULT_STATUS, memberToBean
+               .getValue().isRunning() ? CliStrings.GATEWAY_RUNNING
+               : CliStrings.GATEWAY_NOT_RUNNING);
+           gatewaySenderData.accumulate(CliStrings.RESULT_QUEUED_EVENTS,
+               memberToBean.getValue().getEventQueueSize());
+           gatewaySenderData.accumulate(CliStrings.RESULT_RECEIVER, memberToBean
+               .getValue().getGatewayReceiver());
+         }
+       }
+     }
+ 
+     if (!gatewayReceiverBeans.isEmpty()) {
+       TabularResultData gatewayReceiverData = crd.addSection(
+           CliStrings.SECTION_GATEWAY_RECEIVER).addTable(
+           CliStrings.TABLE_GATEWAY_RECEIVER).setHeader(
+           CliStrings.HEADER_GATEWAY_RECEIVER);
+       for (Map.Entry<String, GatewayReceiverMXBean> entry : gatewayReceiverBeans
+           .entrySet()) {
+         gatewayReceiverData.accumulate(CliStrings.RESULT_HOST_MEMBER, entry
+             .getKey());
+         gatewayReceiverData.accumulate(CliStrings.RESULT_PORT, entry.getValue()
+             .getPort());
+         gatewayReceiverData.accumulate(CliStrings.RESULT_SENDERS_COUNT, entry
+             .getValue().getClientConnectionCount());
+         gatewayReceiverData.accumulate(CliStrings.RESULT_SENDER_CONNECTED,
+             entry.getValue().getConnectedGatewaySenders());
+       }
+     }
+ 
+   }
+   
+   private void accumulateStartResult(TabularResultData resultData,
+       String member, String Status, String message) {
+     if (member != null) {
+       resultData.accumulate("Member", member);
+     }
+     resultData.accumulate("Result", Status);
+     resultData.accumulate("Message", message);
+   }
+ 
+   @CliAvailabilityIndicator( { CliStrings.CREATE_GATEWAYSENDER,
+       CliStrings.START_GATEWAYSENDER, CliStrings.PAUSE_GATEWAYSENDER,
+       CliStrings.RESUME_GATEWAYSENDER, CliStrings.STOP_GATEWAYSENDER,
+       CliStrings.CREATE_GATEWAYRECEIVER, CliStrings.START_GATEWAYRECEIVER,
+       CliStrings.STOP_GATEWAYRECEIVER, CliStrings.LIST_GATEWAY,
+       CliStrings.STATUS_GATEWAYSENDER, CliStrings.STATUS_GATEWAYRECEIVER,
+       CliStrings.LOAD_BALANCE_GATEWAYSENDER })
+   public boolean isWanCommandsAvailable() {
+     boolean isAvailable = true; // always available on server
+     if (CliUtil.isGfshVM()) {
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;
+   }
+   
+   private Result handleCommandResultException(CommandResultException crex) {
+     Result result = null;
+     if (crex.getResult() != null) {
+       result = crex.getResult();
+     }
+     else {
+       LogWrapper.getInstance().warning(
+           CliStrings.GATEWAY_ERROR + CliUtil.stackTraceAsString(crex));
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.GATEWAY_ERROR
+           + crex.getMessage());
+     }
+     return result;
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java
index 0000000,c2a1b2f..fd318aa
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java
@@@ -1,0 -1,416 +1,478 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.shell;
+ 
++import java.io.File;
+ import java.io.IOException;
++import java.io.InputStream;
+ import java.net.MalformedURLException;
++import java.net.URL;
+ import java.text.MessageFormat;
+ import java.util.Arrays;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.Map;
+ import java.util.Map.Entry;
++import java.util.Properties;
+ import java.util.Set;
+ import java.util.TreeSet;
+ import java.util.concurrent.atomic.AtomicBoolean;
++
+ import javax.management.AttributeNotFoundException;
+ import javax.management.InstanceNotFoundException;
+ import javax.management.JMX;
+ import javax.management.MBeanException;
+ import javax.management.MBeanServerConnection;
+ import javax.management.MalformedObjectNameException;
+ import javax.management.Notification;
+ import javax.management.NotificationListener;
+ import javax.management.ObjectName;
+ import javax.management.QueryExp;
+ import javax.management.ReflectionException;
+ import javax.management.remote.JMXConnectionNotification;
+ import javax.management.remote.JMXConnector;
+ import javax.management.remote.JMXConnectorFactory;
+ import javax.management.remote.JMXServiceURL;
+ import javax.rmi.ssl.SslRMIClientSocketFactory;
+ 
++import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.internal.util.ArrayUtils;
++import com.gemstone.gemfire.internal.util.IOUtils;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
+ import com.gemstone.gemfire.management.MemberMXBean;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.ManagementConstants;
++import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.CommandRequest;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
++import com.gemstone.gemfire.management.internal.cli.commands.ShellCommands;
++import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ 
+ /**
+  * OperationInvoker JMX Implementation
+  *
+  * @author Abhishek Chaudhari
+  *
+  * @since 7.0
+  */
+ public class JmxOperationInvoker implements OperationInvoker {
+ 
+   public static final String JMX_URL_FORMAT = "service:jmx:rmi://{0}/jndi/rmi://{0}:{1}/jmxrmi";
+ 
+   // an JMX object describing the client-end of a JMX connection
+   private JMXConnector connector;
+ 
+   // address of the JMX Connector Server
+   private JMXServiceURL url;
+ 
+   // an instance of an MBeanServer connection (in a connected state)
+   private MBeanServerConnection mbsc;
+ 
+   // String representation of the GemFire JMX Manager endpoint, including host and port
+   private String endpoints;
+ 
+   // the host and port of the GemFire Manager
+   private String managerHost;
+   private int managerPort;
+ 
+   // MBean Proxies
+   private DistributedSystemMXBean distributedSystemMXBeanProxy;
+   private MemberMXBean memberMXBeanProxy;
+ 
+   private ObjectName managerMemberObjectName;
+ 
+   /*package*/ final AtomicBoolean isConnected = new AtomicBoolean(false);
+   /*package*/ final AtomicBoolean isSelfDisconnect = new AtomicBoolean(false);
+ 
+   private int clusterId = CLUSTER_ID_WHEN_NOT_CONNECTED;
+ 
+   public JmxOperationInvoker(final String host,
+                              final int port,
+                              final String userName,
+                              final String password,
 -                             final Map<String, String> sslConfigProps)
++                             final Map<String, String> sslConfigProps, String gfSecurityPropertiesPath)
+     throws Exception
+   {
+     final Set<String> propsToClear = new TreeSet<String>();
+     try {
+       this.managerHost = host;
+       this.managerPort = port;
+       this.endpoints = host + "[" + port + "]"; // Use the same syntax as the "connect" command.
+ 
+       // Modify check period from default (60 sec) to 1 sec
+       final Map<String, Object> env = new HashMap<String, Object>();
+ 
+       env.put(JMXConnectionListener.CHECK_PERIOD_PROP, JMXConnectionListener.CHECK_PERIOD);
+ 
+       if (userName != null && userName.length() > 0) {
+         env.put(JMXConnector.CREDENTIALS, new String[] { userName, password });
+       }      
+       Set<Entry<String, String>> entrySet = sslConfigProps.entrySet();
+       for (Iterator<Entry<String, String>> it = entrySet.iterator(); it.hasNext();) {
+         Entry<String, String> entry = it.next();
+         String key = entry.getKey();
+         String value = entry.getValue();
+         if (key.startsWith("javax.") || key.startsWith("cluster-ssl") || key.startsWith("jmx-manager-ssl") ) {
+           key =  checkforSystemPropertyPrefix(entry.getKey());
+           if((key.equals(Gfsh.SSL_ENABLED_CIPHERS) || key.equals(Gfsh.SSL_ENABLED_PROTOCOLS)) && "any".equals(value)){
+             continue;
+           }
+           System.setProperty(key, value);
+           propsToClear.add(key);
+         }
+       }
+ 
+       if(!sslConfigProps.isEmpty()){
+         if (System.getProperty(Gfsh.SSL_KEYSTORE) != null || System.getProperty(Gfsh.SSL_TRUSTSTORE) != null) {
+           // use ssl to connect
+           env.put("com.sun.jndi.rmi.factory.socket", new SslRMIClientSocketFactory());
+         }
+       }
+ 
++      //Check for JMX Credentials if empty put properties instance directly so that
++      //jmx management interceptor can read it for custom security properties
++      if(!env.containsKey(JMXConnector.CREDENTIALS)) {        
++        env.put(JMXConnector.CREDENTIALS, readProperties(gfSecurityPropertiesPath));
++      }
+ 
+       this.url = new JMXServiceURL(MessageFormat.format(JMX_URL_FORMAT, checkAndConvertToCompatibleIPv6Syntax(host), String.valueOf(port)));      
+       this.connector = JMXConnectorFactory.connect(url, env);
+       this.mbsc = connector.getMBeanServerConnection();
+       this.connector.addConnectionNotificationListener(new JMXConnectionListener(this), null, null);
+       this.connector.connect(); // TODO this call to connect is not needed
+       this.distributedSystemMXBeanProxy = JMX.newMXBeanProxy(mbsc, MBeanJMXAdapter.getDistributedSystemName(), DistributedSystemMXBean.class);
+ 
+       if (this.distributedSystemMXBeanProxy == null || !JMX.isMXBeanInterface(DistributedSystemMXBean.class)) {
+         LogWrapper.getInstance().info("DistributedSystemMXBean is not present on member with endpoints : "+this.endpoints);
+         connector.close();
+         throw new JMXConnectionException(JMXConnectionException.MANAGER_NOT_FOUND_EXCEPTION);
+       }
+       else {
+         this.managerMemberObjectName = this.distributedSystemMXBeanProxy.getMemberObjectName();
+         if (this.managerMemberObjectName == null || !JMX.isMXBeanInterface(MemberMXBean.class)) {
+           LogWrapper.getInstance().info("MemberMXBean with ObjectName "+this.managerMemberObjectName+" is not present on member with endpoints : "+endpoints);
+           this.connector.close();
+           throw new JMXConnectionException(JMXConnectionException.MANAGER_NOT_FOUND_EXCEPTION);
+         }
+         else {
+           this.memberMXBeanProxy = JMX.newMXBeanProxy(mbsc, managerMemberObjectName, MemberMXBean.class);
+         }
+       }
+ 
+       this.isConnected.set(true);
+       this.clusterId = distributedSystemMXBeanProxy.getDistributedSystemId();
+     }
+     catch (NullPointerException e) {
+       throw e;
+     }
+     catch (MalformedURLException e) {
+       throw e;
+     }
+     catch (IOException e) {
+       throw e;
+     }
+     finally {
+       for (String propToClear : propsToClear) {
+         System.clearProperty(propToClear);
+       }
+     }
+   }
+ 
++  //Copied from ShellCommands.java
++  private Properties readProperties(String gfSecurityPropertiesPath) throws MalformedURLException {
++    Gfsh gfshInstance = Gfsh.getCurrentInstance();
++    // reference to hold resolved gfSecurityPropertiesPath
++    String gfSecurityPropertiesPathToUse = CliUtil.resolvePathname(gfSecurityPropertiesPath);
++    URL gfSecurityPropertiesUrl = null;
++
++    // Case 1: User has specified gfSecurity properties file
++    if (!StringUtils.isBlank(gfSecurityPropertiesPathToUse)) {
++      // User specified gfSecurity properties doesn't exist
++      if (!IOUtils.isExistingPathname(gfSecurityPropertiesPathToUse)) {
++        gfshInstance.printAsSevere(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE, "Security ", gfSecurityPropertiesPathToUse));
++      } else {
++        gfSecurityPropertiesUrl = new File(gfSecurityPropertiesPathToUse).toURI().toURL();
++      }
++    } else if (gfSecurityPropertiesPath == null) {
++      // Use default "gfsecurity.properties"
++      // in current dir, user's home or classpath
++      gfSecurityPropertiesUrl = ShellCommands.getFileUrl("gfsecurity.properties");
++    }
++    // if 'gfSecurityPropertiesPath' OR gfsecurity.properties has resolvable path
++    if (gfSecurityPropertiesUrl != null) {
++      gfshInstance.logToFile("Using security properties file : "
++              + CliUtil.decodeWithDefaultCharSet(gfSecurityPropertiesUrl.getPath()), null);
++      return loadPropertiesFromURL(gfSecurityPropertiesUrl);      
++    }  
++    return null;
++  }
++  
++  static Properties loadPropertiesFromURL(URL gfSecurityPropertiesUrl) {
++    Properties props = new Properties();
++    if (gfSecurityPropertiesUrl != null) {
++      InputStream inputStream = null;
++      try {
++        
++        inputStream = gfSecurityPropertiesUrl.openStream();
++        props.load(inputStream);
++      } catch (IOException io) {
++        throw new RuntimeException(CliStrings.format(
++            CliStrings.CONNECT__MSG__COULD_NOT_READ_CONFIG_FROM_0,
++                CliUtil.decodeWithDefaultCharSet(gfSecurityPropertiesUrl.getPath())), io);
++      } finally {
++        IOUtils.close(inputStream);
++      }
++    }
++    return props;
++  }
+   
+   private String checkforSystemPropertyPrefix(String key) {
+     String returnKey = key;
+     if (key.startsWith("javax."))
+       returnKey = key;
+     if (key.startsWith("cluster-ssl") || key.startsWith("jmx-manager-ssl")) {
+       if (key.endsWith("keystore")) {
+         returnKey = Gfsh.SSL_KEYSTORE;
+       } else if (key.endsWith("keystore-password")) {
+         returnKey = Gfsh.SSL_KEYSTORE_PASSWORD;
+       } else if (key.endsWith("ciphers")) {
+         returnKey = Gfsh.SSL_ENABLED_CIPHERS;
+       } else if (key.endsWith("truststore-password")) {
+         returnKey = Gfsh.SSL_TRUSTSTORE_PASSWORD;
+       } else if (key.endsWith("truststore")) {
+         returnKey = Gfsh.SSL_TRUSTSTORE;
+       } else if (key.endsWith("protocols")) {
+         returnKey = Gfsh.SSL_ENABLED_PROTOCOLS;
+       }
+     }    
+     return returnKey;    
+   }
+ 
+   @Override
+   public Object getAttribute(String resourceName, String attributeName) throws JMXInvocationException {
+     try {
+       return mbsc.getAttribute(ObjectName.getInstance(resourceName), attributeName);
+     } catch (AttributeNotFoundException e) {
+       throw new JMXInvocationException(attributeName + " not found for " + resourceName, e);
+     } catch (InstanceNotFoundException e) {
+       throw new JMXInvocationException(resourceName + " is not registered in the MBean server.", e);
+     } catch (MalformedObjectNameException e) {
+       throw new JMXInvocationException(resourceName + " is not a valid resource name.", e);
+     } catch (MBeanException e) {
+       throw new JMXInvocationException("Exception while fetching " + attributeName + " for " + resourceName, e);
+     } catch (ReflectionException e) {
+       throw new JMXInvocationException("Couldn't find "+attributeName+" for " + resourceName, e);
+     } catch (NullPointerException e) {
+       throw new JMXInvocationException("Given resourceName is null.", e);
+     } catch (IOException e) {
+       throw new JMXInvocationException(resourceName + " is not a valid resource name.", e);
+     }
+   }
+ 
+   @Override
+   public Object invoke(String resourceName, String operationName, Object[] params, String[] signature) throws JMXInvocationException {
+     try {
+       return invoke(ObjectName.getInstance(resourceName), operationName, params, signature);
+     } catch (MalformedObjectNameException e) {
+       throw new JMXInvocationException(resourceName + " is not a valid resource name.", e);
+     } catch (NullPointerException e) {
+       throw new JMXInvocationException("Given resourceName is null.", e);
+     }
+   }
+ 
+   /**
+    * JMX Specific operation invoke caller.
+    *
+    * @param resource
+    * @param operationName
+    * @param params
+    * @param signature
+    * @return result of JMX Operation invocation
+    * @throws JMXInvocationException
+    */
+   protected Object invoke(ObjectName resource, String operationName, Object[] params, String[] signature) throws JMXInvocationException {
+     try {
+       return mbsc.invoke(resource, operationName, params, signature);
+     } catch (InstanceNotFoundException e) {
+       throw new JMXInvocationException(resource + " is not registered in the MBean server.", e);
+     } catch (MBeanException e) {
+       throw new JMXInvocationException("Exception while invoking " + operationName + " on " + resource, e);
+     } catch (ReflectionException e) {
+       throw new JMXInvocationException("Couldn't find "+operationName+" on " + resource + " with arguments "+Arrays.toString(signature), e);
+     } catch (IOException e) {
+       throw new JMXInvocationException("Couldn't communicate with remote server at " + toString(), e);
+     }
+   }
+ 
+   public Set<ObjectName> queryNames(final ObjectName objectName, final QueryExp queryExpression) {
+     try {
+       return getMBeanServerConnection().queryNames(objectName, queryExpression);
+     } catch (IOException e) {
+       throw new JMXInvocationException(String.format("Failed to communicate with the remote MBean server at (%1$s)!",
+         toString()), e);
+     }
+   }
+ 
+   @Override
+   public Object processCommand(final CommandRequest commandRequest) throws JMXInvocationException {
+     //Gfsh.getCurrentInstance().printAsSevere(String.format("Command (%1$s)%n", commandRequest.getInput()));
+     if (commandRequest.hasFileData()) {
+       return memberMXBeanProxy.processCommand(commandRequest.getInput(), commandRequest.getEnvironment(),
+         ArrayUtils.toByteArray(commandRequest.getFileData()));
+     }
+     else {
+       return memberMXBeanProxy.processCommand(commandRequest.getInput(), commandRequest.getEnvironment());
+     }
+   }
+ 
+   @Override
+   public void stop() {
+     try {
+       this.isSelfDisconnect.set(true);
+       this.connector.close();
+       this.isConnected.set(false);
+     } catch (IOException e) {
+       // ignore exceptions occurring while closing the connector
+     }
+   }
+ 
+   @Override
+   public boolean isConnected() {
+     return this.isConnected.get();
+   }
+ 
+   public DistributedSystemMXBean getDistributedSystemMXBean() {
+     if (distributedSystemMXBeanProxy == null) {
+       throw new IllegalStateException("The DistributedSystemMXBean proxy was not initialized properly!");
+     }
+     return distributedSystemMXBeanProxy;
+   }
+ 
+   public JMXServiceURL getJmxServiceUrl() {
+     return this.url;
+   }
+ 
+   public String getManagerHost() {
+     return managerHost;
+   }
+ 
+   public int getManagerPort() {
+     return managerPort;
+   }
+ 
+   public <T> T getMBeanProxy(final ObjectName objectName, final Class<T> mbeanInterface) {
+     if (DistributedSystemMXBean.class.equals(mbeanInterface)
+       && ManagementConstants.OBJECTNAME__DISTRIBUTEDSYSTEM_MXBEAN.equals(objectName.toString())) {
+       return mbeanInterface.cast(getDistributedSystemMXBean());
+     }
+     else if (JMX.isMXBeanInterface(mbeanInterface)) {
+       return JMX.newMXBeanProxy(getMBeanServerConnection(), objectName, mbeanInterface);
+     }
+     else {
+       return JMX.newMBeanProxy(getMBeanServerConnection(), objectName, mbeanInterface);
+     }
+   }
+ 
+   public MBeanServerConnection getMBeanServerConnection() {
+     if (this.mbsc == null) {
+       throw new IllegalStateException("Gfsh is not connected to the GemFire Manager.");
+     }
+     return this.mbsc;
+   }
+ 
+   public boolean isReady() {
+     try {
+       return this.mbsc.isRegistered(managerMemberObjectName);
+     } catch (IOException e) {
+       return false;
+     }
+   }
+ 
+   @Override
+   public String toString() {
+     return this.endpoints;
+   }
+ 
+   public int getClusterId() {
+     return this.clusterId;
+   }
+ 
+   /*package*/ void resetClusterId() {
+     clusterId = CLUSTER_ID_WHEN_NOT_CONNECTED;
+   }
+ 
+   /**
+    * If the given host address contains a ":", considers it as an IPv6 address &
+    * returns the host based on RFC2732 requirements i.e. surrounds the given
+    * host address string with square brackets. If ":" is not found in the given
+    * string, simply returns the same string.
+    *
+    * @param hostAddress
+    *          host address to check if it's an IPv6 address
+    * @return for an IPv6 address returns compatible host address otherwise
+    *         returns the same string
+    */
+   //TODO - Abhishek: move to utility class
+   // Taken from GFMon
+   public static String checkAndConvertToCompatibleIPv6Syntax(String hostAddress) {
+     // if host string contains ":", considering it as an IPv6 Address
+     // Conforming to RFC2732 - http://www.ietf.org/rfc/rfc2732.txt
+     if (hostAddress.indexOf(":") != -1) {
+       LogWrapper logger = LogWrapper.getInstance();
+       if (logger.fineEnabled()) {
+         logger.fine("IPv6 host address detected, using IPv6 syntax for host in JMX connection URL");
+       }
+       hostAddress = "[" + hostAddress + "]";
+       if (logger.fineEnabled()) {
+         logger.fine("Compatible host address is : " + hostAddress);
+       }
+     }
+     return hostAddress;
+   }
+ }
+ 
+ /**
+  * A Connection Notification Listener. Notifies Gfsh when a connection gets
+  * terminated abruptly.
+  *
+  * @author Abhishek Chaudhari
+  * @since 7.0
+  */
+ class JMXConnectionListener implements NotificationListener {
+   public static final String CHECK_PERIOD_PROP = "jmx.remote.x.client.connection.check.period";
+   public static final long CHECK_PERIOD        = 1000L;
+   private JmxOperationInvoker invoker;
+ 
+   JMXConnectionListener (JmxOperationInvoker invoker) {
+     this.invoker = invoker;
+   }
+   @Override
+   public void handleNotification(Notification notification, Object handback) {
+     if (JMXConnectionNotification.class.isInstance(notification)) {
+       JMXConnectionNotification connNotif = (JMXConnectionNotification)notification;
+       if (JMXConnectionNotification.CLOSED.equals(connNotif.getType()) ||
+           JMXConnectionNotification.FAILED.equals(connNotif.getType())) {
+         this.invoker.isConnected.set(false);
+         this.invoker.resetClusterId();
+         if (!this.invoker.isSelfDisconnect.get()) {
+           Gfsh.getCurrentInstance().notifyDisconnect(this.invoker.toString());
+         }
+       }
+     }
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControl.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControl.java
index 0000000,0331767..bdb6b10
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControl.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControl.java
@@@ -1,0 -1,51 +1,57 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
+ import java.security.AccessControlContext;
+ import java.security.AccessController;
+ import java.security.Principal;
+ import java.util.Set;
+ 
+ import javax.management.remote.JMXPrincipal;
+ import javax.security.auth.Subject;
+ 
++/**
++ * AccessControlMBean Implementation. This retrieves JMXPrincipal from AccessController
++ * and performs authorization for given role using gemfire AccessControl Plugin
++ *  
++ * @author tushark
++ * @since 9.0
++ */
+ public class AccessControl implements AccessControlMXBean {
+ 
+   private ManagementInterceptor interceptor;
+ 
+   public AccessControl(ManagementInterceptor interceptor) {
+     this.interceptor = interceptor;
+   }
+ 
+   @Override
+   public boolean authorize(String role) {
+     AccessControlContext acc = AccessController.getContext();
+     Subject subject = Subject.getSubject(acc);
 -    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
 -    Set<Object> pubCredentials = subject.getPublicCredentials();
++    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);    
+     if (principals == null || principals.isEmpty()) {
+       throw new SecurityException("Access denied");
+     }
+     Principal principal = principals.iterator().next();
 -    com.gemstone.gemfire.security.AccessControl gemAccControl = interceptor.getAccessControl(principal);
++    com.gemstone.gemfire.security.AccessControl gemAccControl = interceptor.getAccessControl(principal, false);
+     boolean authorized = gemAccControl.authorizeOperation(null,
+         new com.gemstone.gemfire.management.internal.security.AccessControlContext(role));
+     return authorized;
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlContext.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlContext.java
index 0000000,225d766..8153149
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlContext.java
@@@ -1,0 -1,37 +1,49 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
++/**
++ * 
++ * ResourceOperationContext passed to AccessControlMBean for Authorization calls made
++ * from AccessControlMBean
++ * 
++ * @author tushark
++ * @since 9.0
++ *
++ */
+ public class AccessControlContext extends ResourceOperationContext {
+   
+   private ResourceOperationCode code;
+   
+   public AccessControlContext(String code){
+     this.code = ResourceOperationCode.parse(code);
+   }
+ 
+   @Override
+   public ResourceOperationCode getResourceOperationCode() {
+     return code;
+   }
+ 
+   @Override
+   public OperationCode getOperationCode() {   
+     return OperationCode.RESOURCE;
 -  }  
++  }
++  
++  public static AccessControlContext ACCESS_GRANTED_CONTEXT = new AccessControlContext(ResourceConstants.LIST_DS);
+ 
+ }
++



[27/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
index 0000000,2ba50ad..c722bda
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
@@@ -1,0 -1,93 +1,179 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.web.controllers.support;
+ 
++import java.lang.reflect.Method;
++import java.security.Principal;
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.HashMap;
++import java.util.Iterator;
+ import java.util.Map;
++import java.util.Properties;
++import java.util.Set;
++import java.util.Map.Entry;
++
++import javax.management.remote.JMXPrincipal;
++import javax.security.auth.Subject;
+ import javax.servlet.http.HttpServletRequest;
+ import javax.servlet.http.HttpServletResponse;
+ 
+ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+ 
++import com.gemstone.gemfire.GemFireConfigException;
++import com.gemstone.gemfire.cache.Cache;
++import com.gemstone.gemfire.cache.CacheFactory;
++import com.gemstone.gemfire.distributed.DistributedMember;
++import com.gemstone.gemfire.distributed.DistributedSystem;
++import com.gemstone.gemfire.distributed.internal.DistributionConfig;
++import com.gemstone.gemfire.internal.ClassLoadUtil;
++import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
++import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
++import com.gemstone.gemfire.internal.logging.InternalLogWriter;
++import com.gemstone.gemfire.internal.logging.LogService;
++import com.gemstone.gemfire.management.ManagementService;
++import com.gemstone.gemfire.management.internal.SystemManagementService;
++import com.gemstone.gemfire.management.internal.security.CLIOperationContext;
++import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.security.AccessControl;
++import com.gemstone.gemfire.security.AuthenticationFailedException;
++import com.gemstone.gemfire.security.AuthenticationRequiredException;
++import com.gemstone.gemfire.security.Authenticator;
++
++import org.apache.logging.log4j.Logger;
++
+ /**
+  * The GetEnvironmentHandlerInterceptor class handles extracting Gfsh environment variables encoded in the HTTP request
+  * message as request parameters.
+  * <p/>
+  * @author John Blum
+  * @see javax.servlet.http.HttpServletRequest
+  * @see javax.servlet.http.HttpServletResponse
+  * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter
+  * @since 8.0
+  */
+ @SuppressWarnings("unused")
+ public class EnvironmentVariablesHandlerInterceptor extends HandlerInterceptorAdapter {
+ 
++  private static final Logger logger = LogService.getLogger();
++  
++  private Cache cache;
++  
++  private Authenticator auth = null;
++  
++  
++  public static final ThreadLocal<Properties> CREDENTIALS = new ThreadLocal<Properties>();
++  
++   
+   private static final ThreadLocal<Map<String, String>> ENV = new ThreadLocal<Map<String, String>>() {
+     @Override
+     protected Map<String, String> initialValue() {
+       return Collections.emptyMap();
+     }
+   };
+ 
+   protected static final String ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX = "vf.gf.env.";
++  
++  protected static final String SECURITY_VARIABLE_REQUEST_HEADER_PREFIX = "security-";
+ 
+   public static Map<String, String> getEnvironment() {
+     return ENV.get();
+   }
+ 
+   @Override
+   public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler)
+     throws Exception
+   {
++    
+     final Map<String, String> requestParameterValues = new HashMap<String, String>();
+ 
+     for (Enumeration<String> requestParameters = request.getParameterNames(); requestParameters.hasMoreElements(); ) {
+       final String requestParameter = requestParameters.nextElement();
+ 
+       if (requestParameter.startsWith(ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX)) {
+         requestParameterValues.put(requestParameter.substring(ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX.length()),
+           request.getParameter(requestParameter));
+       }
+     }
++    
++ 
++    
++    for (Enumeration<String> requestHeaders = request.getHeaderNames(); requestHeaders.hasMoreElements();) {
+ 
++      final String requestHeader = requestHeaders.nextElement();
++
++      if (requestHeader.startsWith(SECURITY_VARIABLE_REQUEST_HEADER_PREFIX)) {
++        requestParameterValues.put(requestHeader, request.getHeader(requestHeader));
++      }
++
++    }
++    
++    securityCheck(requestParameterValues);
++    
+     ENV.set(requestParameterValues);
+ 
+     return true;
+   }
++  
++
++  
++  protected void securityCheck(final Map<String, String> environment) {
++
++    Properties credentials = new Properties();
++
++    Iterator<Entry<String, String>> it = environment.entrySet().iterator();
++    while (it.hasNext()) {
++      Entry<String, String> entry = it.next();
++      if (entry.getKey().startsWith(SECURITY_VARIABLE_REQUEST_HEADER_PREFIX)) {
++        credentials.put(entry.getKey(), entry.getValue());
++      }
++
++    }
++    GemFireCacheImpl instance = GemFireCacheImpl.getInstance();
++    if(instance != null){
++      SystemManagementService service = (SystemManagementService) ManagementService
++          .getExistingManagementService(instance);
++      service.getAuthManager().verifyCredentials(credentials);
++      CREDENTIALS.set(credentials);
++    }
++
++
++  }
++
++  
+ 
+   @Override
+   public void afterCompletion(final HttpServletRequest request,
+                               final HttpServletResponse response,
+                               final Object handler,
+                               final Exception ex)
+     throws Exception
+   {
+     afterConcurrentHandlingStarted(request, response, handler);
+   }
+ 
+   @Override
+   public void afterConcurrentHandlingStarted(final HttpServletRequest request,
+                                              final HttpServletResponse response,
+                                              final Object handler)
+     throws Exception
+   {
+     ENV.remove();
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/support/SimpleHttpRequester.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/support/SimpleHttpRequester.java
index 0000000,7d155e6..9aaa230
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/support/SimpleHttpRequester.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/support/SimpleHttpRequester.java
@@@ -1,0 -1,140 +1,237 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.web.http.support;
+ 
++import java.io.BufferedReader;
++import java.io.IOException;
++import java.io.InputStreamReader;
++import java.net.URI;
++import java.util.Map;
++import java.util.Properties;
+ import java.util.Set;
+ 
++import org.springframework.http.HttpEntity;
+ import org.springframework.http.HttpHeaders;
+ import org.springframework.http.HttpMethod;
++import org.springframework.http.HttpStatus;
++import org.springframework.http.ResponseEntity;
++import org.springframework.http.client.ClientHttpRequest;
++import org.springframework.http.client.ClientHttpResponse;
+ import org.springframework.http.client.SimpleClientHttpRequestFactory;
++import org.springframework.web.client.RequestCallback;
++import org.springframework.web.client.ResponseErrorHandler;
++import org.springframework.web.client.RestClientException;
+ import org.springframework.web.client.RestTemplate;
+ 
++import com.gemstone.gemfire.internal.lang.StringUtils;
++import com.gemstone.gemfire.internal.util.IOUtils;
++import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++
++
+ /**
+  * The SimpleHttpRequester class is a Adapter/facade for the Spring RestTemplate class for abstracting HTTP requests
+  * and operations.
+  * <p/>
+  * @author John Blum
+  * @see org.springframework.http.client.SimpleClientHttpRequestFactory
+  * @see org.springframework.web.client.RestTemplate
+  * @since 8.0
+  */
+ @SuppressWarnings("unused")
+ public class SimpleHttpRequester {
+ 
+   protected static final int DEFAULT_CONNECT_TIMEOUT = (30 * 1000); // 30 seconds
+ 
+   private final RestTemplate restTemplate;
++  
++  private String user;
++  
++  private String pwd;
+ 
++  private Map<String,String> securityProperties;
+   /**
+    * Default constructor to create an instance of the SimpleHttpRequester class using the default connection timeout
+    * of 30 seconds.
+    */
 -  public SimpleHttpRequester() {
 -    this(DEFAULT_CONNECT_TIMEOUT);
++  public SimpleHttpRequester(Gfsh gfsh,Map<String,String> securityProperties) {
++    this(gfsh, DEFAULT_CONNECT_TIMEOUT, securityProperties);
+   }
+ 
+   /**
+    * Constructs an instance of the SimpleHttpRequester class with the specified connection timeout.
+    * <p/>
+    * @param connectTimeout an integer value specifying the timeout value in milliseconds for establishing the HTTP
+    * connection to the HTTP server.
+    */
 -  public SimpleHttpRequester(final int connectTimeout) {
++  public SimpleHttpRequester(final Gfsh gfsh, final int connectTimeout, Map<String,String> securityProperties) {
+     final SimpleClientHttpRequestFactory clientHttpRequestFactory = new SimpleClientHttpRequestFactory();
+ 
+     clientHttpRequestFactory.setConnectTimeout(connectTimeout);
+ 
++    this.securityProperties = securityProperties;
+     this.restTemplate = new RestTemplate(clientHttpRequestFactory);
++
++    this.restTemplate.setErrorHandler(new ResponseErrorHandler() {
++      @Override
++      public boolean hasError(final ClientHttpResponse response) throws IOException {
++        final HttpStatus status = response.getStatusCode();
++
++        switch (status) {
++        case BAD_REQUEST: // 400 *
++        case UNAUTHORIZED: // 401
++        case FORBIDDEN: // 403
++        case NOT_FOUND: // 404 *
++        case METHOD_NOT_ALLOWED: // 405 *
++        case NOT_ACCEPTABLE: // 406 *
++        case REQUEST_TIMEOUT: // 408
++        case CONFLICT: // 409
++        case REQUEST_ENTITY_TOO_LARGE: // 413
++        case REQUEST_URI_TOO_LONG: // 414
++        case UNSUPPORTED_MEDIA_TYPE: // 415 *
++        case TOO_MANY_REQUESTS: // 429
++        case INTERNAL_SERVER_ERROR: // 500 *
++        case NOT_IMPLEMENTED: // 501
++        case BAD_GATEWAY: // 502 ?
++        case SERVICE_UNAVAILABLE: // 503
++          return true;
++        default:
++          return false;
++        }
++      }
++
++      @Override
++      public void handleError(final ClientHttpResponse response) throws IOException {
++        final String message = String.format("The HTTP request failed with: %1$d - %2$s", response.getRawStatusCode(),
++            response.getStatusText());
++        
++        throw new RuntimeException(message);
++
++      }
++
++     
++    });
++
+   }
+ 
+   /**
+    * Gets an instance of the Spring RestTemplate to perform the HTTP operations.
+    * <p/>
+    * @return an instance of the Spring RestTemplate for performing HTTP operations.
+    * @see org.springframework.web.client.RestTemplate
+    */
+   public RestTemplate getRestTemplate() {
+     return restTemplate;
+   }
+ 
+   /**
+    * Performs an HTTP DELETE operation on the requested resource identified/located by the specified URL.
+    * <p/>
+    * @param url a String value identifying or locating the resource intended for the HTTP operation.
+    * @param urlVariables an array of variables to substitute in the URI/URL template.
+    * @see org.springframework.web.client.RestTemplate#delete(String, Object...)
+    */
+   public void delete(final String url, final Object... urlVariables) {
+     getRestTemplate().delete(url, urlVariables);
+   }
+ 
+   /**
+    * Performs an HTTP GET operation on the requested resource identified/located by the specified URL.
+    * <p/>
+    * @param url a String value identifying or locating the resource intended for the HTTP operation.
+    * @param urlVariables an array of variables to substitute in the URI/URL template.
+    * @see org.springframework.web.client.RestTemplate#getForObject(String, Class, Object...)
+    */
+   public <T> T get(final String url, final Class<T> responseType, final Object... urlVariables) {
+     return getRestTemplate().getForObject(url, responseType, urlVariables);
+   }
+ 
+   /**
+    * Retrieves the HTTP HEADERS for the requested resource identified/located by the specified URL.
+    * <p/>
+    * @param url a String value identifying or locating the resource intended for the HTTP operation.
+    * @param urlVariables an array of variables to substitute in the URI/URL template.
+    * @see org.springframework.web.client.RestTemplate#headForHeaders(String, Object...)
+    */
+   public HttpHeaders headers(final String url, final Object... urlVariables) {
+     return getRestTemplate().headForHeaders(url, urlVariables);
+   }
+ 
+   /**
+    * Request the available/allowed HTTP operations on the resource identified/located by the specified URL.
+    * <p/>
+    * @param url a String value identifying or locating the resource intended for the HTTP operation.
+    * @param urlVariables an array of variables to substitute in the URI/URL template.
+    * @see org.springframework.web.client.RestTemplate#optionsForAllow(String, Object...)
+    */
+   public Set<HttpMethod> options(final String url, final Object... urlVariables) {
+     return getRestTemplate().optionsForAllow(url, urlVariables);
+   }
+ 
+   /**
+    * Performs an HTTP POST operation on the requested resource identified/located by the specified URL.
+    * <p/>
+    * @param url a String value identifying or locating the resource intended for the HTTP operation.
+    * @param urlVariables an array of variables to substitute in the URI/URL template.
+    * @see org.springframework.web.client.RestTemplate#postForObject(String, Object, Class, Object...) z
+    */
+   public <T> T post(final String url, final Object requestBody, final Class<T> responseType, final Object... urlVariables) {
+     return getRestTemplate().postForObject(url, requestBody, responseType, urlVariables);
+   }
+ 
+   /**
 -   * Performs an HTTP PUT operation on the requested resource identified/located by the specified URL.
++   * Performs an HTTP PUT operation on the requested resource identifiedR/located by the specified URL.
+    * <p/>
+    * @param url a String value identifying or locating the resource intended for the HTTP operation.
+    * @param urlVariables an array of variables to substitute in the URI/URL template.
+    * @see org.springframework.web.client.RestTemplate#put(String, Object, Object...)
+    */
+   public void put(final String url, final Object requestBody, final Object... urlVariables) {
+     getRestTemplate().put(url, requestBody, urlVariables);
+   }
++  
++  /**
++   * Performs an HTTP GET operation on the requested resource identified/located
++   * by the specified URL.
++   * <p/>
++   * 
++   * @param url
++   *          a String value identifying or locating the resource intended for
++   *          the HTTP operation.
++   * @param urlVariables
++   *          an array of variables to substitute in the URI/URL template.
++   * @see org.springframework.web.client.RestTemplate#getForObject(String,
++   *      Class, Object...)
++   */
++  public <T> T exchange(final String url, final Class<T> responseType, final Object... urlVariables) {
++    ResponseEntity<T> response = getRestTemplate().exchange(url, HttpMethod.GET, getRequestEntity(), responseType);
++    return response.getBody();
++  }
++
++  protected HttpEntity<?> getRequestEntity() {
++    HttpHeaders requestHeaders = new HttpHeaders();  
++    if(this.securityProperties != null){
++      requestHeaders.setAll(securityProperties);
++    }
++
++    HttpEntity<?> requestEntity = new HttpEntity(requestHeaders);
++
++    return requestEntity;
++
++  }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/AbstractHttpOperationInvoker.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/AbstractHttpOperationInvoker.java
index 0000000,425c779..052897d
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/AbstractHttpOperationInvoker.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/AbstractHttpOperationInvoker.java
@@@ -1,0 -1,801 +1,820 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.management.internal.web.shell;
+ 
+ import java.io.BufferedReader;
+ import java.io.IOException;
+ import java.io.InputStreamReader;
+ import java.net.URI;
+ import java.util.Arrays;
+ import java.util.Collections;
++import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
++import java.util.Map.Entry;
+ import java.util.Set;
+ import java.util.concurrent.Executors;
+ import java.util.concurrent.ScheduledExecutorService;
+ import java.util.concurrent.TimeUnit;
++
+ import javax.management.ObjectName;
+ import javax.management.QueryExp;
+ 
+ import com.gemstone.gemfire.internal.GemFireVersion;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.internal.util.IOUtils;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.ManagementConstants;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+ import com.gemstone.gemfire.management.internal.web.domain.Link;
+ import com.gemstone.gemfire.management.internal.web.domain.QueryParameterSource;
+ import com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest;
+ import com.gemstone.gemfire.management.internal.web.http.HttpHeader;
+ import com.gemstone.gemfire.management.internal.web.http.HttpMethod;
+ import com.gemstone.gemfire.management.internal.web.http.converter.SerializableObjectHttpMessageConverter;
+ import com.gemstone.gemfire.management.internal.web.shell.support.HttpMBeanProxyFactory;
+ import com.gemstone.gemfire.management.internal.web.util.UriUtils;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.MediaType;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.http.client.ClientHttpResponse;
+ import org.springframework.http.client.SimpleClientHttpRequestFactory;
+ import org.springframework.web.client.ResourceAccessException;
+ import org.springframework.web.client.ResponseErrorHandler;
+ import org.springframework.web.client.RestTemplate;
+ 
+ /**
+  * The AbstractHttpOperationInvoker class is an abstract base class encapsulating common functionality for all
+  * HTTP-based OperationInvoker implementations.
+  * 
+  * @author John Blum
+  * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+  * @see com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker
+  * @see com.gemstone.gemfire.management.internal.web.shell.HttpOperationInvoker
+  * @see com.gemstone.gemfire.management.internal.web.shell.RestHttpOperationInvoker
+  * @see com.gemstone.gemfire.management.internal.web.shell.SimpleHttpOperationInvoker
+  * @see org.springframework.http.client.SimpleClientHttpRequestFactory
+  * @see org.springframework.web.client.RestTemplate
+  * @since 8.0
+  */
+ @SuppressWarnings("unused")
+ public abstract class AbstractHttpOperationInvoker implements HttpOperationInvoker {
+ 
+   protected static final long DEFAULT_INITIAL_DELAY = TimeUnit.SECONDS.toMillis(1);
+   protected static final long DEFAULT_PERIOD = TimeUnit.MILLISECONDS.toMillis(500);
+ 
+   protected static final String MBEAN_ATTRIBUTE_LINK_RELATION = "mbean-attribute";
+   protected static final String MBEAN_OPERATION_LINK_RELATION = "mbean-operation";
+   protected static final String MBEAN_QUERY_LINK_RELATION = "mbean-query";
+   protected static final String PING_LINK_RELATION = "ping";
+   protected static final String DEFAULT_ENCODING = UriUtils.DEFAULT_ENCODING;
+   protected static final String REST_API_BASE_URL = "http://localhost:8080";
+   protected static final String REST_API_VERSION = "/v1";
+   protected static final String REST_API_WEB_APP_CONTEXT = "/gemfire";
+   protected static final String REST_API_URL = REST_API_BASE_URL + REST_API_WEB_APP_CONTEXT + REST_API_VERSION;
+   protected static final String USER_AGENT_HTTP_REQUEST_HEADER_VALUE = "GemFire-Shell/v" + GemFireVersion.getGemFireVersion();
+ 
+   protected static final TimeUnit DEFAULT_TIME_UNIT = TimeUnit.MILLISECONDS;
+ 
+   // the ID of the GemFire distributed system (cluster)
+   private Integer clusterId = CLUSTER_ID_WHEN_NOT_CONNECTED;
+ 
+   // Executor for scheduling periodic Runnable task to assess the state of the Manager's HTTP service or Web Service
+   // hosting the M&M REST API (interface)
+   private final ScheduledExecutorService executorService;
+ 
+   // a reference to the GemFire shell (Gfsh) instance using this HTTP-based OperationInvoker for command execution
+   // and processing
+   private final Gfsh gfsh;
+ 
+   // a list of acceptable content/media types supported by Gfsh
+   private final List<MediaType> acceptableMediaTypes = Arrays.asList(MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN);
+ 
+   // a Java Logger used to log severe, warning, informational and debug messages during the operation of this invoker
+   private final Logger logger = LogService.getLogger();
+ 
+   // the Spring RestTemplate used to send HTTP requests and make REST API calls
+   private volatile RestTemplate restTemplate;
+ 
+   // the base URL of the GemFire Manager's embedded HTTP service and REST API interface
+   private final String baseUrl;
++  
++  
++  protected Map<String,String> securityProperties;
+ 
+   /**
+    * Default, public, no-arg constructor to create an instance of the AbstractHttpOperationInvoker class 
+    * for testing purposes.
+    */
+   AbstractHttpOperationInvoker(final String baseUrl) {
+     this.baseUrl = baseUrl;
+     this.executorService = null;
+     this.gfsh = null;
+     this.restTemplate = null;
+   }
+ 
+   /**
+    * Constructs an instance of the AbstractHttpOperationInvoker class with a reference to the GemFire shell (Gfsh)
+    * instance using this HTTP-based OperationInvoker to send commands to the GemFire Manager via HTTP for processing.
+    * 
+    * @param gfsh a reference to the instance of the GemFire shell (Gfsh) using this HTTP-based OperationInvoker for
+    * command processing.
+    * @throws AssertionError if the reference to the Gfsh instance is null.
 -   * @see #AbstractHttpOperationInvoker(com.gemstone.gemfire.management.internal.cli.shell.Gfsh, String)
++   * @see #AbstractHttpOperationInvoker(com.gemstone.gemfire.management.internal.cli.shell.Gfsh, String, Map)
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    */
 -  public AbstractHttpOperationInvoker(final Gfsh gfsh) {
 -    this(gfsh, REST_API_URL);
++  public AbstractHttpOperationInvoker(final Gfsh gfsh, Map<String,String> securityProperties) {
++    this(gfsh, REST_API_URL, securityProperties);
+   }
+ 
+   /**
+    * Constructs an instance of the AbstractHttpOperationInvoker class with a reference to the GemFire shell (Gfsh)
+    * instance using this HTTP-based OperationInvoker to send commands to the GemFire Manager via HTTP for procsessing
+    * along with the base URL to the GemFire Manager's embedded HTTP service hosting the HTTP (REST) interface.
+    * 
+    * @param gfsh a reference to the instance of the GemFire shell (Gfsh) using this HTTP-based OperationInvoker for
+    * command processing.
+    * @param baseUrl a String specifying the base URL to the GemFire Manager's embedded HTTP service hosting the REST
+    * interface.
+    * @throws AssertionError if the reference to the Gfsh instance is null.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    */
 -  public AbstractHttpOperationInvoker(final Gfsh gfsh, final String baseUrl) {
++  public AbstractHttpOperationInvoker(final Gfsh gfsh, final String baseUrl, Map<String,String> securityProperties) {
+     assertNotNull(gfsh, "The reference to the GemFire shell (Gfsh) cannot be null!");
+ 
+     this.gfsh = gfsh;
+     this.baseUrl = StringUtils.defaultIfBlank(baseUrl, REST_API_URL);
 -
++    this.securityProperties = securityProperties;
++  
+     // constructs an instance of a single-threaded, scheduled Executor to send periodic HTTP requests to the Manager's
+     // HTTP service or Web Service to assess the "alive" state
+     this.executorService = Executors.newSingleThreadScheduledExecutor();
+ 
+     // constructs an instance of the Spring RestTemplate for M&M REST API (interface) operations
+     this.restTemplate = new RestTemplate(new SimpleClientHttpRequestFactory());
+ 
+     // add our custom HttpMessageConverter for serializing DTO Objects into the HTTP request message body
+     // and de-serializing HTTP response message body content back into DTO Objects
+     this.restTemplate.getMessageConverters().add(new SerializableObjectHttpMessageConverter());
+ 
+     // set the ResponseErrorHandler handling any errors originating from our HTTP request
+     this.restTemplate.setErrorHandler(new ResponseErrorHandler() {
+       @Override
+       public boolean hasError(final ClientHttpResponse response) throws IOException {
+         final HttpStatus status = response.getStatusCode();
+ 
+         switch (status) {
+           case BAD_REQUEST: // 400 *
+           case UNAUTHORIZED: // 401
+           case FORBIDDEN: // 403
+           case NOT_FOUND: // 404 *
+           case METHOD_NOT_ALLOWED: // 405 *
+           case NOT_ACCEPTABLE: // 406 *
+           case REQUEST_TIMEOUT: // 408
+           case CONFLICT: // 409
+           case REQUEST_ENTITY_TOO_LARGE: // 413
+           case REQUEST_URI_TOO_LONG: // 414
+           case UNSUPPORTED_MEDIA_TYPE: // 415 *
+           case TOO_MANY_REQUESTS: // 429
+           case INTERNAL_SERVER_ERROR: // 500 *
+           case NOT_IMPLEMENTED: // 501
+           case BAD_GATEWAY: // 502 ?
+           case SERVICE_UNAVAILABLE: // 503
+             return true;
+           default:
+             return false;
+         }
+       }
+ 
+       @Override
+       public void handleError(final ClientHttpResponse response) throws IOException {
+         final String message = String.format("The HTTP request failed with: %1$d - %2$s", response.getRawStatusCode(),
+           response.getStatusText());
+ 
 -        gfsh.logSevere(message, null);
++        //gfsh.logSevere(message, null);
+ 
+         if (gfsh.getDebug()) {
+           gfsh.logSevere(readBody(response), null);
+         }
++        throw new RuntimeException(message);
+       }
+ 
+       private String readBody(final ClientHttpResponse response) throws IOException {
+         BufferedReader responseBodyReader = null;
+ 
+         try {
+           responseBodyReader = new BufferedReader(new InputStreamReader(response.getBody()));
+ 
+           final StringBuilder buffer = new StringBuilder();
+           String line;
+ 
+           while ((line = responseBodyReader.readLine()) != null) {
+             buffer.append(line).append(StringUtils.LINE_SEPARATOR);
+           }
+ 
+           return buffer.toString().trim();
+         }
+         finally {
+           IOUtils.close(responseBodyReader);
+         }
+       }
+     });
+   }
+ 
+   /**
+    * Asserts the argument is valid, as determined by the caller passing the result of an evaluated expression to this
+    * assertion.
+    * 
+    * @param validArg a boolean value indicating the evaluation of the expression validating the argument.
+    * @param message a String value used as the message when constructing an IllegalArgumentException.
+    * @param args Object arguments used to populate placeholder's in the message.
+    * @throws IllegalArgumentException if the argument is not valid.
+    * @see java.lang.String#format(String, Object...)
+    */
+   protected static void assertArgument(final boolean validArg, final String message, final Object... args) {
+     if (!validArg) {
+       throw new IllegalArgumentException(String.format(message, args));
+     }
+   }
+ 
+   /**
+    * Asserts the Object reference is not null!
+    * 
+    * @param obj the reference to the Object.
+    * @param message the String value used as the message when constructing and throwing a NullPointerException.
+    * @param args Object arguments used to populate placeholder's in the message.
+    * @throws NullPointerException if the Object reference is null.
+    * @see java.lang.String#format(String, Object...)
+    */
+   protected static void assertNotNull(final Object obj, final String message, final Object... args) {
+     if (obj == null) {
+       throw new NullPointerException(String.format(message, args));
+     }
+   }
+ 
+   /**
+    * Asserts whether state, based on the evaluation of a conditional expression, passed to this assertion is valid.
+    * 
+    * @param validState a boolean value indicating the evaluation of the expression from which the conditional state
+    * is based.  For example, a caller might use an expression of the form (initableObj.isInitialized()).
+    * @param message a String values used as the message when constructing an IllegalStateException.
+    * @param args Object arguments used to populate placeholder's in the message.
+    * @throws IllegalStateException if the conditional state is not valid.
+    * @see java.lang.String#format(String, Object...)
+    */
+   protected static void assertState(final boolean validState, final String message, final Object... args) {
+     if (!validState) {
+       throw new IllegalStateException(String.format(message, args));
+     }
+   }
+ 
+   /**
+    * Gets a list of acceptable content/media types supported by Gfsh.
+    * 
+    * @return a List of acceptable content/media types supported by Gfsh.
+    * @see org.springframework.http.MediaType
+    */
+   protected List<MediaType> getAcceptableMediaTypes() {
+     return acceptableMediaTypes;
+   }
+ 
+   /**
+    * Returns the base URL to GemFire's REST interface hosted in the GemFire Manager's embedded HTTP service
+    * (Tomcat server).
+    * 
+    * @return a String value specifying the base URL to the GemFire REST interface.
+    */
+   protected String getBaseUrl() {
+     return this.baseUrl;
+   }
+ 
+   /**
+    * Determines whether Gfsh is in debug mode (or whether the user enabled debugging in Gfsh).
+    * 
+    * @return a boolean value indicating if debugging has been turned on in Gfsh.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh#getDebug()
+    */
+   protected boolean isDebugEnabled() {
+     return getGfsh().getDebug();
+   }
+ 
+   /**
+    * Gets the ExecutorService used by this HTTP OperationInvoker to scheduled periodic or delayed tasks.
+    * 
+    * @return an instance of the ScheduledExecutorService for scheduling periodic or delayed tasks.
+    * @see java.util.concurrent.ScheduledExecutorService
+    */
+   protected final ScheduledExecutorService getExecutorService() {
+     assertState(this.executorService != null,
+       "The ExecutorService for this HTTP OperationInvoker (%1$s) was not properly initialized!",
+         getClass().getName());
+     return this.executorService;
+   }
+ 
+   /**
+    * Returns the reference to the GemFire shell (Gfsh) instance using this HTTP-based OperationInvoker to send commands
+    * to the GemFire Manager for remote execution and processing.
+    * 
+    * @return a reference to the instance of the GemFire shell (Gfsh) using this HTTP-based OperationInvoker to process
+    * commands.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    */
+   protected final Gfsh getGfsh() {
+     return this.gfsh;
+   }
+ 
+   /**
+    * Returns a reference to the Spring RestTemplate used by this HTTP-based OperationInvoker to send HTTP requests to
+    * GemFire's REST interface, making REST API calls.
+    * 
+    * @return an instance of the Spring RestTemplate used to make REST API web service calls.
+    * @see org.springframework.web.client.RestTemplate
+    */
+   protected final RestTemplate getRestTemplate() {
+     return this.restTemplate;
+   }
+ 
+   /**
+    * Creates an instance of a client HTTP request with the specified Link targeting the resource as well as the intended
+    * operation on the resource.
+    * 
+    * @param link a Link with the URI targeting and identifying the resource as well as the method of operation on the
+    * resource.
+    * @return a client HTTP request with the details of the request.
+    * @see com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest
+    * @see com.gemstone.gemfire.management.internal.web.domain.Link
+    */
+   protected ClientHttpRequest createHttpRequest(final Link link) {
+     final ClientHttpRequest request = new ClientHttpRequest(link);
+     request.addHeaderValues(HttpHeader.USER_AGENT.getName(), USER_AGENT_HTTP_REQUEST_HEADER_VALUE);
+     request.getHeaders().setAccept(getAcceptableMediaTypes());
++    
++    if(this.securityProperties != null){
++      Iterator<Entry<String, String>> it = this.securityProperties.entrySet().iterator();
++      while(it.hasNext()){
++        Entry<String,String> entry= it.next();
++        request.addHeaderValues(entry.getKey(), entry.getValue());
++      }
++    }
+     return request;
+   }
+ 
+   /**
+    * Creates a Link with the specified relation and URI of the remote resource.
+    * 
+    * @param relation a String indicating the link relation, or relative state transition, operation.
+    * @param href the URI identifying the resource and it's location.
+    * @return a Link with the providing relation and URI.
+    * @see com.gemstone.gemfire.management.internal.web.domain.Link
+    * @see java.net.URI
+    */
+   protected Link createLink(final String relation, final URI href) {
+     return new Link(relation, href);
+   }
+ 
+   /**
+    * Creates a Link with the specified relation and URI of the remote resource along with the method of the operation.
+    * 
+    * @param relation a String indicating the link relation, or relative state transition, operation.
+    * @param href the URI identifying the resource and it's location.
+    * @param method the HTTP method for the operation of the request.
+    * @return a Link with the providing relation and URI.
+    * @see com.gemstone.gemfire.management.internal.web.http.HttpMethod
+    * @see com.gemstone.gemfire.management.internal.web.domain.Link
+    * @see java.net.URI
+    */
+   protected Link createLink(final String relation, final URI href, final HttpMethod method) {
+     return new Link(relation, href, method);
+   }
+ 
+   /**
+    * Decodes the encoded String value using the default encoding UTF-8.  It is assumed the String value was encoded
+    * with the URLEncoder using the UTF-8 encoding.  This method handles UnsupportedEncodingException by just returning
+    * the encodedValue.
+    * 
+    * @param encodedValue the encoded String value to decode.
+    * @return the decoded value of the String or encodedValue if the UTF-8 encoding is unsupported.
+    * @see com.gemstone.gemfire.management.internal.web.util.UriUtils#decode(String)
+    */
+   protected String decode(final String encodedValue) {
+     return UriUtils.decode(encodedValue);
+   }
+ 
+   /**
+    * Decodes the encoded String value using the specified encoding (such as UTF-8).  It is assumed the String value
+    * was encoded with the URLEncoder using the specified encoding.  This method handles UnsupportedEncodingException
+    * by just returning the encodedValue.
+    * 
+    * @param encodedValue a String value encoded in the encoding.
+    * @param encoding a String value specifying the encoding.
+    * @return the decoded value of the String or encodedValue if the specified encoding is unsupported.
+    * @see com.gemstone.gemfire.management.internal.web.util.UriUtils#decode(String, String)
+    */
+   protected String decode(final String encodedValue, String encoding) {
+     return UriUtils.decode(encodedValue, encoding);
+   }
+ 
+   /**
+    * Encode the String value using the default encoding UTF-8.
+    * 
+    * @param value the String value to encode.
+    * @return an encoded value of the String using the default encoding UTF-8 or value if the UTF-8 encoding
+    * is unsupported.
+    * @see com.gemstone.gemfire.management.internal.web.util.UriUtils#encode(String)
+    */
+   protected String encode(final String value) {
+     return UriUtils.encode(value);
+   }
+ 
+   /**
+    * Encode the String value using the specified encoding (such as UTF-8).
+    * 
+    * @param value the String value to encode.
+    * @param encoding a String value indicating the encoding.
+    * @return an encoded value of the String using the specified encoding or value if the specified encoding
+    * is unsupported.
+    * @see com.gemstone.gemfire.management.internal.web.util.UriUtils#encode(String, String)
+    */
+   protected String encode(final String value, final String encoding) {
+     return UriUtils.encode(value, encoding);
+   }
+ 
+   /**
+    * Finds a Link containing the HTTP request URI for the relational operation (state transition) on the resource.
+    * 
+    * @param relation a String describing the relational operation, or state transition on the resource.
+    * @return an instance of Link containing the HTTP request URI used to perform the intended operation on the resource.
+    * @see com.gemstone.gemfire.management.internal.web.domain.Link
+    */
+   protected Link findLink(final String relation) {
+     return null;
+   }
+ 
+   /**
+    * Handles resource access errors such as ConnectExceptions when the server-side process/service is not listening
+    * for client connections, or the connection to the server/service fails.
+    * 
+    * @param e the ResourceAccessException resulting in some sort of I/O error.
+    * @return a user-friendly String message describing the problem and appropriate action/response by the user.
+    * @see #stop()
+    * @see org.springframework.web.client.ResourceAccessException
+    */
+   protected String handleResourceAccessException(final ResourceAccessException e) {
+     stop();
+ 
+     return String.format("The connection to the GemFire Manager's HTTP service @ %1$s failed with: %2$s. "
+       + "Please try reconnecting or see the GemFire Manager's log file for further details.",
+       getBaseUrl(), e.getMessage());
+   }
+ 
+   /**
+    * Displays the message inside GemFire shell at debug level.
+    * 
+    * @param message the String containing the message to display inside Gfsh.
+    * @see #isDebugEnabled()
+    * @see #printInfo(String, Object...)
+    */
+   protected void printDebug(final String message, final Object... args) {
+     if (isDebugEnabled()) {
+       printInfo(message, args);
+     }
+   }
+ 
+   /**
+    * Displays the message inside GemFire shell at info level.
+    * 
+    * @param message the String containing the message to display inside Gfsh.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh#printAsInfo(String)
+    */
+   protected void printInfo(final String message, final Object... args) {
+     getGfsh().printAsInfo(String.format(message, args));
+   }
+ 
+   /**
+    * Displays the message inside GemFire shell at warning level.
+    * 
+    * @param message the String containing the message to display inside Gfsh.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh#printAsWarning(String)
+    */
+   protected void printWarning(final String message, final Object... args) {
+     getGfsh().printAsWarning(String.format(message, args));
+   }
+ 
+   /**
+    * Displays the message inside GemFire shell at severe level.
+    * 
+    * @param message the String containing the message to display inside Gfsh.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh#printAsSevere(String)
+    */
+   protected void printSevere(final String message, final Object... args) {
+     getGfsh().printAsSevere(String.format(message, args));
+   }
+ 
+   /**
+    * Sends the HTTP request, using Spring's RestTemplate, to the GemFire REST API web service endpoint, expecting the
+    * specified response type from the server in return.
+    * 
+    * @param <T> the response type.
+    * @param request the client HTTP request to send.
+    * @param responseType the expected Class type of the return value in the server's response.
+    * @return a ResponseEntity encapsulating the details of the server's response to the client's HTTP request.
+    * @see #send(com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest, Class, java.util.Map)
+    * @see com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest
+    * @see org.springframework.http.ResponseEntity
+    */
+   protected <T> ResponseEntity<T> send(final ClientHttpRequest request, final Class<T> responseType) {
+     return send(request, responseType, Collections.<String, Object>emptyMap());
+   }
+ 
+   /**
+    * Sends the HTTP request, using Spring's RestTemplate, to the GemFire REST API web service endpoint, expecting the
+    * specified response type from the server in return.
+    * 
+    * @param request the client HTTP request to send.
+    * @param responseType the expected Class type of the return value in the server's response.
+    * @param uriVariables a Mapping of URI template path variables to values.
+    * @return a ResponseEntity encapsulating the details of the server's response to the client's HTTP request.
+    * @see java.net.URI
+    * @see com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest
+    * @see org.springframework.http.ResponseEntity
+    * @see org.springframework.web.client.RestTemplate#exchange(java.net.URI, org.springframework.http.HttpMethod, org.springframework.http.HttpEntity, Class)
+    */
+   protected <T> ResponseEntity<T> send(final ClientHttpRequest request, final Class<T> responseType, final Map<String, ?> uriVariables) {
+     final URI url = request.getURL(uriVariables);
+ 
+     if (isDebugEnabled()) {
+       printInfo("Link: %1$s", request.getLink().toHttpRequestLine());
+       printInfo("HTTP URL: %1$s", url);
+       printInfo("HTTP request headers: %1$s", request.getHeaders());
+       printInfo("HTTP request parameters: %1$s", request.getParameters());
+     }
+ 
+     final ResponseEntity<T> response = getRestTemplate().exchange(url, request.getMethod(),
+       request.createRequestEntity(), responseType);
+ 
+     if (isDebugEnabled()) {
+       printInfo("------------------------------------------------------------------------");
+       printInfo("HTTP response headers: %1$s", response.getHeaders());
+       printInfo("HTTP response status: %1$d - %2$s", response.getStatusCode().value(),
+         response.getStatusCode().getReasonPhrase());
++      
++      printInfo("HTTP response body: ", response.getBody());
+     }
+ 
+     return response;
+   }
+ 
+   /**
+    * Determines whether this HTTP-based OperationInvoker is successfully connected to the remote GemFire Manager's
+    * HTTP service in order to send commands for execution/processing.
+    * 
+    * @return a boolean value indicating the connection state of the HTTP-based OperationInvoker.
+    */
+   @Override
+   public boolean isConnected() {
+     return (getRestTemplate() != null);
+   }
+ 
+   /**
+    * Determines whether this HTTP-based OperationInvoker is ready to send commands to the GemFire Manager for remote
+    * execution/processing.
+    * 
+    * @return a boolean value indicating whether this HTTP-based OperationInvoker is ready for command invocations.
+    * @see #isConnected()
+    */
+   @Override
+   public boolean isReady() {
+     return isConnected();
+   }
+ 
+   // TODO research the use of Jolokia instead
+   /**
+    * Read the attribute identified by name from a remote resource identified by name.  The intent of this method
+    * is to return the value of an attribute on an MBean located in the remote MBeanServer.
+    * 
+    * @param resourceName name/url of the remote resource from which to fetch the attribute value.
+    * @param attributeName name of the attribute who's value will be fetched.
+    * @return the value of the named attribute for the named resource (typically an MBean).
+    * @throws MBeanAccessException if an MBean access error occurs.
+    * @throws RestApiCallForCommandNotFoundException if the REST API web service endpoint for accessing an attribute on
+    * an MBean does not exists!
+    * @see #createHttpRequest(com.gemstone.gemfire.management.internal.web.domain.Link)
+    * @see #findLink(String)
+    * @see #send(com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest, Class)
+    */
+   @Override
+   public Object getAttribute(final String resourceName, final String attributeName) {
+     final Link link = findLink(MBEAN_ATTRIBUTE_LINK_RELATION);
+ 
+     if (link != null) {
+       final ClientHttpRequest request = createHttpRequest(link);
+ 
+       request.addParameterValues("resourceName", resourceName);
+       request.addParameterValues("attributeName", attributeName);
+ 
+       final ResponseEntity<byte[]> response = send(request, byte[].class);
+ 
+       try {
+         return IOUtils.deserializeObject(response.getBody());
+       }
+       catch (IOException e) {
+         throw new MBeanAccessException(String.format(
+           "De-serializing the result of accessing attribute (%1$s) on MBean (%2$s) failed!",
+             resourceName, attributeName), e);
+       }
+       catch (ClassNotFoundException e) {
+         throw new MBeanAccessException(String.format(
+           "The Class type of the result when accessing attribute (%1$s) on MBean (%2$s) was not found!",
+             resourceName, attributeName), e);
+       }
+     }
+     else {
+       printSevere("Getting the value of attribute (%1$s) on MBean (%2$s) is currently an unsupported operation!",
+         attributeName, resourceName);
+       throw new RestApiCallForCommandNotFoundException(MBEAN_ATTRIBUTE_LINK_RELATION);
+     }
+   }
+ 
+   /**
+    * Gets the identifier of the GemFire cluster.
+    * 
+    * @return an integer value indicating the identifier of the GemFire cluster.
+    * @see #initClusterId()
+    */
+   @Override
+   public int getClusterId() {
+     return clusterId;
+   }
+ 
+   protected void initClusterId() {
+     if (isReady()) {
+       try {
+         clusterId = (Integer) getAttribute(ManagementConstants.OBJECTNAME__DISTRIBUTEDSYSTEM_MXBEAN, "DistributedSystemId");
+         printDebug("Cluster ID (%1$s)", clusterId);
+       }
+       catch (Exception ignore) {
+         printDebug("Failed to determine cluster ID: %1$s", ignore.getMessage());
+       }
+     }
+   }
+ 
+   /**
+    * Gets a proxy to the remote DistributedSystem MXBean to access attributes and invoke operations on the distributed
+    * system, or the GemFire cluster.
+    * 
+    * @return a proxy instance of the GemFire Manager's DistributedSystem MXBean.
+    * @see #getMBeanProxy(javax.management.ObjectName, Class)
+    * @see com.gemstone.gemfire.management.DistributedSystemMXBean
+    * @see com.gemstone.gemfire.management.internal.MBeanJMXAdapter#getDistributedSystemName()
+    */
+   public DistributedSystemMXBean getDistributedSystemMXBean() {
+     return getMBeanProxy(MBeanJMXAdapter.getDistributedSystemName(), DistributedSystemMXBean.class);
+   }
+ 
+   /**
+    * Gets a proxy to an MXBean on a remote MBeanServer using HTTP for remoting.
+    * 
+    * @param <T> the class type of the remote MXBean.
+    * @param objectName the JMX ObjectName uniquely identifying the remote MXBean.
+    * @param mbeanInterface the interface of the remote MXBean to proxy for attribute/operation access.
+    * @return a proxy using HTTP remoting to access the specified, remote MXBean.
+    * @see javax.management.ObjectName
+    * @see com.gemstone.gemfire.management.internal.web.shell.support.HttpMBeanProxyFactory
+    */
+   public <T> T getMBeanProxy(final ObjectName objectName, final Class<T> mbeanInterface) {
+     return HttpMBeanProxyFactory.createMBeanProxy(this, objectName, mbeanInterface);
+   }
+ 
+   /**
+    * Invoke an operation identified by name on a remote resource identified by name with the given arguments.
+    * The intent of this method is to invoke an arbitrary operation on an MBean located in the remote MBeanServer.
+    * 
+    * @param resourceName name/url (object name) of the remote resource (MBea) on which operation is to be invoked.
+    * @param operationName name of the operation to be invoked.
+    * @param params an array of arguments for the parameters to be set when the operation is invoked.
+    * @param signature an array containing the signature of the operation.
+    * @return result of the operation invocation.
+    * @throws MBeanAccessException if an MBean access error occurs.
+    * @throws RestApiCallForCommandNotFoundException if the REST API web service endpoint for invoking an operation on
+    * an MBean does not exists!
+    * @see #createHttpRequest(com.gemstone.gemfire.management.internal.web.domain.Link)
+    * @see #findLink(String)
+    * @see #send(com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest, Class)
+    */
+   // TODO research the use of Jolokia instead
+   @Override
+   public Object invoke(final String resourceName, final String operationName, final Object[] params, final String[] signature) {
+     final Link link = findLink(MBEAN_OPERATION_LINK_RELATION);
+ 
+     if (link != null) {
+       final ClientHttpRequest request = createHttpRequest(link);
+ 
+       request.addParameterValues("resourceName", resourceName);
+       request.addParameterValues("operationName", operationName);
+       request.addParameterValues("signature", (Object[]) signature);
+       request.addParameterValues("parameters", params); // TODO may need to convert method parameter arguments
+ 
+       final ResponseEntity<byte[]> response = send(request, byte[].class);
+ 
+       try {
+         return IOUtils.deserializeObject(response.getBody());
+       }
+       catch (IOException e) {
+         throw new MBeanAccessException(String.format(
+           "De-serializing the result from invoking operation (%1$s) on MBean (%2$s) failed!",
+             resourceName, operationName), e);
+       }
+       catch (ClassNotFoundException e) {
+         throw new MBeanAccessException(String.format(
+           "The Class type of the result from invoking operation (%1$s) on MBean (%2$s) was not found!",
+             resourceName, operationName), e);
+       }
+     }
+     else {
+       printSevere("Invoking operation (%1$s) on MBean (%2$s) is currently an unsupported operation!",
+         operationName, resourceName);
+       throw new RestApiCallForCommandNotFoundException(MBEAN_OPERATION_LINK_RELATION);
+     }
+   }
+ 
+   /**
+    * This method searches the MBean server, based on the OperationsInvoker's JMX-based or remoting capable MBean server
+    * connection, for MBeans matching a specific ObjectName or matching an ObjectName pattern along with satisfying
+    * criteria from the Query expression.
+    * 
+    * @param objectName the ObjectName or pattern for which matching MBeans in the target MBean server will be returned.
+    * @param queryExpression the JMX-based query expression used to filter matching MBeans.
+    * @return a set of ObjectName's matching MBeans in the MBean server matching the ObjectName and Query expression
+    * criteria.
+    * @see #createHttpRequest(com.gemstone.gemfire.management.internal.web.domain.Link)
+    * @see #findLink(String)
+    * @see #send(com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest, Class)
+    * @see javax.management.ObjectName
+    * @see javax.management.QueryExp
+    */
+   @Override
+   @SuppressWarnings("unchecked")
+   public Set<ObjectName> queryNames(final ObjectName objectName, final QueryExp queryExpression) {
+     final Link link = findLink(MBEAN_QUERY_LINK_RELATION);
+ 
+     if (link != null) {
+       final ClientHttpRequest request = createHttpRequest(link);
+ 
+       request.setContent(new QueryParameterSource(objectName, queryExpression));
+ 
+       final ResponseEntity<byte[]> response = send(request, byte[].class);
+ 
+       try {
+         return (Set<ObjectName>) IOUtils.deserializeObject(response.getBody());
+       }
+       catch (Exception e) {
+         throw new MBeanAccessException(String.format(
+           "An error occurred while querying for MBean names using ObjectName pattern (%1$s) and Query expression (%2$s)!",
+             objectName, queryExpression), e);
+       }
+     }
+     else {
+       printSevere("Running a query to get the ObjectNames of all MBeans matching the ObjectName pattern (%1$s) and Query expression (%2$s) is currently unsupported!",
+         objectName, queryExpression);
+       throw new RestApiCallForCommandNotFoundException(MBEAN_QUERY_LINK_RELATION);
+     }
+   }
+ 
+   /**
+    * Stops communication with and closes all connections to the remote HTTP server (service).
+    */
+   @Override
+   public void stop() {
+     if (executorService != null) {
+       executorService.shutdown();
+     }
+ 
+     restTemplate = null;
+   }
+ 
+   @Override
+   public String toString() {
+     return String.format("GemFire Manager HTTP service @ %1$s", getBaseUrl());
+   }
 -
++  
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java
index 0000000,aba05ca..8235f32
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java
@@@ -1,0 -1,424 +1,438 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.management.internal.web.shell;
+ 
+ import java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.HashMap;
++import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
++import java.util.Map.Entry;
+ 
+ import com.gemstone.gemfire.internal.lang.Filter;
+ import com.gemstone.gemfire.internal.lang.Initable;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.internal.util.CollectionUtils;
+ import com.gemstone.gemfire.management.internal.cli.CommandRequest;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+ import com.gemstone.gemfire.management.internal.web.domain.Link;
+ import com.gemstone.gemfire.management.internal.web.domain.LinkIndex;
+ import com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest;
+ import com.gemstone.gemfire.management.internal.web.http.HttpHeader;
+ import com.gemstone.gemfire.management.internal.web.util.ConvertUtils;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.springframework.http.HttpMethod;
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.http.client.ClientHttpResponse;
+ import org.springframework.web.client.ResourceAccessException;
+ import org.springframework.web.util.UriTemplate;
+ 
+ /**
+  * The RestHttpOperationInvoker class is an implementation of the OperationInvoker interface that translates (adapts) 
+  * GemFire shell command invocations into HTTP requests to a corresponding REST API call hosted by the GemFire Manager's
+  * HTTP service using the Spring RestTemplate.
+  * 
+  * @author John Blum
+  * @see com.gemstone.gemfire.internal.lang.Initable
+  * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+  * @see com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker
+  * @see com.gemstone.gemfire.management.internal.web.shell.AbstractHttpOperationInvoker
+  * @see com.gemstone.gemfire.management.internal.web.shell.HttpOperationInvoker
+  * @see com.gemstone.gemfire.management.internal.web.shell.SimpleHttpOperationInvoker
+  * @since 8.0
+  */
+ @SuppressWarnings("unused")
+ public class RestHttpOperationInvoker extends AbstractHttpOperationInvoker implements Initable {
+ 
+   private static final Logger logger = LogService.getLogger();
+   
+   protected static final String ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX = "vf.gf.env.";
+   protected static final String RESOURCES_REQUEST_PARAMETER = "resources";
+ 
+   // the HttpOperationInvoker used when this RestHttpOperationInvoker is unable to resolve the correct REST API
+   // web service endpoint (URI) for a command
+   private final HttpOperationInvoker httpOperationInvoker;
+ 
+   // the LinkIndex containing Links to all GemFire REST API web service endpoints
+   private final LinkIndex linkIndex;
+ 
++
+   /**
+    * Constructs an instance of the RestHttpOperationInvoker class initialized with the given link index containing links
+    * referencing all REST API web service endpoints.  This constructor should only be used for testing purposes.
+    * 
+    * @param linkIndex the LinkIndex containing Links to all REST API web service endpoints in GemFire's REST interface.
+    * @see com.gemstone.gemfire.management.internal.web.domain.LinkIndex
+    */
+   RestHttpOperationInvoker(final LinkIndex linkIndex) {
+     super(REST_API_URL);
+     assertNotNull(linkIndex, "The Link Index resolving commands to REST API web service endpoints cannot be null!");
+     this.linkIndex = linkIndex;
+     this.httpOperationInvoker = new SimpleHttpOperationInvoker();
+   }
+ 
+   /**
+    * Constructs an instance of the RestHttpOperationInvoker class initialized with the given link index containing links
+    * referencing all REST API web service endpoints.  In addition, a reference to the instance of GemFire shell (Gfsh)
+    * using this RestHttpOperationInvoker to send command invocations to the GemFire Manager's HTTP service via HTTP
+    * for processing is required in order to interact with the shell and provide feedback to the user.
+    * 
+    * @param linkIndex the LinkIndex containing Links to all REST API web service endpoints in GemFire' REST interface.
+    * @param gfsh a reference to the instance of the GemFire shell using this OperationInvoker to process commands.
 -   * @see #RestHttpOperationInvoker(com.gemstone.gemfire.management.internal.web.domain.LinkIndex, com.gemstone.gemfire.management.internal.cli.shell.Gfsh, String)
++   * @see #RestHttpOperationInvoker(com.gemstone.gemfire.management.internal.web.domain.LinkIndex, com.gemstone.gemfire.management.internal.cli.shell.Gfsh,  Map)
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    * @see com.gemstone.gemfire.management.internal.web.domain.LinkIndex
+    */
 -  public RestHttpOperationInvoker(final LinkIndex linkIndex, final Gfsh gfsh) {
 -    this(linkIndex, gfsh, CliStrings.CONNECT__DEFAULT_BASE_URL);
++  public RestHttpOperationInvoker(final LinkIndex linkIndex, final Gfsh gfsh, Map<String,String> securityProperties) {
++    this(linkIndex, gfsh, CliStrings.CONNECT__DEFAULT_BASE_URL, securityProperties);
+   }
+ 
+   /**
+    * Constructs an instance of the RestHttpOperationInvoker class initialized with the given link index containing links
+    * referencing all REST API web service endpoints.  In addition, a reference to the instance of GemFire shell (Gfsh)
+    * using this RestHttpOperationInvoker to send command invocations to the GemFire Manager's HTTP service via HTTP
+    * for processing is required in order to interact with the shell and provide feedback to the user.  Finally, a URL
+    * to the HTTP service running in the GemFire Manager is specified as the base location for all HTTP requests.
+    * 
+    * @param linkIndex the LinkIndex containing Links to all REST API web service endpoints in GemFire's REST interface.
+    * @param gfsh a reference to the instance of the GemFire shell using this OperationInvoker to process commands.
+    * @param baseUrl the String specifying the base URL to the GemFire Manager's HTTP service, REST interface.
+    * @see com.gemstone.gemfire.management.internal.web.domain.LinkIndex
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    */
 -  public RestHttpOperationInvoker(final LinkIndex linkIndex, final Gfsh gfsh, final String baseUrl) {
 -    super(gfsh, baseUrl);
++  public RestHttpOperationInvoker(final LinkIndex linkIndex, final Gfsh gfsh, final String baseUrl, Map<String,String> securityProperties) {
++    super(gfsh, baseUrl, securityProperties);
+     assertNotNull(linkIndex, "The Link Index resolving commands to REST API web service endpoints cannot be null!");
+     this.linkIndex = linkIndex;
 -    this.httpOperationInvoker = new SimpleHttpOperationInvoker(gfsh, baseUrl);
++    this.httpOperationInvoker = new SimpleHttpOperationInvoker(gfsh, baseUrl, securityProperties);
++
+   }
+ 
+   /**
+    * Initializes the RestHttpOperationInvokers scheduled and periodic monitoring task to assess the availibity of the
+    * targeted GemFire Manager's HTTP service.
+    * 
+    * @see com.gemstone.gemfire.internal.lang.Initable#init()
+    * @see org.springframework.http.client.ClientHttpRequest
+    */
+   @SuppressWarnings("null")
+   public void init() {
+     final Link pingLink = getLinkIndex().find(PING_LINK_RELATION);
+ 
+     if (pingLink != null) {
+       if (logger.isDebugEnabled()) {
+         logger.debug("Scheduling periodic HTTP ping requests to monitor the availability of the GemFire Manager HTTP service @ ({})",
+             getBaseUrl());
+       }
+ 
+       getExecutorService().scheduleAtFixedRate(new Runnable() {
+         public void run() {
+           try {
+             org.springframework.http.client.ClientHttpRequest httpRequest = getRestTemplate().getRequestFactory()
+               .createRequest(pingLink.getHref(), HttpMethod.HEAD);
+ 
+             httpRequest.getHeaders().set(HttpHeader.USER_AGENT.getName(), USER_AGENT_HTTP_REQUEST_HEADER_VALUE);
+             httpRequest.getHeaders().setAccept(getAcceptableMediaTypes());
+             httpRequest.getHeaders().setContentLength(0l);
+ 
++            if(securityProperties != null){
++              Iterator<Entry<String, String>> it = securityProperties.entrySet().iterator();
++              while(it.hasNext()){
++                Entry<String,String> entry= it.next();
++                httpRequest.getHeaders().add(entry.getKey(), entry.getValue());
++              }
++            }
++
+             ClientHttpResponse httpResponse = httpRequest.execute();
+ 
+             if (HttpStatus.NOT_FOUND.equals(httpResponse.getStatusCode())) {
+               throw new IOException(String.format("The HTTP service at URL (%1$s) could not be found!",
+                 pingLink.getHref()));
+             }
+             else if (!HttpStatus.OK.equals(httpResponse.getStatusCode())) {
+               printDebug("Received unexpected HTTP status code (%1$d - %2$s) for HTTP request (%3$s).",
+                 httpResponse.getRawStatusCode(), httpResponse.getStatusText(), pingLink.getHref());
+             }
+           }
+           catch (IOException e) {
+             printDebug("An error occurred while connecting to the Manager's HTTP service: %1$s: ", e.getMessage());
+             getGfsh().notifyDisconnect(RestHttpOperationInvoker.this.toString());
+             stop();
+           }
+         }
+       }, DEFAULT_INITIAL_DELAY, DEFAULT_PERIOD, DEFAULT_TIME_UNIT);
+     }
+     else {
+       if (logger.isDebugEnabled()) {
+         logger.debug("The Link to the GemFire Manager web service endpoint @ ({}) to monitor availability was not found!",
+             getBaseUrl());
+       }
+     }
+ 
+     initClusterId();
+   }
+ 
+   /**
+    * Returns a reference to an implementation of HttpOperationInvoker used as the fallback by this
+    * RestHttpOperationInvoker for processing commands via HTTP requests.
+    * 
+    * @return an instance of HttpOperationInvoker used by this RestHttpOperationInvoker as a fallback to process commands
+    * via HTTP requests.
+    * @see com.gemstone.gemfire.management.internal.web.shell.HttpOperationInvoker
+    */
+   protected HttpOperationInvoker getHttpOperationInvoker() {
+     return httpOperationInvoker;
+   }
+ 
+   /**
+    * Returns the LinkIndex resolving Gfsh commands to GemFire REST API web service endpoints.  The corresponding
+    * web service endpoint is a URI/URL uniquely identifying the resource on which the command was invoked.
+    * 
+    * @return the LinkIndex containing Links for all GemFire REST API web service endpoints.
+    * @see com.gemstone.gemfire.management.internal.web.domain.LinkIndex
+    */
+   protected LinkIndex getLinkIndex() {
+     return linkIndex;
+   }
+ 
+   /**
+    * Creates an HTTP request from the specified command invocation encapsulated by the CommandRequest object.
+    * The CommandRequest identifies the resource targeted by the command invocation along with any parameters to be sent
+    * as part of the HTTP request.
+    * 
+    * @param command the CommandRequest object encapsulating details of the command invocation.
+    * @return a client HTTP request detailing the operation to be performed on the remote resource targeted by the
+    * command invocation.
+    * @see AbstractHttpOperationInvoker#createHttpRequest(com.gemstone.gemfire.management.internal.web.domain.Link)
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    * @see com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest
+    * @see com.gemstone.gemfire.management.internal.web.util.ConvertUtils#convert(byte[][])
+    */
+   protected ClientHttpRequest createHttpRequest(final CommandRequest command) {
+     ClientHttpRequest request = createHttpRequest(findLink(command));
+ 
+     //request.getParameters().setAll(new HashMap<String, Object>(CollectionUtils.removeKeys(
+     //  new HashMap<String, String>(command.getParameters()), ExcludeNoValueFilter.INSTANCE)));
+ 
+     Map<String, String> commandParameters = command.getParameters();
+ 
+     for (Map.Entry<String, String> entry : commandParameters.entrySet()) {
+       if (NullValueFilter.INSTANCE.accept(entry)) {
+         request.addParameterValues(entry.getKey(), entry.getValue());
+       }
+     }
+ 
+     Map<String, String> environmentVariables = command.getEnvironment();
+ 
+     for (Map.Entry<String, String> entry : environmentVariables.entrySet()) {
+       if (EnvironmentVariableFilter.INSTANCE.accept(entry)) {
+         request.addParameterValues(ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX + entry.getKey(), entry.getValue());
+       }
+     }
+ 
++    
+     if (command.getFileData() != null) {
+       request.addParameterValues(RESOURCES_REQUEST_PARAMETER, (Object[]) ConvertUtils.convert(command.getFileData()));
+     }
+ 
+     return request;
+   }
+ 
+   /**
+    * Finds a Link from the Link Index containing the HTTP request URI to the web service endpoint for the relative
+    * operation on the resource.
+    * 
+    * @param relation a String describing the relative operation (state transition) on the resource.
+    * @return an instance of Link containing the HTTP request URI used to perform the intended operation on the resource.
+    * @see #getLinkIndex()
+    * @see com.gemstone.gemfire.management.internal.web.domain.Link
+    * @see com.gemstone.gemfire.management.internal.web.domain.LinkIndex#find(String)
+    */
+   @Override
+   protected Link findLink(final String relation) {
+     return getLinkIndex().find(relation);
+   }
+ 
+   /**
+    * Finds a Link from the Link Index corresponding to the command invocation.  The CommandRequest indicates the
+    * intended function on the target resource so the proper Link based on it's relation (the state transition of the
+    * corresponding function), along with it's method of operation and corresponding REST API web service endpoint (URI),
+    * can be identified.
+    * 
+    * @param command the CommandRequest object encapsulating the details of the command invocation.
+    * @return a Link referencing the correct REST API web service endpoint (URI) and method for the command invocation.
+    * @see #getLinkIndex()
+    * @see #resolveLink(com.gemstone.gemfire.management.internal.cli.CommandRequest, java.util.List)
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    * @see com.gemstone.gemfire.management.internal.web.domain.Link
+    * @see com.gemstone.gemfire.management.internal.web.domain.LinkIndex
+    */
+   protected Link findLink(final CommandRequest command) {
+     List<Link> linksFound = new ArrayList<>(getLinkIndex().size());
+ 
+     for (Link link : getLinkIndex()) {
+       if (command.getInput().startsWith(link.getRelation())) {
+         linksFound.add(link);
+       }
+     }
+ 
+     if (linksFound.isEmpty()) {
+       throw new RestApiCallForCommandNotFoundException(String.format("No REST API call for command (%1$s) was found!",
+         command.getInput()));
+     }
+ 
+     return (linksFound.size() > 1 ? resolveLink(command, linksFound) : linksFound.get(0));
+   }
+ 
+   /**
+    * Resolves one Link from a Collection of Links based on the command invocation matching multiple relations from
+    * the Link Index.
+    * 
+    * @param command the CommandRequest object encapsulating details of the command invocation.
+    * @param links a Collection of Links for the command matching the relation.
+    * @return the resolved Link matching the command exactly as entered by the user.
+    * @see #findLink(com.gemstone.gemfire.management.internal.cli.CommandRequest)
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    * @see com.gemstone.gemfire.management.internal.web.domain.Link
+    * @see org.springframework.web.util.UriTemplate
+    */
+   // Find and use the Link with the greatest number of path variables that can be expanded!
+   protected Link resolveLink(final CommandRequest command, final List<Link> links) {
+     // NOTE, Gfsh's ParseResult contains a Map entry for all command options whether or not the user set the option
+     // with a value on the command-line, argh!
+     Map<String, String> commandParametersCopy = CollectionUtils.removeKeys(
+       new HashMap<>(command.getParameters()), NoValueFilter.INSTANCE);
+ 
+     Link resolvedLink = null;
+ 
+     int pathVariableCount = 0;
+ 
+     for (Link link : links) {
+       final List<String> pathVariables = new UriTemplate(decode(link.getHref().toString())).getVariableNames();
+ 
+       // first, all path variables in the URL/URI template must be resolvable/expandable for this Link
+       // to even be considered...
+       if (commandParametersCopy.keySet().containsAll(pathVariables)) {
+         // then, either we have not found a Link for the command yet, or the number of resolvable/expandable
+         // path variables in this Link has to be greater than the number of resolvable/expandable path variables
+         // for the last Link
+         if (resolvedLink == null || (pathVariables.size() > pathVariableCount)) {
+           resolvedLink = link;
+           pathVariableCount = pathVariables.size();
+         }
+       }
+     }
+ 
+     if (resolvedLink == null) {
+       throw new RestApiCallForCommandNotFoundException(String.format("No REST API call for command (%1$s) was found!",
+         command.getInput()));
+     }
+ 
+     return resolvedLink;
+   }
+ 
+   /**
+    * Processes the requested command.  Sends the command to the GemFire Manager for remote processing (execution).
+    * 
+    * @param command the command requested/entered by the user to be processed.
+    * @return the result of the command execution.
+    * @see #createHttpRequest(com.gemstone.gemfire.management.internal.cli.CommandRequest)
+    * @see #handleResourceAccessException(org.springframework.web.client.ResourceAccessException)
+    * @see #isConnected()
+    * @see #send(com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest, Class, java.util.Map)
+    * @see #simpleProcessCommand(com.gemstone.gemfire.management.internal.cli.CommandRequest, RestApiCallForCommandNotFoundException)
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    * @see org.springframework.http.ResponseEntity
+    */
+   @Override
+   public String processCommand(final CommandRequest command) {
+     assertState(isConnected(), "Gfsh must be connected to the GemFire Manager in order to process commands remotely!");
+ 
+     try {
+       ResponseEntity<String> response = send(createHttpRequest(command), String.class, command.getParameters());
+ 
+       return response.getBody();
+     }
+     catch (RestApiCallForCommandNotFoundException e) {
+       return simpleProcessCommand(command, e);
+     }
+     catch (ResourceAccessException e) {
+       return handleResourceAccessException(e);
+     }
+   }
+ 
+   /**
+    * A method to process the command by sending an HTTP request to the simple URL/URI web service endpoint, where all
+    * details of the request and command invocation are encoded in the URL/URI.
+    * 
+    * @param command the CommandRequest encapsulating the details of the command invocation.
+    * @param e the RestApiCallForCommandNotFoundException indicating the standard REST API web service endpoint
+    * could not be found.
+    * @return the result of the command execution.
+    * @see #getHttpOperationInvoker()
+    * @see com.gemstone.gemfire.management.internal.web.shell.HttpOperationInvoker#processCommand(com.gemstone.gemfire.management.internal.cli.CommandRequest)
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    */
+   protected String simpleProcessCommand(final CommandRequest command, final RestApiCallForCommandNotFoundException e) {
+     if (getHttpOperationInvoker() != null) {
+       printWarning("WARNING - No REST API web service endpoint (URI) exists for command (%1$s); using the non-RESTful, simple URI.",
+         command.getName());
+ 
+       return String.valueOf(getHttpOperationInvoker().processCommand(command));
+     }
+ 
+     throw e;
+   }
+ 
+   protected static class EnvironmentVariableFilter extends NoValueFilter {
+ 
+     protected static final EnvironmentVariableFilter INSTANCE = new EnvironmentVariableFilter();
+ 
+     @Override
+     public boolean accept(final Map.Entry<String, String> entry) {
+       return (!entry.getKey().startsWith("SYS") && super.accept(entry));
+     }
+   }
+ 
+   protected static class NoValueFilter implements Filter<Map.Entry<String, String>> {
+ 
+     protected static final NoValueFilter INSTANCE = new NoValueFilter();
+ 
+     @Override
+     public boolean accept(final Map.Entry<String, String> entry) {
+       return !StringUtils.isBlank(entry.getValue());
+     }
+   }
+ 
+   protected static class NullValueFilter implements Filter<Map.Entry<String, ?>> {
+ 
+     protected static final NullValueFilter INSTANCE = new NullValueFilter();
+ 
+     @Override
+     public boolean accept(final Map.Entry<String, ?> entry) {
+       return (entry.getValue() != null);
+     }
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvoker.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvoker.java
index 0000000,c01e0c6..ce83444
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvoker.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvoker.java
@@@ -1,0 -1,161 +1,162 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.management.internal.web.shell;
+ 
+ import java.net.URI;
++import java.util.Map;
+ 
+ import com.gemstone.gemfire.management.internal.cli.CommandRequest;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.web.domain.Link;
+ import com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest;
+ import com.gemstone.gemfire.management.internal.web.http.HttpMethod;
+ 
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.web.client.ResourceAccessException;
+ import org.springframework.web.util.UriComponentsBuilder;
+ 
+ /**
+  * The SimpleHttpOperationInvoker class is an implementation of the OperationInvoker interface that issues commands
+  * to the GemFire Manager via HTTP.  The SimpleHttpOperationInvoker uses a single URL web service endpoint to process
+  * commands and return responses.
+  * 
+  * @author John Blum
+  * @see java.net.URI
+  * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+  * @see com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker
+  * @see com.gemstone.gemfire.management.internal.web.shell.AbstractHttpOperationInvoker
+  * @see com.gemstone.gemfire.management.internal.web.shell.HttpOperationInvoker
+  * @see com.gemstone.gemfire.management.internal.web.shell.RestHttpOperationInvoker
+  * @since 8.0
+  */
+ @SuppressWarnings("unused")
+ public class SimpleHttpOperationInvoker extends AbstractHttpOperationInvoker {
+ 
+   protected static final String CMD_QUERY_PARAMETER = "cmd";
+   protected static final String LINK_RELATION = "simple";
+   protected static final String REST_API_MANAGEMENT_COMMANDS_URI = "/management/commands";
+ 
+   /**
+    * Default no-arg constructor to create an instance of the SimpleHttpOperationInvoker class for testing purposes.
+    */
+   SimpleHttpOperationInvoker() {
+     super(REST_API_URL);
+   }
+ 
+   /**
+    * Constructs an instance of the SimpleHttpOperationInvoker class initialized with a reference to the GemFire shell
+    * (Gfsh) using this HTTP-based OperationInvoker to send command invocations to the GemFire Manager's HTTP service
+    * using HTTP processing.
+    * 
+    * @param gfsh a reference to the instance of the GemFire shell using this OperationInvoker to process commands.
 -   * @see #SimpleHttpOperationInvoker(com.gemstone.gemfire.management.internal.cli.shell.Gfsh, String)
++   * @see #SimpleHttpOperationInvoker(com.gemstone.gemfire.management.internal.cli.shell.Gfsh, String, Map)
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    */
 -  public SimpleHttpOperationInvoker(final Gfsh gfsh) {
 -    this(gfsh, REST_API_URL);
++  public SimpleHttpOperationInvoker(final Gfsh gfsh, Map<String,String> securityProperties) {
++    this(gfsh, REST_API_URL, securityProperties);
+   }
+ 
+   /**
+    * Constructs an instance of the SimpleHttpOperationInvoker class initialized with a reference to the GemFire shell
+    * (Gfsh) using this HTTP-based OperationInvoker to send command invocations to the GemFire Manager's HTTP service
+    * using HTTP for processing.  In addition, the base URL to the HTTP service running in the GemFire Manager is
+    * specified as the base location for all HTTP requests.
+    * 
+    * @param gfsh a reference to the instance of the GemFire shell using this OperationInvoker to process commands.
+    * @param baseUrl the base URL to the GemFire Manager's HTTP service.
+    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+    */
 -  public SimpleHttpOperationInvoker(final Gfsh gfsh, final String baseUrl) {
 -    super(gfsh, baseUrl);
++  public SimpleHttpOperationInvoker(final Gfsh gfsh, final String baseUrl, Map<String,String> securityProperties) {
++    super(gfsh, baseUrl, securityProperties);
+   }
+ 
+   /**
+    * Creates an HTTP request from a command invocation encapsulated in a CommandRequest object.  The CommandRequest
+    * identifies the resource targeted by the command invocation along with any parameters to be sent as part of the
+    * HTTP request.
+    * 
+    * @param command a CommandRequest object encapsulating the details of the command invocation.
+    * @return a client HTTP request detailing the operation to be performed on the remote resource targeted by the
+    * command invocation.
+    * @see #createLink(com.gemstone.gemfire.management.internal.cli.CommandRequest)
+    * @see AbstractHttpOperationInvoker#createHttpRequest(com.gemstone.gemfire.management.internal.web.domain.Link)
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    * @see com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest
+    */
+   protected ClientHttpRequest createHttpRequest(final CommandRequest command) {
+     return createHttpRequest(createLink(command));
+   }
+ 
+   /**
+    * Creates a Link based on the resource being targeted by the command invocation.  The Link will contain the URI
+    * uniquely identifying the resource along with the HTTP GET operation specifying the method of processing.
+    * 
+    * @param command a CommandRequest object encapsulating the details of the command invocation.
+    * @return a Link identifying the resource and the operation on the resource.
+    * @see AbstractHttpOperationInvoker#createLink(String, java.net.URI, com.gemstone.gemfire.management.internal.web.http.HttpMethod)
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    * @see com.gemstone.gemfire.management.internal.web.domain.Link
+    */
+   protected Link createLink(final CommandRequest command) {
+     return createLink(LINK_RELATION, getHttpRequestUrl(command), HttpMethod.POST);
+   }
+ 
+   /**
+    * Gets HTTP request URL (URI) locating the proper resource along with details for the request.
+    * 
+    * @param command a CommandRequest object encapsulating the details of the command invocation.
+    * @return a URI identifying the resource, it's location as well as details of the HTTP request.
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    * @see java.net.URI
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    * @see org.springframework.web.util.UriComponentsBuilder
+    */
+   protected URI getHttpRequestUrl(final CommandRequest command) {
+     return UriComponentsBuilder.fromHttpUrl(getBaseUrl())
+       .path(REST_API_MANAGEMENT_COMMANDS_URI)
+       .queryParam(CMD_QUERY_PARAMETER, command.getInput())
+       .build().encode().toUri();
+   }
+ 
+   /**
+    * Processes the requested command.  Sends the command to the GemFire Manager for remote processing (execution).
+    * 
+    * @param command the command requested/entered by the user to be processed.
+    * @return the result of the command execution.
+    * @see #isConnected()
+    * @see #createHttpRequest(com.gemstone.gemfire.management.internal.cli.CommandRequest)
+    * @see AbstractHttpOperationInvoker#handleResourceAccessException(org.springframework.web.client.ResourceAccessException)
+    * @see AbstractHttpOperationInvoker#send(com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest, Class)
+    * @see com.gemstone.gemfire.management.internal.cli.CommandRequest
+    * @see org.springframework.http.ResponseEntity
+    */
+   @Override
+   public String processCommand(final CommandRequest command) {
+     assertState(isConnected(), "Gfsh must be connected to the GemFire Manager in order to process commands remotely!");
+ 
+     try {
+       final ResponseEntity<String> response = send(createHttpRequest(command), String.class);
+ 
+       return response.getBody();
+     }
+     catch (ResourceAccessException e) {
+       return handleResourceAccessException(e);
+     }
+   }
+ 
+ }



[45/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
index 0000000,8147718..a22ce3f
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
@@@ -1,0 -1,2161 +1,2162 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.internal.i18n;
+ 
+ import com.gemstone.gemfire.i18n.StringId;
+ 
+ 
+ /**
+  * This interface defines all of the {@link StringId} that
+  * are used for internationalization, aka i18n.
+  *
+  * <b>No code other than StringId creation belongs here</b>
+  *
+  * It is an interface so that classes that need to access a StringId
+  * can simply add <code>implements LocalizedStrings</code> and then
+  * access the StringIds directly
+  * <code>
+  * public class SomeClass implements LocalizedStrings {
+  *   public logStuff() {
+  *     getLogger().info(SomeClass_SOME_STRINGID);
+  *  }
+  * }
+  * </code>
+  *
+  * @author kbanks
+  * @since 6.0
+  *
+  */
+ public class LocalizedStrings extends ParentLocalizedStrings {
+   public static final StringId DataSerializer_NO_INSTANTIATOR_HAS_BEEN_REGISTERED_FOR_CLASS_WITH_ID_0 = new StringId(3413, "No Instantiator has been registered for class with id  {0}");
+   public static final StringId DataSerializer_COULD_NOT_INSTANTIATE_AN_INSTANCE_OF_0 = new StringId(3414, "Could not instantiate an instance of  {0}");
+   public static final StringId DataSerializer_WHILE_INSTANTIATING_AN_INSTANCE_OF_0 = new StringId(3415, "While instantiating an instance of  {0}");
+   public static final StringId Instantiator_CANNOT_REGISTER_A_NULL_CLASS = new StringId(3416, "Cannot register a null class.");
+   public static final StringId AdminDistributedSystemImpl_WHILE_WAITING_FOR_FUTURE = new StringId(3417, "While waiting for Future");
+   public static final StringId AdminDistributedSystemImpl_THIS_ADMINDISTRIBUTEDSYSTEM_IS_ALREADY_CONNECTED = new StringId(3418, "This AdminDistributedSystem is already connected.");
+   public static final StringId AdminDistributedSystemImpl_ONLY_ONE_ADMINDISTRIBUTEDSYSTEM_CONNECTION_CAN_BE_MADE_AT_ONCE = new StringId(3419, "Only one AdminDistributedSystem connection can be made at once.");
+   public static final StringId AdminDistributedSystemImpl_AN_ADMINEXCEPTION_WAS_THROWN_WHILE_GETTING_THE_GEMFIRE_HEALTH = new StringId(3420, "An AdminException was thrown while getting the GemFire health.");
+   public static final StringId DistributedSystemConfigImpl_ENTITY_CONFIGURATION_XML_FILE_0_DOES_NOT_EXIST = new StringId(3421, "Entity configuration XML file \"{0}\" does not exist");
+   public static final StringId ManagedEntityConfigXml_PUBLIC_ID_0_SYSTEM_ID_1 = new StringId(3422, "Public Id: \"{0}\" System Id: \"{1}\"");
+   public static final StringId ManagedEntityConfigXmlGenerator_AN_ADMINEXCEPTION_WAS_THROWN_WHILE_GENERATING_XML = new StringId(3423, "An AdminException was thrown while generating XML.");
+   public static final StringId ManagedEntityConfigXmlParser_WHILE_PARSING_XML = new StringId(3424, "While parsing XML");
+   public static final StringId ManagedEntityConfigXmlParser_MALFORMED_INTEGER_0 = new StringId(3425, "Malformed integer \"{0}\"");
+   public static final StringId SystemMemberBridgeServerImpl_UNEXPECTED_EXCEPTION_WHILE_REFRESHING = new StringId(3426, "Unexpected exception while refreshing");
+   public static final StringId AgentImpl_WHILE_CREATING_OBJECTNAME_0 = new StringId(3427, "While creating ObjectName:  {0}");
+   public static final StringId AgentImpl_COULD_NOT_OPEN_LOG_FILE_0 = new StringId(3428, "Could not open log file \"{0}\"");
+   public static final StringId GemFireHealthJmxImpl_WHILE_GETTING_THE_DISTRIBUTEDSYSTEMHEALTHCONFIG = new StringId(3429, "While getting the DistributedSystemHealthConfig");
+   public static final StringId GemFireHealthJmxImpl_WHILE_GETTING_THE_GEMFIREHEALTHCONFIG = new StringId(3430, "While getting the GemFireHealthConfig");
+   public static final StringId AbstractDistributionConfig_INVALID_LOCATOR_0_THE_PORT_1_WAS_NOT_GREATER_THAN_ZERO_AND_LESS_THAN_65536 = new StringId(3431, "Invalid locator \"{0}\". The port {1} was not greater than zero and less than 65,536.");
+   public static final StringId DistributionManager_INTERRUPTED_WHILE_WAITING_FOR_FIRST_STARTUPRESPONSEMESSAGE = new StringId(3432, "Interrupted while waiting for first StartupResponseMessage");
+   public static final StringId DistributionManager_RECEIVED_NO_CONNECTION_ACKNOWLEDGMENTS_FROM_ANY_OF_THE_0_SENIOR_CACHE_MEMBERS_1 = new StringId(3433, "Received no connection acknowledgments from any of the  {0}  senior cache members:  {1}");
+   public static final StringId MessageFactory_AN_INSTANTIATIONEXCEPTION_WAS_THROWN_WHILE_INSTANTIATING_A_0 = new StringId(3434, "An InstantiationException was thrown while instantiating a  {0}");
+   public static final StringId MessageFactory_COULD_NOT_ACCESS_ZEROARG_CONSTRUCTOR_OF_0 = new StringId(3435, "Could not access zero-arg constructor of  {0}");
+   public static final StringId GroupMembershipService_AN_IOEXCEPTION_WAS_THROWN_WHILE_OPENING_0 = new StringId(3436, "An IOException was thrown while opening \"{0}\"");
+   public static final StringId GroupMembershipService_AN_EXCEPTION_WAS_THROWN_WHILE_READING_JGROUPS_CONFIG = new StringId(3437, "An Exception was thrown while reading JGroups config.");
+   public static final StringId GroupMembershipService_AN_EXCEPTION_WAS_THROWN_WHILE_JOINING = new StringId(3438, "An Exception was thrown while attempting to join the distributed system.");
+   public static final StringId InternalInstantiator_CANNOT_UNREGISTER_A_NULL_CLASS = new StringId(3439, "Cannot unregister a null class");
+   public static final StringId StatisticDescriptorImpl_THE_STATISTIC_0_WITH_ID_1_IS_OF_TYPE_2_AND_IT_WAS_EXPECTED_TO_BE_AN_INT = new StringId(3440, "The statistic  {0}  with id  {1}  is of type  {2}  and it was expected to be an int.");
+   public static final StringId StatisticDescriptorImpl_THE_STATISTIC_0_WITH_ID_1_IS_OF_TYPE_2_AND_IT_WAS_EXPECTED_TO_BE_A_DOUBLE = new StringId(3441, "The statistic  {0}  with id  {1}  is of type  {2}  and it was expected to be a double.");
+   public static final StringId StatisticsTypeXml_SAX_ERROR_WHILE_WORKING_WITH_XML = new StringId(3442, "SAX error while working with XML");
+   public static final StringId StatisticsTypeXml_SAX_FATAL_ERROR_WHILE_WORKING_WITH_XML = new StringId(3443, "SAX fatal error while working with XML");
+   public static final StringId AdminRequest_A_REPLYEXCEPTION_WAS_THROWN_WHILE_WAITING_FOR_A_REPLY = new StringId(3444, "A ReplyException was thrown while waiting for a reply.");
+   public static final StringId AdminWaiters_ADMINISTRATION_REQUEST_0_SENT_TO_1_TIMED_OUT_AFTER_2_SECONDS = new StringId(3445, "Administration request  {0}  sent to  {1}  timed out after  {2}  seconds.");
+   public static final StringId RemoteAlert_INVALIDATE_TIMESTAMP_0 = new StringId(3446, "Invalidate timestamp:  {0}");
+   public static final StringId RemoteGemFireVM_AN_EXCEPTION_WAS_THROWN_WHILE_CREATING_VM_ROOT_REGION_0 = new StringId(3447, "An Exception was thrown while creating VM root region \"{0}\"");
+   public static final StringId RemoteGemFireVM_WHILE_CREATING_SUBREGION_0_OF_1 = new StringId(3448, "While creating subregion \"{0}\" of \"{1}\"");
+   public static final StringId RemoteGfManagerAgent_AN_EXCEPUTIONEXCEPTION_WAS_THROWN_WHILE_WAITING_FOR_FUTURE = new StringId(3449, "An ExceputionException was thrown while waiting for Future.");
+   public static final StringId AbstractLRURegionMap_INCREMENT_TO_LRU_DELTA_WITHOUT_USE_OF_PRIOR_VALUE_PUT_AND_REPLACE_CALLS_MUST_BE_FOLLOWED_BY_A_CALL_TO_LRUUPDATECALLBACK_DELTA_IS_0 = new StringId(3450, "Increment to lru delta without use of prior value, put and replace calls must be followed by a call to lruUpdateCallback. (delta is  {0} ).");
+   public static final StringId BucketAdvisor_CANNOT_CHANGE_FROM_0_TO_1_FOR_BUCKET_2 = new StringId(3451, "Cannot change from  {0}  to  {1}  for bucket  {2}");
+   public static final StringId GatewayEventRemoteDispatcher_0_EXCEPTION_DURING_PROCESSING_BATCH_1_ON_CONNECTION_2 = new StringId(3452, "{0} : Exception during processing batch  {1}  on connection  {2}");
+   public static final StringId GemFireCache_COULD_NOT_CONVERT_XML_FILE_0_TO_AN_URL = new StringId(3453, "Could not convert XML file \"{0}\" to an URL.");
+   public static final StringId GemFireCache_WHILE_OPENING_CACHE_XML_0_THE_FOLLOWING_ERROR_OCCURRED_1 = new StringId(3454, "While opening Cache XML \"{0}\" the following error occurred \"{1}\"");
+   public static final StringId Oplog_TRIED_TO_SEEK_TO_0_BUT_THE_FILE_LENGTH_IS_1_OPLOG_FILE_OBJECT_USED_FOR_READING_2 = new StringId(3455, "Tried to seek to {0}, but the file length is {1}. Oplog File object used for reading={2}");
+   public static final StringId PartitionedRegion_ATTEMPT_TO_ACQUIRE_PRIMARY_NODE_FOR_WRITE_ON_BUCKET_0_TIMED_OUT_IN_1_MS_CURRENT_REDUNDANCY_2_DOES_NOT_SATISFY_MINIMUM_3 = new StringId(3456, "Attempt to acquire primary node for write on bucket  {0}  timed out in  {1}  ms. Current redundancy [ {2} ] does not satisfy minimum [ {3} ]");
+   public static final StringId PartitionedRegion_ATTEMPT_TO_ACQUIRE_PRIMARY_NODE_FOR_READ_ON_BUCKET_0_TIMED_OUT_IN_1_MS_CURRENT_REDUNDANCY_2_DOES_NOT_SATISFY_MINIMUM_3 = new StringId(3457, "Attempt to acquire primary node for read on bucket  {0}  timed out in  {1}  ms. Current redundancy [ {2} ] does not satisfy minimum [ {3} ]");
+   public static final StringId PartitionedRegion_ATTEMPT_TO_ACQUIRE_PRIMARY_NODE_FOR_READ_ON_BUCKET_0_TIMED_OUT_IN_1_MS = new StringId(3458, "Attempt to acquire primary node for read on bucket  {0}  timed out in  {1}  ms");
+ 
+   public static final StringId RegionAttributesCreation_CONCURRENCYCHECKSENABLED_IS_NOT_THE_SAME = new StringId(3459, "ConcurrencyChecksEnabled is not the same");
+   public static final StringId RegionAttributesCreation_ENABLE_OFF_HEAP_MEMORY_IS_NOT_THE_SAME = new StringId(3460, "EnableOffHeapMemory is not the same");
+ 
+   public static final StringId ProxyRegionMap_NO_ENTRY_SUPPORT_ON_REGIONS_WITH_DATAPOLICY_0 = new StringId(3461, "No entry support on regions with DataPolicy  {0}");
+   public static final StringId SearchLoadAndWriteProcessor_WHILE_INVOKING_A_REMOTE_NETLOAD_0 = new StringId(3462, "While invoking a remote netLoad:  {0}");
+   public static final StringId SearchLoadAndWriteProcessor_WHILE_INVOKING_A_REMOTE_NETWRITE_0 = new StringId(3463, "While invoking a remote netWrite:  {0}");
+   public static final StringId SearchLoadAndWriteProcessor_TIMED_OUT_WHILE_DOING_NETSEARCHNETLOADNETWRITE_PROCESSORID_0_KEY_IS_1 = new StringId(3464, "Timed out while doing netsearch/netload/netwrite processorId= {0}  Key is  {1}");
+   public static final StringId SearchLoadAndWriteProcessor_TIMEOUT_DURING_NETSEARCHNETLOADNETWRITE_DETAILS_0 = new StringId(3465, "Timeout during netsearch/netload/netwrite. Details:  {0}");
+   public static final StringId TXCommitMessage_THESE_REGIONS_EXPERIENCED_RELIABILITY_FAILURE_DURING_DISTRIBUTION_OF_THE_OPERATION_0 = new StringId(3466, "These regions experienced reliability failure during distribution of the operation:  {0}");
+   public static final StringId TXCommitMessage_COMMIT_OPERATION_GENERATED_ONE_OR_MORE_EXCEPTIONS_FROM_0 = new StringId(3467, "Commit operation generated one or more exceptions from  {0}");
+   public static final StringId BucketSizeMessage_BUCKETSIZERESPONSE_GOT_REMOTE_CACHECLOSEDEXCEPTION_FORCING_REATTEMPT = new StringId(3468, "BucketSizeResponse got remote CacheClosedException; forcing reattempt.");
+   public static final StringId BucketSizeMessage_BUCKETSIZERESPONSE_GOT_REMOTE_REGION_DESTROYED_FORCING_REATTEMPT = new StringId(3469, "BucketSizeResponse got remote Region destroyed; forcing reattempt.");
+   public static final StringId ContainsKeyValueMessage_CONTAINSKEYVALUERESPONSE_GOT_REMOTE_CACHEEXCEPTION_FORCING_REATTEMPT = new StringId(3470, "ContainsKeyValueResponse got remote CacheException; forcing reattempt.");
+   public static final StringId DumpB2NRegion_B2NRESPONSE_GOT_REMOTE_CACHEEXCEPTION_THROWING_FORCEREATTEMPTEXCEPTION = new StringId(3471, "B2NResponse got remote CacheException, throwing ForceReattemptException.");
+   public static final StringId FetchEntriesMessage_FETCHKEYSRESPONSE_GOT_REMOTE_CANCELLATION_FORCING_REATTEMPT = new StringId(3472, "FetchKeysResponse got remote cancellation; forcing reattempt.");
+   public static final StringId FetchEntryMessage_FETCHENTRYRESPONSE_GOT_REMOTE_CACHEEXCEPTION_FORCING_REATTEMPT = new StringId(3473, "FetchEntryResponse got remote CacheException; forcing reattempt.");
+   public static final StringId FetchKeysMessage_FETCHKEYSRESPONSE_GOT_REMOTE_CACHECLOSEDEXCEPTION_FORCING_REATTEMPT = new StringId(3474, "FetchKeysResponse got remote CacheClosedException; forcing reattempt.");
+   public static final StringId GetMessage_UNABLE_TO_DESERIALIZE_VALUE_IOEXCEPTION = new StringId(3475, "Unable to deserialize value (IOException)");
+   public static final StringId GetMessage_UNABLE_TO_DESERIALIZE_VALUE_CLASSNOTFOUNDEXCEPTION = new StringId(3476, "Unable to deserialize value (ClassNotFoundException)");
+   public static final StringId RemoteOperationMessage_0_COULD_NOT_FIND_REGION_1 = new StringId(3477, "{0} : could not find region {1}");
+   public static final StringId ManageBucketMessage_NODERESPONSE_GOT_REMOTE_CANCELLATION_THROWING_PARTITIONEDREGIONCOMMUNICATION_EXCEPTION = new StringId(3478, "NodeResponse got remote cancellation, throwing PartitionedRegionCommunication Exception.");
+   public static final StringId ManageBucketMessage_NODERESPONSE_GOT_LOCAL_DESTROY_ON_THE_PARTITIONREGION_THROWING_FORCEREATTEMPTEXCEPTION = new StringId(3479, "NodeResponse got local destroy on the PartitionRegion , throwing ForceReattemptException.");
+   public static final StringId PartitionMessage_PARTITIONRESPONSE_GOT_REMOTE_CACHECLOSEDEXCEPTION = new StringId(3480, "PartitionResponse got remote CacheClosedException");
+   public static final StringId PrimaryRequestMessage_NODERESPONSE_GOT_REMOTE_CACHECLOSEDEXCEPTION_THROWING_PARTITIONEDREGIONCOMMUNICATION_EXCEPTION = new StringId(3481, "NodeResponse got remote CacheClosedException, throwing PartitionedRegionCommunication Exception.");
+   public static final StringId ConnectionImpl_INVALID_PING_REPLY_WITH_EXPECTED_TRANSACTION_0_AND_ACTUAL_TRANSACTION_1 = new StringId(3482, "Invalid ping reply with expected transaction  {0}  and actual transaction  {1}");
+   public static final StringId ConnectionImpl_EXCEPTION_DURING_PING_WITH_TRANSACTION_0_DUE_TO_THE_FOLLOWING_SERVER_EXCEPTION = new StringId(3483, "Exception during ping with transaction  {0}  due to the following server exception:");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_GET = new StringId(3484, "{0} : While performing a remote get.");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_PUT = new StringId(3485, "{0} : While performing a remote put.");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_DESTROY = new StringId(3486, "{0} : While performing a remote destroy.");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_DESTROY_REGION = new StringId(3487, "{0} : While performing a remote destroy region.");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_CLEAR_REGION = new StringId(3488, "{0} : While performing a remote clear region");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_CREATE_REGION = new StringId(3489, "{0} : While performing a remote create region");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_UNREGISTERINTEREST = new StringId(3490, "{0} : While performing a remote unregisterInterest");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_CONTAINSKEY = new StringId(3491, "{0} : While performing a remote containsKey");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_PROCESSBATCH = new StringId(3492, "{0} : While performing a remote processBatch");
+   public static final StringId ConnectionImpl_EXCEPTION_OCCURED_ON_SERVER_ERROR_0 = new StringId(3493, "Exception occurred on Server. Error : {0}.");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_REGISTERINTEREST = new StringId(3494, "{0} : While performing a remote registerInterest");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_REGISTERINTEREST_1 = new StringId(3495, "{0} : While performing a remote registerInterest:  {1}");
+   public static final StringId LicenseInfo_EVAL_NAG = new StringId(3496, "NOTICE: use of GemFire with this license key is only permitted in a non-production environment and for the period, if any, limited by the license key.  Notwithstanding any other provision in the EULA, this Evaluation License of GemFire is provided AS-IS without support or warranty of any kind, expressed or implied.");
+   public static final StringId ConnectionImpl_0_WHILE_DESERIALIZING_QUERY_RESULT = new StringId(3497, "{0} : While deserializing query result");
+   public static final StringId TombstoneService_UNEXPECTED_EXCEPTION = new StringId(3498, "GemFire garbage collection service encountered an unexpected exception");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_KEYSET_1 = new StringId(3499, "{0} : While performing a remote keySet {1}");
+   public static final StringId ConnectionImpl_0_WHILE_PERFORMING_A_REMOTE_KEYSET = new StringId(3500, "{0} : While performing a remote keySet");
+   public static final StringId ConnectionImpl_0_WHILE_MAKE_PRIMARY = new StringId(3501, "{0} : While make primary");
+   public static final StringId ConnectionImpl_CONNECTION_0_WHILE_SENDING_PERIODIC_ACK = new StringId(3502, "Connection ( {0} ): While sending periodic ack");
+   public static final StringId Oplog_FAILED_READING_FROM_0_OPLOG_DETAILS_1_2_3_4_5_6 = new StringId(3503, "Failed reading from \"{0}\". \n oplogID = {1}\n Offset being read={2} Current Oplog Size={3}  Actual File Size ={4} IS ASYNCH MODE ={5} IS ASYNCH WRITER ALIVE={6}");
+   public static final StringId EndpointImpl_0_CAN_NOT_REGISTER_INTEREST_IN_REGION_1_KEY_2_BECAUSE_THE_SERVER_IS_NOT_AVAILABLE = new StringId(3504, "{0} : Can not register interest in region  {1}  key  {2}  because the server is not available.");
+   public static final StringId EndpointImpl_0_CAN_NOT_REGISTER_INSTANTIATORS_1_BECAUSE_THE_SERVER_IS_NOT_AVAILABLE = new StringId(3505, "{0} : Can not register instantiators   {1}  because the server is not available.");
+   public static final StringId EndpointImpl_0_CANNOT_UNREGISTER_INTEREST_IN_REGION_1_KEY_2_BECAUSE_THE_SERVER_IS_NOT_AVAILABLE = new StringId(3506, "{0} : Cannot unregister interest in region  {1}  key  {2}  because the server is not available.");
+   public static final StringId EndpointImpl_0_CAN_NOT_NOTIFY_SERVER_THAT_THIS_CLIENT_IS_READY_BECAUSE_THE_SERVER_IS_NOT_AVAILABLE = new StringId(3507, "{0} : Can not notify server that this client is ready because the server is not available.");
+   public static final StringId CacheCreation_WHILE_STARTING_CACHE_SERVER_0 = new StringId(3508, "While starting cache server  {0}");
+   public static final StringId CacheCreation_WHILE_STARTING_GATEWAY_HUB_0 = new StringId(3509, "While starting gateway hub  {0}");
+   public static final StringId CacheXml_ERROR_WHILE_PARSING_XML = new StringId(3510, "Error while parsing XML");
+   public static final StringId CacheXml_FATAL_ERROR_WHILE_PARSING_XML = new StringId(3511, "Fatal error while parsing XML");
+   public static final StringId CacheXmlParser_WHILE_PARSING_XML = new StringId(3512, "While parsing XML");
+   public static final StringId CacheXmlParser_MALFORMED_INTEGER_0 = new StringId(3513, "Malformed integer \"{0}\"");
+   public static final StringId CacheXmlParser_MALFORMED_FLOAT_0 = new StringId(3514, "Malformed float \"{0}\"");
+   public static final StringId CacheXmlParser_COULD_NOT_CREATE_GATEWAY_WITH_ID_0 = new StringId(3515, "Could not create gateway with id  {0}");
+   public static final StringId CacheXmlParser_COULD_NOT_ADD_ENDPOINT_WITH_ID_0 = new StringId(3516, "Could not add endpoint with id  {0}");
+   public static final StringId CacheXmlParser_COULD_NOT_LOAD_KEYCONSTRAINT_CLASS_0 = new StringId(3517, "Could not load key-constraint class:  {0}");
+   public static final StringId CacheXmlParser_COULD_NOT_LOAD_VALUECONSTRAINT_CLASS_0 = new StringId(3518, "Could not load value-constraint class:  {0}");
+   public static final StringId CacheXmlParser_WHILE_INSTANTIATING_A_0 = new StringId(3519, "While instantiating a  {0}");
+   public static final StringId RegionCreation_GETTING_ENTRIES_RECURSIVELY_IS_NOT_SUPPORTED = new StringId(3520, "Getting entries recursively is not supported.");
+   public static final StringId AbstractPoolCache_ABSTRACTPOOLEDCACHEGETPOOLEDCONNECTIONFROMPOOLINTERRUPTEDEXCEPTION_IN_WAITING_THREAD = new StringId(3521, "AbstractPooledCache::getPooledConnectionFromPool:InterruptedException in waiting thread");
+   public static final StringId ConnectionPoolCacheImpl_CONNECTIONPOOLCACHEIMPLGENEWCONNECTION_EXCEPTION_IN_CREATING_NEW_POOLEDCONNECTION = new StringId(3522, "ConnectionPoolCacheImpl::getNewConnection: Exception in creating new PooledConnection");
+   public static final StringId ConnectionPoolCacheImpl_CONNECTIONPOOLCACHEIMPLGENEWCONNECTION_CONNECTIONPOOLCACHE_NOT_INTIALIZED_WITH_CONNECTIONPOOLDATASOURCE = new StringId(3523, "ConnectionPoolCacheImpl::getNewConnection: ConnectionPoolCache not initialized with ConnectionPoolDatasource");
+   public static final StringId FacetsJCAConnectionManagerImpl_FACETSJCACONNECTIONMANAGERIMPL_ALLOCATECONNECTION_IN_GETTING_CONNECTION_FROM_POOL_DUE_TO_0 = new StringId(3524, "FacetsJCAConnectionManagerImpl:: allocateConnection : in getting connection from pool due to  {0}");
+   public static final StringId FacetsJCAConnectionManagerImpl_FACETSJCACONNECTIONMANAGERIMPL_ALLOCATECONNECTION_SYSTEM_EXCEPTION_DUE_TO_0 = new StringId(3525, "FacetsJCAConnectionManagerImpl:: allocateConnection :system exception due to  {0}");
+   //public static final StringId GemFireBasicDataSource_GEMFIREBASICDATASOURCEGETCONNECTIONEXCEPTION_WHILE_TRYING_TO_LOAD_THE_DRIVER_DUE_TO_0 = new StringId(3526, "GemFireBasicDataSource::getConnection:Exception while trying to load the driver due to  {0}");
+   public static final StringId JCAConnectionManagerImpl_JCACONNECTIONMANAGERIMPL_ALLOCATECONNECTION_IN_GETTING_CONNECTION_FROM_POOL_DUE_TO_0 = new StringId(3527, "JCAConnectionManagerImpl:: allocateConnection : in getting connection from pool due to  {0}");
+   public static final StringId JCAConnectionManagerImpl_JCACONNECTIONMANAGERIMPL_ALLOCATECONNECTION_IN_TRANSACTION_DUE_TO_0 = new StringId(3528, "JCAConnectionManagerImpl:: allocateConnection : in transaction due to  {0}");
+   public static final StringId JCAConnectionManagerImpl_JCACONNECTIONMANAGERIMPL_ALLOCATECONNECTION_SYSTEM_EXCEPTION_DUE_TO_0 = new StringId(3529, "JCAConnectionManagerImpl:: allocateConnection :system exception due to  {0}");
+   public static final StringId ManagedPoolCacheImpl_MANAGEDPOOLCACHEIMPLGETNEWCONNECTION_EXCEPTION_IN_CREATING_NEW_MANAGED_POOLEDCONNECTION = new StringId(3530, "ManagedPoolCacheImpl::getNewConnection: Exception in creating new Managed PooledConnection");
+   public static final StringId TranxPoolCacheImpl_TRANXPOOLCACHEIMPLGETNEWCONNECTION_EXCEPTION_IN_CREATING_NEW_TRANSACTION_POOLEDCONNECTION = new StringId(3531, "TranxPoolCacheImpl::getNewConnection: Exception in creating new transaction PooledConnection");
+   public static final StringId TranxPoolCacheImpl_TRANXPOOLCACHEIMPLGETNEWCONNECTION_CONNECTIONPOOLCACHE_NOT_INTIALIZED_WITH_XADATASOURCE = new StringId(3532, "TranxPoolCacheImpl::getNewConnection: ConnectionPoolCache not intialized with XADatasource");
+   public static final StringId ObjectXmlExporter_A_TRANFSFORMEREXCEPTION_WAS_THROWN_WHILE_GENERATING_XML_FOR_A_0 = new StringId(3533, "A TranfsformerException was thrown while generating XML for a  {0}");
+   public static final StringId ObjectXmlExporter_AN_EXCEPTION_WAS_THROWN_WHILE_ACCESSING_FIELD_0_IN_CLASS_1 = new StringId(3534, "An Exception was thrown while accessing field  {0}  in class  {1}");
+   public static final StringId ObjectXmlImporter_AN_IOEXCEPTION_WAS_THROWN_WHILE_PARSING_XML = new StringId(3535, "An IOException was thrown while parsing XML.");
+   public static final StringId ObjectXmlImporter_A_PARSERCONFIGURATIONEXCEPTION_WAS_THROWN_WHILE_PARSING_XML = new StringId(3536, "A ParserConfigurationException was thrown While parsing XML.");
+   public static final StringId ObjectXmlImporter_A_SAXEXCEPTION_WAS_THROWN_WHILE_PARSING_XML = new StringId(3537, "A SAXException was thrown While parsing XML.");
+   public static final StringId ObjectXmlImporter_COULD_NOT_LOAD_CLASS_0 = new StringId(3538, "Could not load class  {0}");
+   public static final StringId ObjectXmlImporter_AN_EXCEPTION_WAS_THROWN_WHILE_INSTANTIATING_0 = new StringId(3539, "An Exception was thrown while instantiating  {0}");
+   public static final StringId ObjectXmlImporter_AN_EXCEPTION_WAS_THROWN_WHILE_LOCATING_FIELD_0_IN_CLASS_1 = new StringId(3540, "An Exception was thrown while locating field  {0}  in class  {1}");
+   public static final StringId ObjectXmlImporter_A_CLASSNOTFOUNDEXCEPTION_AS_THROWN_WHILE_LOADING_ARRAY_ELEMENT_TYPE_0 = new StringId(3541, "A ClassNotFoundException was thrown while loading array element type:  {0}");
+ 
+   public static final StringId DataSerializer_UNKNOWN_PRIMITIVE_TYPE_0 = new StringId(3542, "unknown primitive type:  {0}");
+   public static final StringId DataSerializer_UNEXPECTED_TYPECODE_0 = new StringId(3543, "unexpected typeCode:  {0}");
+   public static final StringId DataSerializer_CONFLICTING_NONPUBLIC_INTERFACE_CLASS_LOADERS = new StringId(3544, "Conflicting non-public interface class loaders");
+   public static final StringId SystemFailure_0_MEMORY_HAS_REMAINED_CHRONICALLY_BELOW_1_BYTES_OUT_OF_A_MAXIMUM_OF_2_FOR_3_SEC = new StringId(3545, "{0} : memory has remained chronically below  {1}  bytes (out of a maximum of  {2} ) for  {3}  sec.");
+   public static final StringId SystemFailure_JVM_CORRUPTION_HAS_BEEN_DETECTED = new StringId(3546, "JVM corruption has been detected");
+   public static final StringId LonerDistributionManager_CANNOT_RESOLVE_LOCAL_HOST_NAME_TO_AN_IP_ADDRESS = new StringId(3547, "Cannot resolve local host name to an IP address");
+   public static final StringId AbstractDistributionConfig_UNEXPECTED_PROBLEM_GETTING_INETADDRESS_0 = new StringId(3548, "Unexpected problem getting inetAddress: {0}");
+   public static final StringId DistributionManager_UNKNOWN_MEMBER_TYPE_0 = new StringId(3549, "Unknown  member type:  {0}");
+   public static final StringId DistributionManager_UNKNOWN_PROCESSOR_TYPE = new StringId(3550, "unknown processor type {0}");
+   public static final StringId DLockRequestProcessor_UNKNOWN_RESPONSE_CODE_0 = new StringId(3551, "Unknown response code {0}");
+   public static final StringId StreamingOperation_THIS_SHOULDNT_HAPPEN = new StringId(3552, "this should not happen");
+   public static final StringId MemberAttributes_IOEXCEPTION_ON_A_BYTE_ARRAY_0 = new StringId(3553, "IOException on a byte array:  {0}");
+   public static final StringId MemberAttributes_CLASSNOTFOUNDEXCEPTION_IN_DESERIALIZATION_0 = new StringId(3554, "ClassNotFoundException in deserialization:  {0}");
+   public static final StringId GroupMembershipService_UNKNOWN_STARTUP_EVENT_0 = new StringId(3555, "unknown startup event:  {0}");
+   // 3556 available for reuse
+   public static final StringId UpdateOperation_UNKNOWN_DESERIALIZATION_POLICY = new StringId(3557, "unknown deserialization policy");
+   public static final StringId UpdateOperation_UNKNOWN_DESERIALIZATION_POLICY_0 = new StringId(3558, "unknown deserialization policy:  {0}");
+   public static final StringId QueuedOperation_CACHEWRITER_SHOULD_NOT_BE_CALLED = new StringId(3559, "CacheWriter should not be called");
+   public static final StringId QueuedOperation_DISTRIBUTEDLOCK_SHOULD_NOT_BE_ACQUIRED = new StringId(3560, "DistributedLock should not be acquired");
+   public static final StringId InitialImageOperation_ALREADY_PROCESSED_LAST_CHUNK = new StringId(3561, "Already processed last chunk");
+   public static final StringId PartitionedRegionQueryEvaluator_UNABLE_TO_GET_NODE_FOR_BUCKET_ID_0 = new StringId(3562, "unable to get node for bucket id  {0}");
+   public static final StringId DiskEntry_WRITE_TO_DISK_SHOULD_NOT_HAVE_BEEN_INVOKED_IN_THE_ENTRY_INITIALIZATION_PHASE = new StringId(3563, "Write to disk should not have been invoked in the entry initialization phase");
+   public static final StringId DistributedCacheOperation_SHOULD_NEVER_BE_CALLED = new StringId(3564, "should never be called");
+   public static final StringId ExpiryTask_UNRECOGNIZED_EXPIRATION_ACTION_0 = new StringId(3565, "unrecognized expiration action:  {0}");
+   public static final StringId LocalRegion_UNEXPECTED_EXCEPTION = new StringId(3566, "unexpected exception");
+   public static final StringId LocalRegion_CACHE_WRITER_SHOULD_NOT_HAVE_BEEN_CALLED_FOR_LOCALDESTROY = new StringId(3567, "Cache Writer should not have been called for localDestroy");
+   public static final StringId LocalRegion_NO_DISTRIBUTED_LOCK_SHOULD_HAVE_BEEN_ATTEMPTED_FOR_LOCALDESTROY = new StringId(3568, "No distributed lock should have been attempted for localDestroy");
+   public static final StringId LocalRegion_CACHEWRITEREXCEPTION_SHOULD_NOT_BE_THROWN_IN_LOCALDESTROYREGION = new StringId(3569, "CacheWriterException should not be thrown in localDestroyRegion");
+   public static final StringId LocalRegion_TIMEOUTEXCEPTION_SHOULD_NOT_BE_THROWN_IN_LOCALDESTROYREGION = new StringId(3570, "TimeoutException should not be thrown in localDestroyRegion");
+   public static final StringId LocalRegion_UNKNOWN_INTEREST_TYPE = new StringId(3571, "unknown interest type");
+   public static final StringId LocalRegion_NOT_YET_SUPPORTED = new StringId(3572, "not yet supported");
+   public static final StringId LocalRegion_GOT_REGIONEXISTSEXCEPTION_IN_REINITIALIZE_WHEN_HOLDING_DESTROY_LOCK = new StringId(3573, "Got RegionExistsException in reinitialize when holding destroy lock");
+   public static final StringId LocalRegion_UNEXPECTED_THREADINITLEVELREQUIREMENT = new StringId(3574, "Unexpected threadInitLevelRequirement");
+   public static final StringId LocalRegion_ENTRY_ALREADY_EXISTED_0 = new StringId(3575, "Entry already existed:  {0}");
+   public static final StringId LocalRegion_CACHE_WRITER_SHOULD_NOT_HAVE_BEEN_CALLED_FOR_EVICTDESTROY = new StringId(3576, "Cache Writer should not have been called for evictDestroy");
+   public static final StringId LocalRegion_NO_DISTRIBUTED_LOCK_SHOULD_HAVE_BEEN_ATTEMPTED_FOR_EVICTDESTROY = new StringId(3577, "No distributed lock should have been attempted for evictDestroy");
+   public static final StringId LocalRegion_ENTRYNOTFOUNDEXCEPTION_SHOULD_BE_MASKED_FOR_EVICTDESTROY = new StringId(3578, "EntryNotFoundException should be masked for evictDestroy");
+   public static final StringId LocalRegion_CACHEWRITEREXCEPTION_SHOULD_NOT_BE_THROWN_HERE = new StringId(3579, "CacheWriterException should not be thrown here");
+   public static final StringId LocalRegion_TIMEOUTEXCEPTION_SHOULD_NOT_BE_THROWN_HERE = new StringId(3580, "TimeoutException should not be thrown here");
+   public static final StringId GemFireCache_CACHE_SHOULD_NOT_BE_CLOSED_YET = new StringId(3581, "cache should not be closed yet");
+   public static final StringId GemFireCache_UNEXPECTED_EXCEPTION = new StringId(3582, "unexpected exception");
+   public static final StringId EntryEvents_MUST_NOT_SERIALIZE_0_IN_THIS_CONTEXT = new StringId(3583, "Must not serialize {0} in this context.");
+   public static final StringId DistributedRegion_IF_LOADING_A_SNAPSHOT_THEN_SHOULD_NOT_BE_RECOVERING_ISRECOVERING_0_SNAPSHOTSTREAM_1 = new StringId(3584, "if loading a snapshot, then should not be recovering; isRecovering= {0} ,snapshotStream= {1}");
+   public static final StringId AbstractUpdateOperation_CACHEWRITER_SHOULD_NOT_BE_CALLED = new StringId(3585, "CacheWriter should not be called");
+   public static final StringId AbstractUpdateOperation_DISTRIBUTEDLOCK_SHOULD_NOT_BE_ACQUIRED = new StringId(3586, "DistributedLock should not be acquired");
+   public static final StringId RegionEventImpl_CLONE_IS_SUPPORTED = new StringId(3587, "clone IS supported");
+   public static final StringId DestroyOperation_CACHEWRITER_SHOULD_NOT_BE_CALLED = new StringId(3588, "CacheWriter should not be called");
+   public static final StringId DestroyOperation_DISTRIBUTEDLOCK_SHOULD_NOT_BE_ACQUIRED = new StringId(3589, "DistributedLock should not be acquired");
+   public static final StringId StreamingPartitionOperation_UNEXPECTED_CONDITION = new StringId(3590, "unexpected condition");
+   public static final StringId PartitionMessage_SORRY_USE_OPERATEONPARTITIONEDREGION_FOR_PR_MESSAGES = new StringId(3591, "Sorry, use operateOnPartitionedRegion for PR messages");
+   public static final StringId FetchEntryMessage_FETCHENTRYMESSAGE_MESSAGE_SENT_TO_WRONG_MEMBER = new StringId(3592, "FetchEntryMessage message sent to wrong member");
+   public static final StringId GetMessage_GET_MESSAGE_SENT_TO_WRONG_MEMBER = new StringId(3593, "Get message sent to wrong member");
+   public static final StringId FetchEntriesMessage_ALREADY_PROCESSED_LAST_CHUNK = new StringId(3594, "Already processed last chunk");
+   public static final StringId FetchKeysMessage_ALREADY_PROCESSED_LAST_CHUNK = new StringId(3595, "Already processed last chunk");
+   public static final StringId CacheClientProxy_UNKNOWN_INTEREST_TYPE = new StringId(3596, "Unknown interest type");
+   public static final StringId CacheClientProxy_BAD_INTEREST_TYPE = new StringId(3597, "bad interest type");
+   public static final StringId InternalDistributedSystem_PROBLEM_IN_INITIALIZING_KEYS_FOR_CLIENT_AUTHENTICATION = new StringId(3598, "Problem in initializing keys for client authentication");
+   public static final StringId ConnectionImpl_UNKNOWN_MESSAGE_TYPE_0 = new StringId(3599, "Unknown message type {0}");
+   public static final StringId ConnectionProxyImpl_UNKNOWN_INTERESTTYPE = new StringId(3600, "Unknown interestType");
+   public static final StringId ConnectionProxyImpl_WEIRD_ENDPOINT_TYPE_0 = new StringId(3601, "Weird endpoint type  {0}");
+   public static final StringId BaseCommand_NOT_YET_SUPPORTED = new StringId(3602, "not yet supported");
+   public static final StringId BaseCommand_UNKNOWN_INTEREST_TYPE = new StringId(3603, "unknown interest type");
+   public static final StringId SystemAdmin_REGION_OPTION_HELP = new StringId(3604, "Used to specify what region an operation is to be done on.");
+   public static final StringId EntryNotFoundInRegion_THIS_CLASS_IS_DEPRECATED = new StringId(3605, "this class is deprecated");
+   public static final StringId DynamicRegionFactory_UNEXPECTED_EXCEPTION = new StringId(3606, "unexpected exception");
+   public static final StringId CqAttributesFactory_CLONENOTSUPPORTEDEXCEPTION_THROWN_IN_CLASS_THAT_IMPLEMENTS_CLONEABLE = new StringId(3607, "CloneNotSupportedException thrown in class that implements cloneable");
+   public static final StringId Support_ERROR_ASSERTION_FAILED_0 = new StringId(3608, "ERROR: Assertion failed: '' {0} ''");
+   public static final StringId TypeUtils_EXPECTED_INSTANCE_OF_0_BUT_WAS_1 = new StringId(3609, "expected instance of  {0}  but was  {1}");
+   public static final StringId SystemFailure_SINCE_THIS_IS_A_DEDICATED_CACHE_SERVER_AND_THE_JVM_HAS_BEEN_CORRUPTED_THIS_PROCESS_WILL_NOW_TERMINATE_PERMISSION_TO_CALL_SYSTEM_EXIT_INT_WAS_GIVEN_IN_THE_FOLLOWING_CONTEXT = new StringId(3610, "Since this is a dedicated cache server and the JVM has been corrupted, this process will now terminate. Permission to call System#exit(int) was given in the following context.");
+   public static final StringId GatewayImpl_0_DID_NOT_WAIT_FOR_FAILOVER_COMPLETION_DUE_TO_INTERRUPTION = new StringId(3611, "{0}: did not wait for failover completion due to interruption.");
+   public static final StringId GatewayImpl_0_AN_EXCEPTION_OCCURRED_WHILE_QUEUEING_1_TO_PERFORM_OPERATION_2_FOR_3 = new StringId(3612, "{0}: An Exception occurred while queueing {1} to perform operation {2} for {3}");
+   public static final StringId GatewayImpl_THE_EVENT_QUEUE_SIZE_HAS_DROPPED_BELOW_THE_THRESHOLD_0 = new StringId(3613, "The event queue size has dropped below {0} events.");
+   public static final StringId GatewayImpl_A_CACHECLOSEDEXCEPTION_OCCURRED_STOPPING_THE_DISPATCHER = new StringId(3614, "A CacheClosedException occurred. Stopping the dispatcher.");
+   public static final StringId GatewayImpl_GATEWAY_FAILOVER_INITIATED_PROCESSING_0_UNPROCESSED_EVENTS = new StringId(3615, "Gateway Failover Initiated: Processing {0} unprocessed events.");
+   public static final StringId GatewayImpl_A_BATCHEXCEPTION_OCCURRED_DURING_FAILOVER_PROCESSING_EVENT_0_THIS_MESSAGE_WILL_CONTINUE_TO_BE_PROCESSED = new StringId(3616, "A BatchException occurred during failover processing event {0}. This message will continue to be processed.");
+   public static final StringId GatewayImpl_STOPPING_THE_DISPATCHER_BECAUSE_THE_FOLLOWING_EXCEPTION_OCCURRED_WHILE_PROCESSING_A_BATCH = new StringId(3617, "Stopping the dispatcher because the following exception occurred while processing a batch:");
+   public static final StringId GatewayImpl_AN_EXCEPTION_OCCURRED_THE_DISPATCHER_WILL_CONTINUE = new StringId(3618, "An Exception occurred. The dispatcher will continue.");
+   public static final StringId GatewayImpl_0_THE_UNPROCESSED_EVENTS_MAP_ALREADY_CONTAINED_AN_EVENT_FROM_THE_HUB_1_SO_IGNORING_NEW_EVENT_2 = new StringId(3619, "{0}: The secondary map already contained an event from hub {1} so ignoring new event {2}.");
+   public static final StringId GatewayImpl_EVENT_FAILED_TO_BE_INITIALIZED_0 = new StringId(3620, "Event failed to be initialized: {0}");
+   public static final StringId GatewayImpl_STOPPING_THE_DISPATCHER_BECAUSE_THE_FOLLOWING_GATEWAY_EXCEPTION_OCCURRED = new StringId(3621, "Stopping the dispatcher because the following gateway exception occurred.");
+   public static final StringId GatewayImpl_0_THE_EVENT_QUEUE_SIZE_HAS_REACHED_THE_THRESHOLD_1 = new StringId(3622, "{0}: The event queue has reached {1} events. Processing will continue.");
+   public static final StringId GatewayImpl_AN_INTERRUPTEDEXCEPTION_OCCURRED_BUT_THE_DISPATCHER_IS_NOT_STOPPED = new StringId(3623, "An InterruptedException occurred, but the dispatcher is not stopped.");
+   public static final StringId GatewayImpl_AN_INTERRUPTEDEXCEPTION_OCCURRED_THE_THREAD_WILL_EXIT = new StringId(3624, "An InterruptedException occurred. The thread will exit.");
+   public static final StringId GatewayImpl_A_BATCHEXCEPTION_OCCURRED_PROCESSING_EVENT_0 = new StringId(3625, "A BatchException occurred processing event {0}.");
+   public static final StringId GatewayImpl_A_THREADINTERRUPTEDEXCEPTION_OCCURRED_STOPPING_THE_DISPATCHER = new StringId(3626, "A ThreadInterruptedException occurred. Stopping the dispatcher.");
+   public static final StringId GatewayImpl_THE_FOLLOWING_CACHEEXCEPTION_OCCURRED_WHILE_REMOVING_0_EVENTS = new StringId(3627, "The following CacheException occurred while removing {0} events.");
+   public static final StringId GatewayImpl_EVENT_DROPPED_DURING_FAILOVER_0 = new StringId(3628, "Event dropped during failover: {0}");
+   public static final StringId GatewayImpl_0_DISPATCHER_STILL_ALIVE_EVEN_AFTER_JOIN_OF_5_SECONDS = new StringId(3629, "{0}:Dispatcher still alive even after join of 5 seconds.");
+   public static final StringId GatewayImpl_0_INTERRUPTEDEXCEPTION_IN_JOINING_WITH_DISPATCHER_THREAD = new StringId(3630, "{0}:InterruptedException in joining with dispatcher thread.");
+   public static final StringId GatewayImpl_THE_EVENT_BEING_PROCESSED_WHEN_THE_BATCHEXCEPTION_OCCURRED_WAS_0 = new StringId(3631, "The event being processed when the BatchException occurred was: {0}");
+   public static final StringId AdminConfig_THIS_FILE_IS_GENERATED_BY_ADMINCONSOLE_EDIT_AS_YOU_WISH_BUT_IT_WILL_BE_OVERWRITTEN_IF_IT_IS_MODIFIED_IN_ADMINCONSOLE = new StringId(3632, "This file is generated by AdminConsole. Edit as you wish but it will be overwritten if it is modified in AdminConsole.");
+   public static final StringId AdminConfig_MODIFIED_0 = new StringId(3633, "Modified {0}");
+   public static final StringId DLockService_DISCONNECT_LISTENER_FOR_DISTRIBUTEDLOCKSERVICE = new StringId(3634, "Disconnect listener for DistributedLockService");
+   public static final StringId DLockService_DISTRIBUTED_LOCKING_THREADS = new StringId(3635, "Distributed Locking Threads");
+   // public static final StringId Oplog_BACKUP = new StringId(3636, "BACKUP");
+   // public static final StringId Oplog_OVERFLOW = new StringId(3637, "OVERFLOW");
+   public static final StringId DiskRegion_DISK_WRITERS = new StringId(3638, "Disk Writers");
+   public static final StringId DiskRegion_ASYNCHRONOUS_DISK_WRITER_0 = new StringId(3639, "Asynchronous disk writer for region {0}");
+   public static final StringId PartitionedRegion_SHUTDOWN_LISTENER_FOR_PARTITIONEDREGION = new StringId(3640, "Shutdown listener for PartitionedRegion");
+   public static final StringId ExecuteFunction_CANNOT_SPECIFY_0_FOR_ONREGIONS_FUNCTION = new StringId(3641, "Cannot specify {0} for multi region function");
+   public static final StringId PartitionedRegion_AN_EXCEPTION_WAS_CAUGHT_WHILE_REGISTERING_PARTITIONEDREGION_0_DUMPPRID_1 = new StringId(3642, "An exception was caught while registering PartitionedRegion \"{0}\". dumpPRId: {1}");
+   public static final StringId Connection_COULD_NOT_START_READER_THREAD = new StringId(3643, "could not start reader thread");
+   public static final StringId Connection_IDLE_CONNECTION_TIMED_OUT = new StringId(3644, "idle connection timed out");
+   public static final StringId Connection_UNKNOWN = new StringId(3645, "unknown");
+   public static final StringId Connection_HANDSHAKE_TIMED_OUT = new StringId(3646, "handshake timed out");
+   public static final StringId Connection_INTERRUPTED = new StringId(3647, "interrupted");
+   public static final StringId Connection_FAILED_HANDSHAKE = new StringId(3648, "failed handshake");
+   public static final StringId Connection_FAILED_CONSTRUCTION = new StringId(3649, "failed construction");
+   public static final StringId Connection_RUNNIOREADER_CAUGHT_CLOSED_CHANNEL = new StringId(3650, "runNioReader caught closed channel");
+   public static final StringId Connection_RUNNIOREADER_CAUGHT_SHUTDOWN = new StringId(3651, "runNioReader caught shutdown");
+   public static final StringId Connection_SOCKETCHANNEL_READ_RETURNED_EOF = new StringId(3652, "SocketChannel.read returned EOF");
+   public static final StringId Connection_THREADINTERRUPTED_IN_CHANNEL_READ_0 = new StringId(3653, "ThreadInterrupted in channel read: {0}");
+   public static final StringId Connection_CACHECLOSED_IN_CHANNEL_READ_0 = new StringId(3654, "CacheClosed in channel read: {0}");
+   public static final StringId Connection_IOEXCEPTION_IN_CHANNEL_READ_0 = new StringId(3655, "IOException in channel read: {0}");
+   public static final StringId Connection_P2P_MESSAGE_READER_FOR_0 = new StringId(3656, "P2P message reader for {0} on port {1}");
+   public static final StringId Connection_CLOSEDCHANNELEXCEPTION_IN_CHANNEL_READ_0 = new StringId(3657, "ClosedChannelException in channel read: {0}");
+   public static final StringId Connection_IOEXCEPTION_RECEIVED_0 = new StringId(3658, "IOException received: {0}");
+   public static final StringId Connection_STREAM_READ_RETURNED_NONPOSITIVE_LENGTH = new StringId(3659, "Stream read returned non-positive length");
+   public static final StringId Connection_CURRENT_THREAD_INTERRUPTED = new StringId(3660, "Current thread interrupted");
+   public static final StringId ExecuteFunction_RESULTS_NOT_COLLECTED_IN_TIME_PROVIDED = new StringId(3661, "All results not received in time provided");
+   public static final StringId Connection_NO_DISTRIBUTION_MANAGER = new StringId(3662, "no distribution manager");
+   public static final StringId Connection_COULD_NOT_SEND_FORCE_DISCONNECT = new StringId(3663, "Could not send force disconnect");
+   public static final StringId Connection_FORCE_DISCONNECT_TIMED_OUT = new StringId(3664, "Force disconnect timed out");
+   public static final StringId Connection_P2P_PUSHER_IO_EXCEPTION_FOR_0 = new StringId(3665, "P2P pusher io exception for {0}");
+   public static final StringId Connection_P2P_PUSHER_0_CAUGHT_CACHECLOSEDEXCEPTION_1 = new StringId(3666, "P2P pusher {0} caught CacheClosedException: {1}");
+   public static final StringId Connection_P2P_PUSHER_0_CAUGHT_INTERRUPT_1 = new StringId(3667, "P2P pusher {0} caught interrupt: {1}");
+   public static final StringId Connection_NONPOSITIVE_RETURN_FROM_CHANNEL_READ_OF_ACK = new StringId(3668, "non-positive return from channel read of ack");
+   public static final StringId Connection_ACK_READ_IO_EXCEPTION_FOR_0 = new StringId(3669, "ack read io exception for {0}");
+   public static final StringId Connection_CLASSNOTFOUND_DESERIALIZING_MESSAGE = new StringId(3670, "ClassNotFound deserializing message");
+   public static final StringId Connection_FAILED_SENDING_HANDSHAKE_REPLY = new StringId(3671, "Failed sending handshake reply");
+   public static final StringId ConnectionProxyImpl_ASYNCHRONOUS_REDUNDANCY_SATISFIER_THREAD_INVOKED_FROM_ENDPOINTDIED = new StringId(3672, "Asynchronous redundancy satisfier thread invoked from endpointDied");
+   public static final StringId ConnectionProxyImpl_AFTER_REDUNDANT_SELECTION_HERE_ARE_THE_ENDPOINTS_0 = new StringId(3673, "After redundant selection, here are the endpoints: {0}");
+   public static final StringId ConnectionProxyImpl_AFTER_A_FAILURE_ON_THE_PRIMARY_HERE_ARE_THE_ENDPOINTS_0 = new StringId(3674, "After a failure on the primary endpoint, here are the endpoints: {0}");
+   public static final StringId ConnectionProxyImpl_AFTER_ADDING_AN_ENDPOINT_HERE_ARE_THE_ENDPOINTS_0 = new StringId(3675, "After adding an endpoint, here are the endpoints: {0}");
+   public static final StringId ConnectionProxyImpl_UNREGISTERED_INTEREST_IN_0_ON_REGION_1_OF_TYPE_2_WITH_POLICY_3_BECAUSE_OF_4 = new StringId(3677, "unregistered interest in {0} on region {1} of type {2} with policy {3} because of {4}");
+   public static final StringId GroupMembershipService_TCPIP_CONNECTIONS_CLOSED = new StringId(3678, "tcp/ip connections closed");
+   public static final StringId GroupMembershipService_THE_MEMBER_WITH_ID_0_IS_NO_LONGER_IN_MY_OWN_VIEW_1 = new StringId(3679, "The Member with id {0}, is no longer in my own view, {1}");
+   public static final StringId LicenseInfo_LICENSE_IS_VALID_UNTIL_0 = new StringId(3680, "License is valid until \"{0}\".");
+   public static final StringId LicenseInfo_LICENSE_NEVER_EXPIRES = new StringId(3681, "License never expires.");
+   public static final StringId LicenseInfo_LICENSE_IS_LIMITED_TO_NODES_0 = new StringId(3682, "License is limited to node(s) \"{0}\".");
+   public static final StringId LicenseInfo_LICENSE_IS_VALID_ON_ANY_NODE = new StringId(3683, "License is valid on any node.");
+   public static final StringId LicenseInfo_LICENSE_IS_LIMITED_TO_THIS_NATIVE_NODE_0 = new StringId(3684, "License is limited to this native node \"{0}\".");
+   public static final StringId LicenseInfo_LICENSE_HAD_NO_NATIVE_NODE_LIMITS = new StringId(3685, "License had no native node limits.");
+   public static final StringId LicenseInfo_LICENSE_LIMITS_DISTRIBUTED_SYSTEM_TO_0_MEMBERS = new StringId(3686, "License limits distributed system to \"{0}\" members.");
+   public static final StringId LicenseInfo_LICENSE_IS_LIMITED_TO_0_CPUS = new StringId(3687, "License is limited to {0} cpus.");
+   public static final StringId LicenseInfo_LICENSE_ALLOWS_FOR_HYPERTHREADED_CPUS = new StringId(3688, "License allows for hyperthreaded cpus.");
+   public static final StringId LicenseInfo_ACTUAL_NUMBER_OF_PURCHASED_CPUS_IS_0 = new StringId(3689, "Actual number of purchased cpus is \"{0}\".");
+   public static final StringId LicenseInfo_LICENSE_ALLOWS_AN_UNLIMITED_NUMBER_OF_CPUS = new StringId(3690, "License allows an unlimited number of cpus.");
+   public static final StringId LicenseInfo_NO_LIMIT_FOR_KEY_0 = new StringId(3691, "No limit for key \"{0}\"");
+   public static final StringId LicenseInfo_DETERMINED_BY_GEMSTONE = new StringId(3692, "<determined by GemStone>");
+   public static final StringId LicenseInfo_PLEASE_SUPPLY_A_CUSTOMER_NAME_HERE = new StringId(3693, "<Please supply a customer name here>");
+   public static final StringId LicenseInfo_DATA_NEEDED_TO_OBTAIN_LICENSE_FOR_CURRENT_MACHINE = new StringId(3694, "Data Needed to Obtain License for current machine.");
+   public static final StringId LicenseInfo_CONTENTS_OF_0 = new StringId(3695, "-------------------- Contents of {0} --------------------");
+   public static final StringId LicenseInfo_COULD_NOT_FIND_DEFAULT_LICENSE_FILE_0 = new StringId(3696, "Could not find default license file: {0}");
+   public static final StringId LicenseInfo_TROUBLE_READING_LICENSE_FILE_0 = new StringId(3697, "Trouble reading license file: {0}");
+   public static final StringId LicenseInfo_LICENSE_SIGNATURE_IS_VALID = new StringId(3698, "License signature is valid.");
+   public static final StringId LicenseInfo_THIS_LICENSE_IS_INVALID_0 = new StringId(3699, "This license is invalid. {0}");
+   public static final StringId GemFireVersion_COULD_NOT_FIND_GEMFIRE_JAR = new StringId(3700, "<Could not find gemfire.jar>");
+   public static final StringId GemFireVersion_COULD_NOT_FIND_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0 = new StringId(3701, "<Could not find resource com/gemstone/gemfire/internal/{0}>");
+   public static final StringId GemFireVersion_COULD_NOT_READ_PROPERTIES_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0_BECAUSE_1 = new StringId(3702, "<Could not read properties from resource com/gemstone/gemfire/internal/{0} because: {1}>");
+   public static final StringId GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1 = new StringId(3703, "<Missing property {0} from resource com/gemstone/gemfire/internal/{1}>");
+   public static final StringId GemFireVersion_RUNNING_ON_0 = new StringId(3704, "Running on: {0}");
+   public static final StringId GemFireVersion_WARNING_EXPECTED_JAVA_VERSION_0 = new StringId(3705, "Warning expected java version: {0}");
+   public static final StringId GemFireVersion_WARNING_EXPECTED_NATIVE_VERSION_0 = new StringId(3706, "Warning expected native version: {0}");
+   public static final StringId GemFireVersion_WARNING_FAILED_TO_READ_0_BECAUSE_1 = new StringId(3707, "Warning failed to read \"{0}\" because {1}.");
+   public static final StringId GemFireVersion_WARNING_COULD_NOT_FIND_0 = new StringId(3708, "Warning could not find \"{0}\".");
+   public static final StringId GemFireVersion_WARNING_COULD_NOT_DETERMINE_THE_PRODUCTS_LIB_DIRECTORY = new StringId(3709, "Warning could not determine the product''s lib directory.");
+   public static final StringId LocalRegion_THE_CACHE_IS_NOT_AVAILABLE = new StringId(3710, "The cache is not available");
+   public static final StringId LocalRegion_THE_DISTRIBUTED_SYSTEM_IS_NOT_AVAILABLE = new StringId(3711, "The distributed system is not available.");
+   public static final StringId GemFireCache_NORMAL_DISCONNECT = new StringId(3712, "Normal disconnect");
+   public static final StringId GlobalTransaction_GLOBALTRANSACTION_ADDTRANSACTION_CANNOT_ADD_A_NULL_TRANSACTION = new StringId(3713, "GlobalTransaction::addTransaction::Cannot add a null Transaction");
+   public static final StringId GlobalTransaction_GLOBALTRANSACTION_COMMIT_ERROR_IN_COMMITTING_BUT_TRANSACTION_COULD_NOT_BE_ROLLED_BACK_DUE_TO_EXCEPTION_0 = new StringId(3714, "GlobalTransaction::commit::Error in committing, but transaction could not be rolled back due to exception: {0}");
+   public static final StringId GlobalTransaction_GLOBALTRANSACTION_COMMIT_ERROR_IN_COMMITTING_THE_TRANSACTION_TRANSACTION_ROLLED_BACK_EXCEPTION_0_1 = new StringId(3715, "GlobalTransaction::commit:Error in committing the transaction. Transaction rolled back.Exception = {0} {1}");
+   public static final StringId GlobalTransaction_GLOBALTRANSACTION_ROLLBACK_ROLLBACK_NOT_SUCCESSFUL_DUE_TO_EXCEPTION_0_1 = new StringId(3716, "GlobalTransaction::rollback:Rollback not successful due to exception {0} {1}");
+   public static final StringId GlobalTransaction_GLOBALTRANSACTION_ENLISTRESOURCE_CANNOT_ENLIST_A_RESOURCE_TO_A_TRANSACTION_WHICH_IS_NOT_ACTIVE = new StringId(3717, "GlobalTransaction::enlistResource::Cannot enlist a resource to a transaction which is not active");
+   public static final StringId GlobalTransaction_GLOBALTRANSACTION_ENLISTRESOURCE_EXCEPTION_OCCURED_IN_TRYING_TO_SET_XARESOURCE_TIMEOUT_DUE_TO_0_ERROR_CODE_1 = new StringId(3718, "GlobalTransaction::enlistResource:Exception occurred in trying to set XAResource timeout due to {0} Error Code = {1}");
+   public static final StringId GlobalTransaction_ERROR_WHILE_DELISTING_XARESOURCE_0_1 = new StringId(3719, "error while delisting XAResource {0} {1}");
+   public static final StringId GlobalTransaction_GLOBATRANSACTION_RESUME_RESUME_NOT_SUCCESFUL_DUE_TO_0 = new StringId(3720, "GlobaTransaction::resume:Resume not succesful due to {0}");
+   public static final StringId GlobalTransaction_EXCEPTION_OCCURED_WHILE_TRYING_TO_SET_THE_XARESOURCE_TIMEOUT_DUE_TO_0_ERROR_CODE_1 = new StringId(3721, "Exception occurred while trying to set the XAResource TimeOut due to {0} Error code = {1}");
+   public static final StringId SmHelper_NATIVE_CODE_UNAVAILABLE = new StringId(3722, "native code unavailable");
+   public static final StringId SystemAdmin_WAITING_5_SECONDS_FOR_LOCATOR_PROCESS_TO_TERMINATE = new StringId(3723, "Waiting 5 seconds for locator process to terminate...");
+   public static final StringId SystemAdmin_WAITING_FOR_LOCATOR_PROCESS_WITH_PID_0_TO_TERMINATE = new StringId(3724, "Waiting for locator process, with pid {0,number,#} to terminate...");
+   public static final StringId SystemAdmin_LOCATOR_PROCESS_HAS_TERMINATED = new StringId(3725, "Locator process has terminated.");
+   public static final StringId SystemAdmin_LOCATOR_IN_0_WAS_KILLED_WHILE_IT_WAS_1_LOCATOR_PROCESS_ID_WAS_2 = new StringId(3726, "Locator in \"{0}\" was killed while it was {1}. Locator process id was {2}.");
+   public static final StringId SystemAdmin_LOCATOR_IN_0_IS_1_LOCATOR_PROCESS_ID_IS_2 = new StringId(3727, "Locator in \"{0}\" is {1}. Locator process id is {2}.");
+   public static final StringId SystemAdmin_LOCATOR_IN_0_IS_STOPPED = new StringId(3728, "Locator in \"{0}\" is stopped.");
+   public static final StringId SystemAdmin_LOCATOR_IN_0_IS_STARTING = new StringId(3729, "Locator in \"{0}\" is starting.");
+   public static final StringId SystemAdmin_CLEANED_UP_ARTIFACTS_LEFT_BY_THE_PREVIOUS_KILLED_LOCATOR = new StringId(3730, "Cleaned up artifacts left by the previous killed locator.");
+   public static final StringId SystemAdmin_LOG_FILE_0_DOES_NOT_EXIST = new StringId(3731, "Log file \"{0}\" does not exist.");
+   public static final StringId SystemAdmin_AN_IOEXCEPTION_WAS_THROWN_WHILE_TAILING_0 = new StringId(3732, "An IOException was thrown while tailing \"{0}\"\n");
+   public static final StringId SystemAdmin_MERGING_THE_FOLLOWING_LOG_FILES = new StringId(3733, "Merging the following log files:");
+   public static final StringId SystemAdmin_COMPLETED_MERGE_OF_0_LOGS_TO_1 = new StringId(3734, "Completed merge of {0} logs to \"{1}\".");
+   public static final StringId SystemAdmin_WARNING_NO_STATS_MATCHED_0 = new StringId(3735, "[warning] No stats matched \"{0}\".");
+   public static final StringId SystemAdmin_ERROR_OPERATION_0_FAILED_BECAUSE_1 = new StringId(3736, "ERROR: Operation \"{0}\" failed because: {1}.");
+   public static final StringId SystemAdmin_ERROR_UNKNOWN_COMMAND_0 = new StringId(3737, "ERROR: Unknown command \"{0}\".");
+   public static final StringId SystemAdmin_INFO_FOUND_0_MATCHES_FOR_1 = new StringId(3738, "[info] Found {0} instances matching \"{1}\":");
+   public static final StringId SystemAdmin_THIS_PROGRAM_ALLOWS_GEMFIRE_TO_BE_MANAGED_FROM_THE_COMMAND_LINE_IT_EXPECTS_A_COMMAND_TO_EXECUTE_SEE_THE_HELP_TOPIC_0_FOR_A_SUMMARY_OF_SUPPORTED_OPTIONS_SEE_THE_HELP_TOPIC_1_FOR_A_CONCISE_DESCRIPTION_OF_COMMAND_LINE_SYNTAX_SEE_THE_HELP_TOPIC_2_FOR_A_DESCRIPTION_OF_SYSTEM_CONFIGURATION_SEE_THE_HELP_TOPIC_3_FOR_HELP_ON_A_SPECIFIC_COMMAND_USE_THE_4_OPTION_WITH_THE_COMMAND_NAME = new StringId(3739, "This program allows GemFire to be managed from the command line. It expects a command to execute.\nSee the help topic \"{0}\". For a summary of supported options see the help topic \"{1}\".\nFor a concise description of command line syntax see the help topic \"{2}\".\nFor a description of system configuration see the help topic \"{3}\".\nFor help on a specific command use the \"{4}\" option with the command name.");
+   public static final StringId SystemAdmin_ALL_COMMAND_LINE_OPTIONS_START_WITH_A_AND_ARE_NOT_REQUIRED_EACH_OPTION_HAS_A_DEFAULT_THAT_WILL_BE_USED_WHEN_ITS_NOT_SPECIFIED_OPTIONS_THAT_TAKE_AN_ARGUMENT_ALWAYS_USE_A_SINGLE_CHARACTER_WITH_NO_SPACES_TO_DELIMIT_WHERE_THE_OPTION_NAME_ENDS_AND_THE_ARGUMENT_BEGINS_OPTIONS_THAT_PRECEDE_THE_COMMAND_WORD_CAN_BE_USED_WITH_ANY_COMMAND_AND_ARE_ALSO_PERMITTED_TO_FOLLOW_THE_COMMAND_WORD = new StringId(3740, "All command line options start with a \"-\" and are not required.\nEach option has a default that will be used when its not specified.\nOptions that take an argument always use a single \"=\" character, with no spaces, to delimit where the option name ends and the argument begins.\nOptions that precede the command word can be used with any command and are also permitted to follow the command word.");
+   public static final StringId SystemAdmin_NO_HELP_FOR_OPTION_0 = new StringId(3741, "no help for option \"{0}]\"");
+   public static final StringId SystemAdmin_EXPLAINATION_OF_COMMAND_OPTIONS = new StringId(3742, "The following synax is used in the usage strings:\n\"[]\" designate an optional item\n\"()\" are used to group items\n\"<>\" designate non-literal text. Used to designate logical items\n\"*\" suffix means zero or more of the previous item\n\"|\" means the item to the left or right is required");
+   public static final StringId SystemAdmin_ERROR_INVALID_HELP_TOPIC_0 = new StringId(3743, "ERROR: Invalid help topic \"{0}\".");
+   public static final StringId SystemAdmin_USAGE = new StringId(3744, "Usage");
+   public static final StringId SystemAdmin_ERROR_INVALID_COMMAND_0 = new StringId(3745, "ERROR: Invalid command \"{0}\".");
+   public static final StringId SystemAdmin_GEMFIRE_HELP = new StringId(3746, "gemfire requires one of the following command strings:\n{0}\nFor additional help on a command specify it along with the \"{1}\" option.\nThe \"{2}\" option causes gemfire to print out extra information when it fails.\nThe \"{1}\" and \"{3}\" are synonyms that cause gemfire to print out help information instead of performing a task.\nThe \"{4}\" option quiets gemfire down by suppressing extra messages.\nThe \"{5}\" option passes <vmOpt> to the java vm''s command line.");
+   public static final StringId SystemAdmin_VERSION_HELP = new StringId(3747, "Prints GemFire product version information.");
+   public static final StringId SystemAdmin_LICENSE_HELP_0 = new StringId(3748, "Prints any current GemFire licenses and information needed to obtain a new license.\nThe \"{0}\" option can be used to specify the license file to print.");
+   public static final StringId SystemAdmin_HELP_HELP = new StringId(3749, "Prints information on how to use this executable.\nIf an optional help topic is specified then more detailed help is printed.");
+   public static final StringId SystemAdmin_STATS_HELP_PART_A = new StringId(3750, "Prints statistic values from a statistic archive\nBy default all statistics are printed.\nThe statSpec arguments can be used to print individual resources or a specific statistic.\nThe format of a statSpec is: an optional combine operator, followed by an optional instanceId, followed by an optional typeId, followed by an optional statId.\nA combine operator can be \"{0}\" to combine all matches in the same file, or \"{1}\" to combine all matches across all files.\nAn instanceId must be the name or id of a resource.\nA typeId is a \"{2}\" followed by the name of a resource type.\nA statId is a \"{3}\" followed by the name of a statistic.\nA typeId or instanceId with no statId prints out all the matching resources and all their statistics.\nA typeId or instanceId with a statId prints out just the named statistic on the matching resources.\nA statId with no typeId or instanceId matches all statistics wi
 th that name.\nThe \"{4}\" option causes statistic descriptions to also be printed.\nThe \"{5}\" option, in conjunction with \"{6}\", causes the printed statistics to all be raw, unfiltered, values.\nThe \"{7}\" option, in conjunction with \"{6}\", causes the printed statistics to be the rate of change, per second, of the raw values.\nThe \"{8}\" option, in conjunction with \"{6}\", causes the printed statistics to be the rate of change, per sample, of the raw values.\nThe \"{9}\" option, in conjunction with \"{6}\", causes statistics whose values are all zero to not be printed.");
+   public static final StringId SystemAdmin_STATS_HELP_PART_B = new StringId(3751, "The \"{0}\" option, in conjunction with \"{1}\", causes statistics samples taken before this time to be ignored. The argument format must match \"{2}\".\nThe \"{3}\" option, in conjunction with \"{1}\", causes statistics samples taken after this time to be ignored. The argument format must match \"{2}\".\nThe \"{1}\" option causes the data to come from an archive file.");
+   public static final StringId SystemAdmin_ENCRYPTS_A_PASSWORD_FOR_USE_IN_CACHE_XML_DATA_SOURCE_CONFIGURATION = new StringId(3752, "Encrypts a password for use in cache.xml data source configuration.");
+   public static final StringId SystemAdmin_START_LOCATOR_HELP = new StringId(3753, "Starts a locator.\nThe \"{0}\" option specifies the port the locator will listen on. It defaults to \"{1}\"\nThe \"{2}\" option specifies the address the locator will listen on. It defaults to listening on all local addresses.\nThe \"{3}\" option can be used to specify the directory the locator will run in.\nThe \"{4}\" option can be used to specify the gemfire.properties file for configuring the locator''s distributed system.  The file''s path should be absolute, or relative to the locator''s directory ({3})\nThe \"{5}\" option can be used to specify whether peer locator service should be enabled. True (the default) will enable the service.\nThe \"{6}\" option can be used to specify whether server locator service should be enabled. True (the default) will enable the service.\nThe \"{7}\" option can be used to specify a host name or ip address that will be sent to clients so they can connect to this
  locator. The default is to use the address the locator is listening on.\nThe \"{8}\" option can be used to set system properties for the locator VM\nThe \"{9}\" option can be used to set vendor-specific VM options and is usually used to increase the size of the locator VM when using multicast.\n");
+    public static final StringId SystemAdmin_STOP_LOCATOR_HELP = new StringId(3754, "Stops a locator.\nThe \"{0}\" option specifies the port the locator is listening on. It defaults to \"{1}\"\nThe \"{2}\" option specifies the address the locator is listening on. It defaults to the local host''s address.\nThe \"{3}\" option can be used to specify the directory the locator is running in.");
+   public static final StringId SystemAdmin_STATUS_LOCATOR_HELP = new StringId(3755, "Prints the status of a locator. The status string will one of the following:\n{0}\nThe \"{1}\" option can be used to specify the directory of the locator whose status is desired.");
+   public static final StringId SystemAdmin_INFO_LOCATOR_HELP = new StringId(3756, "Prints information on a locator.\nThe information includes the process id of the locator, if the product is not running in PureJava mode.\nThe \"{0}\" option can be used to specify the directory of the locator whose information is desired.");
+   public static final StringId SystemAdmin_TAIL_LOCATOR_HELP = new StringId(3757, "Prints the last 64K bytes of the locator''s log file.\nThe \"{0}\" option can be used to specify the directory of the locator whose information is desired.");
+   public static final StringId SystemAdmin_MERGE_LOGS = new StringId(3758, "Merges multiple logs files into a single log.\nThe \"{0}\" option can be used to specify the file to write the merged log to. The default is stdout.");
+   public static final StringId SystemAdmin_CAUSES_GEMFIRE_TO_WRITE_OUTPUT_TO_THE_SPECIFIED_FILE_THE_FILE_IS_OVERWRITTEN_IF_IT_ALREADY_EXISTS = new StringId(3759, "Causes gemfire to write output to the specified file. The file is overwritten if it already exists.");
+   public static final StringId SystemAdmin_CAUSES_GEMFIRE_TO_PRINT_OUT_EXTRA_INFORMATION_WHEN_IT_FAILS_THIS_OPTION_IS_SUPPORTED_BY_ALL_COMMANDS = new StringId(3760, "Causes gemfire to print out extra information when it fails. This option is supported by all commands.");
+   public static final StringId SystemAdmin_CAUSES_GEMFIRE_TO_PRINT_DETAILED_INFORMATION_WITH_THE_0_COMMAND_IT_MEANS_STATISTIC_DESCRIPTIONS = new StringId(3761, "Causes gemfire to print detailed information.  With the \"{0}\" command it means statistic descriptions.");
+   public static final StringId SystemAdmin_CAUSES_GEMFIRE_0_COMMAND_TO_PRINT_UNFILTERED_RAW_STATISTIC_VALUES_THIS_IS_THE_DEFAULT_FOR_NONCOUNTER_STATISTICS = new StringId(3762, "Causes gemfire \"{0}\" command to print unfiltered, raw, statistic values. This is the default for non-counter statistics.");
+   public static final StringId SystemAdmin_CAUSES_GEMFIRE_0_COMMAND_TO_PRINT_THE_RATE_OF_CHANGE_PER_SECOND_FOR_STATISTIC_VALUES_THIS_IS_THE_DEFAULT_FOR_COUNTER_STATISTICS = new StringId(3763, "Causes gemfire \"{0}\" command to print the rate of change, per second, for statistic values. This is the default for counter statistics.");
+   public static final StringId SystemAdmin_CAUSES_GEMFIRE_0_COMMAND_TO_PRINT_THE_RATE_OF_CHANGE_PER_SAMPLE_FOR_STATISTIC_VALUES = new StringId(3764, "Causes gemfire \"{0}\" command to print the rate of change, per sample, for statistic values.");
+   public static final StringId SystemAdmin_CAUSES_GEMFIRE_0_COMMAND_TO_NOT_PRINT_STATISTICS_WHOSE_VALUES_ARE_ALL_ZERO = new StringId(3765, "Causes gemfire \"{0}\" command to not print statistics whose values are all zero.");
+   public static final StringId SystemAdmin_USED_TO_SPECIFY_A_NONDEFAULT_PORT_WHEN_STARTING_OR_STOPPING_A_LOCATOR = new StringId(3766, "Used to specify a non-default port when starting or stopping a locator.");
+   public static final StringId SystemAdmin_USED_TO_SPECIFY_A_SPECIFIC_IP_ADDRESS_TO_LISTEN_ON_WHEN_STARTING_OR_STOPPING_A_LOCATOR = new StringId(3767, "Used to specify a specific IP address to listen on when starting or stopping a locator.");
+   public static final StringId SystemAdmin_THE_ARGUMENT_IS_THE_LICENSE_FILE_WHOSE_CONTENTS_WILL_BE_PRINTED_DEFAULTS_TO_0 = new StringId(3768, "The argument is the license file whose contents will be printed. Defaults to \"{0}\"");
+   public static final StringId SystemAdmin_THE_ARGUMENT_IS_THE_STATISTIC_ARCHIVE_FILE_THE_0_COMMAND_SHOULD_READ = new StringId(3769, "The argument is the statistic archive file the \"{0}\" command should read.");
+   public static final StringId SystemAdmin_CAUSES_GEMFIRE_TO_PRINT_OUT_INFORMATION_INSTEAD_OF_PERFORMING_THE_COMMAND_THIS_OPTION_IS_SUPPORTED_BY_ALL_COMMANDS = new StringId(3770, "Causes GemFire to print out information instead of performing the command. This option is supported by all commands.");
+   public static final StringId SystemAdmin_TURNS_ON_QUIET_MODE_THIS_OPTION_IS_SUPPORTED_BY_ALL_COMMANDS = new StringId(3771, "Turns on quiet mode. This option is supported by all commands.");
+   public static final StringId SystemAdmin_CAUSES_THE_0_COMMAND_TO_IGNORE_STATISTICS_SAMPLES_TAKEN_BEFORE_THIS_TIME_THE_ARGUMENT_FORMAT_MUST_MATCH_1 = new StringId(3772, "Causes the \"{0}\" command to ignore statistics samples taken before this time. The argument format must match \"{1}\".");
+   public static final StringId SystemAdmin_CAUSES_THE_0_COMMAND_TO_IGNORE_STATISTICS_SAMPLES_TAKEN_AFTER_THIS_TIME_THE_ARGUMENT_FORMAT_MUST_MATCH_1 = new StringId(3773, "Causes the \"{0}\" command to ignore statistics samples taken after this time. The argument format must match \"{1}\".");
+   public static final StringId SystemAdmin_DIR_ARGUMENT_HELP = new StringId(3774, "The argument is the system directory the command should operate on.\nIf the argument is empty then a default system directory will be search for.\nHowever the search will not include the \"{0}\" file.\nBy default if a command needs a system directory, and one is not specified, then a search is done. If a \"{0}\" file can be located then \"{1}\" property from that file is used. Otherwise if the \"{2}\" environment variable is set to a directory that contains a subdirectory named \"{3}\" then that directory is used.\nThe property file is search for in the following locations:\n1. The current working directory.\n2. The user''s home directory.\n3. The class path.\nAll commands except \"{4}\", and \"{5}\" use the system directory.");
+   public static final StringId SystemAdmin_SETS_A_JAVA_SYSTEM_PROPERTY_IN_THE_LOCATOR_VM_USED_MOST_OFTEN_FOR_CONFIGURING_SSL_COMMUNICATION = new StringId(3775, "Sets a Java system property in the locator VM.  Used most often for configuring SSL communication.");
+   public static final StringId SystemAdmin_SETS_A_JAVA_VM_X_SETTING_IN_THE_LOCATOR_VM_USED_MOST_OFTEN_FOR_INCREASING_THE_SIZE_OF_THE_VIRTUAL_MACHINE = new StringId(3776, "Sets a Java VM X setting in the locator VM.  Used most often for increasing the size of the virtual machine.");
+   public static final StringId SystemAdmin_HELP = new StringId(3777, "help");
+   public static final StringId SystemAdmin_ERROR_UNKNOWN_OPTION_0 = new StringId(3778, "ERROR: Unknown option \"{0}\".");
+   public static final StringId SystemAdmin_ERROR_WRONG_NUMBER_OF_COMMAND_LINE_ARGS = new StringId(3779, "ERROR: Wrong number of command line args.");
+   public static final StringId SystemAdmin_ERROR_UNEXPECTED_COMMAND_LINE_ARGUMENTS_0 = new StringId(3780, "ERROR: unexpected command line arguments: \"{0}\".");
+   public static final StringId SystemAdmin_GEMFIRE_PRODUCT_DIRECTORY_0 = new StringId(3781, "GemFire product directory: {0}");
+   public static final StringId SystemAdmin_LOCATOR_START_COMPLETE = new StringId(3782, "Locator start complete.");
+   public static final StringId SystemAdmin_LOCATOR_STOP_COMPLETE = new StringId(3783, "Locator stop complete.");
+   public static final StringId SystemAdmin_ERROR_EXPECTED_AT_LEAST_ONE_LOG_FILE_TO_MERGE = new StringId(3784, "ERROR: expected at least one log file to merge.");
+   public static final StringId AgentConfigImpl_USING_DEFAULT_CONFIGURATION_BECAUSE_PROPERTY_FILE_WAS_FOUND = new StringId(3785, "Using default configuration because property file was not found.");
+   public static final StringId AgentConfigImpl_CONFIGURATION_LOADED_FROM_0 = new StringId(3786, "Configuration loaded from: {0}.");
+   public static final StringId AgentConfigImpl_NAME_OF_THE_AGENTS_LOG_FILE = new StringId(3787, "Name of the agent''s log file");
+   public static final StringId AgentConfigImpl_MINIMUM_LEVEL_OF_LOGGING_PERFORMED_BY_AGENT = new StringId(3788, "Minimum level of logging performed by agent. Valid values are: all, finest, finer, fine, config, info, warning, error, severe and none.");
+   public static final StringId AgentConfigImpl_WHETHER_THE_AGENT_SHOULD_PRINT_DEBUGGING_INFORMATION = new StringId(3789, "Whether the agent should print debugging information");
+   public static final StringId AgentConfigImpl_LIMIT_IN_MEGABYTES_OF_HOW_MUCH_DISK_SPACE_CAN_BE_CONSUMED_BY_OLD_INACTIVE_LOG_FILES = new StringId(3790, "Limit, in megabytes, of how much disk space can be consumed by old inactive log files. This value (in megabytes) should be in the range: 0-1000000.");
+   public static final StringId AgentConfigImpl_LIMIT_IN_MEGABYTES_OF_HOW_LARGE_THE_CURRENT_STATISTIC_ARCHIVE_FILE_CAN_GROW_BEFORE_IT_IS_CLOSED_AND_ARCHIVAL_ROLLS_ON_TO_A_NEW_FILE = new StringId(3791, "Limit, in megabytes, of how large the current log file can grow before it is closed and log rolls on to a new file. This value (in megabytes) should be in the range: 0-1000000.");
+   public static final StringId AgentConfigImpl_MULTICAST_PORT_USED_TO_CONNECT_TO_DISTRIBUTED_SYSTEM = new StringId(3792, "Multicast port used to connect to distributed system. To use IP multicast, you must also define mcast-address. The value must be in the range: 0-65535.");
+   public static final StringId AgentConfigImpl_MULTICAST_ADDRESS_USED_TO_CONNECT_TO_DISTRIBUTED_SYSTEM = new StringId(3793, "Multicast address used to connect to distributed system. To use multicast, you must also define mcast-port, the IP port.");
+   public static final StringId AgentConfigImpl_ADDRESSES_OF_THE_LOCATORS_OF_THE_DISTRIBUTED_SYSTEM = new StringId(3794, "A comma-separated list of address(es) of the locator(s) in the distributed system in host[port] form. E.g. locators=host1[port1],host2[port2],...,hostn[portn]");
+   public static final StringId AgentConfigImpl_XML_CONFIGURATION_FILE_FOR_MANAGED_ENTITIES = new StringId(3795, "The name of an XML file that specifies the configuration for the managed entity administered by the Distributed System. The XML file must conform to the dtd - doc-files/ds5_0.dtd.");
+   public static final StringId AgentConfigImpl_WILL_THE_AGENT_AUTOMATICALLY_CONNECT_TO_THE_DISTRIBUTED_SYSTEM = new StringId(3796, "Whether the JMX agent will connect ''automatically'' to the distributed system that it is configured to monitor.");
+   public static final StringId AgentConfigImpl_COMMAND_PREFIX_USED_FOR_LAUNCHING_MEMBERS_OF_THE_DISTRIBUTED_SYSTEM = new StringId(3797, "Command prefix used for launching members of the distributed system");
+   public static final StringId AgentConfigImpl_WILL_THE_AGENT_START_THE_HTTP_JMX_ADAPTER = new StringId(3798, "Whether the HTTP adapter is enabled in the JMX agent.");
+   public static final StringId AgentConfigImpl_BIND_ADDRESS_OF_HTTP_ADAPTERS_SOCKETS = new StringId(3799, "Bind address of HTTP adapter''s sockets");
+   public static final StringId AgentConfigImpl_THE_PORT_ON_WHICH_THE_HTTP_ADAPTER_WILL_BE_STARTED = new StringId(3800, "The port on which the HTTP adapter will be started. This value should be in the range: 0-65535.");
+   public static final StringId AgentConfigImpl_WILL_THE_AGENT_START_THE_RMI_JMX_ADAPTER = new StringId(3801, "Whether the RMI JMX adapter is enabled.");
+   public static final StringId AgentConfigImpl_WILL_THE_AGENT_HOST_AN_RMI_REGISTRY = new StringId(3802, "Whether the JMX agent should start RMI registry. Alternatively, a registry outside of the JMX agent VM can be used.");
+   public static final StringId AgentConfigImpl_BIND_ADDRESS_OF_RMI_ADAPTERS_SOCKETS = new StringId(3803, "Bind address of RMI adapter''s sockets");
+   public static final StringId AgentConfigImpl_THE_PORT_ON_WHICH_TO_CONTACT_THE_RMI_REGISTER = new StringId(3804, "The port on which to contact the RMI registry. The value must be in the range: 0-65535.");
+   public static final StringId AgentConfigImpl_WILL_THE_AGENT_START_THE_SNMP_JMX_ADAPTER = new StringId(3805, "Whether the SNMP JMX adapter will be enabled.");
+   public static final StringId AgentConfigImpl_BIND_ADDRESS_OF_SNMP_ADAPTERS_SOCKETS = new StringId(3806, "Bind address of SNMP adapter''s sockets");
+   public static final StringId AgentConfigImpl_THE_DIRECTORY_IN_WHICH_SNMP_CONFIGURATION_RESIDES = new StringId(3807, "The directory in which SNMP configuration resides");
+   public static final StringId AgentConfigImpl_WILL_THE_AGENT_COMMUNICATE_USING_SSL = new StringId(3808, "Whether the JMX Agent will use the SSL protocol for communication.");
+   public static final StringId AgentConfigImpl_THE_SSL_PROTOCOLS_USED_BY_THE_AGENT = new StringId(3809, "The space-separated list of the SSL protocols to be used when connecting to the JMX agent.");
+   public static final StringId AgentConfigImpl_THE_SSL_CIPHERS_USED_BY_THE_AGENT = new StringId(3810, "The space-separated list of the SSL ciphers to be used when connecting to the JMX Agent.");
+   public static final StringId AgentConfigImpl_WILL_THE_AGENT_REQUIRE_SSL_AUTHENTICATION = new StringId(3811, "Whether or not SSL connections to the RMI adapter require authentication. If true, needs client authentication for RMI and other non-HTTP connectors/adaptors.");
+   public static final StringId AgentConfigImpl_WILL_THE_HTTP_ADAPTER_REQUIRE_SSL_AUTHENTICATION = new StringId(3812, "Whether SSL connections to the HTTP adapter will need authentication.");
+   public static final StringId AgentConfigImpl_WILL_THE_HTTP_JMX_ADAPTER_USE_HTTP_AUTHENTICATION = new StringId(3813, "Whether the HTTP adapter will use HTTP authentication.");
+   public static final StringId AgentConfigImpl_THE_USER_NAME_FOR_AUTHENTICATION_IN_THE_HTTP_JMX_ADAPTER = new StringId(3814, "The user name for authentication in the HTTP JMX adapter");
+   public static final StringId AgentConfigImpl_THE_PASSWORD_FOR_AUTHENTICATION_IN_THE_HTTP_JMX_ADAPTER = new StringId(3815, "The password for authentication in the HTTP JMX adapter");
+   public static final StringId AgentConfigImpl_DOES_THE_DISTRIBUTED_SYSTEM_COMMUNICATE_USING_SSL = new StringId(3816, "Whether to use the SSL protocol for communication between members of the admin distributed system. If set to true, locators should be used.");
+   public static final StringId AgentConfigImpl_SSL_PROTOCOLS_USED_TO_COMMUNICATE_WITH_DISTRIBUTED_SYSTEM = new StringId(3817, "A space-separated list of the SSL protocols used to communicate with distributed system.");
+   public static final StringId AgentConfigImpl_SSL_CIPHERS_USED_TO_COMMUNICATE_WITH_DISTRIBUTED_SYSTEM = new StringId(3818, "A space-separated list of the SSL ciphers to be used to communicate with distributed system.");
+   public static final StringId AgentConfigImpl_DOES_CONNECTING_TO_THE_DISTRIBUTED_SYSTEM_REQUIRE_SSL_AUTHENTICATION = new StringId(3819, "Whether connection to the distributed system needs SSL authentication.");
+   public static final StringId AgentConfigImpl_PROPERTY_FILE_FROM_WHICH_AGENT_READS_CONFIGURATION = new StringId(3820, "Name and path of the Agent''s properties file from which agent reads configuration");
+   public static final StringId AgentConfigImpl_HOST_ON_WHICH_THE_DISTRIBUTED_SYSTEMS_LOCATOR_RUNS = new StringId(3821, "Host on which the distributed system''s locator runs");
+   public static final StringId SystemAdmin_USED_TO_SPECIFY_THE_0_FILE_TO_BE_USED_IN_CONFIGURING_THE_LOCATORS_DISTRIBUTEDSYSTEM = new StringId(3822, "Used to specify the {0} file to be used in configuring the locator''s DistributedSystem.");
+   public static final StringId AgentConfigImpl_GEMFIRE_PRODUCT_DIRECTORY_USED_TO_LAUNCH_A_LOCATOR = new StringId(3823, "GemFire product directory used to launch a locator");
+   public static final StringId AgentConfigImpl_DIRECTORY_IN_WHICH_A_LOCATOR_WILL_BE_LAUNCHED = new StringId(3824, "Directory in which a locator will be launched");
+   public static final StringId AgentConfigImpl_COMMAND_PREFIX_USED_WHEN_LAUNCHING_A_LOCATOR = new StringId(3825, "Command prefix used when launching a locator");
+   public static final StringId AgentConfigImpl_IP_ADDRESS_TO_USE_WHEN_CONTACTING_LOCATOR = new StringId(3826, "IP address to use when contacting locator");
+   public static final StringId AgentConfigImpl_PROPERTIES_FOR_CONFIGURING_A_LOCATORS_DISTRIBUTED_SYSTEM = new StringId(3827, "Properties for configuring a locator''s distributed system");
+   public static final StringId AgentLauncher_STARTS_THE_GEMFIRE_JMX_AGENT = new StringId(3828, "Starts the GemFire JMX Agent");
+   public static final StringId AgentLauncher_VMARG = new StringId(3829, "<vmarg> a VM-option passed to the agent''s VM, example -J-Xmx1024M for a 1 Gb heap");
+   public static final StringId AgentLauncher_DIR = new StringId(3830, "<dir> Directory in which agent runs, default is the current directory");
+   public static final StringId AgentLauncher_PROP = new StringId(3831, "<prop> A configuration property/value passed to the agent");
+   public static final StringId AgentLauncher_SEE_HELP_CONFIG = new StringId(3832, "(see \"help config\" for more details)");
+   public static final StringId AgentLauncher_STOPS_A_GEMFIRE_JMX_AGENT = new StringId(3833, "Stops a GemFire JMX Agent");
+   public static final StringId AgentLauncher_REPORTS_THE_STATUS_AND_THE_PROCESS_ID_OF_A_GEMFIRE_JMX_AGENT = new StringId(3834, "Reports the status and the process id of a GemFire JMX Agent");
+   public static final StringId AgentLauncher_AGENT_CONFIGURATION_PROPERTIES = new StringId(3835, "Agent configuration properties");
+   public static final StringId AgentLauncher_DEFAULT = new StringId(3836, "Default");
+   public static final StringId AgentLauncher_STARTING_JMX_AGENT_WITH_PID_0 = new StringId(3837, "Starting JMX Agent with pid: {0,number,#}");
+   public static final StringId AgentLauncher_STARTING_AGENT = new StringId(3838, "Starting agent");
+   public static final StringId AgentLauncher_UNCAUGHT_EXCEPTION_IN_THREAD_0 = new StringId(3839, "Uncaught exception in thread {0}");
+   public static final StringId AgentLauncher_0_HAS_STOPPED = new StringId(3840, "The {0} has shut down.");
+   public static final StringId AgentLauncher_TIMEOUT_WAITING_FOR_0_TO_SHUTDOWN_STATUS_IS_1 = new StringId(3841, "Timeout waiting for {0} to shutdown, status is: {1}");
+   public static final StringId AgentLauncher_NO_HELP_AVAILABLE_FOR_0 = new StringId(3842, "No help available for \"{0}\"");
+   public static final StringId AgentLauncher_AGENT_HELP = new StringId(3843, "agent help");
+   public static final StringId AgentLauncher_UNKNOWN_COMMAND_0 = new StringId(3844, "Unknown command: {0}");
+   public static final StringId AgentLauncher_ERROR_0 = new StringId(3845, "Error : {0}");
+   public static final StringId AgentLauncher_0_PID_1_STATUS = new StringId(3846, "{0} pid: {1,number,#} status: ");
+   public static final StringId AgentLauncher_SHUTDOWN = new StringId(3847, "shutdown");
+   public static final StringId AgentLauncher_STARTING = new StringId(3848, "starting");
+   public static final StringId AgentLauncher_RUNNING = new StringId(3849, "running");
+   public static final StringId AgentLauncher_SHUTDOWN_PENDING = new StringId(3850, "shutdown pending");
+   public static final StringId AgentLauncher_UNKNOWN = new StringId(3851, "unknown");
+   public static final StringId MsgStreamer_CLOSING_DUE_TO_0 = new StringId(3852, "closing due to {0}");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_BEGIN_NESTED_TRANSACTION_IS_NOT_SUPPORTED = new StringId(3853, "Nested transaction is not supported");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_COMMIT_TRANSACTION_IS_NULL_CANNOT_COMMIT_A_NULL_TRANSACTION = new StringId(3854, "Transaction is null, cannot commit a null transaction");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_COMMIT_GLOBAL_TRANSACTION_IS_NULL_CANNOT_COMMIT_A_NULL_GLOBAL_TRANSACTION = new StringId(3855, "Global Transaction is null, cannot commit a null global transaction");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_COMMIT_TRANSACTION_NOT_ACTIVE_CANNOT_BE_COMMITTED_TRANSACTION_STATUS_0 = new StringId(3856, "transaction not active, cannot be committed. Transaction Status= {0}");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_COMMIT_TRANSACTION_IS_NOT_ACTIVE_AND_CANNOT_BE_COMMITTED = new StringId(3857, "transaction is not active and cannot be committed");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_COMMIT_TRANSACTION_ROLLED_BACK_BECAUSE_OF_EXCEPTION_IN_NOTIFYBEFORECOMPLETION_FUNCTION_CALL_ACTUAL_EXCEPTION_0 = new StringId(3858, "Transaction rolled back because of Exception in notifyBeforeCompletion processing");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_COMMIT_TRANSACTION_ROLLED_BACK_BECAUSE_A_USER_MARKED_IT_FOR_ROLLBACK = new StringId(3859, "Transaction rolled back because a user marked it for Rollback");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_ROLLBACK_NO_TRANSACTION_EXISTS = new StringId(3860, "no transaction exists");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_ROLLBACK_NO_GLOBAL_TRANSACTION_EXISTS = new StringId(3861, "no global transaction exists");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_ROLLBACK_TRANSACTION_STATUS_DOES_NOT_ALLOW_ROLLBACK_TRANSACTIONAL_STATUS_0 = new StringId(3862, "Transaction status does not allow Rollback .Transactional status = {0}");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_ROLLBACK_TRANSACTION_ALREADY_IN_A_ROLLING_BACK_STATE_TRANSACTIONAL_STATUS_0 = new StringId(3863, "Transaction already in a Rolling Back state.Transactional status = {0}");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_ROLLBACK_TRANSACTION_STATUS_DOES_NOT_ALLOW_ROLLBACK = new StringId(3864, "Transaction status does not allow Rollback");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_SETROLLBACKONLY_NO_GLOBAL_TRANSACTION_EXISTS = new StringId(3865, "no global transaction exists");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_SETROLLBACKONLY_TRANSACTION_CANNOT_BE_MARKED_FOR_ROLLBACK_TRANSCATION_STATUS_0 = new StringId(3866, "Transaction cannot be marked for rollback. Transcation status = {0}");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_SETTRANSACTIONTIMEOUT_NO_GLOBAL_TRANSACTION_EXISTS = new StringId(3867, "no global transaction exists");
+   public static final StringId GemFireCacheImpl_STARTING_GEMFIRE_MEMCACHED_SERVER_ON_PORT_0_FOR_1_PROTOCOL = new StringId(3868, "Starting GemFireMemcachedServer on port {0} for {1} protocol");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_SETTRANSACTIONTIMEOUT_TRANSACTION_HAS_EITHER_EXPIRED_OR_ROLLEDBACK_OR_COMITTED = new StringId(3869, "Transaction has either expired or rolledback or comitted");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_RESUME_CANNOT_RESUME_A_NULL_TRANSACTION = new StringId(3870, "cannot resume a null transaction");
+   public static final StringId AbstractDistributionConfig_SECURITY_CLIENT_DHALGO_NAME_0 = new StringId(3871, "User defined name for the symmetric encryption algorithm to use in Diffie-Hellman key exchange for encryption of credentials.  Defaults to \"{0}\". Legal values can be any of the available symmetric algorithm names in JDK like \"DES\", \"DESede\", \"AES\", \"Blowfish\". It may be required to install Unlimited Strength Jurisdiction Policy Files from Sun for some symmetric algorithms to work (like \"AES\")");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_RESUME_ERROR_IN_LISTING_THREAD_TO_TRANSACTION_MAP_DUE_TO_0 = new StringId(3872, "Error in listing thread to transaction map due to {0}");
+   public static final StringId TransactionManagerImpl_TRANSACTIONMANAGERIMPL_GETGLOBALTRANSACTION_NO_TRANSACTION_EXISTS = new StringId(3873, "no transaction exists");
+   public static final StringId UserTransactionImpl_USERTRANSACTIONIMPL_SETTRA

<TRUNCATED>


[35/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommands.java
index 0000000,78880e1..a2387e9
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommands.java
@@@ -1,0 -1,204 +1,209 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Set;
+ import java.util.TreeSet;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheClosedException;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.execute.FunctionInvocationTargetException;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.domain.CacheServerInfo;
+ import com.gemstone.gemfire.management.internal.cli.domain.MemberInformation;
+ import com.gemstone.gemfire.management.internal.cli.functions.GetMemberInformationFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData.SectionResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /***
+  *
+  * @author Sourabh Bansod
+  *
+  * @since 7.0
+  */
+ public class MemberCommands implements CommandMarker {
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+   private static final GetMemberInformationFunction getMemberInformation = new GetMemberInformationFunction();
+ 
+   @CliCommand(value = { CliStrings.LIST_MEMBER }, help = CliStrings.LIST_MEMBER__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = CliStrings.TOPIC_GEMFIRE_SERVER)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result listMember(
+ 		  @CliOption(key = { CliStrings.LIST_MEMBER__GROUP },
+ 		             unspecifiedDefaultValue = "",
+ 		             optionContext = ConverterHint.MEMBERGROUP,
+ 		             help = CliStrings.LIST_MEMBER__GROUP__HELP)
+                   String group) {
+     Result result = null;
+ 
+     //TODO: Add the code for identifying the system services
+     try {
+       Set<DistributedMember> memberSet = new TreeSet<DistributedMember>();
+       Cache cache = CacheFactory.getAnyInstance();
+ 
+       //default get all the members in the DS
+       if (group.isEmpty()) {
+         memberSet.addAll(CliUtil.getAllMembers(cache));
+       } else {
+         memberSet.addAll(cache.getDistributedSystem().getGroupMembers(group));
+       }
+ 
+       if (memberSet.isEmpty()) {
+         result = ResultBuilder.createInfoResult(CliStrings.LIST_MEMBER__MSG__NO_MEMBER_FOUND);
+       } else {
+         TabularResultData resultData = ResultBuilder.createTabularResultData();
+         Iterator<DistributedMember> memberIters = memberSet.iterator();
+         while (memberIters.hasNext()) {
+           DistributedMember member = memberIters.next();
+           resultData.accumulate("Name", member.getName());
+           resultData.accumulate("Id", member.getId());
+         }
+ 
+         result = ResultBuilder.buildResult(resultData);
+       }
+     } catch (Exception e) {
+ 
+       result = ResultBuilder.createGemFireErrorResult("Could not fetch the list of members. "+e.getMessage());
+       LogWrapper.getInstance().warning(e.getMessage(), e);
+     }
+ 
+     return result;
+   }
+ 
+   @CliCommand(value = { CliStrings.DESCRIBE_MEMBER }, help = CliStrings.DESCRIBE_MEMBER__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = CliStrings.TOPIC_GEMFIRE_SERVER)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result describeMember(
+   	@CliOption(key = CliStrings.DESCRIBE_MEMBER__IDENTIFIER,
+   	             optionContext = ConverterHint.ALL_MEMBER_IDNAME,
+ 		  					 help = CliStrings.DESCRIBE_MEMBER__HELP,
+ 		  					 mandatory=true)
+                   String memberNameOrId) {
+   	Result result = null;
+ 
+   	try {
+       DistributedMember memberToBeDescribed = CliUtil.getDistributedMemberByNameOrId(memberNameOrId);
+ 
+       if (memberToBeDescribed != null) {
+         //Abhishek - This information should be available through the MBeans too. We might not need the function.
+         //Sourabh - Yes, but then the command is subject to Mbean availability, which would be affected once MBean filters are used.
+ 
+         ResultCollector <?, ?> rc = CliUtil.executeFunction(getMemberInformation, null, memberToBeDescribed);
+ 
+         ArrayList<?> output = (ArrayList<?>) rc.getResult();
+         Object obj = output.get(0);
+ 
+         if (obj != null && (obj instanceof MemberInformation) ) {
+ 
+           CompositeResultData crd = ResultBuilder.createCompositeResultData();
+ 
+         	MemberInformation memberInformation = (MemberInformation) obj;
+         	memberInformation.setName(memberToBeDescribed.getName());
+         	memberInformation.setId(memberToBeDescribed.getId());
+         	memberInformation.setHost(memberToBeDescribed.getHost());
+         	memberInformation.setProcessId(""+memberToBeDescribed.getProcessId());
+ 
+         	SectionResultData section = crd.addSection();
+         	section.addData("Name", memberInformation.getName());
+         	section.addData("Id", memberInformation.getId());
+         	section.addData("Host", memberInformation.getHost());
+         	section.addData("Regions", CliUtil.convertStringSetToString(memberInformation.getHostedRegions(), '\n'));
+         	section.addData("PID", memberInformation.getProcessId());
+         	section.addData("Groups", memberInformation.getGroups());
+         	section.addData("Used Heap", memberInformation.getHeapUsage() + "M");
+         	section.addData("Max Heap", memberInformation.getMaxHeapSize() + "M");
+         	{
+         	  String offHeapMemorySize = memberInformation.getOffHeapMemorySize();
+         	  if (offHeapMemorySize != null && !offHeapMemorySize.isEmpty()) {
+         	    section.addData("Off Heap Size", offHeapMemorySize);
+         	  }
+         	}
+         	section.addData("Working Dir", memberInformation.getWorkingDirPath());
+         	section.addData("Log file", memberInformation.getLogFilePath());
+ 
+         	section.addData("Locators", memberInformation.getLocators());
+ 
+         	if (memberInformation.isServer()) {
+         	  SectionResultData clientServiceSection = crd.addSection();
+         	  List<CacheServerInfo> csList = memberInformation.getCacheServeInfo();
+ 
+         	  if (csList != null) {
+         	    Iterator<CacheServerInfo> iters = csList.iterator();
+               clientServiceSection.setHeader("Cache Server Information");
+ 
+               while (iters.hasNext()) {
+                 CacheServerInfo cacheServerInfo = iters.next();
+                 clientServiceSection.addData("Server Bind",cacheServerInfo.getBindAddress());
+                 clientServiceSection.addData("Server Port" , cacheServerInfo.getPort());
+                 clientServiceSection.addData("Running" , cacheServerInfo.isRunning());
+               }
+ 
+               clientServiceSection.addData("Client Connections", memberInformation.getClientCount());
+         	  }
+         	}
+         	result = ResultBuilder.buildResult(crd);
+ 
+         } else {
+           result = ResultBuilder.createInfoResult(CliStrings.format(CliStrings.DESCRIBE_MEMBER__MSG__INFO_FOR__0__COULD_NOT_BE_RETRIEVED, new Object[] {memberNameOrId}));
+         }
+       } else {
+         result = ResultBuilder.createInfoResult(CliStrings.format(CliStrings.DESCRIBE_MEMBER__MSG__NOT_FOUND, new Object[] {memberNameOrId}));
+       }
+     } catch (CacheClosedException e) {
+ 
+     } catch (FunctionInvocationTargetException e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     } catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     }
+     return result;
+   }
+ 
+   @CliAvailabilityIndicator({CliStrings.LIST_MEMBER, CliStrings.DESCRIBE_MEMBER})
+   public boolean isListMemberAvailable() {
+     boolean isAvailable = true;
+     if (CliUtil.isGfshVM()) {
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;
+   }
+ 
+ }


[11/50] [abbrv] incubator-geode git commit: Add Sai Boorlagadda to committers' list

Posted by je...@apache.org.
Add Sai Boorlagadda to committers' list

this closes #104


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/9028aa84
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/9028aa84
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/9028aa84

Branch: refs/heads/feature/GEODE-17
Commit: 9028aa841c2b9a165fff138387c0db7d061ed17e
Parents: 66fa365
Author: Dave Barnes <db...@pivotal.io>
Authored: Tue Feb 23 13:47:34 2016 -0800
Committer: Sai Boorlagadda <sb...@pivotal.io>
Committed: Tue Feb 23 14:41:20 2016 -0800

----------------------------------------------------------------------
 geode-site/website/content/community/index.html | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9028aa84/geode-site/website/content/community/index.html
----------------------------------------------------------------------
diff --git a/geode-site/website/content/community/index.html b/geode-site/website/content/community/index.html
index 5fc0b2c..5c5f25f 100644
--- a/geode-site/website/content/community/index.html
+++ b/geode-site/website/content/community/index.html
@@ -232,6 +232,7 @@ under the License. -->
         <li>Rahul Diyewar</li>
         <li>Randy May</li>
         <li>Roman Shaposhnik</li>
+        <li>Sai Boorlagadda</li>
         <li>Severine Tymon</li>
         <li>Shatarupa Nandi</li>
         <li>Shirish Deshmukh</li>


[17/50] [abbrv] incubator-geode git commit: Fixes missing ASL header.

Posted by je...@apache.org.
Fixes missing ASL header.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/c32e1b4d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/c32e1b4d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/c32e1b4d

Branch: refs/heads/feature/GEODE-17
Commit: c32e1b4df88fa1e4cfb1d421907da66cb10f0151
Parents: 8f31850
Author: Anthony Baker <ab...@apache.org>
Authored: Tue Feb 23 16:24:11 2016 -0800
Committer: Anthony Baker <ab...@apache.org>
Committed: Tue Feb 23 16:24:11 2016 -0800

----------------------------------------------------------------------
 .../pulse/controllers/PulseControllerJUnitTest.java | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c32e1b4d/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
index 9ae6c0c..7a08547 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package com.vmware.gemfire.tools.pulse.controllers;
 
 import com.fasterxml.jackson.databind.ObjectMapper;


[37/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommands.java
index 0000000,df09580..b7af8af
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommands.java
@@@ -1,0 -1,674 +1,683 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.TreeSet;
+ 
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.SystemFailure;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.execute.Execution;
+ import com.gemstone.gemfire.cache.execute.FunctionInvocationTargetException;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.cache.query.internal.index.IndexCreationData;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.internal.cache.execute.AbstractExecution;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.domain.IndexDetails;
+ import com.gemstone.gemfire.management.internal.cli.domain.IndexDetails.IndexStatisticsDetails;
+ import com.gemstone.gemfire.management.internal.cli.domain.IndexInfo;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.CreateDefinedIndexesFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.CreateIndexFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.DestroyIndexFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.ListIndexFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.InfoResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
+ import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * The IndexCommands class encapsulates all GemFire shell (Gfsh) commands related to indexes defined in GemFire.
+  * </p>
+  * @author John Blum
+  * @see com.gemstone.gemfire.management.internal.cli.commands.AbstractCommandsSupport
+  * @see com.gemstone.gemfire.management.internal.cli.domain.IndexDetails
+  * @see com.gemstone.gemfire.management.internal.cli.functions.ListIndexFunction
+  * @since 7.0
+  */
+ @SuppressWarnings("unused")
+ public class IndexCommands extends AbstractCommandsSupport {
+   
+   private static final CreateIndexFunction createIndexFunction = new CreateIndexFunction();
+   private static final DestroyIndexFunction destroyIndexFunction = new DestroyIndexFunction();
+   private static final CreateDefinedIndexesFunction createDefinedIndexesFunction = new CreateDefinedIndexesFunction();
+   private static final Set<IndexInfo> indexDefinitions = Collections.synchronizedSet(new HashSet<IndexInfo>());
+ 
+   @Override
+   protected Set<DistributedMember> getMembers(final Cache cache) {
+     // TODO determine what this does (as it is untested and unmockable!)
+     return CliUtil.getAllMembers(cache);
+   }
+ 
+   @CliCommand(value = CliStrings.LIST_INDEX, help = CliStrings.LIST_INDEX__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic={CliStrings.TOPIC_GEMFIRE_REGION, CliStrings.TOPIC_GEMFIRE_DATA})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result listIndex(@CliOption(key = CliStrings.LIST_INDEX__STATS,
+                                      mandatory = false,
+                                      specifiedDefaultValue = "true",
+                                      unspecifiedDefaultValue = "false",
+                                      help = CliStrings.LIST_INDEX__STATS__HELP)
+                             final boolean showStats) {
+     try {
+       return toTabularResult(getIndexListing(), showStats);
+     }
+     catch (FunctionInvocationTargetException ignore) {
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.COULD_NOT_EXECUTE_COMMAND_TRY_AGAIN,
+         CliStrings.LIST_INDEX));
+     }
+     catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     }
+     catch (Throwable t) {
+       SystemFailure.checkFailure();
+       getCache().getLogger().error(t);
+       return ResultBuilder.createGemFireErrorResult(String.format(CliStrings.LIST_INDEX__ERROR_MESSAGE,
+         toString(t, isDebugging())));
+     }
+   }
+ 
+   @SuppressWarnings("unchecked")
+   protected List<IndexDetails> getIndexListing() {
+     final Execution functionExecutor = getMembersFunctionExecutor(getMembers(getCache()));
+ 
+     if (functionExecutor instanceof AbstractExecution) {
+       ((AbstractExecution) functionExecutor).setIgnoreDepartedMembers(true);
+     }
+ 
+     final ResultCollector<?, ?> resultsCollector = functionExecutor.execute(new ListIndexFunction());
+ 
+     final List<?> results = (List<?>) resultsCollector.getResult();
+     final List<IndexDetails> indexDetailsList = new ArrayList<IndexDetails>(results.size());
+ 
+     for (Object result : results) {
+       if (result instanceof Set) { // ignore FunctionInvocationTargetExceptions and other Exceptions
+         indexDetailsList.addAll((Set<IndexDetails>) result);
+       }
+     }
+ 
+     Collections.sort(indexDetailsList);
+ 
+     return indexDetailsList;
+   }
+ 
+   protected Result toTabularResult(final List<IndexDetails> indexDetailsList, final boolean showStats) {
+     if (!indexDetailsList.isEmpty()) {
+       final TabularResultData indexData = ResultBuilder.createTabularResultData();
+ 
+       for (final IndexDetails indexDetails : indexDetailsList) {
+         indexData.accumulate("Member Name", StringUtils.valueOf(indexDetails.getMemberName(), ""));
+         indexData.accumulate("Member ID", indexDetails.getMemberId());
+         indexData.accumulate("Region Path", indexDetails.getRegionPath());
+         indexData.accumulate("Name", indexDetails.getIndexName());
+         indexData.accumulate("Type", StringUtils.valueOf(indexDetails.getIndexType(), ""));
+         indexData.accumulate("Indexed Expression", indexDetails.getIndexedExpression());
+         indexData.accumulate("From Clause", indexDetails.getFromClause());
+ 
+         if (showStats) {
+           final IndexStatisticsDetailsAdapter adapter = new IndexStatisticsDetailsAdapter(
+             indexDetails.getIndexStatisticsDetails());
+ 
+           indexData.accumulate("Uses", adapter.getTotalUses());
+           indexData.accumulate("Updates", adapter.getNumberOfUpdates());
+           indexData.accumulate("Update Time", adapter.getTotalUpdateTime());
+           indexData.accumulate("Keys", adapter.getNumberOfKeys());
+           indexData.accumulate("Values", adapter.getNumberOfValues());
+         }
+       }
+ 
+       return ResultBuilder.buildResult(indexData);
+     }
+     else {
+       return ResultBuilder.createInfoResult(CliStrings.LIST_INDEX__INDEXES_NOT_FOUND_MESSAGE);
+     }
+   }
+ 
+   @CliCommand(value = CliStrings.CREATE_INDEX, help = CliStrings.CREATE_INDEX__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic={CliStrings.TOPIC_GEMFIRE_REGION, CliStrings.TOPIC_GEMFIRE_DATA}, writesToSharedConfiguration=true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.CREATE_INDEX)
+   //TODO : Add optionContext for indexName
+   public Result createIndex(
+       @CliOption (key = CliStrings.CREATE_INDEX__NAME,
+       mandatory=true,
+       help = CliStrings.CREATE_INDEX__NAME__HELP) final String indexName,
+ 
+       @CliOption (key = CliStrings.CREATE_INDEX__EXPRESSION,
+       mandatory = true,
+       help = CliStrings.CREATE_INDEX__EXPRESSION__HELP) final String indexedExpression,
+ 
+       @CliOption(key = CliStrings.CREATE_INDEX__REGION,
+       mandatory = true,
+       optionContext = ConverterHint.REGIONPATH,
+       help = CliStrings.CREATE_INDEX__REGION__HELP) String regionPath,
+ 
+       @CliOption(key = CliStrings.CREATE_INDEX__MEMBER,
+       mandatory = false,
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.CREATE_INDEX__MEMBER__HELP) final String memberNameOrID,
+ 
+       @CliOption(key = CliStrings.CREATE_INDEX__TYPE,
+       mandatory = false,
+       unspecifiedDefaultValue = "range",
+       optionContext = ConverterHint.INDEX_TYPE,
+       help = CliStrings.CREATE_INDEX__TYPE__HELP) final String indexType,
+ 
+       @CliOption (key = CliStrings.CREATE_INDEX__GROUP,
+       mandatory = false,
+       optionContext = ConverterHint.MEMBERGROUP, 
+       help = CliStrings.CREATE_INDEX__GROUP__HELP) final String group) {
+ 
+     Result result = null;
+     XmlEntity xmlEntity = null;
+     
+     try {
+       final Cache cache = CacheFactory.getAnyInstance();
+ 
+       int idxType = IndexInfo.RANGE_INDEX;
+ 
+       //Index type check
+         if ("range".equalsIgnoreCase(indexType)) {
+           idxType = IndexInfo.RANGE_INDEX;
+         } else if ("hash".equalsIgnoreCase(indexType)) {
+           idxType = IndexInfo.HASH_INDEX;
+         } else if ("key".equalsIgnoreCase(indexType)) {
+           idxType = IndexInfo.KEY_INDEX;
+         } else {
+           return ResultBuilder.createUserErrorResult(CliStrings.CREATE_INDEX__INVALID__INDEX__TYPE__MESSAGE);
+         }
+ 
+       if (indexName == null || indexName.isEmpty()) {
+         return ResultBuilder.createUserErrorResult(CliStrings.CREATE_INDEX__INVALID__INDEX__NAME);
+       }
+ 
+       if (indexedExpression == null || indexedExpression.isEmpty()) {
+         return ResultBuilder.createUserErrorResult(CliStrings.CREATE_INDEX__INVALID__EXPRESSION);
+       }
+ 
+       if (StringUtils.isBlank(regionPath) || regionPath.equals(Region.SEPARATOR)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.CREATE_INDEX__INVALID__REGIONPATH);
+       }
+       
+       if (!regionPath.startsWith(Region.SEPARATOR)) {
+         regionPath = Region.SEPARATOR +regionPath;
+       }
+       
+       IndexInfo indexInfo = new IndexInfo(indexName, indexedExpression, regionPath, idxType);
+ 
+       final Set<DistributedMember> targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrID);
+       final ResultCollector<?,?> rc = CliUtil.executeFunction(createIndexFunction, indexInfo, targetMembers);
+ 
+       final List<Object> funcResults = (List<Object>) rc.getResult();
+       final Set<String> successfulMembers = new TreeSet<String>();
+       final Map<String, Set<String>> indexOpFailMap = new HashMap<String, Set<String>>();
+ 
+       for (final Object funcResult : funcResults) {
+         if (funcResult instanceof CliFunctionResult) {
+           final CliFunctionResult cliFunctionResult = (CliFunctionResult) funcResult;
+ 
+           if (cliFunctionResult.isSuccessful()) {
+             successfulMembers.add(cliFunctionResult.getMemberIdOrName());
+             
+             if (xmlEntity == null) {
+               xmlEntity = cliFunctionResult.getXmlEntity();
+             }
+           } else {
+             final String exceptionMessage  = cliFunctionResult.getMessage();
+             Set<String> failedMembers = indexOpFailMap.get(exceptionMessage);
+ 
+             if (failedMembers == null) {
+               failedMembers = new TreeSet<String>();
+             }
+             failedMembers.add(cliFunctionResult.getMemberIdOrName());
+             indexOpFailMap.put(exceptionMessage, failedMembers);
+           }
+         }
+       }
+ 
+       if (!successfulMembers.isEmpty()) {
+ 
+         final InfoResultData infoResult = ResultBuilder.createInfoResultData();
+         infoResult.addLine(CliStrings.CREATE_INDEX__SUCCESS__MSG);
+         infoResult.addLine(CliStrings.format(CliStrings.CREATE_INDEX__NAME__MSG, indexName));
+         infoResult.addLine(CliStrings.format(CliStrings.CREATE_INDEX__EXPRESSION__MSG, indexedExpression));
+         infoResult.addLine(CliStrings.format(CliStrings.CREATE_INDEX__REGIONPATH__MSG, regionPath));
+         infoResult.addLine(CliStrings.CREATE_INDEX__MEMBER__MSG);
+ 
+         int num = 0;
+ 
+         for (final String memberId : successfulMembers) {
+           ++num;
+           infoResult.addLine(CliStrings.format(CliStrings.CREATE_INDEX__NUMBER__AND__MEMBER, num, memberId));
+         }
+         result = ResultBuilder.buildResult(infoResult);
+ 
+       } else {
+         //Group members by the exception thrown.
+         final ErrorResultData erd = ResultBuilder.createErrorResultData();
+         erd.addLine(CliStrings.format(CliStrings.CREATE_INDEX__FAILURE__MSG, indexName));
+ 
+         final Set<String> exceptionMessages = indexOpFailMap.keySet();
+ 
+         for (final String exceptionMessage : exceptionMessages) {
+           erd.addLine(exceptionMessage);
+           erd.addLine(CliStrings.CREATE_INDEX__EXCEPTION__OCCURRED__ON);
+           final Set<String> memberIds = indexOpFailMap.get(exceptionMessage);
+ 
+           int num = 0;
+           for (final String memberId : memberIds) {
+             ++num;
+             erd.addLine(CliStrings.format(CliStrings.CREATE_INDEX__NUMBER__AND__MEMBER, num, memberId));
+           }
+         }
+         result = ResultBuilder.buildResult(erd);
+       }
+     } catch (CommandResultException crex) {
+       result = crex.getResult();
+     } catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     }
+     
+     if (xmlEntity != null) {
+       result.setCommandPersisted((new SharedConfigurationWriter()).addXmlEntity(xmlEntity, group !=null ? group.split(",") : null));
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.DESTROY_INDEX, help = CliStrings.DESTROY_INDEX__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic={CliStrings.TOPIC_GEMFIRE_REGION, CliStrings.TOPIC_GEMFIRE_DATA}, writesToSharedConfiguration=true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.DESTROY_INDEX)
+   //TODO : Add optioncontext for the index name. 
+   public Result destroyIndex(
+       @CliOption(
+       key = CliStrings.DESTROY_INDEX__NAME,
+       mandatory = false,
+       unspecifiedDefaultValue = "",
+       help = CliStrings.DESTROY_INDEX__NAME__HELP) final String indexName,
+ 
+       @CliOption(key = CliStrings.DESTROY_INDEX__REGION,
+       mandatory = false,
+       optionContext = ConverterHint.REGIONPATH,
+       help = CliStrings.DESTROY_INDEX__REGION__HELP) final String regionPath,
+ 
+       @CliOption(key = CliStrings.DESTROY_INDEX__MEMBER,
+       mandatory = false,
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.DESTROY_INDEX__MEMBER__HELP) final String memberNameOrID,
+ 
+       @CliOption (key = CliStrings.DESTROY_INDEX__GROUP,
+       mandatory = false,
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.DESTROY_INDEX__GROUP__HELP) final String group) {
+ 
+     Result result = null;
+     XmlEntity xmlEntity = null;
+ 
+     try {
+ 
+       if (StringUtils.isBlank(indexName)
+           && StringUtils.isBlank(regionPath)
+           && StringUtils.isBlank(memberNameOrID)
+           && StringUtils.isBlank(group)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.PROVIDE_ATLEAST_ONE_OPTION, CliStrings.DESTROY_INDEX));
+       }
+       String regionName = null;
+       final Cache cache = CacheFactory.getAnyInstance();
+       
+       if (!StringUtils.isBlank(regionPath)) {
+         regionName = regionPath.startsWith("/") ? regionPath.substring(1) : regionPath;
+       }
+       IndexInfo indexInfo = new IndexInfo(indexName, regionName);
+ 
+       Set<DistributedMember> targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrID);
+ 
+       ResultCollector rc = CliUtil.executeFunction(destroyIndexFunction, indexInfo, targetMembers);
+       List<Object> funcResults = (List<Object>) rc.getResult();
+ 
+       Set<String> successfulMembers = new TreeSet<String>();
+       Map<String, Set<String>> indexOpFailMap = new HashMap<String, Set<String>>();
+ 
+       for (Object funcResult : funcResults){
+ 
+         if (funcResult instanceof CliFunctionResult) {
+           CliFunctionResult cliFunctionResult = (CliFunctionResult) funcResult;
+ 
+           if (cliFunctionResult.isSuccessful()) {
+             successfulMembers.add(cliFunctionResult.getMemberIdOrName());
+             
+             if (xmlEntity == null) {
+               xmlEntity = cliFunctionResult.getXmlEntity();
+             }
+           } else {
+             String exceptionMessage  = cliFunctionResult.getMessage();
+             Set<String> failedMembers = indexOpFailMap.get(exceptionMessage);
+ 
+             if (failedMembers == null) {
+               failedMembers = new TreeSet<String>();
+             }
+             failedMembers.add(cliFunctionResult.getMemberIdOrName());
+             indexOpFailMap.put(exceptionMessage, failedMembers);
+           }
+         }
+       }
+ 
+       if (!successfulMembers.isEmpty()) {
+         InfoResultData infoResult = ResultBuilder.createInfoResultData();
+ 
+         if (!StringUtils.isBlank(indexName)) {
+           if (!StringUtils.isBlank(regionPath)) {
+             infoResult.addLine(CliStrings.format(CliStrings.DESTROY_INDEX__ON__REGION__SUCCESS__MSG, indexName, regionPath));
+           } else {
+             infoResult.addLine(CliStrings.format(CliStrings.DESTROY_INDEX__SUCCESS__MSG, indexName));
+           }
+         } else {
+            if (!StringUtils.isBlank(regionPath)) {
+              infoResult.addLine(CliStrings.format(CliStrings.DESTROY_INDEX__ON__REGION__ONLY__SUCCESS__MSG, regionPath));
+            } else {
+              infoResult.addLine(CliStrings.DESTROY_INDEX__ON__MEMBERS__ONLY__SUCCESS__MSG);
+            }
+         }
+ 
+         int num = 0;
+         for (String memberId : successfulMembers) {
+           infoResult.addLine(CliStrings.format(CliStrings.format(CliStrings.DESTROY_INDEX__NUMBER__AND__MEMBER, ++num, memberId)));;
+         }
+         result = ResultBuilder.buildResult(infoResult);
+ 
+       } else {
+ 
+         ErrorResultData erd = ResultBuilder.createErrorResultData();
+         if (!StringUtils.isBlank(indexName)) {
+           erd.addLine(CliStrings.format(CliStrings.DESTROY_INDEX__FAILURE__MSG, indexName));
+         } else {
+           erd.addLine("Indexes could not be destroyed for following reasons");
+         }
+ 
+         Set<String> exceptionMessages = indexOpFailMap.keySet();
+ 
+         for (String exceptionMessage : exceptionMessages) {
+           erd.addLine(CliStrings.format(CliStrings.DESTROY_INDEX__REASON_MESSAGE, exceptionMessage));
+           erd.addLine(CliStrings.DESTROY_INDEX__EXCEPTION__OCCURRED__ON);
+ 
+           Set<String> memberIds = indexOpFailMap.get(exceptionMessage);
+           int num = 0;
+ 
+           for (String memberId : memberIds) {
+             erd.addLine(CliStrings.format(CliStrings.format(CliStrings.DESTROY_INDEX__NUMBER__AND__MEMBER, ++num, memberId)));
+           }
+           erd.addLine("");
+         }
+         result = ResultBuilder.buildResult(erd);
+       }
+     } catch (CommandResultException crex) {
+       result = crex.getResult();
+     } catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     }
+     
+     if (xmlEntity != null) {
+       result.setCommandPersisted((new SharedConfigurationWriter()).deleteXmlEntity(xmlEntity, group !=null ? group.split(",") : null));
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.DEFINE_INDEX, help = CliStrings.DEFINE_INDEX__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic={CliStrings.TOPIC_GEMFIRE_REGION, CliStrings.TOPIC_GEMFIRE_DATA}, writesToSharedConfiguration=true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.CREATE_INDEX)
+   //TODO : Add optionContext for indexName
+   public Result defineIndex(
+       @CliOption (key = CliStrings.DEFINE_INDEX_NAME,
+       mandatory=true,
+       help = CliStrings.DEFINE_INDEX__HELP) final String indexName,
+ 
+       @CliOption (key = CliStrings.DEFINE_INDEX__EXPRESSION,
+       mandatory = true,
+       help = CliStrings.DEFINE_INDEX__EXPRESSION__HELP) final String indexedExpression,
+ 
+       @CliOption(key = CliStrings.DEFINE_INDEX__REGION,
+       mandatory = true,
+       optionContext = ConverterHint.REGIONPATH,
+       help = CliStrings.DEFINE_INDEX__REGION__HELP) String regionPath,
+ 
+       @CliOption(key = CliStrings.DEFINE_INDEX__TYPE,
+       mandatory = false,
+       unspecifiedDefaultValue = "range",
+       optionContext = ConverterHint.INDEX_TYPE,
+       help = CliStrings.DEFINE_INDEX__TYPE__HELP) final String indexType) {
+ 
+     Result result = null;
+     XmlEntity xmlEntity = null;
+     
+     int idxType = IndexInfo.RANGE_INDEX;
+ 
+     //Index type check
+     if ("range".equalsIgnoreCase(indexType)) {
+       idxType = IndexInfo.RANGE_INDEX;
+     } else if ("hash".equalsIgnoreCase(indexType)) {
+       idxType = IndexInfo.HASH_INDEX;
+     } else if ("key".equalsIgnoreCase(indexType)) {
+       idxType = IndexInfo.KEY_INDEX;
+     } else {
+       return ResultBuilder.createUserErrorResult(CliStrings.DEFINE_INDEX__INVALID__INDEX__TYPE__MESSAGE);
+     }
+ 
+     if (indexName == null || indexName.isEmpty()) {
+       return ResultBuilder.createUserErrorResult(CliStrings.DEFINE_INDEX__INVALID__INDEX__NAME);
+     }
+ 
+     if (indexedExpression == null || indexedExpression.isEmpty()) {
+       return ResultBuilder.createUserErrorResult(CliStrings.DEFINE_INDEX__INVALID__EXPRESSION);
+     }
+ 
+     if (StringUtils.isBlank(regionPath) || regionPath.equals(Region.SEPARATOR)) {
+       return ResultBuilder.createUserErrorResult(CliStrings.DEFINE_INDEX__INVALID__REGIONPATH);
+     }
+       
+     if (!regionPath.startsWith(Region.SEPARATOR)) {
+       regionPath = Region.SEPARATOR +regionPath;
+     }
+       
+     IndexInfo indexInfo = new IndexInfo(indexName, indexedExpression, regionPath, idxType);
+     indexDefinitions.add(indexInfo);
+ 
+     final InfoResultData infoResult = ResultBuilder.createInfoResultData();
+     infoResult.addLine(CliStrings.DEFINE_INDEX__SUCCESS__MSG);
+     infoResult.addLine(CliStrings.format(CliStrings.DEFINE_INDEX__NAME__MSG, indexName));
+     infoResult.addLine(CliStrings.format(CliStrings.DEFINE_INDEX__EXPRESSION__MSG, indexedExpression));
+     infoResult.addLine(CliStrings.format(CliStrings.DEFINE_INDEX__REGIONPATH__MSG, regionPath));
+     result = ResultBuilder.buildResult(infoResult);
+ 
+     return result;
+   }
+   
+   @CliCommand(value = CliStrings.CREATE_DEFINED_INDEXES, help = CliStrings.CREATE_DEFINED__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic={CliStrings.TOPIC_GEMFIRE_REGION, CliStrings.TOPIC_GEMFIRE_DATA}, writesToSharedConfiguration=true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.CREATE_INDEX)
+   //TODO : Add optionContext for indexName
+   public Result createDefinedIndexes(
+ 
+       @CliOption(key = CliStrings.CREATE_DEFINED_INDEXES__MEMBER,
+       mandatory = false,
+       optionContext = ConverterHint.MEMBERIDNAME,
+       help = CliStrings.CREATE_DEFINED_INDEXES__MEMBER__HELP) final String memberNameOrID,
+ 
+       @CliOption (key = CliStrings.CREATE_DEFINED_INDEXES__GROUP,
+       mandatory = false,
+       optionContext = ConverterHint.MEMBERGROUP, 
+       help = CliStrings.CREATE_DEFINED_INDEXES__GROUP__HELP) final String group) {
+ 
+     Result result = null;
+     XmlEntity xmlEntity = null;
+     
+     if(indexDefinitions.isEmpty()) {
+       final InfoResultData infoResult = ResultBuilder.createInfoResultData();
+       infoResult.addLine(CliStrings.DEFINE_INDEX__FAILURE__MSG);
+       return ResultBuilder.buildResult(infoResult);
+     }
+     
+     try {
+       final Cache cache = CacheFactory.getAnyInstance();
+ 
+       final Set<DistributedMember> targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrID);
+       final ResultCollector<?,?> rc = CliUtil.executeFunction(createDefinedIndexesFunction, indexDefinitions, targetMembers);
+ 
+       final List<Object> funcResults = (List<Object>) rc.getResult();
+       final Set<String> successfulMembers = new TreeSet<String>();
+       final Map<String, Set<String>> indexOpFailMap = new HashMap<String, Set<String>>();
+ 
+       for (final Object funcResult : funcResults) {
+         if (funcResult instanceof CliFunctionResult) {
+           final CliFunctionResult cliFunctionResult = (CliFunctionResult) funcResult;
+ 
+           if (cliFunctionResult.isSuccessful()) {
+             successfulMembers.add(cliFunctionResult.getMemberIdOrName());
+             
+             if (xmlEntity == null) {
+               xmlEntity = cliFunctionResult.getXmlEntity();
+             }
+           } else {
+             final String exceptionMessage  = cliFunctionResult.getMessage();
+             Set<String> failedMembers = indexOpFailMap.get(exceptionMessage);
+ 
+             if (failedMembers == null) {
+               failedMembers = new TreeSet<String>();
+             }
+             failedMembers.add(cliFunctionResult.getMemberIdOrName());
+             indexOpFailMap.put(exceptionMessage, failedMembers);
+           }
+         }
+       }
+ 
+       if (!successfulMembers.isEmpty()) {
+         final InfoResultData infoResult = ResultBuilder.createInfoResultData();
+         infoResult.addLine(CliStrings.CREATE_DEFINED_INDEXES__SUCCESS__MSG);
+ 
+         int num = 0;
+ 
+         for (final String memberId : successfulMembers) {
+           ++num;
+           infoResult.addLine(CliStrings.format(CliStrings.CREATE_DEFINED_INDEXES__NUMBER__AND__MEMBER, num, memberId));
+         }
+         result = ResultBuilder.buildResult(infoResult);
+ 
+       } else {
+         //Group members by the exception thrown.
+         final ErrorResultData erd = ResultBuilder.createErrorResultData();
+ 
+         final Set<String> exceptionMessages = indexOpFailMap.keySet();
+ 
+         for (final String exceptionMessage : exceptionMessages) {
+           erd.addLine(exceptionMessage);
+           erd.addLine(CliStrings.CREATE_INDEX__EXCEPTION__OCCURRED__ON);
+           final Set<String> memberIds = indexOpFailMap.get(exceptionMessage);
+ 
+           int num = 0;
+           for (final String memberId : memberIds) {
+             ++num;
+             erd.addLine(CliStrings.format(CliStrings.CREATE_DEFINED_INDEXES__NUMBER__AND__MEMBER, num, memberId));
+           }
+         }
+         result = ResultBuilder.buildResult(erd);
+       }
+     } catch (CommandResultException crex) {
+       result = crex.getResult();
+     } catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     }
+     
+     if (xmlEntity != null) {
+       result.setCommandPersisted((new SharedConfigurationWriter()).addXmlEntity(xmlEntity, group !=null ? group.split(",") : null));
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.CLEAR_DEFINED_INDEXES, help = CliStrings.CLEAR_DEFINED__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic={CliStrings.TOPIC_GEMFIRE_REGION, CliStrings.TOPIC_GEMFIRE_DATA}, writesToSharedConfiguration=true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.CREATE_INDEX)
+   //TODO : Add optionContext for indexName
+   public Result clearDefinedIndexes() {
+     indexDefinitions.clear();
+     final InfoResultData infoResult = ResultBuilder.createInfoResultData();
+     infoResult.addLine(CliStrings.CLEAR_DEFINED_INDEX__SUCCESS__MSG);
+     return ResultBuilder.buildResult(infoResult);
+ 
+   }
+ 
+   @CliAvailabilityIndicator({CliStrings.LIST_INDEX, CliStrings.CREATE_INDEX, CliStrings.DESTROY_INDEX})
+   public boolean indexCommandsAvailable() {
+     return (!CliUtil.isGfshVM() || (getGfsh() != null && getGfsh().isConnectedAndReady()));
+   }
+ 
+   protected static class IndexStatisticsDetailsAdapter {
+ 
+     private final IndexStatisticsDetails indexStatisticsDetails;
+ 
+     protected IndexStatisticsDetailsAdapter(final IndexStatisticsDetails indexStatisticsDetails) {
+       this.indexStatisticsDetails = indexStatisticsDetails;
+     }
+ 
+     public IndexStatisticsDetails getIndexStatisticsDetails() {
+       return indexStatisticsDetails;
+     }
+ 
+     public String getNumberOfKeys() {
+       return (getIndexStatisticsDetails() != null ? StringUtils.valueOf(getIndexStatisticsDetails()
+         .getNumberOfKeys(), "") : "");
+     }
+ 
+     public String getNumberOfUpdates() {
+       return (getIndexStatisticsDetails() != null ? StringUtils.valueOf(getIndexStatisticsDetails().getNumberOfUpdates(), "") : "");
+     }
+ 
+     public String getNumberOfValues() {
+       return (getIndexStatisticsDetails() != null ? StringUtils.valueOf(getIndexStatisticsDetails().getNumberOfValues(), "") : "");
+     }
+ 
+     public String getTotalUpdateTime() {
+       return (getIndexStatisticsDetails() != null ? StringUtils.valueOf(getIndexStatisticsDetails().getTotalUpdateTime(), "") : "");
+     }
+ 
+     public String getTotalUses() {
+       return (getIndexStatisticsDetails() != null ? StringUtils.valueOf(getIndexStatisticsDetails().getTotalUses(), "") : "");
+     }
+   }
+ 
+ }


[34/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommands.java
index 0000000,dc9f5de..30cc866
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommands.java
@@@ -1,0 -1,2128 +1,2135 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.io.BufferedInputStream;
+ import java.io.BufferedReader;
+ import java.io.ByteArrayInputStream;
+ import java.io.File;
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.io.OutputStream;
+ import java.io.PrintWriter;
+ import java.sql.Time;
+ import java.text.MessageFormat;
+ import java.text.ParseException;
+ import java.text.SimpleDateFormat;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collection;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Map.Entry;
+ import java.util.Set;
+ import java.util.StringTokenizer;
+ import java.util.concurrent.Callable;
+ import java.util.concurrent.ExecutionException;
+ import java.util.concurrent.ExecutorService;
+ import java.util.concurrent.Executors;
+ import java.util.concurrent.Future;
+ import java.util.concurrent.TimeUnit;
+ import java.util.concurrent.TimeoutException;
+ import java.util.zip.DataFormatException;
+ import java.util.zip.GZIPInputStream;
+ 
+ import javax.management.ObjectName;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.LogWriter;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.execute.Execution;
+ import com.gemstone.gemfire.cache.execute.Function;
+ import com.gemstone.gemfire.cache.execute.FunctionException;
+ import com.gemstone.gemfire.cache.execute.FunctionService;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
+ import com.gemstone.gemfire.distributed.internal.deadlock.DeadlockDetector;
+ import com.gemstone.gemfire.distributed.internal.deadlock.Dependency;
+ import com.gemstone.gemfire.distributed.internal.deadlock.DependencyGraph;
+ import com.gemstone.gemfire.distributed.internal.deadlock.GemFireDeadlockDetector;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.internal.logging.InternalLogWriter;
+ import com.gemstone.gemfire.internal.logging.LogWriterImpl;
+ import com.gemstone.gemfire.management.CacheServerMXBean;
+ import com.gemstone.gemfire.management.DistributedRegionMXBean;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
+ import com.gemstone.gemfire.management.JVMMetrics;
+ import com.gemstone.gemfire.management.ManagementService;
+ import com.gemstone.gemfire.management.MemberMXBean;
+ import com.gemstone.gemfire.management.RegionMXBean;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.ManagementConstants;
+ import com.gemstone.gemfire.management.internal.SystemManagementService;
+ import com.gemstone.gemfire.management.internal.cli.AbstractCliAroundInterceptor;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil.DeflaterInflaterData;
+ import com.gemstone.gemfire.management.internal.cli.GfshParseResult;
+ import com.gemstone.gemfire.management.internal.cli.GfshParser;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.domain.StackTracesPerMember;
+ import com.gemstone.gemfire.management.internal.cli.functions.ChangeLogLevelFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.GarbageCollectionFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.GetStackTracesFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.LogFileFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.NetstatFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.NetstatFunction.NetstatFunctionArgument;
+ import com.gemstone.gemfire.management.internal.cli.functions.NetstatFunction.NetstatFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.ShutDownFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.remote.CommandExecutionContext;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData.SectionResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.InfoResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultDataException;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.cli.util.MergeLogs;
+ import com.gemstone.gemfire.management.internal.security.Resource;
+ import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+ import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  *
+  * @author Sourabh Bansod
+  * @author Abhishek Chaudhari
+  * @author Ajay Pande
+  * @since 7.0
+  */
+ public class MiscellaneousCommands implements CommandMarker {
+   public static final String NETSTAT_FILE_REQUIRED_EXTENSION = ".txt";
+   public final static String FORMAT = "yyyy/MM/dd/HH/mm/ss/SSS/z";
+   public final static String ONLY_DATE_FORMAT = "yyyy/MM/dd";
+   public final static String DEFAULT_TIME_OUT = "10";
+ 
+   private final GetStackTracesFunction getStackTracesFunction = new GetStackTracesFunction();
+ 
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+ 
+   
+   public void shutdownNode(final long timeout, final Set<DistributedMember> includeMembers) throws TimeoutException, InterruptedException, ExecutionException {
+     Cache cache = CacheFactory.getAnyInstance();
+     LogWriter logger = cache.getLogger();
+     ExecutorService exec = Executors.newSingleThreadExecutor();
+     try {
+       final Function shutDownFunction = new ShutDownFunction();
+ 
+       logger.info("Gfsh executing shutdown on members " + includeMembers);
+ 
+      
+    
+       Callable<String> shutdownNodes = new Callable<String>() {
+ 
+         @Override
+         public String call() {
+           try {
+             Execution execution = FunctionService.onMembers(includeMembers);
+             execution.execute(shutDownFunction);
+           } catch (FunctionException functionEx) {
+             //Expected Exception as the function is shutting down the target members and the result collector will get member departed exception
+           }
+           return "SUCCESS";
+         }
+ 
+       };
+ 
+       Future<String> result = exec.submit(shutdownNodes);
+       result.get(timeout, TimeUnit.MILLISECONDS);
+ 
+     } catch (TimeoutException te) {
+       logger.error("TimeoutException in shutting down members."+includeMembers);
+       throw te;
+     } catch (InterruptedException e) {
+       logger.error("InterruptedException in shutting down members."+includeMembers);
+       throw e;
+     } catch (ExecutionException e) {
+       logger.error("ExecutionException in shutting down members."+includeMembers);
+       throw e;
+     } finally{
+       exec.shutdownNow();
+     }
+ 
+   }
+ 
+ 
+   @CliCommand(value = CliStrings.SHUTDOWN, help = CliStrings.SHUTDOWN__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_LIFECYCLE },
+       interceptor = "com.gemstone.gemfire.management.internal.cli.commands.MiscellaneousCommands$Interceptor")
 -  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.SHUTDOWN_DS)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.SHUTDOWN)
+   public Result shutdown(
+       @CliOption(key = CliStrings.SHUTDOWN__TIMEOUT, unspecifiedDefaultValue = DEFAULT_TIME_OUT,
+           help = CliStrings.SHUTDOWN__TIMEOUT__HELP) int userSpecifiedTimeout,
+          @CliOption( key = CliStrings.INCLUDE_LOCATORS, unspecifiedDefaultValue="false", 
+          help=CliStrings.INCLUDE_LOCATORS_HELP) boolean shutdownLocators) {
+     try { 
+ 
+       if(userSpecifiedTimeout < Integer.parseInt(DEFAULT_TIME_OUT)){
+         return ResultBuilder.createInfoResult(CliStrings.SHUTDOWN__MSG__IMPROPER_TIMEOUT);
+       }
+       
+       //convert to mili-seconds
+       long timeout = userSpecifiedTimeout * 1000 ;
+       
+       Cache cache = CacheFactory.getAnyInstance();      
+ 
+       int numDataNodes = CliUtil.getAllNormalMembers(cache).size();      
+ 
+       Set<DistributedMember> locators = CliUtil.getAllMembers(cache);
+      
+       Set<DistributedMember> dataNodes = CliUtil.getAllNormalMembers(cache);
+       
+       locators.removeAll(dataNodes);    
+       
+       
+       
+       if(!shutdownLocators && numDataNodes == 0){
+         return ResultBuilder.createInfoResult(CliStrings.SHUTDOWN__MSG__NO_DATA_NODE_FOUND);
+       }
+       
+       GemFireCacheImpl gemFireCache = (GemFireCacheImpl) cache;
+       String managerName = gemFireCache.getJmxManagerAdvisor().getDistributionManager().getId().getId();
+ 
+       final DistributedMember manager = CliUtil.getDistributedMemberByNameOrId(managerName);
+       
+       dataNodes.remove(manager);
+       
+       //shut down all data members excluding this manager if manager is a data node
+       long timeElapsed = shutDownNodeWithTimeOut(timeout, dataNodes);
+       timeout = timeout - timeElapsed;
+ 
+       // shut down locators one by one
+       if (shutdownLocators) {
+         if (manager == null) {
+           return ResultBuilder.createUserErrorResult(CliStrings.SHUTDOWN__MSG__MANAGER_NOT_FOUND);
+         }
+ 
+         // remove current locator as that would get shutdown last
+         if (locators.contains(manager)) {
+           locators.remove(manager);
+         }
+ 
+         for (DistributedMember locator : locators) {
+           Set<DistributedMember> lsSet = new HashSet<DistributedMember>();
+           lsSet.add(locator);
+           long elapsedTime = shutDownNodeWithTimeOut(timeout, lsSet);
+           timeout = timeout - elapsedTime;
+         }
+       }
+ 
+       if(locators.contains(manager) && !shutdownLocators){ // This means manager is a locator and shutdownLocators is false. Hence we should not stop the manager
+         return ResultBuilder.createInfoResult("Shutdown is triggered");
+       }
+       // now shut down this manager
+       Set<DistributedMember> mgrSet = new HashSet<DistributedMember>();
+       mgrSet.add(manager);
+       // No need to check further timeout as this is the last node we will be
+       // shutting down
+       shutDownNodeWithTimeOut(timeout, mgrSet);
+ 
+     } catch (TimeoutException tex) {
+       return ResultBuilder.createInfoResult(CliStrings.SHUTDOWN_TIMEDOUT);
+     } catch (Exception ex) {
+       ex.printStackTrace();
+       return ResultBuilder.createUserErrorResult(ex.getMessage());
+     }
+ 
+     //@TODO. List all the nodes which could be successfully shutdown
+     return ResultBuilder.createInfoResult("Shutdown is triggered");
+ 
+   }
+ 
+   /**
+    * 
+    * @param timeout
+    *          user specified timeout
+    * @param nodesToBeStopped
+    *          list of nodes to be stopped
+    * @return Elapsed time to shutdown the given nodes;
+    * @throws ExecutionException
+    * @throws InterruptedException
+    */
+   private long shutDownNodeWithTimeOut(long timeout, Set<DistributedMember> nodesToBeStopped) throws TimeoutException,
+       InterruptedException, ExecutionException {
+     
+     long shutDownTimeStart = System.currentTimeMillis();
+     shutdownNode(timeout, nodesToBeStopped);
+ 
+     long shutDownTimeEnd = System.currentTimeMillis();
+ 
+     long timeElapsed = shutDownTimeEnd - shutDownTimeStart;
+ 
+     if (timeElapsed > timeout || Boolean.getBoolean("ThrowTimeoutException")) { //The second check for ThrowTimeoutException is a test hook
+       throw new TimeoutException();
+     }
+     return timeElapsed;
+   }
+ 
+   /**
+    * Interceptor used by gfsh to intercept execution of shutdownall.
+    */
+   public static class Interceptor extends AbstractCliAroundInterceptor {
+     @Override
+     public Result preExecution(GfshParseResult parseResult) {
+       
+       // This hook is for testing purpose only.
+       if(Boolean.getBoolean(CliStrings.IGNORE_INTERCEPTORS)){
+         return ResultBuilder
+             .createInfoResult(CliStrings.SHUTDOWN__MSG__SHUTDOWN_ENTIRE_DS);
+       }
+       
+       Response response = readYesNo(CliStrings.SHUTDOWN__MSG__WARN_USER,
+           Response.YES);
+       if (response == Response.NO) {
+         return ResultBuilder
+             .createShellClientAbortOperationResult(CliStrings.SHUTDOWN__MSG__ABORTING_SHUTDOWN);
+       } else {
+         return ResultBuilder
+             .createInfoResult(CliStrings.SHUTDOWN__MSG__SHUTDOWN_ENTIRE_DS);
+       }
+     }
+     @Override
+     public Result postExecution(GfshParseResult parseResult,
+         Result commandResult) {
+       return commandResult;
+     }
+   }
+ 
+   @CliCommand(value = CliStrings.GC, help = CliStrings.GC__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_DEBUG_UTIL })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.GC)
+   public Result gc(
+       @CliOption(key = CliStrings.GC__GROUP, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.GC__GROUP__HELP)
+       String[] groups,
+       @CliOption(key = CliStrings.GC__MEMBER, optionContext = ConverterHint.ALL_MEMBER_IDNAME, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.GC__MEMBER__HELP)
+       String memberId) {
+     Cache cache = CacheFactory.getAnyInstance();
+     Result result = null;
+     CompositeResultData gcResultTable = ResultBuilder
+         .createCompositeResultData();
+     TabularResultData resultTable = gcResultTable.addSection().addTable(
+         "Table1");
+     String headerText = "GC Summary";
+     resultTable.setHeader(headerText);
+     Set<DistributedMember> dsMembers = new HashSet<DistributedMember>();
+     if (memberId != null && memberId.length() > 0) {
+       DistributedMember member = CliUtil
+           .getDistributedMemberByNameOrId(memberId);
+       if (member == null) {
+         return ResultBuilder.createGemFireErrorResult(memberId
+             + CliStrings.GC__MSG__MEMBER_NOT_FOUND);
+       }
+       dsMembers.add(member);
+       result =  executeAndBuildResult(cache, resultTable, dsMembers);
+     } else if (groups != null && groups.length > 0) {
+       for (String group : groups) {
+         dsMembers.addAll(cache.getDistributedSystem().getGroupMembers(group));
+       }
+       result = executeAndBuildResult(cache, resultTable, dsMembers);
+ 
+     } else {
+       // gc on entire cluster
+       //exclude locators
+       dsMembers = CliUtil.getAllNormalMembers(cache);
+       result = executeAndBuildResult(cache, resultTable, dsMembers);
+ 
+     }
+     return result;
+   }
+ 
+   Result executeAndBuildResult(Cache cache, TabularResultData resultTable,
+       Set<DistributedMember> dsMembers) {
+     try {
+       List<?> resultList = null;
+       Function garbageCollectionFunction = new GarbageCollectionFunction();
+       resultList = (List<?>) CliUtil.executeFunction(garbageCollectionFunction, null, dsMembers).getResult();
+ 
+       for (int i = 0; i < resultList.size(); i++) {
+         Object object = resultList.get(i);
+         if (object instanceof Exception) {
+           LogWrapper.getInstance().fine("Exception in GC "+  ((Throwable) object).getMessage(),((Throwable) object));
+          continue;
+         } else if (object instanceof Throwable) {
+           LogWrapper.getInstance().fine("Exception in GC "+  ((Throwable) object).getMessage(),((Throwable) object));
+           continue;
+         }
+ 
+         if(object != null){
+           if (object instanceof String) {
+             // unexpected exception string - cache may be closed or something
+             return ResultBuilder.createUserErrorResult((String)object);
+           } else {
+             Map<String, String> resultMap = (Map<String, String>) object;
+             toTabularResultData(resultTable, (String) resultMap.get("MemberId"),
+                 (String) resultMap.get("HeapSizeBeforeGC"),
+                 (String) resultMap.get("HeapSizeAfterGC"),
+                 (String) resultMap.get("TimeSpentInGC"));
+           }
+         } else {
+           LogWrapper.getInstance().fine("ResultMap was null ");
+         }
+       }
+     } catch (Exception e) {
+       String stack = CliUtil.stackTraceAsString(e);
+       LogWrapper.getInstance().info("GC exception is " + stack);
+       return ResultBuilder.createGemFireErrorResult(e.getMessage() + ": " + stack);
+     }
+     return ResultBuilder.buildResult(resultTable);
+   }
+ 
+   protected void toTabularResultData(TabularResultData table, String memberId,
+       String heapSizeBefore, String heapSizeAfter, String timeTaken) {
+     table.accumulate(CliStrings.GC__MSG__MEMBER_NAME, memberId);
+     table.accumulate(CliStrings.GC__MSG__HEAP_SIZE_BEFORE_GC, heapSizeBefore);
+     table.accumulate(CliStrings.GC__MSG__HEAP_SIZE_AFTER_GC, heapSizeAfter);
+     table.accumulate(CliStrings.GC__MSG__TOTAL_TIME_IN_GC, timeTaken);
+   }
+ 
+ 
+   @CliCommand(value = CliStrings.NETSTAT, help = CliStrings.NETSTAT__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_DEBUG_UTIL })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.NETSTAT)
+   //TODO : Verify the auto-completion for multiple values.
+   public Result netstat(
+       @CliOption(key = CliStrings.NETSTAT__MEMBER,
+                 mandatory = false,
+                 unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                 optionContext = ConverterHint.ALL_MEMBER_IDNAME,
+                 help = CliStrings.NETSTAT__MEMBER__HELP)
+       @CliMetaData (valueSeparator = ",")
+       String[] members,
+       @CliOption(key = CliStrings.NETSTAT__GROUP,
+                  mandatory = false,
+                  unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                  optionContext = ConverterHint.MEMBERGROUP,
+                  help = CliStrings.NETSTAT__GROUP__HELP)
+       String group,
+       @CliOption(key = CliStrings.NETSTAT__FILE,
+                  optionContext = ConverterHint.FILE,
+                  unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                  help = CliStrings.NETSTAT__FILE__HELP)
+       String saveAs,
+       @CliOption(key = CliStrings.NETSTAT__WITHLSOF,
+                 specifiedDefaultValue = "true",
+                 unspecifiedDefaultValue = "false",
+                 help = CliStrings.NETSTAT__WITHLSOF__HELP)
+       boolean withlsof) {
+     Result result = null;
+ 
+     Map<String, DistributedMember> hostMemberMap     = new HashMap<String, DistributedMember>();
+     Map<String, List<String>>      hostMemberListMap = new HashMap<String, List<String>>();
+ 
+     try {
+       if (members != null && members.length > 0 && group != null) {
+         throw new IllegalArgumentException(CliStrings.NETSTAT__MSG__ONLY_ONE_OF_MEMBER_OR_GROUP_SHOULD_BE_SPECIFIED);
+       }
+       StringBuilder resultInfo = new StringBuilder();
+ 
+       // Execute for remote members whose id or name matches
+       InternalDistributedSystem system = InternalDistributedSystem.getConnectedInstance();
+ 
+       if (members != null) {
+         Set<String> notFoundMembers = new HashSet<String>();
+         for (String memberIdOrName : members) {
+           Set<DistributedMember> membersToExecuteOn = CliUtil.getAllMembers(system);
+           boolean memberFound = false;
+           for (DistributedMember distributedMember : membersToExecuteOn) {
+             String memberName = distributedMember.getName();
+             String memberId = distributedMember.getId();
+             if (memberName.equals(memberIdOrName) || memberId.equals(memberIdOrName)) {
+               buildMaps(hostMemberMap, hostMemberListMap, memberIdOrName, distributedMember);
+ 
+               memberFound = true;
+               break;
+             }
+           }
+           if (!memberFound) {
+             notFoundMembers.add(memberIdOrName);
+           }
+         }
+         // if there are not found members, it's probably unknown member or member has departed
+         if (!notFoundMembers.isEmpty()) {
+           throw new IllegalArgumentException(CliStrings.format(CliStrings.NETSTAT__MSG__COULD_NOT_FIND_MEMBERS_0, new Object[] { CliUtil.collectionToString(notFoundMembers, -1) }));
+         }
+       } else {
+         Set<DistributedMember> membersToExecuteOn = null;
+         if (group != null) {
+           membersToExecuteOn = system.getGroupMembers(group);
+         } else {
+           // consider all members
+           membersToExecuteOn = CliUtil.getAllMembers(system);
+         }
+ 
+         for (DistributedMember distributedMember : membersToExecuteOn) {
+           String memberName = distributedMember.getName();
+           String memberId   = distributedMember.getId();
+           String memberIdOrName = memberName != null && !memberName.isEmpty() ? memberName : memberId;
+ 
+           buildMaps(hostMemberMap, hostMemberListMap, memberIdOrName, distributedMember);
+         }
+       }
+ 
+       String lineSeparatorToUse = null;
+       lineSeparatorToUse = CommandExecutionContext.getShellLineSeparator();
+       if (lineSeparatorToUse == null) {
+         lineSeparatorToUse = GfshParser.LINE_SEPARATOR;
+       }
+       NetstatFunctionArgument nfa = new NetstatFunctionArgument(lineSeparatorToUse, withlsof);
+ 
+       if (!hostMemberMap.isEmpty()) {
+         Set<DistributedMember> membersToExecuteOn = new HashSet<DistributedMember>(hostMemberMap.values());
+         ResultCollector<?, ?> netstatResult = CliUtil.executeFunction(NetstatFunction.INSTANCE, nfa, membersToExecuteOn);
+         List<?> resultList = (List<?>) netstatResult.getResult();
+         for (int i = 0; i < resultList.size(); i++) {
+           NetstatFunctionResult netstatFunctionResult = (NetstatFunctionResult) resultList.get(i);
+           DeflaterInflaterData deflaterInflaterData = netstatFunctionResult.getCompressedBytes();
+           try {
+             String remoteHost = netstatFunctionResult.getHost();
+             List<String> membersList = hostMemberListMap.get(remoteHost);
+             resultInfo.append(MessageFormat.format(netstatFunctionResult.getHeaderInfo(), CliUtil.collectionToString(membersList, 120)));
+             DeflaterInflaterData uncompressedBytes = CliUtil.uncompressBytes(deflaterInflaterData.getData(), deflaterInflaterData.getDataLength());
+             resultInfo.append(new String(uncompressedBytes.getData()));
+           } catch (DataFormatException e) {
+             resultInfo.append("Error in some data. Reason : "+e.getMessage());
+           }
+         }
+       }
+ 
+       InfoResultData resultData = ResultBuilder.createInfoResultData();
+       if (saveAs != null && !saveAs.isEmpty()) {
+         String saveToFile = saveAs;
+         if (!saveAs.endsWith(NETSTAT_FILE_REQUIRED_EXTENSION)) {
+           saveToFile = saveAs + NETSTAT_FILE_REQUIRED_EXTENSION;
+         }
+         resultData.addAsFile(saveToFile, resultInfo.toString(), CliStrings.NETSTAT__MSG__SAVED_OUTPUT_IN_0, false); // Note: substitution for {0} will happen on client side.
+       } else {
+         resultData.addLine(resultInfo.toString());
+       }
+       result = ResultBuilder.buildResult(resultData);
+     } catch (IllegalArgumentException e) {
+       LogWrapper.getInstance().info(CliStrings.format(CliStrings.NETSTAT__MSG__ERROR_OCCURRED_WHILE_EXECUTING_NETSTAT_ON_0, new Object[] {Arrays.toString(members)}));
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+     } catch (RuntimeException e) {
+       LogWrapper.getInstance().info(CliStrings.format(CliStrings.NETSTAT__MSG__ERROR_OCCURRED_WHILE_EXECUTING_NETSTAT_ON_0, new Object[] {Arrays.toString(members)}), e);
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.NETSTAT__MSG__ERROR_OCCURRED_WHILE_EXECUTING_NETSTAT_ON_0, new Object[] {Arrays.toString(members)}));
+     } finally {
+       hostMemberMap.clear();
+       hostMemberListMap.clear();
+     }
+     return result;
+   }
+ 
+   private void buildMaps(Map<String, DistributedMember> hostMemberMap,
+       Map<String, List<String>> hostMemberListMap, String memberIdOrName,
+       DistributedMember distributedMember) {
+     String host = distributedMember.getHost();
+ 
+     // Maintain one member for a host - function execution purpose - once only for a host
+     if (!hostMemberMap.containsKey(host)) {
+       hostMemberMap.put(host, distributedMember);
+     }
+ 
+     // Maintain all members for a host - display purpose
+     List<String> list = null;
+     if (!hostMemberListMap.containsKey(host)) {
+       list = new ArrayList<String>();
+       hostMemberListMap.put(host, list);
+     } else {
+       list = hostMemberListMap.get(host);
+     }
+     list.add(memberIdOrName);
+   }
+ 
+   @CliCommand(value = CliStrings.SHOW_DEADLOCK, help = CliStrings.SHOW_DEADLOCK__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = { CliStrings.TOPIC_GEMFIRE_DEBUG_UTIL })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.SHOW_DEADLOCKS)
+   public Result showDeadlock(
+       @CliOption(key = CliStrings.SHOW_DEADLOCK__DEPENDENCIES__FILE,
+       help = CliStrings.SHOW_DEADLOCK__DEPENDENCIES__FILE__HELP,
+       mandatory = true) String filename) {
+ 
+     Result result = null;
+     try {
+       if (!filename.endsWith(".txt")) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.INVALID_FILE_EXTENTION, ".txt"));
+       }
+       Cache cache = CacheFactory.getAnyInstance();
+ 
+       Set<DistributedMember> allMembers = CliUtil.getAllMembers(cache);
+       GemFireDeadlockDetector gfeDeadLockDetector = new GemFireDeadlockDetector(allMembers);
+       DependencyGraph dependencyGraph = gfeDeadLockDetector.find();
+       Collection<Dependency> deadlock = dependencyGraph.findCycle();
+       DependencyGraph deepest = null;
+       if (deadlock == null) {
+         deepest = dependencyGraph.findLongestCallChain();
+         if (deepest != null) {
+           deadlock = deepest.getEdges();
+         }
+       }
+       Set<Dependency> dependencies = (Set<Dependency>) dependencyGraph.getEdges();
+ 
+       InfoResultData resultData = ResultBuilder.createInfoResultData();
+ 
+       if (deadlock != null) {
+         if (deepest != null) {
+           resultData.addLine(CliStrings.SHOW_DEADLOCK__DEEPEST_FOUND);
+         } else {
+           resultData.addLine(CliStrings.SHOW_DEADLOCK__DEADLOCK__DETECTED);
+         }
+         resultData.addLine(DeadlockDetector.prettyFormat(deadlock));
+       } else {
+         resultData.addLine(CliStrings.SHOW_DEADLOCK__NO__DEADLOCK);
+       }
+       resultData.addAsFile(filename, DeadlockDetector.prettyFormat(dependencies),
+           MessageFormat.format(CliStrings.SHOW_DEADLOCK__DEPENDENCIES__REVIEW,filename), false);
+       result = ResultBuilder.buildResult(resultData);
+ 
+     } catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.SHOW_DEADLOCK__ERROR + " : " + e.getMessage());
+     }
+     return result;
+   }
+ 
+   @CliCommand(value = CliStrings.SHOW_LOG, help = CliStrings.SHOW_LOG_HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = { CliStrings.TOPIC_GEMFIRE_DEBUG_UTIL })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.SHOW_LOG)
+   public Result showLog(
+       @CliOption(key = CliStrings.SHOW_LOG_MEMBER, optionContext = ConverterHint.ALL_MEMBER_IDNAME, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.SHOW_LOG_MEMBER_HELP, mandatory = true) String memberNameOrId,
+       @CliOption(key = CliStrings.SHOW_LOG_LINE_NUM, unspecifiedDefaultValue = "0", help = CliStrings.SHOW_LOG_LINE_NUM_HELP, mandatory = false) int numberOfLines) {
+     Result result = null;
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       SystemManagementService service = (SystemManagementService)ManagementService
+           .getExistingManagementService(cache);
+       MemberMXBean bean = null;
+       DistributedMember memberToBeInvoked = CliUtil
+           .getDistributedMemberByNameOrId(memberNameOrId);
+       if (memberToBeInvoked != null) {
+         String memberId = memberToBeInvoked.getId();
+ 
+         if (cache.getDistributedSystem().getDistributedMember().getId().equals(
+             memberId)) {
+           bean = service.getMemberMXBean();
+         } else {
+           ObjectName objectName = service.getMemberMBeanName(memberToBeInvoked);
+           bean = service.getMBeanProxy(objectName, MemberMXBean.class);
+         }
+ 
+         if (numberOfLines > ManagementConstants.MAX_SHOW_LOG_LINES) {
+           numberOfLines = ManagementConstants.MAX_SHOW_LOG_LINES;
+         }
+         if (numberOfLines == 0 || numberOfLines < 0) {
+           numberOfLines = ManagementConstants.DEFAULT_SHOW_LOG_LINES;
+         }
+         InfoResultData resultData = ResultBuilder.createInfoResultData();
+         if (bean != null) {
+           String log = bean.showLog(numberOfLines);
+           if (log != null) {
+             resultData.addLine(log);
+           } else {
+             resultData.addLine(CliStrings.SHOW_LOG_NO_LOG);
+           }
+         } else {
+           ErrorResultData errorResultData = ResultBuilder
+               .createErrorResultData().setErrorCode(
+                   ResultBuilder.ERRORCODE_DEFAULT).addLine(
+                   memberNameOrId + CliStrings.SHOW_LOG_MSG_MEMBER_NOT_FOUND);
+           return (ResultBuilder.buildResult(errorResultData));
+ 
+         }
+ 
+         result = ResultBuilder.buildResult(resultData);
+       } else {
+         ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
+             .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(
+                 memberNameOrId + CliStrings.SHOW_LOG_MSG_MEMBER_NOT_FOUND);
+         return (ResultBuilder.buildResult(errorResultData));
+ 
+       }
+ 
+     } catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.SHOW_LOG_ERROR
+           + CliUtil.stackTraceAsString(e));
+     }
+     return result;
+   }
+ 
+   Result exportLogsPreprocessing(String dirName, String[] groups,
+       String memberId, String logLevel, boolean onlyLogLevel, boolean mergeLog,
+       String start, String end, int numOfLogFilesForTesting) {
+     Result result = null;
+     try {
+       LogWrapper.getInstance().fine("Exporting logs");
+       Cache cache = CacheFactory.getAnyInstance();
+       Set<DistributedMember> dsMembers = new HashSet<DistributedMember>();
+       Time startTime = null, endTime = null;
+ 
+       if (logLevel == null || logLevel.length() == 0) {
+         // set default log level
+         logLevel = LogWriterImpl.levelToString(InternalLogWriter.INFO_LEVEL);
+       }
+       if (start != null && end == null) {
+         startTime = parseDate(start);
+         endTime = new Time(System.currentTimeMillis());
+       }
+ 
+       if (end != null && start == null) {
+         endTime = parseDate(end);
+         startTime = new Time(0);
+       }
+       if (start != null && end != null) {
+         startTime = parseDate(start);
+         endTime = parseDate(end);
+         if (endTime.getTime() - startTime.getTime() <= 0) {
+           result = ResultBuilder
+               .createUserErrorResult(CliStrings.EXPORT_LOGS__MSG__INVALID_TIMERANGE);
+         }
+       }
+       if (end == null && start == null) {
+         // set default time range as 1 day.
+         endTime = new Time(System.currentTimeMillis());
+         startTime = new Time(endTime.getTime() - 24 * 60 * 60 * 1000);
+       }
+       LogWrapper.getInstance().fine(
+           "Exporting logs startTime=" + startTime.toGMTString() + " "
+               + startTime.toLocaleString());
+       LogWrapper.getInstance().fine(
+           "Exporting logs endTime=" + endTime.toGMTString() + " "
+               + endTime.toLocaleString());
+       if (groups != null && memberId != null) {
+         result = ResultBuilder
+             .createUserErrorResult(CliStrings.EXPORT_LOGS__MSG__SPECIFY_ONE_OF_OPTION);
+       } else if (groups != null && groups.length > 0) {
+         for (String group : groups) {
+           Set<DistributedMember> groupMembers = cache.getDistributedSystem()
+               .getGroupMembers(group);
+           if (groupMembers != null && groupMembers.size() > 0) {
+             dsMembers.addAll(groupMembers);
+           }
+         }
+         if (dsMembers.size() == 0) {
+           result = ResultBuilder
+               .createUserErrorResult(CliStrings.EXPORT_LOGS__MSG__NO_GROUPMEMBER_FOUND);
+         }
+         result = export(cache, dsMembers, dirName, logLevel,
+             onlyLogLevel ? "true" : "false", mergeLog, startTime, endTime, numOfLogFilesForTesting);
+       } else if (memberId != null) {
+         DistributedMember member = CliUtil
+             .getDistributedMemberByNameOrId(memberId);
+         if (member == null) {
+           result = ResultBuilder.createUserErrorResult(CliStrings.format(
+               CliStrings.EXPORT_LOGS__MSG__INVALID_MEMBERID, memberId));
+         }
+         dsMembers.add(member);
+         result = export(cache, dsMembers, dirName, logLevel,
+             onlyLogLevel ? "true" : "false", mergeLog, startTime, endTime, numOfLogFilesForTesting);
+       } else {
+         // run in entire DS members and get all including locators
+         dsMembers.addAll(CliUtil.getAllMembers(cache));
+         result = export(cache, dsMembers, dirName, logLevel,
+             onlyLogLevel ? "true" : "false", mergeLog, startTime, endTime, numOfLogFilesForTesting);
+       }
+     } catch (ParseException ex) {
+       LogWrapper.getInstance().fine(ex.getMessage());
+       result = ResultBuilder.createUserErrorResult(ex.getMessage());
+     } catch (Exception ex) {
+       LogWrapper.getInstance().fine(ex.getMessage());
+       result = ResultBuilder.createUserErrorResult(ex.getMessage());
+     }
+     return result;
+   }
+   @CliCommand(value = CliStrings.EXPORT_LOGS, help = CliStrings.EXPORT_LOGS__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = { CliStrings.TOPIC_GEMFIRE_SERVER, CliStrings.TOPIC_GEMFIRE_DEBUG_UTIL })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.EXPORT_LOGS)
+   public Result exportLogs(
+       @CliOption(key = CliStrings.EXPORT_LOGS__DIR,
+           help = CliStrings.EXPORT_LOGS__DIR__HELP, mandatory=true) String dirName,
+       @CliOption(key = CliStrings.EXPORT_LOGS__GROUP,
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+           optionContext = ConverterHint.MEMBERGROUP,
+           help = CliStrings.EXPORT_LOGS__GROUP__HELP) String[] groups,
+       @CliOption(key = CliStrings.EXPORT_LOGS__MEMBER,
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+           optionContext = ConverterHint.ALL_MEMBER_IDNAME,
+           help = CliStrings.EXPORT_LOGS__MEMBER__HELP) String memberId,
+       @CliOption(key = CliStrings.EXPORT_LOGS__LOGLEVEL,
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+           optionContext = ConverterHint.LOG_LEVEL,
+           help = CliStrings.EXPORT_LOGS__LOGLEVEL__HELP) String logLevel,
+       @CliOption(key = CliStrings.EXPORT_LOGS__UPTO_LOGLEVEL,
+           unspecifiedDefaultValue = "false", help = CliStrings.EXPORT_LOGS__UPTO_LOGLEVEL__HELP) boolean onlyLogLevel,
+       @CliOption(key = CliStrings.EXPORT_LOGS__MERGELOG,
+           unspecifiedDefaultValue = "false", help = CliStrings.EXPORT_LOGS__MERGELOG__HELP) boolean mergeLog,
+       @CliOption(key = CliStrings.EXPORT_LOGS__STARTTIME,
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.EXPORT_LOGS__STARTTIME__HELP) String start,
+       @CliOption(key = CliStrings.EXPORT_LOGS__ENDTIME,
+           unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.EXPORT_LOGS__ENDTIME__HELP) String end) {
+     Result result = null;
+     try {
+       result =  exportLogsPreprocessing(  dirName,   groups,   memberId, logLevel,  onlyLogLevel, mergeLog, start,  end, 0 );
+     } catch (Exception ex) {
+       LogWrapper.getInstance().fine(ex.getMessage());
+       result= ResultBuilder.createUserErrorResult(ex.getMessage()) ;
+     }
+     LogWrapper.getInstance().fine("Exporting logs returning =" + result );
+     return result;
+   }
+ 
+   Time parseDate(String dateString) throws ParseException{
+     Time time = null;
+     try{
+       SimpleDateFormat df = new SimpleDateFormat(MiscellaneousCommands.FORMAT);
+       time = new Time(df.parse(dateString).getTime());
+     }catch(Exception e){
+       SimpleDateFormat df = new SimpleDateFormat(MiscellaneousCommands.ONLY_DATE_FORMAT);
+       time = new Time(df.parse(dateString).getTime());
+     }
+     return time;
+   }
+ 
+   Result export(Cache cache, Set<DistributedMember> dsMembers, String dirName,
+       String logLevel, String onlyLogLevel, boolean mergeLog, Time startTime, Time endTime, int numOfLogFilesForTesting) {
+     LogWrapper.getInstance().fine("Exporting logs in export membersize = " + dsMembers.size() + " dirname="+dirName + " logLevel="+logLevel
+         +" onlyLogLevel="+onlyLogLevel + " mergeLog="+mergeLog +" startTime="+startTime.toGMTString() + "endTime="+endTime.toGMTString());
+     Function function = new LogFileFunction();
+     FunctionService.registerFunction(function);
+     try {
+       List<?> resultList = null;
+ 
+       List<String> logsToMerge = new ArrayList<String>();
+ 
+       Iterator<DistributedMember> it = dsMembers.iterator();
+       Object[] args = new Object[6];
+       args[0] = dirName;
+       args[1] = logLevel;
+       args[2] = onlyLogLevel;
+       args[3] = startTime.getTime();
+       args[4] = endTime.getTime();
+       args[5] = numOfLogFilesForTesting;
+ 
+       while (it.hasNext()) {
+         boolean toContinueForRestOfmembers = false;
+         DistributedMember member = it.next();
+         LogWrapper.getInstance().fine("Exporting logs copy the logs for member="+member.getId());
+         try{
+         resultList = (ArrayList<?>) CliUtil.executeFunction(function, args,
+             member).getResult();
+         }catch(Exception ex){
+           LogWrapper.getInstance().fine(CliStrings.format(CliStrings.EXPORT_LOGS__MSG__FAILED_TO_EXPORT_LOG_FILES_FOR_MEMBER_0,
+               member.getId()),ex);
+           //try for other members
+           continue;
+         }
+ 
+         if (resultList != null && !resultList.isEmpty()) {
+           for (int i = 0; i < resultList.size(); i++) {
+             Object object = resultList.get(i);
+             if (object instanceof Exception) {
+               ResultBuilder
+                   .createGemFireErrorResult(CliStrings
+                       .format(
+                           CliStrings.EXPORT_LOGS__MSG__FAILED_TO_EXPORT_LOG_FILES_FOR_MEMBER_0,
+                           member.getId()));
+               LogWrapper.getInstance().fine("Exporting logs for member="+member.getId() + " exception="+ ((Throwable) object).getMessage(),((Throwable) object));
+               toContinueForRestOfmembers = true;
+               break;
+             } else if (object instanceof Throwable) {
+               ResultBuilder
+                   .createGemFireErrorResult(CliStrings
+                       .format(
+                           CliStrings.EXPORT_LOGS__MSG__FAILED_TO_EXPORT_LOG_FILES_FOR_MEMBER_0,
+                           member.getId()));
+ 
+               Throwable th = (Throwable) object;
+               LogWrapper.getInstance().fine(CliUtil.stackTraceAsString((th)));
+               LogWrapper.getInstance().fine("Exporting logs for member="+member.getId() + " exception="+ ((Throwable) object).getMessage(),((Throwable) object) );
+               toContinueForRestOfmembers = true;
+               break;
+             }
+           }
+         }else{
+           LogWrapper.getInstance().fine("Exporting logs for member="+member.getId() +" resultList is either null or empty") ;
+           continue;
+         }
+ 
+         if(toContinueForRestOfmembers == true){
+           LogWrapper.getInstance().fine("Exporting logs for member="+member.getId() + " toContinueForRestOfmembers="+ toContinueForRestOfmembers);
+           //proceed for rest of the member
+           continue;
+         }
+ 
+         String rstList = (String) resultList.get(0);
+         LogWrapper.getInstance().fine("for member="+member.getId()+"Successfully exported to directory="+dirName+ " rstList="+rstList);
+         if (rstList== null || rstList.length() == 0) {
+           ResultBuilder.createGemFireErrorResult(CliStrings.format
+               (CliStrings.EXPORT_LOGS__MSG__FAILED_TO_EXPORT_LOG_FILES_FOR_MEMBER_0,
+               member.getId()));
+           LogWrapper.getInstance().fine("for member="+member.getId()+"rstList is null");
+           continue;
+         } else if (rstList.contains("does not exist or cannot be created")) {
+           LogWrapper.getInstance().fine("for member="+member.getId()+" does not exist or cannot be created");
+           return ResultBuilder.createInfoResult(CliStrings.format(
+               CliStrings.EXPORT_LOGS__MSG__TARGET_DIR_CANNOT_BE_CREATED,
+               dirName));
+         } else if (rstList
+             .contains(LocalizedStrings.InternalDistributedSystem_THIS_CONNECTION_TO_A_DISTRIBUTED_SYSTEM_HAS_BEEN_DISCONNECTED
+                 .toLocalizedString())) {
+           LogWrapper.getInstance().fine("for member="+member.getId()+LocalizedStrings.InternalDistributedSystem_THIS_CONNECTION_TO_A_DISTRIBUTED_SYSTEM_HAS_BEEN_DISCONNECTED
+               .toLocalizedString());
+           //proceed for rest of the members
+           continue;
+         }
+ 
+         //maintain list of log files to merge only when merge option is true.
+         if (mergeLog == true){
+           StringTokenizer st = new StringTokenizer(rstList, ";");
+           while (st.hasMoreTokens()) {
+             logsToMerge.add(st.nextToken());
+           }
+         }
+       }
+       //merge log files
+       if (mergeLog == true){
+         LogWrapper.getInstance().fine("Successfully exported to directory="+dirName+ " and now merging logsToMerge="+logsToMerge.size());
+         mergeLogs(logsToMerge);
+         return ResultBuilder.createInfoResult("Successfully exported and merged in directory "+dirName);
+       }
+       LogWrapper.getInstance().fine("Successfully exported to directory without merging"+dirName);
+       return ResultBuilder.createInfoResult("Successfully exported to directory "+dirName);
+     } catch (Exception ex) {
+       LogWrapper.getInstance().info(ex.getMessage(),ex);
+       return ResultBuilder.createUserErrorResult(CliStrings.EXPORT_LOGS__MSG__FUNCTION_EXCEPTION + ((LogFileFunction)function).getId() ) ;
+     }
+   }
+ 
+   Result mergeLogs(List<String> logsToMerge) {
+     //create a new process for merging
+     LogWrapper.getInstance().fine("Exporting logs merging logs" + logsToMerge.size());
+     if (logsToMerge.size() > 1){
+       List<String> commandList = new ArrayList<String>();
+       commandList.add(System.getProperty("java.home") + File.separatorChar
+           + "bin" + File.separatorChar + "java");
+       commandList.add("-classpath");
+       commandList.add(System.getProperty("java.class.path", "."));
+       commandList.add(MergeLogs.class.getName());
+ 
+       commandList.add(logsToMerge.get(0).substring(0,logsToMerge.get(0).lastIndexOf(File.separator) + 1));
+ 
+       ProcessBuilder procBuilder = new ProcessBuilder(commandList);
+       StringBuilder output = new StringBuilder();
+       String errorString = new String();
+       try {
+         LogWrapper.getInstance().fine("Exporting logs now merging logs");
+         Process mergeProcess = procBuilder.redirectErrorStream(true)
+             .start();
+ 
+         mergeProcess.waitFor();
+ 
+         InputStream inputStream = mergeProcess.getInputStream();
+         BufferedReader br = new BufferedReader(new InputStreamReader(
+             inputStream));
+         String line = null;
+ 
+         while ((line = br.readLine()) != null) {
+           output.append(line).append(GfshParser.LINE_SEPARATOR);
+         }
+         mergeProcess.destroy();
+       } catch (Exception e) {
+         LogWrapper.getInstance().fine(e.getMessage());
+         return ResultBuilder.createUserErrorResult(CliStrings.EXPORT_LOGS__MSG__FUNCTION_EXCEPTION + "Could not merge" ) ;
+       } finally {
+         if (errorString != null) {
+           output.append(errorString).append(GfshParser.LINE_SEPARATOR);
+           LogWrapper.getInstance().fine("Exporting logs after merging logs "+output);
+         }
+       }
+       if (output.toString().contains("Sucessfully merged logs")){
+         LogWrapper.getInstance().fine("Exporting logs Sucessfully merged logs");
+         return ResultBuilder.createInfoResult("Successfully merged");
+       }else{
+         LogWrapper.getInstance().fine("Could not merge");
+         return ResultBuilder.createUserErrorResult(CliStrings.EXPORT_LOGS__MSG__FUNCTION_EXCEPTION + "Could not merge") ;
+       }
+     }
+     return ResultBuilder.createInfoResult("Only one log file, nothing to merge");
+   }
+ 
+   /****
+    * Current implementation supports writing it to a file and returning the location of the file
+    *
+    * @param memberNameOrId
+    * @return Stack Trace
+    */
+   @CliCommand(value = CliStrings.EXPORT_STACKTRACE, help = CliStrings.EXPORT_STACKTRACE__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = { CliStrings.TOPIC_GEMFIRE_DEBUG_UTIL })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.EXPORT_STACKTRACE)
+   public Result exportStackTrace(
+       @CliOption(key = CliStrings.EXPORT_STACKTRACE__MEMBER,
+       optionContext = ConverterHint.ALL_MEMBER_IDNAME,
+       help = CliStrings.EXPORT_STACKTRACE__HELP) String memberNameOrId,
+ 
+       @CliOption(key = CliStrings.EXPORT_STACKTRACE__GROUP,
+       optionContext = ConverterHint.ALL_MEMBER_IDNAME,
+       help=CliStrings.EXPORT_STACKTRACE__GROUP) String group,
+ 
+       @CliOption(key = CliStrings.EXPORT_STACKTRACE__FILE,
+       mandatory = true,
+       help = CliStrings.EXPORT_STACKTRACE__FILE__HELP) String fileName) {
+ 
+     Result result = null;
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+       GemFireCacheImpl gfeCacheImpl = (GemFireCacheImpl) cache;
+       InternalDistributedSystem ads = gfeCacheImpl.getSystem();
+ 
+       InfoResultData resultData = ResultBuilder.createInfoResultData();
+ 
+       if (!fileName.endsWith(".txt")) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.INVALID_FILE_EXTENTION, ".txt"));
+       }
+ 
+       Map<String, byte[]> dumps = new HashMap<String, byte[]>();
+       Set<DistributedMember> targetMembers = null;
+ 
+       if ((group == null || group.isEmpty()) && (memberNameOrId == null || memberNameOrId.isEmpty())) {
+         targetMembers = CliUtil.getAllMembers(cache);
+       } else {
+         targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrId);
+       }
+ 
+       ResultCollector<?, ?> rc = CliUtil.executeFunction(getStackTracesFunction, null, targetMembers);
+       ArrayList<Object> resultList = (ArrayList<Object>) rc.getResult();
+ 
+       for (Object resultObj : resultList) {
+         if (resultObj instanceof StackTracesPerMember) {
+           StackTracesPerMember stackTracePerMember = (StackTracesPerMember) resultObj;
+           dumps.put(stackTracePerMember.getMemberNameOrId(), stackTracePerMember.getStackTraces());
+         }
+       }
+ 
+       String filePath = writeStacksToFile(dumps, fileName);
+       resultData.addLine(CliStrings.format(CliStrings.EXPORT_STACKTRACE__SUCCESS, filePath));
+       resultData.addLine(CliStrings.EXPORT_STACKTRACE__HOST + ads.getDistributedMember().getHost());
+ 
+       result = ResultBuilder.buildResult(resultData);
+     } catch (CommandResultException crex) {
+       return crex.getResult();
+     }
+     catch (Exception ex) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.EXPORT_STACKTRACE__ERROR + ex.getMessage());
+     }
+     return result;
+   }
+ 
+   /***
+    * Writes the Stack traces member-wise to a text file
+    * @param dumps - Map containing key : member , value : zipped stack traces
+    * @param fileName - Name of the file to which the stack-traces are written to
+    * @return Canonical path of the file which contains the stack-traces
+    * @throws IOException
+    */
+   private String writeStacksToFile(Map<String, byte[]> dumps, String fileName) throws IOException {
+ 
+     String filePath = null;
+     OutputStream os = null;
+     PrintWriter ps = null;
+     File outputFile = null;
+ 
+     try {
+       outputFile = new File(fileName);
+       os = new FileOutputStream(outputFile);
+       ps = new PrintWriter(os);
+ 
+       for (Map.Entry<String, byte[]> entry: dumps.entrySet()) {
+         ps.append("*** Stack-trace for member " + entry.getKey() +" ***");
+         ps.flush();
+         GZIPInputStream zipIn = new GZIPInputStream(new ByteArrayInputStream(entry.getValue()));
+         BufferedInputStream bin = new BufferedInputStream(zipIn);
+         byte[] buffer = new byte[10000];
+         int count;
+         while ((count = bin.read(buffer)) != -1) {
+           os.write(buffer, 0, count);
+         }
+         ps.append('\n');
+       }
+       ps.flush();
+       filePath = outputFile.getCanonicalPath();
+     }  finally {
+       os.close();
+     }
+ 
+     return filePath;
+   }
+ 
+   @CliCommand(value = CliStrings.SHOW_METRICS, help = CliStrings.SHOW_METRICS__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = { CliStrings.TOPIC_GEMFIRE_STATISTICS })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.SHOW_METRICS)
+   public Result showMetrics(
+       @CliOption(key = { CliStrings.SHOW_METRICS__MEMBER }, optionContext = ConverterHint.ALL_MEMBER_IDNAME, help = CliStrings.SHOW_METRICS__MEMBER__HELP) String memberNameOrId,
+       @CliOption(key = { CliStrings.SHOW_METRICS__REGION }, optionContext = ConverterHint.REGIONPATH, help = CliStrings.SHOW_METRICS__REGION__HELP) String regionName,
+       @CliOption(key = { CliStrings.SHOW_METRICS__FILE}, help = CliStrings.SHOW_METRICS__FILE__HELP) String export_to_report_to,
+       @CliOption(key = { CliStrings.SHOW_METRICS__CACHESERVER__PORT}, help = CliStrings.SHOW_METRICS__CACHESERVER__PORT__HELP) String cacheServerPortString,
+       @CliOption(key = { CliStrings.SHOW_METRICS__CATEGORY} , help = CliStrings.SHOW_METRICS__CATEGORY__HELP) @CliMetaData (valueSeparator = ",") String[] categories ) {
+ 
+     Result result = null;
+     try {
+ 
+       if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
+         if (!export_to_report_to.endsWith(".csv")) {
+           return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.INVALID_FILE_EXTENTION, ".csv"));
+         }
+       }
+       if (regionName != null && !regionName.isEmpty()) {
+ 
+         if (!com.gemstone.gemfire.internal.lang.StringUtils.isBlank(cacheServerPortString)) {
+           return ResultBuilder.createUserErrorResult(CliStrings.SHOW_METRICS__CANNOT__USE__CACHESERVERPORT);
+         }
+ 
+         //MBean names contain the forward slash
+         if (!regionName.startsWith("/")) {
+           regionName = "/" + regionName;
+         }
+ 
+         if (memberNameOrId == null || memberNameOrId.isEmpty()) {
+           result = ResultBuilder.buildResult(getDistributedRegionMetrics(regionName, export_to_report_to, categories));
+         } else {
+           DistributedMember member = CliUtil.getDistributedMemberByNameOrId(memberNameOrId);
+ 
+           if (member != null) {
+             result = ResultBuilder.buildResult(getRegionMetricsFromMember(regionName, member, export_to_report_to, categories));
+           } else {
+             ErrorResultData erd = ResultBuilder.createErrorResultData();
+             erd.addLine(CliStrings.format(CliStrings.MEMBER_NOT_FOUND_ERROR_MESSAGE, memberNameOrId));
+             result = ResultBuilder.buildResult(erd);
+           }
+         }
+       } else if (memberNameOrId != null && !memberNameOrId.isEmpty()) {
+ 
+         DistributedMember member = CliUtil.getDistributedMemberByNameOrId(memberNameOrId);
+ 
+         if (member != null) {
+           int cacheServerPort = -1;
+           if (cacheServerPortString != null && !cacheServerPortString.isEmpty()) {
+             try {
+               cacheServerPort = Integer.parseInt(cacheServerPortString);
+             } catch (NumberFormatException nfe) {
+               return ResultBuilder.createUserErrorResult("Invalid port");
+             }
+           }
+           result = ResultBuilder.buildResult(getMemberMetrics(member, export_to_report_to, categories, cacheServerPort));
+         } else {
+           ErrorResultData erd = ResultBuilder.createErrorResultData();
+           erd.addLine(CliStrings.format(CliStrings.MEMBER_NOT_FOUND_ERROR_MESSAGE, memberNameOrId));
+           result = ResultBuilder.buildResult(erd);
+         }
+       } else {
+ 
+         if (!com.gemstone.gemfire.internal.lang.StringUtils.isBlank(cacheServerPortString)) {
+           return ResultBuilder.createUserErrorResult(CliStrings.SHOW_METRICS__CANNOT__USE__CACHESERVERPORT);
+         }
+ 
+         result = ResultBuilder.buildResult(getSystemWideMetrics(export_to_report_to, categories));
+       }
+     } catch (Exception e) {
+       return ResultBuilder.createGemFireErrorResult("#SB" + CliUtil.stackTraceAsString(e));
+     }
+     return result;
+   }
+ 
+   /****
+    * Gets the system wide metrics
+    *
+    * @param export_to_report_to
+    * @return ResultData with required System wide statistics or ErrorResultData
+    *         if DS MBean is not found to gather metrics
+    * @throws Exception
+    */
+   private ResultData getSystemWideMetrics(String export_to_report_to, String[] categoriesArr) throws Exception {
+     final Cache cache = CacheFactory.getAnyInstance();
+     final ManagementService managmentService = ManagementService.getManagementService(cache);
+     DistributedSystemMXBean dsMxBean = managmentService.getDistributedSystemMXBean();
+     StringBuilder csvBuilder = null;
+     if (dsMxBean != null) {
+ 
+       if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
+         csvBuilder = new StringBuilder();
+         csvBuilder.append("Category");
+         csvBuilder.append(',');
+         csvBuilder.append(CliStrings.SHOW_METRICS__METRIC__HEADER);
+         csvBuilder.append(',');
+         csvBuilder.append(CliStrings.SHOW_METRICS__VALUE__HEADER);
+         csvBuilder.append('\n');
+       }
+ 
+ 
+       CompositeResultData crd = ResultBuilder.createCompositeResultData();
+       SectionResultData section =  crd.addSection();
+       TabularResultData metricsTable = section.addTable();
+       Map<String, Boolean> categoriesMap = getSystemMetricsCategories();
+ 
+       if (categoriesArr != null && categoriesArr.length != 0) {
+         Set<String> categories = createSet(categoriesArr);
+         Set<String> checkSet = new HashSet<String>(categoriesMap.keySet());
+         Set<String> userCategories = getSetDifference(categories, checkSet);
+ 
+         //Checking if the categories specified by the user are valid or not
+ 
+         if (userCategories.isEmpty()) {
+           for (String category : checkSet) {
+             categoriesMap.put(category, false);
+           }
+           for (String category : categories) {
+             categoriesMap.put(category.toLowerCase(), true);
+           }
+         } else {
+           StringBuilder sb = new StringBuilder();
+           sb.append("Invalid Categories\n");
+ 
+           for (String category : userCategories) {
+             sb.append(category);
+             sb.append('\n');
+           }
+           return ResultBuilder.createErrorResultData().addLine(sb.toString());
+         }
+       }
+       metricsTable.setHeader("Cluster-wide Metrics");
+ 
+       if (categoriesMap.get("cluster").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "cluster", "totalHeapSize", dsMxBean.getTotalHeapSize(), csvBuilder);
+       }
+ 
+       if (categoriesMap.get("cache").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "cache", "totalRegionEntryCount", dsMxBean.getTotalRegionEntryCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalRegionCount", dsMxBean.getTotalRegionCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalMissCount", dsMxBean.getTotalMissCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalHitCount", dsMxBean.getTotalHitCount(), csvBuilder);
+       }
+ 
+       if (categoriesMap.get("diskstore").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "diskstore", "totalDiskUsage", dsMxBean.getTotalDiskUsage(), csvBuilder); // deadcoded to workaround bug 46397
+         writeToTableAndCsv(metricsTable, ""/*46608*/, "diskReadsRate", dsMxBean.getDiskReadsRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "diskWritesRate", dsMxBean.getDiskWritesRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "flushTimeAvgLatency", dsMxBean.getDiskFlushAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalBackupInProgress", dsMxBean.getTotalBackupInProgress(), csvBuilder);
+       }
+ 
+       if (categoriesMap.get("query").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "query", "activeCQCount", dsMxBean.getActiveCQCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "queryRequestRate", dsMxBean.getQueryRequestRate(), csvBuilder);
+       }
+       if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
+         crd.addAsFile(export_to_report_to, csvBuilder.toString(), "Cluster wide metrics exported to {0}.", false);
+       }
+ 
+       return crd;
+     } else {
+       String errorMessage = CliStrings.format(CliStrings.SHOW_METRICS__ERROR, "Distributed System MBean not found");
+       return ResultBuilder.createErrorResultData().addLine(errorMessage);
+     }
+ 
+   }
+ 
+   /***
+    * Gets the Cluster wide metrics for a given member
+    *
+    * @param distributedMember
+    * @param export_to_report_to
+    * @return ResultData with required Member statistics or ErrorResultData if
+    *         MemberMbean is not found to gather metrics
+    * @throws ResultDataException
+    *           if building result fails
+    */
+   private ResultData getMemberMetrics(DistributedMember distributedMember, String export_to_report_to, String [] categoriesArr, int cacheServerPort) throws ResultDataException {
+     final Cache cache = CacheFactory.getAnyInstance();
+     final SystemManagementService managementService = (SystemManagementService)ManagementService.getManagementService(cache);
+ 
+     ObjectName memberMBeanName = managementService.getMemberMBeanName(distributedMember);
+     MemberMXBean memberMxBean = managementService.getMBeanInstance(memberMBeanName, MemberMXBean.class);
+     ObjectName csMxBeanName = null;
+     CacheServerMXBean csMxBean = null;
+ 
+     if (memberMxBean != null) {
+ 
+       if (cacheServerPort != -1) {
+          csMxBeanName = managementService.getCacheServerMBeanName(cacheServerPort, distributedMember);
+          csMxBean = managementService.getMBeanInstance(csMxBeanName, CacheServerMXBean.class);
+ 
+         if (csMxBean == null) {
+           ErrorResultData erd = ResultBuilder.createErrorResultData();
+           erd.addLine(CliStrings.format(CliStrings.SHOW_METRICS__CACHE__SERVER__NOT__FOUND, cacheServerPort, MBeanJMXAdapter.getMemberNameOrId(distributedMember)));
+           return erd;
+         }
+       }
+ 
+       JVMMetrics jvmMetrics = memberMxBean.showJVMMetrics();
+ 
+       CompositeResultData crd = ResultBuilder.createCompositeResultData();
+       SectionResultData section = crd.addSection();
+       TabularResultData metricsTable = section.addTable();
+       metricsTable.setHeader("Member Metrics");
+       StringBuilder csvBuilder = null;
+ 
+       if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
+         csvBuilder = new StringBuilder();
+         csvBuilder.append("Category");
+         csvBuilder.append(',');
+         csvBuilder.append(CliStrings.SHOW_METRICS__METRIC__HEADER);
+         csvBuilder.append(',');
+         csvBuilder.append(CliStrings.SHOW_METRICS__VALUE__HEADER);
+         csvBuilder.append('\n');
+       }
+ 
+       Map<String, Boolean> categoriesMap = getMemberMetricsCategories();
+ 
+       if (categoriesArr != null && categoriesArr.length != 0) {
+         Set<String> categories = createSet(categoriesArr);
+         Set<String> checkSet = new HashSet<String>(categoriesMap.keySet());
+         Set<String> userCategories = getSetDifference(categories, checkSet);
+ 
+ 
+         //Checking if the categories specified by the user are valid or not
+         if (userCategories.isEmpty()) {
+             for (String category : checkSet) {
+               categoriesMap.put(category, false);
+             }
+             for (String category : categories) {
+               categoriesMap.put(category.toLowerCase(), true);
+             }
+           } else {
+           StringBuilder sb = new StringBuilder();
+           sb.append("Invalid Categories\n");
+ 
+           for (String category : userCategories) {
+             sb.append(category);
+             sb.append('\n');
+           }
+           return ResultBuilder.createErrorResultData().addLine(sb.toString());
+         }
+       }
+ 
+       /****
+        * Member Metrics
+        */
+       //member, jvm, region, serialization, communication, function, transaction, diskstore, lock, eviction, distribution
+       if (categoriesMap.get("member").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "member", "upTime", memberMxBean.getMemberUpTime(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "cpuUsage", memberMxBean.getCpuUsage(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "currentHeapSize", memberMxBean.getCurrentHeapSize(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "maximumHeapSize", memberMxBean.getMaximumHeapSize(), csvBuilder);
+       }
+       /****
+        * JVM Metrics
+        */
+       if (categoriesMap.get("jvm").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "jvm ", "jvmThreads ", jvmMetrics.getTotalThreads(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "fileDescriptorLimit", memberMxBean.getFileDescriptorLimit(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalFileDescriptorOpen", memberMxBean.getTotalFileDescriptorOpen(), csvBuilder);
+       }
+       /***
+       Member wide region metrics
+        */
+       if (categoriesMap.get("region").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "region ", "totalRegionCount ", memberMxBean.getTotalRegionCount(), csvBuilder);
+         String[] regionNames = memberMxBean.listRegions();
+         if (regionNames != null) {
+           for (int i=0 ; i < regionNames.length; i++) {
+             if (i == 0) {
+               writeToTableAndCsv(metricsTable, "", "listOfRegions", regionNames[i].substring(1), csvBuilder);
+             } else {
+               writeToTableAndCsv(metricsTable, "", "", regionNames[i].substring(1), csvBuilder);
+             }
+           }
+         }
+ 
+         String[] rootRegionNames = memberMxBean.getRootRegionNames();
+         if (rootRegionNames != null) {
+           for (int i=0 ; i < rootRegionNames.length; i++) {
+             if (i == 0) {
+               writeToTableAndCsv(metricsTable, "", "rootRegions", rootRegionNames[i], csvBuilder);
+             } else {
+               writeToTableAndCsv(metricsTable, "", "", rootRegionNames[i], csvBuilder);
+             }
+           }
+         }
+         writeToTableAndCsv(metricsTable, "", "totalRegionEntryCount", memberMxBean.getTotalRegionEntryCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalBucketCount", memberMxBean.getTotalBucketCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalPrimaryBucketCount", memberMxBean.getTotalPrimaryBucketCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "getsAvgLatency", memberMxBean.getGetsAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putsAvgLatency", memberMxBean.getPutsAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "createsRate", memberMxBean.getCreatesRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "destroyRate", memberMxBean.getDestroysRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putAllAvgLatency", memberMxBean.getPutAllAvgLatency(), csvBuilder);
+         //Not available from stats. After Stats re-org it will be avaialble
+        // writeToTableAndCsv(metricsTable, "", "getAllAvgLatency", memberMxBean.getGetAllAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalMissCount", memberMxBean.getTotalMissCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalHitCount", memberMxBean.getTotalHitCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "getsRate", memberMxBean.getGetsRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putsRate", memberMxBean.getPutsRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "cacheWriterCallsAvgLatency", memberMxBean.getCacheWriterCallsAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency", memberMxBean.getCacheListenerCallsAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalLoadsCompleted", memberMxBean.getTotalLoadsCompleted(), csvBuilder);
+ 
+       }
+ 
+       /******
+        * SERIALIZATION
+        */
+       if (categoriesMap.get("serialization").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "serialization", "serializationRate", memberMxBean.getSerializationRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "serializationLatency", memberMxBean.getSerializationRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "deserializationRate", memberMxBean.getDeserializationRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "deserializationLatency", memberMxBean.getDeserializationLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "deserializationAvgLatency", memberMxBean.getDeserializationAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "PDXDeserializationAvgLatency", memberMxBean.getPDXDeserializationAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "PDXDeserializationRate", memberMxBean.getPDXDeserializationRate(), csvBuilder);
+       }
+ 
+       /*** Communication Metrics
+        *
+        */
+       if (categoriesMap.get("communication").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "communication", "bytesSentRate", memberMxBean.getBytesSentRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "bytesReceivedRate", memberMxBean.getBytesReceivedRate(), csvBuilder);
+         String [] connectedGatewayReceivers = memberMxBean.listConnectedGatewayReceivers();
+         writeToTableAndCsv(metricsTable, "", "connectedGatewayReceivers", connectedGatewayReceivers, csvBuilder);
+ 
+         String [] connectedGatewaySenders = memberMxBean.listConnectedGatewaySenders();
+         writeToTableAndCsv(metricsTable, "", "connectedGatewaySenders", connectedGatewaySenders, csvBuilder);
+ 
+       }
+ 
+       /***
+        * Member wide function metrics
+        *
+        */
+       if (categoriesMap.get("function").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "function", "numRunningFunctions", memberMxBean.getNumRunningFunctions(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "functionExecutionRate", memberMxBean.getFunctionExecutionRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "numRunningFunctionsHavingResults", memberMxBean.getNumRunningFunctionsHavingResults(), csvBuilder);
+         //Not Avaialble from Stats
+         //writeToTableAndCsv(metricsTable, "", "funcExecutionQueueSize", memberMxBean.getFuncExecutionQueueSize(), csvBuilder);
+       }
+ 
+       /***
+        * totalTransactionsCount
+          currentTransactionalThreadIds
+          transactionCommitsAvgLatency
+          transactionCommittedTotalCount
+          transactionRolledBackTotalCount
+          transactionCommitsRate
+        */
+       if (categoriesMap.get("transaction").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "transaction", "totalTransactionsCount", memberMxBean.getTotalTransactionsCount(), csvBuilder);
+ 
+         writeToTableAndCsv(metricsTable, "", "transactionCommitsAvgLatency", memberMxBean.getTransactionCommitsAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "transactionCommittedTotalCount", memberMxBean.getTransactionCommittedTotalCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "transactionRolledBackTotalCount", memberMxBean.getTransactionRolledBackTotalCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "transactionCommitsRate", memberMxBean.getTransactionCommitsRate(), csvBuilder);
+       }
+       /***
+        * Member wide disk metrics
+        */
+       if (categoriesMap.get("diskstore").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "diskstore", "totalDiskUsage", memberMxBean.getTotalDiskUsage(), csvBuilder); // deadcoded to workaround bug 46397
+         writeToTableAndCsv(metricsTable, ""/*46608*/, "diskReadsRate", memberMxBean.getDiskReadsRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "diskWritesRate", memberMxBean.getDiskWritesRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "flushTimeAvgLatency", memberMxBean.getDiskFlushAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalQueueSize", memberMxBean.getTotalDiskTasksWaiting(), csvBuilder); // deadcoded to workaround bug 46397
+         writeToTableAndCsv(metricsTable, "", "totalBackupInProgress", memberMxBean.getTotalBackupInProgress(), csvBuilder);
+       }
+       /***
+        * Member wide Lock
+        */
+       if (categoriesMap.get("lock").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "lock", "lockWaitsInProgress", memberMxBean.getLockWaitsInProgress(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalLockWaitTime", memberMxBean.getTotalLockWaitTime(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalNumberOfLockService", memberMxBean.getTotalNumberOfLockService(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "requestQueues", memberMxBean.getLockRequestQueues(), csvBuilder);
+       }
+       /****
+        * Eviction
+        */
+       if (categoriesMap.get("eviction").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate", memberMxBean.getLruEvictionRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "lruDestroyRate", memberMxBean.getLruDestroyRate(), csvBuilder);
+       }
+       /***
+        * Distribution
+        */
+       if (categoriesMap.get("distribution").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "distribution", "getInitialImagesInProgress", memberMxBean.getInitialImagesInProgres(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "getInitialImageTime", memberMxBean.getInitialImageTime(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "getInitialImageKeysReceived", memberMxBean.getInitialImageKeysReceived(), csvBuilder);
+       }
+ 
+       /***
+        * OffHeap
+        */
+       if (categoriesMap.get("offheap").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "offheap", "maxMemory", memberMxBean.getOffHeapMaxMemory(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "freeMemory", memberMxBean.getOffHeapFreeMemory(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "usedMemory", memberMxBean.getOffHeapUsedMemory(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "objects", memberMxBean.getOffHeapObjects(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "fragmentation", memberMxBean.getOffHeapFragmentation(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "compactionTime", memberMxBean.getOffHeapCompactionTime(), csvBuilder);
+       }
+ 
+       /***
+        * CacheServer stats
+        */
+       if (csMxBean != null) {
+         writeToTableAndCsv(metricsTable, "cache-server", "clientConnectionCount", csMxBean.getClientConnectionCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "hostnameForClients", csMxBean.getHostNameForClients(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "getRequestAvgLatency", csMxBean.getGetRequestAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putRequestAvgLatency", csMxBean.getPutRequestAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalConnectionsTimedOut", csMxBean.getTotalConnectionsTimedOut(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "threadQueueSize", csMxBean.getPutRequestAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "connectionThreads", csMxBean.getConnectionThreads(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "connectionLoad", csMxBean.getConnectionLoad(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "loadPerConnection", csMxBean.getLoadPerConnection(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "queueLoad", csMxBean.getQueueLoad(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "loadPerQueue", csMxBean.getLoadPerQueue(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "getRequestRate", csMxBean.getGetRequestRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putRequestRate", csMxBean.getPutRequestRate(), csvBuilder);
+ 
+         /*****
+          * Notification
+          */
+         writeToTableAndCsv(metricsTable, "notification", "numClientNotificationRequests", csMxBean.getNumClientNotificationRequests(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "clientNotificationRate", csMxBean.getClientNotificationRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "clientNotificationAvgLatency", csMxBean.getClientNotificationAvgLatency(), csvBuilder);
+ 
+         /***
+          * Query
+          */
+         writeToTableAndCsv(metricsTable, "query", "activeCQCount", csMxBean.getActiveCQCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "query", "queryRequestRate", csMxBean.getQueryRequestRate(), csvBuilder);
+ 
+         writeToTableAndCsv(metricsTable, "", "indexCount", csMxBean.getIndexCount(), csvBuilder);
+ 
+         String [] indexList = csMxBean.getIndexList();
+         writeToTableAndCsv(metricsTable, "", "index list", indexList, csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalIndexMaintenanceTime", csMxBean.getTotalIndexMaintenanceTime(), csvBuilder);
+ 
+       }
+ 
+       if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
+         crd.addAsFile(export_to_report_to, csvBuilder.toString(), "Member metrics exported to {0}.", false);
+       }
+       return crd;
+ 
+     } else {
+       ErrorResultData erd = ResultBuilder.createErrorResultData();
+       String errorMessage = CliStrings.format(CliStrings.SHOW_METRICS__ERROR, "Member MBean for " + MBeanJMXAdapter.getMemberNameOrId(distributedMember) + " not found");
+       return ResultBuilder.createErrorResultData().addLine(errorMessage);
+     }
+   }
+ 
+   /****
+    * Gets the Cluster-wide metrics for a region
+    *
+    * @param regionName
+    * @return ResultData containing the table
+    * @throws ResultDataException
+    *           if building result fails
+    */
+   private ResultData getDistributedRegionMetrics(String regionName, String export_to_report_to, String[] categoriesArr) throws ResultDataException {
+ 
+     final Cache cache = CacheFactory.getAnyInstance();
+     final ManagementService managementService = ManagementService.getManagementService(cache);
+ 
+     DistributedRegionMXBean regionMxBean = managementService.getDistributedRegionMXBean(regionName);
+ 
+     if (regionMxBean != null) {
+       CompositeResultData crd = ResultBuilder.createCompositeResultData();
+       SectionResultData section = crd.addSection();
+       TabularResultData metricsTable = section.addTable();
+       metricsTable.setHeader("Cluster-wide Region Metrics");
+       StringBuilder csvBuilder = null;
+ 
+       if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
+         csvBuilder = new StringBuilder();
+         csvBuilder.append("Category");
+         csvBuilder.append(',');
+         csvBuilder.append(CliStrings.SHOW_METRICS__METRIC__HEADER);
+         csvBuilder.append(',');
+         csvBuilder.append(CliStrings.SHOW_METRICS__VALUE__HEADER);
+         csvBuilder.append('\n');
+       }
+ 
+       Map<String, Boolean> categoriesMap = getSystemRegionMetricsCategories();
+ 
+       if (categoriesArr != null && categoriesArr.length != 0) {
+         Set<String> categories = createSet(categoriesArr);
+     	Set<String> checkSet = new HashSet<String>(categoriesMap.keySet());
+         Set<String> userCategories = getSetDifference(categories, checkSet);
+ 
+         //Checking if the categories specified by the user are valid or not
+         if (userCategories.isEmpty()) {
+           for (String category : checkSet) {
+             categoriesMap.put(category, false);
+           }
+           for (String category : categories) {
+             categoriesMap.put(category.toLowerCase(), true);
+           }
+         } else {
+           StringBuilder sb = new StringBuilder();
+           sb.append("Invalid Categories\n");
+ 
+           for (String category : userCategories) {
+             sb.append(category);
+             sb.append('\n');
+           }
+           return ResultBuilder.createErrorResultData().addLine(sb.toString());
+         }
+       }
+       /***
+        * General System metrics
+        */
+       //cluster, region, partition , diskstore, callback, eviction
+       if (categoriesMap.get("cluster").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "cluster", "member count", regionMxBean.getMemberCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "region entry count", regionMxBean.getSystemRegionEntryCount(), csvBuilder);
+       }
+ 
+       if (categoriesMap.get("region").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "region", "lastModifiedTime", regionMxBean.getLastModifiedTime(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "lastAccessedTime", regionMxBean.getLastAccessedTime(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "missCount", regionMxBean.getMissCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "hitCount", regionMxBean.getHitCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "hitRatio", regionMxBean.getHitRatio(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "getsRate", regionMxBean.getGetsRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putsRate", regionMxBean.getPutsRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "createsRate", regionMxBean.getCreatesRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "destroyRate", regionMxBean.getDestroyRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putAllRate", regionMxBean.getPutAllRate(), csvBuilder);
+ 
+       }
+ 
+       if (categoriesMap.get("partition").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "partition", "putLocalRate", regionMxBean.getPutLocalRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putRemoteRate", regionMxBean.getPutRemoteRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putRemoteLatency", regionMxBean.getPutRemoteLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "putRemoteAvgLatency", regionMxBean.getPutRemoteAvgLatency(), csvBuilder);
+ 
+         writeToTableAndCsv(metricsTable, "", "bucketCount", regionMxBean.getBucketCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "primaryBucketCount", regionMxBean.getPrimaryBucketCount(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "numBucketsWithoutRedundancy", regionMxBean.getNumBucketsWithoutRedundancy(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalBucketSize", regionMxBean.getTotalBucketSize(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "averageBucketSize", regionMxBean.getAvgBucketSize(), csvBuilder);
+       }
+       /*****
+        * Disk store
+        */
+       if (categoriesMap.get("diskstore").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "diskstore", "totalEntriesOnlyOnDisk", regionMxBean.getTotalEntriesOnlyOnDisk(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "diskReadsRate", regionMxBean.getDiskReadsRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "diskWritesRate", regionMxBean.getDiskWritesRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "totalDiskWriteInProgress", regionMxBean.getTotalDiskWritesProgress(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "diskTaskWaiting", regionMxBean.getDiskTaskWaiting(), csvBuilder);
+ 
+       }
+       /*****
+        * LISTENER
+        */
+       if (categoriesMap.get("callback").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "callback", "cacheWriterCallsAvgLatency", regionMxBean.getCacheWriterCallsAvgLatency(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency", regionMxBean.getCacheListenerCallsAvgLatency(), csvBuilder);
+       }
+ 
+       /****
+        * Eviction
+        */
+       if (categoriesMap.get("eviction").booleanValue()) {
+         writeToTableAndCsv(metricsTable, "eviction" , "lruEvictionRate", regionMxBean.getLruEvictionRate(), csvBuilder);
+         writeToTableAndCsv(metricsTable, "" , "lruDestroyRate", regionMxBean.getLruDestroyRate(), csvBuilder);
+       }
+ 
+       if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
+         crd.addAsFile(export_to_report_to, csvBuilder.toString(), "Aggregate Region Metrics exported to {0}.", false);
+       }
+ 
+       return crd;
+     } else {
+       ErrorResultData erd = ResultBuilder.createErrorResultData();
+       String errorMessage = CliStrings.format(CliStrings.SHOW_METRICS__ERROR, "Distributed Region MBean for " + regionName + " not found");
+       erd.addLine(errorMessage);
+       return erd;
+     }
+   }
+ 
+   /***
+    * Gets the metrics of region on a given member
+    *
+    * @param regionName
+    * @param distributedMember
+    * @param export_to_report_to
+    * @return ResultData with required Region statistics or ErrorResultData if
+    *         Region MBean is not found to gather metrics
+    * @throws ResultDataException
+    *           if building result fails
+    */
+   private ResultData getRegionMetricsFromMember(String regionName, DistributedMember distributedMember, String export_to_report_to, String[] categoriesArr) throws ResultDataException {
+ 
+     final Cache cache = CacheFactory.getAnyInstance();
+     final SystemManagementService managementService = (SystemManagementService) ManagementService
+         .getManagementService(cache);
+ 
+     ObjectName regionMBeanName = managementService.getRegionMBeanName(distributedMember, regionName);
+     RegionMXBean regionMxBean = managementService.getMBeanInstance(regionMBeanName, RegionMXBean.class);
+ 
+     if (regionMxBean != null) {
+       CompositeResultData crd = ResultBuilder.createCompositeResultData();
+       SectionResultData section = crd.addSection();
+       TabularResultData metricsTable = section.addTable();
+       metricsTable.setHeader("Metrics for region:" + regionName+ " On Member " + MBeanJMXAdapter.getMemberNameOrId(distributedMember));
+       StringBuilder csvBuilder = null;
+ 
+       if (export_to_report_to != null && !export_to_report_to.isEmpty()) {
+         csvBuilder = new StringBuilder();
+         csvBuilder.append("Category");
+         csvBuilder.append(',');
+         csvBuilder.append(CliStrings.SHOW_METRICS__METRIC__HEADER);
+         csvBuilder.append(',');
+         csvBuilder.append(CliStrings.SHOW_METRICS__VALUE__HEADER);
+         csvBuilder.append('\n');
+       }
+ 
+       /****
+        * Region Metrics
+        */
+       Map<String, Boolean> categoriesMap = getRegionMetricsCategories();
+ 
+       if (categoriesArr != null && categoriesArr.length != 0) {
+         Set<String> categories = createSet(categoriesArr);
+         Set<String> checkSet = new HashSet<String>(categoriesMap.keySet());
+         Set<String> userCategories = getSetDifference(categories, checkSet);
+ 
+         //Checking if the categories specified by the user are valid or not
+         if (userCategories.isEmpty()) {
+           for (String category : checkSet) {
+             categoriesMap.put(category, false);
+           }
+           for (String category : categories) {
+             categoriesMap.put(category.toLowerCase(), true);
+           }
+         } else {
+           StringBuilder sb = new StringBuilder();
+           sb.append("Invalid Categories\n");
+ 
+           for (String category : userCategories) {
+           

<TRUNCATED>


[24/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/AbstractBaseController.java
----------------------------------------------------------------------
diff --cc geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/AbstractBaseController.java
index 0000000,30f6ab2..6e425d6
mode 000000,100644..100644
--- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/AbstractBaseController.java
+++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/AbstractBaseController.java
@@@ -1,0 -1,841 +1,859 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.rest.internal.web.controllers;
+ 
+ import java.io.IOException;
+ import java.io.PrintWriter;
+ import java.io.StringWriter;
+ import java.io.UnsupportedEncodingException;
+ import java.net.URI;
+ import java.net.URLDecoder;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collection;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.concurrent.atomic.AtomicLong;
+ 
+ import javax.annotation.PostConstruct;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.springframework.beans.factory.annotation.Autowired;
+ import org.springframework.http.HttpHeaders;
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.util.Assert;
+ import org.springframework.util.ClassUtils;
+ import org.springframework.util.CollectionUtils;
+ import org.springframework.util.StringUtils;
+ import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
+ 
+ import com.fasterxml.jackson.core.JsonParseException;
+ import com.fasterxml.jackson.core.type.TypeReference;
+ import com.fasterxml.jackson.databind.JsonMappingException;
+ import com.fasterxml.jackson.databind.ObjectMapper;
+ import com.gemstone.gemfire.SerializationException;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheLoaderException;
+ import com.gemstone.gemfire.cache.CacheWriterException;
+ import com.gemstone.gemfire.cache.LowMemoryException;
+ import com.gemstone.gemfire.cache.PartitionedRegionStorageException;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.TimeoutException;
+ import com.gemstone.gemfire.cache.query.QueryService;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.distributed.internal.DistributionManager;
+ import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
+ import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+ import com.gemstone.gemfire.i18n.LogWriterI18n;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.pdx.JSONFormatter;
+ import com.gemstone.gemfire.pdx.JSONFormatterException;
+ import com.gemstone.gemfire.pdx.PdxInstance;
+ import com.gemstone.gemfire.rest.internal.web.controllers.support.JSONTypes;
+ import com.gemstone.gemfire.rest.internal.web.controllers.support.UpdateOp;
+ import com.gemstone.gemfire.rest.internal.web.exception.DataTypeNotSupportedException;
+ import com.gemstone.gemfire.rest.internal.web.exception.GemfireRestException;
+ import com.gemstone.gemfire.rest.internal.web.exception.MalformedJsonException;
+ import com.gemstone.gemfire.rest.internal.web.exception.RegionNotFoundException;
+ import com.gemstone.gemfire.rest.internal.web.exception.ResourceNotFoundException;
++import com.gemstone.gemfire.rest.internal.web.security.RestRequestFilter;
+ import com.gemstone.gemfire.rest.internal.web.util.ArrayUtils;
+ import com.gemstone.gemfire.rest.internal.web.util.IdentifiableUtils;
+ import com.gemstone.gemfire.rest.internal.web.util.JSONUtils;
+ import com.gemstone.gemfire.rest.internal.web.util.NumberUtils;
+ import com.gemstone.gemfire.rest.internal.web.util.ValidationUtils;
+ import org.json.JSONArray;
+ import org.json.JSONException;
+ import org.json.JSONObject;
+ import org.json.JSONTokener;
+ 
+ /**
+  * AbstractBaseController class contains common functionalities required for other controllers. 
+  * @author Nilkanth Patel, John blum.
+  * @since 8.0
+  */
+ 
+ @SuppressWarnings("unused")
+ public abstract class AbstractBaseController {
+   
+   private static final Logger logger = LogService.getLogger();
+   
+   protected static final String NEW_META_DATA_PROPERTY = "@new";
+   protected static final String OLD_META_DATA_PROPERTY = "@old";
+   protected static final String TYPE_META_DATA_PROPERTY = "@type";
+   
+   protected static final String UTF_8 = "UTF-8";
+   protected static final String DEFAULT_ENCODING = UTF_8;
+   private static final AtomicLong ID_SEQUENCE = new AtomicLong(0l);
++  protected static final String AUTH_TOKEN_HEADER = "security-gfrest-authtoken";
+   
+   //private Cache cache = GemFireCacheImpl.getExisting(null);
+   
+   @Autowired
+   private ObjectMapper objectMapper;
+ 
+   @PostConstruct
+   private void init() {
+     JSONUtils.setObjectMapper(objectMapper);
+   }
+ 
+   protected Cache getCache(){
+     Cache cache = GemFireCacheImpl.getExisting();
+     Assert.state(cache != null, "The Gemfire Cache reference was not properly initialized");
+     return cache;
+   }
+   
+   protected URI toUri(final String... pathSegments) {
+     return ServletUriComponentsBuilder.fromCurrentContextPath().path(getRestApiVersion()).pathSegment(pathSegments)
+       .build().toUri();
+   }
+   
+   protected abstract String getRestApiVersion();
+   
+   protected String validateQuery(String queryInUrl, String queryInBody){
+     
+     if (!(StringUtils.hasText(queryInUrl) || StringUtils.hasText(queryInBody))) {
+       throw new GemfireRestException("could not process null value specified in query String");
+     }
+     return (StringUtils.hasText(queryInUrl) ? decode(queryInUrl) : queryInBody);
+   }
+   
+   protected String decode(final String value) {
+     if(value == null) {
+       throw new GemfireRestException("could not process null value specified in query String"); 
+     }
+     
+     return decode(value, DEFAULT_ENCODING);
+   }
+ 
+   protected PdxInstance convert(final String json){
+     try{
+       return (StringUtils.hasText(json) ? JSONFormatter.fromJSON(json) : null);
+     }catch(JSONFormatterException jpe){
+       throw new MalformedJsonException("Json doc specified is either not supported or invalid!", jpe);
+     }
+   }
+   
+   protected String convert(final PdxInstance pdxObj){
+     try {
+       return (pdxObj != null ? JSONFormatter.toJSON(pdxObj) : null);
+     } catch(JSONFormatterException jpe) {
+       throw new GemfireRestException("Requested data could not convert into REST format(JSON)!", jpe);
+     }
+   }
+   
+   protected String convert(final Iterable<PdxInstance> pdxObjs){
+     final StringBuilder buffer = new StringBuilder("[");
+     int count = 0;
+ 
+     for (final PdxInstance pdxObj : pdxObjs) {
+       final String json = convert(pdxObj);
+ 
+       if (StringUtils.hasText(json)) {
+         buffer.append(count++ > 0 ? ", " : "").append(json);
+       }
+     }
+ 
+     buffer.append("]");
+ 
+     return buffer.toString();
+   }
+ 
+   @SuppressWarnings("unchecked")
+   protected <T> T casValue(String regionNamePath, String key, String jsonData){
+     JSONObject jsonObject;
+     try {
+       jsonObject = new JSONObject(jsonData);
+       String oldValue = jsonObject.get("@old").toString();
+       String newValue = jsonObject.get("@new").toString();
+   
+       return (T) casValue(regionNamePath, key, convert(oldValue), convert(newValue));
+       
+     } catch (JSONException je) {
+       throw new MalformedJsonException("Json doc specified in request body is invalid!", je);
+     }              
+   }
+   
 -  public ResponseEntity<String> processQueryResponse (Object  queryResult, String queryId) throws JSONException {
++  public ResponseEntity<String> processQueryResponse (Object  queryResult, String queryId, HttpHeaders headers) throws JSONException {
+     if(queryResult instanceof Collection<?>){
+       Collection<Object> result = (Collection<Object>) queryResult;
+       String queryResultAsJson =  JSONUtils.convertCollectionToJson(result);
+       
 -      final HttpHeaders headers = new HttpHeaders();
 -      headers.setLocation(toUri("queries", queryId));    
++      headers.setLocation(toUri("queries", queryId)); 
++ 
+       return new ResponseEntity<String>(queryResultAsJson, headers, HttpStatus.OK);
+     }else {
+       throw new GemfireRestException("Server has encountered error while generating query result into restful format(JSON)!");
+     }
+   }
+   
+   protected Collection<PdxInstance> convertJsonArrayIntoPdxCollection(final String jsonArray) {
+     JSONArray jsonArr = null;
+     try {
+       jsonArr = new JSONArray(jsonArray);
+       Collection<PdxInstance> pdxInstances = new ArrayList<PdxInstance>();
+       
+       
+       for(int index=0; index < jsonArr.length(); index++){
+         //String element = jsonArr.getJSONObject(i).toString();
+         //String element  = jsonArr.getString(i);
+         Object object= jsonArr.get(index);
+         String element = object.toString();
+         
+         PdxInstance pi = convert(element);
+         pdxInstances.add(pi);
+       }
+       return pdxInstances;
+     
+     } catch (JSONException je) {
+       throw new MalformedJsonException("Json document specified in request body is not valid!", je);
+     }
+   }
+   
+   
+   /*
+   protected PdxInstance convertJsonIntoPdxCollection(final String jsonArray) {
+     JSONArray jsonArr = null;
+     
+       PdxInstance pi = convert(jsonArray);
+       System.out.println("Successfully converted into PdxInstance..!!");
+       return pi;
+     
+   }
+   */
+   
+   protected Object casValue(final String regionNamePath, final Object key, final Object oldValue, final Object newValue) {
+     final Region<Object, Object> region = getRegion(regionNamePath);
+     try {
+       return (region.replace(key, oldValue, newValue) ? null : region.get(key));
+     } catch(UnsupportedOperationException use){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not support the requested operation!", regionNamePath), use);
+     }catch(ClassCastException cce){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow to store specified key or value type in this region!", regionNamePath), cce);
+     }catch(NullPointerException npe){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow null keys or values!", regionNamePath), npe);
+     }catch(IllegalArgumentException iae){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration prevents specified data from being stored in it!", regionNamePath), iae);
+     }catch(com.gemstone.gemfire.distributed.LeaseExpiredException lee){
+       throw new GemfireRestException("Server has encountered error while processing this request!", lee);
+     }catch(TimeoutException toe){
+       throw new GemfireRestException("Server has encountered timeout error while processing this request!", toe);
+     }catch(CacheWriterException cwe){
+       throw new GemfireRestException("Server has encountered CacheWriter error while processing this request!", cwe);
+     }catch(PartitionedRegionStorageException prse){
+       throw new GemfireRestException("Requested operation could not be completed on a partitioned region!", prse);
+     }catch(LowMemoryException lme){
+       throw new GemfireRestException("Server has detected low memory while processing this request!", lme);
+     } 
+   }
+     
+   protected void replaceValue(final String regionNamePath, final Object key, final PdxInstance value) {
+     try {
+       if(getRegion(regionNamePath).replace(key, value) == null){
+         throw new ResourceNotFoundException(String.format("No resource at (%1$s) exists!", toUri(regionNamePath, String.valueOf(key))));
+       }
+     }catch(UnsupportedOperationException use){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not support the requested operation!", regionNamePath), use);
+     }catch(ClassCastException cce){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow to store specified key or value type in this region!", regionNamePath), cce);
+     }catch(NullPointerException npe){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow null keys or values!", regionNamePath), npe);
+     }catch(IllegalArgumentException iae){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration prevents specified data from being stored in it!", regionNamePath), iae);
+     }catch(com.gemstone.gemfire.distributed.LeaseExpiredException lee){
+       throw new GemfireRestException("Server has encountered error while processing this request!", lee);
+     }catch(TimeoutException toe){
+       throw new GemfireRestException("Server has encountered timeout error while processing this request!", toe);
+     }catch(CacheWriterException cwe){
+       throw new GemfireRestException("Server has encountered CacheWriter error while processing this request!", cwe);
+     }catch(PartitionedRegionStorageException prse){
+       throw new GemfireRestException("Requested operation could not be completed on a partitioned region!", prse);
+     }catch(LowMemoryException lme){
+       throw new GemfireRestException("Server has detected low memory while processing this request!", lme);
+     }
+   }     
+   
+   protected void replaceValue(final String regionNamePath, final Object key, final Object value) {
+     //still do we need to worry for race condition..?
+     try {
+       if(getRegion(regionNamePath).replace(key, value) == null){
+         throw new ResourceNotFoundException(String.format("No resource at (%1$s) exists!", toUri(regionNamePath, String.valueOf(key))));
+       }
+     }catch(UnsupportedOperationException use){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not support the requested operation!", regionNamePath), use);
+     }catch(ClassCastException cce){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow to store specified key or value type in this region!", regionNamePath), cce);
+     }catch(NullPointerException npe){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow null keys or values!", regionNamePath), npe);
+     }catch(IllegalArgumentException iae){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration prevents specified data from being stored in it!", regionNamePath), iae);
+     }catch(com.gemstone.gemfire.distributed.LeaseExpiredException lee){
+       throw new GemfireRestException("Server has encountered error while processing this request!", lee);
+     }catch(TimeoutException toe){
+       throw new GemfireRestException("Server has encountered timeout error while processing this request!", toe);
+     }catch(CacheWriterException cwe){
+       throw new GemfireRestException("Server has encountered CacheWriter error while processing this request!", cwe);
+     }catch(PartitionedRegionStorageException prse){
+       throw new GemfireRestException("Requested operation could not be completed on a partitioned region!", prse);
+     }catch(LowMemoryException lme){
+       throw new GemfireRestException("Server has detected low memory while processing this request!", lme);
+     }
+   }
+   
+   protected void putValue(final String regionNamePath, final Object key, final Object value){
+     try {
+       getRegion(regionNamePath).put(key, value);
+     } catch (NullPointerException npe) {
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow null keys or values!", regionNamePath), npe);
+     } catch (ClassCastException cce) {
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow to store specified key or value type in this region!", regionNamePath), cce);
+     } catch (com.gemstone.gemfire.distributed.LeaseExpiredException lee) {
+       throw new GemfireRestException("Server has encountered error while processing this request!", lee);
+     } catch (TimeoutException toe) {
+       throw new GemfireRestException("Server has encountered timeout error while processing this request!", toe);
+     } catch (CacheWriterException cwe) {
+       throw new GemfireRestException("Server has encountered CacheWriter error while processing this request!", cwe);
+     } catch (PartitionedRegionStorageException prse) {
+       throw new GemfireRestException("Requested operation could not be completed on a partitioned region!", prse);
+     } catch (LowMemoryException lme) {
+       throw new GemfireRestException("Server has detected low memory while processing this request!", lme);
+     }
+   }
+   
+   protected void deleteQueryId(final String regionNamePath, final String key){
+     getQueryStore(regionNamePath).remove(key);
+   }
+   
+   protected void deleteNamedQuery(final String regionNamePath, final String key){
+     //Check whether query ID exist in region or not
+     checkForQueryIdExist(regionNamePath, key);
+     deleteQueryId(regionNamePath, key);  
+   }
+   
+   protected void checkForQueryIdExist(String region, String key) {
+     if(!getQueryStore(region).containsKey(key)) {
+       throw new ResourceNotFoundException(String.format("Named query (%1$s) does not exist!", key));
+     }
+   }
+   
+   protected Region<String, String> getQueryStore(final String namePath) {
+     return  ValidationUtils.returnValueThrowOnNull(getCache().<String, String>getRegion(namePath),
+       new GemfireRestException(String.format("Query store does not exist!",
+         namePath)));
+   }
+   
+   protected String getQueryIdValue(final String regionNamePath, final String key) {
+     Assert.notNull(key, "queryId cannot be null!");
+     try {
+       return  getQueryStore(regionNamePath).get(key);
+     } catch(NullPointerException npe) {
+       throw new GemfireRestException("NULL query ID or query string is not supported!", npe);
+     } catch(IllegalArgumentException iae) {
+       throw new GemfireRestException("Server has not allowed to perform the requested operation!", iae);
+     } catch(com.gemstone.gemfire.distributed.LeaseExpiredException lee) {
+       throw new GemfireRestException("Server has encountered error while processing this request!", lee);
+     } catch(TimeoutException te) {
+       throw new GemfireRestException("Server has encountered timeout error while processing this request!", te);
+     } 
+   }
+   
+   protected void updateNamedQuery(final String regionNamePath, final String key, final String value){
+     try {
+       getQueryStore(regionNamePath).put(key, value);
+     } catch (NullPointerException npe) {
+       throw new GemfireRestException("NULL query ID or query string is not supported!", npe);
+     } catch (ClassCastException cce) {
+       throw new GemfireRestException("specified queryId or query string is not supported!", cce);
+     } catch (com.gemstone.gemfire.distributed.LeaseExpiredException lee) {
+       throw new GemfireRestException("Server has encountered error while processing this request!", lee);
+     } catch (TimeoutException toe) {
+       throw new GemfireRestException("Server has encountered timeout error while processing this request!", toe);
+     } catch (LowMemoryException lme) {
+       throw new GemfireRestException("Server has detected low memory while processing this request!", lme);
+     }
+   }
+   
+   @SuppressWarnings("unchecked")
+   protected <T> T createNamedQuery(final String regionNamePath, final String key, final String value){
+     try {
+       return (T) getQueryStore(regionNamePath).putIfAbsent(key, value);
+     } catch(UnsupportedOperationException use){
+       throw new GemfireRestException("Requested operation is not supported!", use);
+     } catch(ClassCastException cce){
+       throw new GemfireRestException("Specified queryId or query string is not supported!", cce);
+     } catch(NullPointerException npe){
+       throw new GemfireRestException("NULL query ID or query string is not supported!", npe);
+     } catch(IllegalArgumentException iae){
+       throw new GemfireRestException("Configuration does not allow to perform the requested operation!", iae);
+     } catch(com.gemstone.gemfire.distributed.LeaseExpiredException lee){
+       throw new GemfireRestException("Server has encountered error while processing this request!", lee);
+     } catch(TimeoutException toe){
+       throw new GemfireRestException("Server has encountered timeout error while processing this request!", toe);
+     } catch(LowMemoryException lme){
+       throw new GemfireRestException("Server has detected low memory while processing this request!", lme);
+     }
+   }
+   
+   protected void putPdxValues(final String regionNamePath, final Map<Object, PdxInstance> map){
+     try {
+     getRegion(regionNamePath).putAll(map);
+     } catch (LowMemoryException lme) {
+       throw new GemfireRestException("low memory condition is detected.", lme);
+     }
+   }
+   
+   protected void putValues(final String regionNamePath, final Map<Object, Object> values) {
+     getRegion(regionNamePath).putAll(values);
+   }
+   
+   protected void putValues(final String regionNamePath, String[] keys, List<?> values) {
+     Map<Object, Object> map = new HashMap<Object, Object>();
+     if (keys.length != values.size()) {
+       throw new GemfireRestException("Bad request, Keys and Value size does not match");
+     }
+     for (int i = 0; i < keys.length; i++) {
+       Object domainObj = introspectAndConvert(values.get(i));
+       map.put(keys[i], domainObj);
+     }
+     
+     if (!map.isEmpty()) {
+       putValues(regionNamePath, map);
+     }
+   }
+   
+   @SuppressWarnings("unchecked")
+   protected <T> T postValue(final String regionNamePath, final Object key, final Object value){ 
+     try {
+       return (T) getRegion(regionNamePath).putIfAbsent(key, value);
+     }catch(UnsupportedOperationException use){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not support the requested operation!", regionNamePath), use);
+     }catch(ClassCastException cce){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow to store specified key or value type in this region!", regionNamePath), cce);
+     }catch(NullPointerException npe){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow null keys or values!", regionNamePath), npe);
+     }catch(IllegalArgumentException iae){
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration prevents specified data from being stored in it!", regionNamePath), iae);
+     }catch(com.gemstone.gemfire.distributed.LeaseExpiredException lee){
+       throw new GemfireRestException("Server has encountered error while processing this request!", lee);
+     }catch(TimeoutException toe){
+       throw new GemfireRestException("Server has encountered timeout error while processing this request!", toe);
+     }catch(CacheWriterException cwe){
+       throw new GemfireRestException("Server has encountered CacheWriter error while processing this request!", cwe);
+     }catch(PartitionedRegionStorageException prse){
+       throw new GemfireRestException("Requested operation could not be completed on a partitioned region!", prse);
+     }catch(LowMemoryException lme){
+       throw new GemfireRestException("Server has detected low memory while processing this request!", lme);
+     }
+   }
+  
+   protected Object getActualTypeValue(final String value, final String valueType){
+     Object actualValue = value;
+     if(valueType != null){
+       try {
+         actualValue  = NumberUtils.convertToActualType(value, valueType);
+       } catch (IllegalArgumentException ie) {
+         throw new GemfireRestException(ie.getMessage(), ie);
+       } 
+     }
+     return actualValue;
+   }
+   
+   protected String generateKey(final String existingKey){
+     return generateKey(existingKey, null);
+   }
+   
+   protected String generateKey(final String existingKey, final Object domainObject) {
+     Object domainObjectId = IdentifiableUtils.getId(domainObject);
+     String newKey;
+ 
+     if (StringUtils.hasText(existingKey)) {
+       newKey = existingKey;
+       if (NumberUtils.isNumeric(newKey) && domainObjectId == null) {
+         final Long newId = IdentifiableUtils.createId(NumberUtils.parseLong(newKey));
+         if (newKey.equals(newId.toString())) {
+           IdentifiableUtils.setId(domainObject, newId);
+         }
+       }
+     }
+     else if (domainObjectId != null) {
+       final Long domainObjectIdAsLong = NumberUtils.longValue(domainObjectId);
+       if (domainObjectIdAsLong != null) {
+         final Long newId = IdentifiableUtils.createId(domainObjectIdAsLong);
+         if (!domainObjectIdAsLong.equals(newId)) {
+           IdentifiableUtils.setId(domainObject, newId);
+         }
+         newKey = String.valueOf(newId);
+       }
+       else {
+         newKey = String.valueOf(domainObjectId);
+       }
+     }
+     else {
+       domainObjectId = IdentifiableUtils.createId();
+       newKey = String.valueOf(domainObjectId);
+       IdentifiableUtils.setId(domainObject, domainObjectId);
+     }
+ 
+     return newKey;
+   }
+   
+   protected String decode(final String value, final String encoding) {
+     try {
+       return URLDecoder.decode(value, encoding);
+     }
+     catch (UnsupportedEncodingException e) {
+       throw new GemfireRestException("Server has encountered unsupported encoding!");
+     }
+   }
+   
+   @SuppressWarnings("unchecked")
+   protected <T> Region<Object, T> getRegion(final String namePath) {
+     return (Region<Object, T>) ValidationUtils.returnValueThrowOnNull(getCache().getRegion(namePath),
+       new RegionNotFoundException(String.format("The Region identified by name (%1$s) could not be found!",
+         namePath)));
+   }
+   
+   protected void checkForKeyExist(String region, String key) {
+     if(!getRegion(region).containsKey(key)) {
+       throw new ResourceNotFoundException(String.format("Key (%1$s) does not exist for region (%2$s) in cache!", key, region));
+     }
+   }
+   
+   protected List<String> checkForMultipleKeysExist(String region, String... keys) {
+     List<String> unknownKeys = new ArrayList<String>();
+     for (int index=0; index < keys.length; index++) {
+       if(!getRegion(region).containsKey(keys[index])) {
+         //throw new ResourceNotFoundException(String.format("Key [(%1$s)] does not exist for region [(%2$s)] in cache!", key, region));
+         unknownKeys.add(keys[index]);
+       }
+     }
+     return unknownKeys;
+   }
+   
+   protected Object[] getKeys(final String regionNamePath, Object[] keys) {
+     return (!(keys == null || keys.length == 0) ? keys : getRegion(regionNamePath).keySet().toArray());
+   }
+   
+   protected <T> Map<Object, T> getValues(final String regionNamePath, Object... keys)  {
+     try{ 
+       final Region<Object, T> region = getRegion(regionNamePath);
+       final Map<Object, T> entries = region.getAll(Arrays.asList(getKeys(regionNamePath, keys)));
+       return entries;
+     } catch(SerializationException se) {
+       throw new DataTypeNotSupportedException("The resource identified could not convert into the supported content characteristics (JSON)!", se);
+     }
+   }
+   protected <T> Map<Object, T> getValues(final String regionNamePath, String... keys) {
+     return getValues(regionNamePath, (Object[])keys);
+   }  
+   
+   protected <T extends PdxInstance> Collection<T> getPdxValues(final String regionNamePath, final Object... keys) {
+     final Region<Object, T> region = getRegion(regionNamePath);
+     final Map<Object, T> entries = region.getAll(Arrays.asList(getKeys(regionNamePath, keys)));
+     
+     return entries.values();
+   }
+   
+   protected void deleteValue(final String regionNamePath, final Object key){
+     getRegion(regionNamePath).remove(key);
+   }
+   
+   protected void deleteValues(final String regionNamePath, final Object...keys){
+     //Check whether all keys exist in cache or not
+     for(final Object key : keys){
+       checkForKeyExist(regionNamePath, key.toString());
+     }
+     
+     for(final Object key : keys){
+       deleteValue(regionNamePath, key);
+     }
+   }
+   
+   protected void deleteValues(String regionNamePath){
+     try{
+       getRegion(regionNamePath).clear();
+     }catch(UnsupportedOperationException ue){
+       throw new GemfireRestException("Requested operation not allowed on partition region", ue);
+     }
+   }
+   
+   private boolean isForm(final Map<Object, Object> rawDataBinding) {
+     return (!rawDataBinding.containsKey(TYPE_META_DATA_PROPERTY)
+       && rawDataBinding.containsKey(OLD_META_DATA_PROPERTY)
+       && rawDataBinding.containsKey(NEW_META_DATA_PROPERTY));
+   }
+   
+   @SuppressWarnings("unchecked")
+   protected <T> T introspectAndConvert(final T value) {
+     if (value instanceof Map) {
+       final Map rawDataBinding = (Map) value;
+ 
+       if (isForm(rawDataBinding)) {
+         rawDataBinding.put(OLD_META_DATA_PROPERTY, introspectAndConvert(rawDataBinding.get(OLD_META_DATA_PROPERTY)));
+         rawDataBinding.put(NEW_META_DATA_PROPERTY, introspectAndConvert(rawDataBinding.get(NEW_META_DATA_PROPERTY)));
+ 
+         return (T) rawDataBinding;
+       }
+       else {
+         final String typeValue = (String) rawDataBinding.get(TYPE_META_DATA_PROPERTY);
+         
+         //Added for the primitive types put. Not supporting primitive types 
+         if(NumberUtils.isPrimitiveOrObject(typeValue.toString())){ 
+           final Object primitiveValue = rawDataBinding.get("@value");
+           try {
+             return (T) NumberUtils.convertToActualType(primitiveValue.toString(), typeValue);
+           } catch (IllegalArgumentException e) {
+             throw new GemfireRestException("Server has encountered error (illegal or inappropriate arguments).", e);  
+           }   
+         } else {
+           
+           Assert.state(typeValue != null, "The class type of the object to persist in GemFire must be specified in JSON content using the '@type' property!");
+           Assert.state(ClassUtils.isPresent(String.valueOf(typeValue), Thread.currentThread().getContextClassLoader()),
+             String.format("Class (%1$s) could not be found!", typeValue));
+           
+           return (T) objectMapper.convertValue(rawDataBinding, ClassUtils.resolveClassName(String.valueOf(typeValue),
+             Thread.currentThread().getContextClassLoader()));
+         }
+       }
+     }
+ 
+     return value;
+   }
+ 
+   protected String convertErrorAsJson(String errorMessage) {
+     return ("{" + "\"cause\"" + ":" + "\"" + errorMessage + "\"" + "}");
+   }
+ 
+   protected String convertErrorAsJson(Throwable t) {
+     StringWriter writer = new StringWriter();
+     t.printStackTrace(new PrintWriter(writer));
+     return String.format("{\"message\" : \"%1$s\", \"stackTrace\" : \"%2$s\"}", t.getMessage(), writer.toString());
+   }
+ 
+   protected Map<?,?> convertJsonToMap(final String jsonString) {
+     Map<String,String> map = new HashMap<String,String>();
+     
+     //convert JSON string to Map
+     try {
+       map = objectMapper.readValue(jsonString, new TypeReference<HashMap<String,String>>(){});
+     } catch (JsonParseException e) {
+       throw new MalformedJsonException("Bind params specified as JSON document in the request is incorrect!", e);
+     } catch (JsonMappingException e) {
+       throw new MalformedJsonException("Server unable to process bind params specified as JSON document in the request!", e);
+     } catch (IOException e) {
+       throw new GemfireRestException("Server has encountered error while process this request!", e);
+     }
+     return map;
+  }
+   
+   protected Object jsonToObject(final String jsonString) {
+     return introspectAndConvert(convertJsonToMap(jsonString));  
+   }
+   
+   protected Object[] jsonToObjectArray(final String arguments) {
+     final JSONTypes jsonType = validateJsonAndFindType(arguments);
+     if(JSONTypes.JSON_ARRAY.equals(jsonType)){
+       try {
+         JSONArray jsonArray  = new JSONArray(arguments);
+         Object[] args =  new Object[jsonArray.length()];
+         for(int index=0; index < jsonArray.length(); index++) {
+           args[index] = jsonToObject(jsonArray.get(index).toString());  
+         }
+         return args;
+       } catch (JSONException je) {
+         throw new MalformedJsonException("Json document specified in request body is not valid!", je);
+       }
+     } else if (JSONTypes.JSON_OBJECT.equals(jsonType)) {
+       return new Object[] { jsonToObject(arguments) };
+     } else {
+       throw new MalformedJsonException("Json document specified in request body is not valid!");
+     } 
+   }
+   
 -  public ResponseEntity<String> updateSingleKey(final String region, final String key, final String json, final String opValue){    
++  public ResponseEntity<String> updateSingleKey(final String region, final String key, final String json, final String opValue, HttpHeaders headers){    
+     
+     final JSONTypes jsonType = validateJsonAndFindType(json);
+     
+     final UpdateOp op = UpdateOp.valueOf(opValue.toUpperCase());
+     String existingValue = null;
+     
+     switch (op) {
+       case CAS:  
+         PdxInstance existingPdxObj = casValue(region, key, json);
+         existingValue = convert(existingPdxObj);
+         break;
+         
+       case REPLACE:
+         replaceValue(region, key, convert(json));
+         break;
+         
+       case PUT:
+       default:
+         if(JSONTypes.JSON_ARRAY.equals(jsonType)){
+           putValue(region, key, convertJsonArrayIntoPdxCollection(json));
+           //putValue(region, key, convertJsonIntoPdxCollection(json));
+         }else {
+           putValue(region, key, convert(json));
+         }
+     }
+         
 -    final HttpHeaders headers = new HttpHeaders();
+     headers.setLocation(toUri(region, key));
+     return new ResponseEntity<String>(existingValue, headers, (existingValue == null ? HttpStatus.OK : HttpStatus.CONFLICT));        
+   }
+   
+   
 -  public ResponseEntity<String> updateMultipleKeys(final String region, final String[] keys, final String json){
++  public ResponseEntity<String> updateMultipleKeys(final String region, final String[] keys, final String json, HttpHeaders headers){
+     
+     JSONArray jsonArr = null;
+     try {
+       jsonArr = new JSONArray(json);  
+     } catch (JSONException e) {
+       throw new MalformedJsonException("JSON document specified in the request is incorrect", e);
+     }
+   
+     if(jsonArr.length() != keys.length){
+       throw new MalformedJsonException("Each key must have corresponding value (JSON document) specified in the request");
+     }
+     
+     Map<Object, PdxInstance> map = new HashMap<Object, PdxInstance>();    
+     for(int i=0; i<keys.length; i++){
+       if (logger.isDebugEnabled()) {
+         logger.debug("Updating (put) Json document ({}) having key ({}) in Region ({})", json, keys[i], region);
+       }
+         
+       try {
+         PdxInstance pdxObj = convert( jsonArr.getJSONObject(i).toString());    
+         map.put(keys[i], pdxObj);
+       } catch (JSONException e) {
+         throw new MalformedJsonException(String.format("JSON document at index (%1$s) in the request body is incorrect", i), e);
+       }
+     }
+      
+     if(!CollectionUtils.isEmpty(map)){ 
+       putPdxValues(region, map);
+     }
 -    
 -    HttpHeaders headers = new HttpHeaders();
++   
+     headers.setLocation(toUri(region, StringUtils.arrayToCommaDelimitedString(keys)));
+     return new ResponseEntity<String>(headers, HttpStatus.OK);
+   }
+   
+   public JSONTypes validateJsonAndFindType(String json){
+     try {
+       Object jsonObj = new JSONTokener(json).nextValue();
+     
+       if (jsonObj instanceof JSONObject){
+         return JSONTypes.JSON_OBJECT;    
+       }else if (jsonObj instanceof JSONArray){  
+         return JSONTypes.JSON_ARRAY;  
+       }else {
+         return JSONTypes.UNRECOGNIZED_JSON;
+       }
+     } catch (JSONException je) {
+       throw new MalformedJsonException("JSON document specified in the request is incorrect", je);
+     }    
+   }
+   
+   protected QueryService getQueryService() {
+     return getCache().getQueryService();
+   }
+ 
+   @SuppressWarnings("unchecked")
+   protected <T> T getValue(final String regionNamePath, final Object key) {
+     Assert.notNull(key, "The Cache Region key to read the value for cannot be null!");
+   
+     Region r = getRegion(regionNamePath);
+     try {
+       Object value = r.get(key);
+       return (T) value;
+     } catch(SerializationException se) {
+       throw new DataTypeNotSupportedException("The resource identified could not convert into the supported content characteristics (JSON)!", se);
+     } catch(NullPointerException npe) {
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow null keys!", regionNamePath), npe);
+     } catch(IllegalArgumentException iae) {
+       throw new GemfireRestException(String.format("Resource (%1$s) configuration does not allow requested operation on specified key!", regionNamePath), iae);
+     } catch(com.gemstone.gemfire.distributed.LeaseExpiredException lee) {
+       throw new GemfireRestException("Server has encountered error while processing this request!", lee);
+     } catch(TimeoutException te) {
+       throw new GemfireRestException("Server has encountered timeout error while processing this request!", te);
+     } catch(CacheLoaderException cle){
+       throw new GemfireRestException("Server has encountered CacheLoader error while processing this request!", cle);
+     } catch(PartitionedRegionStorageException prse) {
+       throw new GemfireRestException("CacheLoader could not be invoked on partitioned region!", prse);
+     }
+     
+   }
+  
+   protected Set<DistributedMember> getMembers(final String... memberIdNames) {
+     
+     ValidationUtils.returnValueThrowOnNull(memberIdNames, new GemfireRestException("No member found to run function"));
+     final Set<DistributedMember> targetedMembers = new HashSet<DistributedMember>(ArrayUtils.length(memberIdNames));
+     final List<String> memberIdNameList = Arrays.asList(memberIdNames);
+     GemFireCacheImpl c = (GemFireCacheImpl)getCache();
+     Set<DistributedMember> distMembers =  c.getDistributedSystem().getAllOtherMembers();
+    
+     //Add the local node to list
+     distMembers.add(c.getDistributedSystem().getDistributedMember());  
+     for (DistributedMember member : distMembers) {
+       if (memberIdNameList.contains(member.getId()) || memberIdNameList.contains(member.getName())) {
+         targetedMembers.add(member);
+       }
+     }
+     return targetedMembers;
+   }
+ 
+   protected Set<DistributedMember> getAllMembersInDS() {
+     GemFireCacheImpl c = (GemFireCacheImpl)getCache();
+     Set<DistributedMember> distMembers =  c.getDistributedSystem().getAllOtherMembers();
+     final Set<DistributedMember> targetedMembers = new HashSet<DistributedMember>();
+     
+     //find valid data nodes, i.e non locator, non-admin, non-loner nodes
+     for (DistributedMember member : distMembers) {
+       InternalDistributedMember idm = (InternalDistributedMember)member;
+       if (idm.getVmKind() == DistributionManager.NORMAL_DM_TYPE) {
+         targetedMembers.add(member);
+       }
+     }
+     //Add the local node to list
+     targetedMembers.add(c.getDistributedSystem().getDistributedMember());
+     return targetedMembers;
+   }
++  
++  protected void setAuthTokenHeader(HttpHeaders headers) {
++    Map<String, Object> envMap = (Map<String, Object>)RestRequestFilter.getEnvironment();
++    boolean isSecurityEnabled = (boolean) envMap.get("isSecurityEnabled");
++  
++    if(isSecurityEnabled == false)
++      return;
++  
++    headers.set(AUTH_TOKEN_HEADER,(String)envMap.get("authToken"));
++    
++  }
++  
++  protected String getAuthToken(){
++    Map<String, Object> envMap = (Map<String, Object>)RestRequestFilter.getEnvironment();
++    return (String)envMap.get("authToken");
++  }
++  
+ }
++

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/BaseControllerAdvice.java
----------------------------------------------------------------------
diff --cc geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/BaseControllerAdvice.java
index 0000000,81714f9..3fb42fe
mode 000000,100644..100644
--- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/BaseControllerAdvice.java
+++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/BaseControllerAdvice.java
@@@ -1,0 -1,147 +1,187 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.rest.internal.web.controllers;
+ 
+ import java.io.PrintWriter;
+ import java.io.StringWriter;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.springframework.http.HttpStatus;
+ import org.springframework.web.HttpRequestMethodNotSupportedException;
+ import org.springframework.web.bind.annotation.ControllerAdvice;
+ import org.springframework.web.bind.annotation.ExceptionHandler;
+ import org.springframework.web.bind.annotation.ResponseBody;
+ import org.springframework.web.bind.annotation.ResponseStatus;
+ 
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.rest.internal.web.exception.DataTypeNotSupportedException;
+ import com.gemstone.gemfire.rest.internal.web.exception.GemfireRestException;
+ import com.gemstone.gemfire.rest.internal.web.exception.MalformedJsonException;
+ import com.gemstone.gemfire.rest.internal.web.exception.RegionNotFoundException;
+ import com.gemstone.gemfire.rest.internal.web.exception.ResourceNotFoundException;
++import com.gemstone.gemfire.security.AuthenticationFailedException;
++import com.gemstone.gemfire.security.AuthenticationRequiredException;
++import com.gemstone.gemfire.security.NotAuthorizedException;
+ 
+ /**
+  * The CrudControllerAdvice class handles exception thrown while serving the REST request
+  * <p/>
+  * @author Nilkanth Patel, John Blum
+  * @since 8.0
+  */
+ 
 -@ControllerAdvice
++//@ControllerAdvice
+ @SuppressWarnings("unused")
+ public class BaseControllerAdvice extends AbstractBaseController{
+ 
+   private static final Logger logger = LogService.getLogger();
+   
+   protected static final String REST_API_VERSION = "/v1";
+    
+   @Override
+   protected String getRestApiVersion() {
+     return REST_API_VERSION;
+   }
+   /**
+    * Handles both ResourceNotFoundExceptions and specifically, RegionNotFoundExceptions, occurring when a resource
+    * or a Region (a.k.a. resource) does not exist in GemFire.
+    * <p/>
+    * @param e the RuntimeException thrown when the accessed/requested resource does not exist in GemFire.
+    * @return the String message from the RuntimeException.
+    */
+   @ExceptionHandler({ RegionNotFoundException.class, ResourceNotFoundException.class })
+   @ResponseBody
+   @ResponseStatus(HttpStatus.NOT_FOUND)
+   public String handle(final RuntimeException e) {
+     return convertErrorAsJson(e.getMessage());
+   }
+ 
+   /**
+    * Handles MalformedJsonFoundException, occurring when REST service encounters incorrect or malformed JSON document
+    * <p/>
+    * @param e the RuntimeException thrown when malformed JSON is encounterd.
+    * @return the String message from the RuntimeException.
+    */
+   @ExceptionHandler({ MalformedJsonException.class })
+   @ResponseBody
+   @ResponseStatus(HttpStatus.BAD_REQUEST)
+   public String handleException(final RuntimeException e) {
+     return convertErrorAsJson(e.getMessage());
+   }
+   
+   /**
+    * Handles any GemfireRestException thrown by a REST API web service endpoint, HTTP request handler method.
+    * <p/>
+    * @param ge the GemfireRestException thrown when it found problem processing REST request.
+    * @return the String message from the RuntimeException.
+    */
+   @ExceptionHandler(GemfireRestException.class)
+   @ResponseBody
+   @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+   public String handleException(final GemfireRestException ge) {
+     return convertErrorAsJson(ge);
+   }
+   
+   /**
+    * Handles any DataTypeNotSupportedException thrown by a REST API web service endpoint, HTTP request handler method.
+    * <p/>
+    * @param tns the DataTypeNotSupportedException thrown if problem occurs in cache values to JSON conversion.
+    * @return the String message from the RuntimeException.
+    */
+   @ExceptionHandler(DataTypeNotSupportedException.class)
+   @ResponseBody
+   @ResponseStatus(HttpStatus.NOT_ACCEPTABLE)
+   public String handleException(final DataTypeNotSupportedException tns) {
+     return convertErrorAsJson(tns.getMessage());
+   }
+   
+   /**
+    * Handles HttpRequestMethodNotSupportedException thrown by a REST API web service when request is 
+    * received with unsupported HTTP method.
+    * <p/>
+    * @param e the HttpRequestMethodNotSupportedException thrown when REST request is received with NOT support methods.
+    * @return the String message from the RuntimeException.
+    */
+   @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+   @ResponseBody
+   @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
+   public String handleException(final HttpRequestMethodNotSupportedException e) {
+     return convertErrorAsJson(e.getMessage());
+   }
+  
+   /**
+    * Handles any Exception thrown by a REST API web service endpoint, HTTP request handler method.
+    * <p/>
+    * @param cause the Exception causing the error.
+    * @return a ResponseEntity with an appropriate HTTP status code (500 - Internal Server Error) and HTTP response body
+    * containing the stack trace of the Exception.
+    */
+   @ExceptionHandler(Throwable.class)
+   @ResponseBody
+   @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+   public String handleException(final Throwable cause) {
+     final StringWriter stackTraceWriter = new StringWriter();
+     cause.printStackTrace(new PrintWriter(stackTraceWriter));
+     final String stackTrace = stackTraceWriter.toString();
+     
+     if(logger.isDebugEnabled()){
+       logger.debug(stackTrace);  
+     }
+     
+     return convertErrorAsJson(cause.getMessage());
+   }
+   
++  /**
++   * Handles NotAuthorizedException, occurring when REST service encounters unAuthorized access.
++   * <p/>
++   * @param e the RuntimeException thrown when request is not authorized to perform the operation.
++   * @return the String message from the RuntimeException.
++   */
++  @ExceptionHandler({ NotAuthorizedException.class })
++  @ResponseBody
++  @ResponseStatus(HttpStatus.UNAUTHORIZED)
++  public String handleException(final NotAuthorizedException e) {
++    return convertErrorAsJson(e.getMessage());
++  }
++  
++  /**
++   * Handles AuthenticationFailedException, occurring when REST service can not authenticate the request.
++   * <p/>
++   * @param e the RuntimeException thrown when request is not authenticated to perform the operation.
++   * @return the String message from the RuntimeException.
++   */
++  @ExceptionHandler({ AuthenticationFailedException.class })
++  @ResponseBody
++  @ResponseStatus(HttpStatus.FORBIDDEN)
++  public String handleException(final AuthenticationFailedException e) {
++    return convertErrorAsJson(e.getMessage());
++  }
++  
++  /**
++   * Handles AuthenticationRequiredException, occurring when REST service can not find the security credentials i nthe request.
++   * <p/>
++   * @param e the RuntimeException thrown when request does not contains security credentials for authentication.
++   * @return the String message from the RuntimeException.
++   */
++  @ExceptionHandler({ AuthenticationRequiredException.class })
++  @ResponseBody
++  @ResponseStatus(HttpStatus.FORBIDDEN)
++  public String handleException(final AuthenticationRequiredException e) {
++    return convertErrorAsJson(e.getMessage());
++  }
+ }
 -

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/CommonCrudController.java
----------------------------------------------------------------------
diff --cc geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/CommonCrudController.java
index 0000000,a2b3e71..f309411
mode 000000,100644..100644
--- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/CommonCrudController.java
+++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/CommonCrudController.java
@@@ -1,0 -1,249 +1,312 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.rest.internal.web.controllers;
+ 
+ import java.util.ArrayList;
+ import java.util.List;
+ import java.util.Set;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.springframework.http.HttpHeaders;
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.MediaType;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ 
+ import com.gemstone.gemfire.cache.LowMemoryException;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.execute.Execution;
+ import com.gemstone.gemfire.cache.execute.FunctionException;
+ import com.gemstone.gemfire.cache.execute.FunctionService;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
++import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.logging.LogService;
++import com.gemstone.gemfire.internal.security.AuthorizeRequest;
+ import com.gemstone.gemfire.internal.util.ArrayUtils;
+ import com.gemstone.gemfire.rest.internal.web.controllers.support.RestServersResultCollector;
+ import com.gemstone.gemfire.rest.internal.web.exception.GemfireRestException;
++import com.gemstone.gemfire.rest.internal.web.security.AuthorizationProvider;
++import com.gemstone.gemfire.rest.internal.web.security.RestRequestFilter;
+ import com.gemstone.gemfire.rest.internal.web.util.JSONUtils;
++import com.gemstone.gemfire.security.NotAuthorizedException;
+ import org.json.JSONException;
+ import com.wordnik.swagger.annotations.ApiOperation;
+ import com.wordnik.swagger.annotations.ApiResponse;
+ import com.wordnik.swagger.annotations.ApiResponses;
+ 
+ /**
+  * The CommonCrudController serves REST Requests related to listing regions, 
+  * listing keys in region, delete keys or delete all data in region.
+  * <p/>
+  * @author Nilkanth Patel, john blum
+  * @since 8.0
+  */
+ 
+ @SuppressWarnings("unused")
+ public abstract class CommonCrudController extends AbstractBaseController {
+   
+   private static final Logger logger = LogService.getLogger();
+   
+   /**
+    * list all available resources (Regions) in the GemFire cluster
+    * @return JSON document containing result
+    */
+   @RequestMapping(method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE })
+   @ApiOperation(
+     value = "list all resources (Regions)",
+     notes = "List all available resources (Regions) in the GemFire cluster",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK." ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception." )   
+   } )
+   public ResponseEntity<?> regions() {
+     
+     if(logger.isDebugEnabled()){
+       logger.debug("Listing all resources (Regions) in GemFire...");
+     }
+     
 -    final Set<Region<?, ?>> regions = getCache().rootRegions();
 -    String listRegionsAsJson =  JSONUtils.formulateJsonForListRegions(regions, "regions");
+     final HttpHeaders headers = new HttpHeaders();  
+     headers.setLocation(toUri());
++    
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.listRegionsAuthorize(OperationCode.LIST, true, "LIST_REGIONS");
++      }catch(NotAuthorizedException nae){
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++   
++    final Set<Region<?, ?>> regions = getCache().rootRegions();
++    String listRegionsAsJson =  JSONUtils.formulateJsonForListRegions(regions, "regions");
++    
+     return new ResponseEntity<String>(listRegionsAsJson, headers, HttpStatus.OK);
+   }
+   
+   /**
+    * List all keys for the given region in the GemFire cluster
+    * @param region gemfire region
+    * @return JSON document containing result
+    */
+   @RequestMapping(method = RequestMethod.GET, value = "/{region}/keys", 
+                   produces = { MediaType.APPLICATION_JSON_VALUE } )
+   @ApiOperation(
+     value = "list all keys",
+     notes = "List all keys in region",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK" ),
+     @ApiResponse( code = 404, message = "Region does not exist" ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception" )   
+   } )
+   public ResponseEntity<?> keys(@PathVariable("region") String region){ 
+     
+     if(logger.isDebugEnabled()){
 -      logger.debug("Reading all Keys in Region ({})...", region);
++      logger.debug("Listing all Keys in Region ({})...", region);
+     }
+     
+     region = decode(region);
 -    
 -    Object[] keys = getKeys(region, null);  
 -    
 -    String listKeysAsJson =  JSONUtils.formulateJsonForListKeys(keys, "keys");
+     final HttpHeaders headers = new HttpHeaders();  
+     headers.setLocation(toUri(region, "keys"));
++    
++    //Request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.keySetAuthorize(region);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
++    Set<Object> keys = getRegion(region).keySet();
++    
++    //Post authorization
++    if(AuthorizationProvider.isSecurityEnabled()){
++      try{
++        AuthorizationProvider.keySetAuthorizePP(region, keys);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    String listKeysAsJson =  JSONUtils.formulateJsonForListKeys(keys.toArray(), "keys");
+     return new ResponseEntity<String>(listKeysAsJson, headers, HttpStatus.OK);
+   }
+   
+   /**
+    * Delete data for single key or specific keys in region
+    * @param region gemfire region
+    * @param keys for which data is requested
+    * @return JSON document containing result
+    */
+   @RequestMapping(method = RequestMethod.DELETE, value = "/{region}/{keys}",
+                   produces = { MediaType.APPLICATION_JSON_VALUE } )
+   @ApiOperation(
+     value = "delete data for key(s)",
+     notes = "Delete data for single key or specific keys in region",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK" ),
+     @ApiResponse( code = 404, message = "Region or key(s) does not exist" ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception" )      
+   } )
+   public ResponseEntity<?> delete(@PathVariable("region") String region,
+                                   @PathVariable("keys") final String[] keys){     
+     if(logger.isDebugEnabled()){
+       logger.debug("Delete data for key {} on region {}", ArrayUtils.toString((Object[])keys), region);
+     }
+     
+     region = decode(region);
++    final HttpHeaders headers = new HttpHeaders(); 
++    
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.deleteAuthorize(region, keys, null);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
+     
+     deleteValues(region, (Object[])keys);
 -    return new ResponseEntity<Object>(HttpStatus.OK);
++    return new ResponseEntity<Object>(headers, HttpStatus.OK);
+   }
+ 
+   /**
+    * Delete all data in region
+    * @param region gemfire region
+    * @return JSON document containing result
+    */
+   @RequestMapping(method = RequestMethod.DELETE, value = "/{region}")
+   @ApiOperation(
+     value = "delete all data",
+     notes = "Delete all data in the region",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK" ),
+     @ApiResponse( code = 404, message = "Region does not exist" ),
+     @ApiResponse( code = 500, message = "if GemFire throws an error or exception" )   
+   } )
+   public ResponseEntity<?> delete(@PathVariable("region") String region) {
+     
+     if(logger.isDebugEnabled()){
+       logger.debug("Deleting all data in Region ({})...", region);
+     }
+     
+     region = decode(region);
++    final HttpHeaders headers = new HttpHeaders(); 
++    
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.deleteAllAuthorize(region, null);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
+     
+     deleteValues(region);
 -    return new ResponseEntity<Object>(HttpStatus.OK);
++    return new ResponseEntity<Object>(headers, HttpStatus.OK);
+   }
+   
+   @RequestMapping(method = { RequestMethod.GET, RequestMethod.HEAD }, value = "/ping")
+   @ApiOperation(
+     value = "Check Rest service status ",
+     notes = "Check whether gemfire REST service is up and running!",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK" ),
+     @ApiResponse( code = 500, message = "if GemFire throws an error or exception" )   
+   } )
+   public ResponseEntity<?> ping() {
++    // Request Authorization not required.
+     return new ResponseEntity<Object>(HttpStatus.OK);
+   }
+   
+   @RequestMapping(method = { RequestMethod.GET }, value = "/servers")
+   @ApiOperation(
+     value = "fetch all REST enabled servers in the DS",
+     notes = "Find all gemfire node where developer REST service is up and running!",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK" ),
+     @ApiResponse( code = 500, message = "if GemFire throws an error or exception" )   
+   } )
+   public ResponseEntity<?> servers() {
++    //Request Authorization not required.
+     Execution function = null;
+       
+     if(logger.isDebugEnabled()){
+       logger.debug("Executing function to get REST enabled gemfire nodes in the DS!");
+     }
 -      
++    
+     try {
+       function = FunctionService.onMembers(getAllMembersInDS());
+     } catch(FunctionException fe) {
+       throw new GemfireRestException("Disributed system does not contain any valid data node that can host REST service!", fe);
+     }
+         
+     try {
+       final ResultCollector<?, ?> results = function.withCollector(new RestServersResultCollector()).execute(GemFireCacheImpl.FIND_REST_ENABLED_SERVERS_FUNCTION_ID);
+       Object functionResult = results.getResult();
+       
+       if(functionResult instanceof List<?>) {
+         final HttpHeaders headers = new HttpHeaders();
+         headers.setLocation(toUri("servers"));
+         try {    
+           String functionResultAsJson = JSONUtils.convertCollectionToJson((ArrayList<Object>)functionResult);
+           return new ResponseEntity<String>(functionResultAsJson, headers, HttpStatus.OK);  
+         } catch (JSONException e) {
+           throw new GemfireRestException("Could not convert function results into Restful (JSON) format!", e);
+         }
+       }else {
+         throw new GemfireRestException("Function has returned results that could not be converted into Restful (JSON) format!");
+       }
+       
+     } catch(ClassCastException cce){
+       throw new GemfireRestException("Key is of an inappropriate type for this region!", cce);
+     } catch(NullPointerException npe){
+       throw new GemfireRestException("Specified key is null and this region does not permit null keys!", npe);
+     } catch(LowMemoryException lme){
+       throw new GemfireRestException("Server has encountered low memory condition!", lme);
+     } catch (IllegalArgumentException ie) {
+       throw new GemfireRestException("Input parameter is null! ", ie);
+     }catch (FunctionException fe){
+       throw new GemfireRestException("Server has encountered error while executing the function!", fe);
+     }
+     
+   }
+   
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/FunctionAccessController.java
----------------------------------------------------------------------
diff --cc geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/FunctionAccessController.java
index 0000000,2c37c7f..11c5201
mode 000000,100644..100644
--- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/FunctionAccessController.java
+++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/FunctionAccessController.java
@@@ -1,0 -1,246 +1,293 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.rest.internal.web.controllers;
+ 
+ import java.util.ArrayList;
+ import java.util.List;
+ import java.util.Map;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.springframework.http.HttpHeaders;
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.MediaType;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.stereotype.Controller;
+ import org.springframework.util.StringUtils;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestBody;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ import org.springframework.web.bind.annotation.RequestParam;
+ import org.springframework.web.bind.annotation.ResponseBody;
+ import org.springframework.web.bind.annotation.ResponseStatus;
+ 
+ import com.gemstone.gemfire.cache.LowMemoryException;
+ import com.gemstone.gemfire.cache.execute.Execution;
+ import com.gemstone.gemfire.cache.execute.Function;
+ import com.gemstone.gemfire.cache.execute.FunctionException;
+ import com.gemstone.gemfire.cache.execute.FunctionService;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
++import com.gemstone.gemfire.cache.operations.ExecuteFunctionOperationContext;
++import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
+ import com.gemstone.gemfire.internal.logging.LogService;
++import com.gemstone.gemfire.management.internal.RestAgent;
+ import com.gemstone.gemfire.rest.internal.web.exception.GemfireRestException;
++import com.gemstone.gemfire.rest.internal.web.security.AuthorizationProvider;
++import com.gemstone.gemfire.rest.internal.web.security.FunctionExecutionPostAuthzRC;
+ import com.gemstone.gemfire.rest.internal.web.util.ArrayUtils;
+ import com.gemstone.gemfire.rest.internal.web.util.JSONUtils;
++import com.gemstone.gemfire.security.NotAuthorizedException;
+ import org.json.JSONException;
+ import com.wordnik.swagger.annotations.Api;
+ import com.wordnik.swagger.annotations.ApiOperation;
+ import com.wordnik.swagger.annotations.ApiResponse;
+ import com.wordnik.swagger.annotations.ApiResponses;
+ 
+ /**
+  * The FunctionsController class serving REST Requests related to the function execution
+  * <p/>
+  * @author Nilkanth Patel, john blum
+  * @see org.springframework.stereotype.Controller
+  * @since 8.0
+  */
+ 
+ @Controller("functionController")
+ @Api(value = "functions", description = "Rest api for gemfire function execution")
+ @RequestMapping(FunctionAccessController.REST_API_VERSION + "/functions")
+ @SuppressWarnings("unused")
+ public class FunctionAccessController extends AbstractBaseController {
+   private static final Logger logger = LogService.getLogger();
+ 
+   // Constant String value indicating the version of the REST API.
+   protected static final String REST_API_VERSION = "/v1";
+ 
+   /**
+    * Gets the version of the REST API implemented by this @Controller.
+    * <p/>
+    * @return a String indicating the REST API version.
+    */
+   @Override
+   protected String getRestApiVersion() {
+     return REST_API_VERSION;
+   }
+   
+   /**
+    * list all registered functions in Gemfire data node
+    * @return result as a JSON document.
+    */
+   @RequestMapping(method = RequestMethod.GET,  produces = { MediaType.APPLICATION_JSON_VALUE })
+   @ApiOperation(
+     value = "list all functions",
+     notes = "list all functions available in the GemFire cluster",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK." ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception." )   
+   } )
+   @ResponseBody
+   @ResponseStatus(HttpStatus.OK)
+   public ResponseEntity<?> list() {
+     
+     if(logger.isDebugEnabled()){
+       logger.debug("Listing all registered Functions in GemFire...");
+     }
+     
 -    final Map<String, Function> registeredFunctions = FunctionService.getRegisteredFunctions();
 -    String listFunctionsAsJson =  JSONUtils.formulateJsonForListFunctionsCall(registeredFunctions.keySet());
+     final HttpHeaders headers = new HttpHeaders();  
+     headers.setLocation(toUri("functions"));
++    
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);  
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.listFunctionsAuthorize(OperationCode.LIST, true, "LIST_FUNCTIONS");
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
++    final Map<String, Function> registeredFunctions = FunctionService.getRegisteredFunctions();
++    String listFunctionsAsJson =  JSONUtils.formulateJsonForListFunctionsCall(registeredFunctions.keySet());
+     return new ResponseEntity<String>(listFunctionsAsJson, headers, HttpStatus.OK);
+   } 
+   
+   /**
+    * Execute a function on Gemfire data node using REST API call.
+    * Arguments to the function are passed as JSON string in the request body. 
+    * @param functionId represents function to be executed
+    * @param region list of regions on which function to be executed.
+    * @param members list of nodes on which function to be executed.
+    * @param groups list of groups on which function to be executed. 
+    * @param argsInBody function argument as a JSON document
+    * @return result as a JSON document
+    */
+   @RequestMapping(method = RequestMethod.POST, value = "/{functionId}", produces = { MediaType.APPLICATION_JSON_VALUE })
+   @ApiOperation(
+     value = "execute function",
+     notes = "Execute function with arguments on regions, members, or group(s). By default function will be executed on all nodes if none of (onRegion, onMembers, onGroups) specified",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK." ),
+     @ApiResponse( code = 500, message = "if GemFire throws an error or exception" ),
+     @ApiResponse( code = 400, message = "if Function arguments specified as JSON document in the request body is invalid" )
+   } )
+   @ResponseBody
+   @ResponseStatus(HttpStatus.OK)
+   public ResponseEntity<String> execute(@PathVariable("functionId") String functionId,
+                           @RequestParam(value = "onRegion", required = false ) String region,
+                           @RequestParam(value = "onMembers", required = false ) final String[] members,
+                           @RequestParam(value = "onGroups", required = false) final String[] groups,
+                           @RequestBody(required = false) final String argsInBody
+                           )
+   {
+     Execution function = null;
+     functionId = decode(functionId);
+     
++    boolean isOptimizedForWrite = FunctionService.getFunction(functionId).optimizeForWrite();
++    Object[] args = null;
++    final HttpHeaders headers = new HttpHeaders();
++    
++    if(argsInBody != null) 
++    {
++      args = jsonToObjectArray(argsInBody);
++    }
++    
++    //Request(Pre) authorization if security is enabled.
++    ExecuteFunctionOperationContext fContext = null;
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        fContext = AuthorizationProvider.executeFunctionAuthorize(functionId, region, null, args, isOptimizedForWrite);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
+     if (StringUtils.hasText(region)) {
+       if(logger.isDebugEnabled()){
+         logger.debug("Executing Function ({}) with arguments ({}) on Region ({})...", functionId,
+             ArrayUtils.toString(argsInBody), region);
+       }
+       
+       region = decode(region);
+       try {
+         function = FunctionService.onRegion(getRegion(region));
+       } catch(FunctionException fe){
+         throw new GemfireRestException(String.format("The Region identified by name (%1$s) could not found!", region), fe);
+       }
+     }
+     else if (ArrayUtils.isNotEmpty(members)) {
+       if(logger.isDebugEnabled()){
+         logger.debug("Executing Function ({}) with arguments ({}) on Member ({})...", functionId,
+             ArrayUtils.toString(argsInBody), ArrayUtils.toString(members));
+       }
+       try {            
+         function = FunctionService.onMembers(getMembers(members));
+       } catch(FunctionException fe){
+         throw new GemfireRestException("Could not found the specified members in disributed system!", fe);
+       }
+     }
+     else if (ArrayUtils.isNotEmpty(groups)) {
+       if(logger.isDebugEnabled()){
+         logger.debug("Executing Function ({}) with arguments ({}) on Groups ({})...", functionId,
+             ArrayUtils.toString(argsInBody), ArrayUtils.toString(groups));
+       }
+       try {
+         function = FunctionService.onMembers(groups);
+       } catch(FunctionException fe){
+         throw new GemfireRestException("no member(s) are found belonging to the provided group(s)!", fe);
+       }
+     }
+     else {
+       //Default case is to execute function on all existing data node in DS, document this.
+       if(logger.isDebugEnabled()){
+         logger.debug("Executing Function ({}) with arguments ({}) on all Members...", functionId,
+             ArrayUtils.toString(argsInBody));
+       }
+         
+       try {
+         function = FunctionService.onMembers(getAllMembersInDS());
+       } catch(FunctionException fe) {
+         throw new GemfireRestException("Disributed system does not contain any valid data node to run the specified  function!", fe);
+       }
+     }
 -
++    
+     final ResultCollector<?, ?> results;
+     
+     try {
 -      if(argsInBody != null) 
 -      {
 -        Object[] args = jsonToObjectArray(argsInBody);
 -        
 -        //execute function with specified arguments
 -        if(args.length == 1){
++      //Post Authorization if security is enabled.
++      if(AuthorizationProvider.isSecurityEnabled() && RestAgent.getAuthorizeRequestPP(getAuthToken()) != null) {
++        if (fContext == null){
++          fContext = new ExecuteFunctionOperationContext(functionId, region, null, args, isOptimizedForWrite, true);
++        }
++        if(args != null && args.length == 1){        
++          results = function.withArgs(args[0]).withCollector(new FunctionExecutionPostAuthzRC(fContext)).execute(functionId);
++        }else if (args != null && args.length > 1) {
++          results = function.withArgs(args).withCollector(new FunctionExecutionPostAuthzRC(fContext)).execute(functionId);
++        }else {
++          //execute function with no args
++          results = function.withCollector(new FunctionExecutionPostAuthzRC(fContext)).execute(functionId);
++        }
++      }else {
++        if(args != null && args.length == 1){        
+           results = function.withArgs(args[0]).execute(functionId);
 -        } else {
++        }else if (args != null && args.length > 1) {
+           results = function.withArgs(args).execute(functionId);
++        }else {
++          //execute function with no args
++          results = function.execute(functionId);
+         }
 -      }else { 
 -        //execute function with no args
 -        results = function.execute(functionId);
+       }
+     } catch(ClassCastException cce){
+       throw new GemfireRestException("Key is of an inappropriate type for this region!", cce);
+     } catch(NullPointerException npe){
+       throw new GemfireRestException("Specified key is null and this region does not permit null keys!", npe);
+     } catch(LowMemoryException lme){
+       throw new GemfireRestException("Server has encountered low memory condition!", lme);
+     } catch (IllegalArgumentException ie) {
+       throw new GemfireRestException("Input parameter is null! ", ie);
+     }catch (FunctionException fe){
+       throw new GemfireRestException("Server has encountered error while executing the function!", fe);
+     }
+     
+     try {
+       Object functionResult = results.getResult();
+     
+       if(functionResult instanceof List<?>) {
 -        final HttpHeaders headers = new HttpHeaders();
+         headers.setLocation(toUri("functions", functionId));
+       
+         try {
+           @SuppressWarnings("unchecked")
+           String functionResultAsJson = JSONUtils.convertCollectionToJson((ArrayList<Object>)functionResult);
+           return new ResponseEntity<String>(functionResultAsJson, headers, HttpStatus.OK);  
+         } catch (JSONException e) {
+           throw new GemfireRestException("Could not convert function results into Restful (JSON) format!", e);
+         }
+       }else {
+         throw new GemfireRestException("Function has returned results that could not be converted into Restful (JSON) format!");
+       }
+     }catch (FunctionException fe) {
+       fe.printStackTrace();
+       throw new GemfireRestException("Server has encountered an error while processing function execution!", fe);
+     }
+   }
+ }
+ 


[03/50] [abbrv] incubator-geode git commit: GEODE-907: Converted core functionality to use jackson

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
index 2c17886..05a96ec 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java
@@ -19,22 +19,21 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import java.text.DecimalFormat;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.DecimalFormat;
 
 /**
  * Class MemberRegionsService
@@ -50,91 +49,80 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class MemberRegionsService implements PulseService {
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   // String constants used for forming a json response
   private final String NAME = "name";
   private final String ENTRY_SIZE = "entrySize";
   private final String DISC_STORE_NAME = "diskStoreName";
   private final String DISC_SYNCHRONOUS = "diskSynchronous";
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      String memberName = requestDataJSON.getJSONObject("MemberRegions")
-          .getString("memberName");
-
-      Cluster.Member clusterMember = cluster.getMember(StringUtils
-          .makeCompliantName(memberName));
-
-      if (clusterMember != null) {
-        responseJSON.put("memberId", clusterMember.getId());
-        responseJSON.put(this.NAME, clusterMember.getName());
-        responseJSON.put("host", clusterMember.getHost());
-
-        // member's regions
-        Cluster.Region[] memberRegions = clusterMember.getMemberRegionsList();
-        JSONArray regionsListJson = new JSONArray();
-        for (Cluster.Region memberRegion : memberRegions) {
-          JSONObject regionJSON = new JSONObject();
-          regionJSON.put(this.NAME, memberRegion.getName());
-
-          if (PulseConstants.PRODUCT_NAME_SQLFIRE
-              .equalsIgnoreCase(PulseController.getPulseProductSupport())) {
-            // Convert region path to dot separated region path
-            regionJSON.put("fullPath", StringUtils
-                .getTableNameFromRegionName(memberRegion.getFullPath()));
-          } else {
-            regionJSON.put("fullPath", memberRegion.getFullPath());
-          }
-
-          regionJSON.put("type", memberRegion.getRegionType());
-          regionJSON
-              .put("entryCount", memberRegion.getSystemRegionEntryCount());
-          Long entrySize = memberRegion.getEntrySize();
-
-          DecimalFormat form = new DecimalFormat(
-              PulseConstants.DECIMAL_FORMAT_PATTERN_2);
-          String entrySizeInMB = form.format(entrySize / (1024f * 1024f));
-
-          if (entrySize < 0) {
-            regionJSON.put(this.ENTRY_SIZE, this.VALUE_NA);
-          } else {
-            regionJSON.put(this.ENTRY_SIZE, entrySizeInMB);
-          }
-          regionJSON.put("scope", memberRegion.getScope());
-          String diskStoreName = memberRegion.getDiskStoreName();
-          if (StringUtils.isNotNullNotEmptyNotWhiteSpace(diskStoreName)) {
-            regionJSON.put(this.DISC_STORE_NAME, diskStoreName);
-            regionJSON.put(this.DISC_SYNCHRONOUS,
-                memberRegion.isDiskSynchronous());
-          } else {
-            regionJSON.put(this.DISC_SYNCHRONOUS, this.VALUE_NA);
-            regionJSON.put(this.DISC_STORE_NAME, "");
-          }
-          regionJSON.put("gatewayEnabled", memberRegion.getWanEnabled());
-
-          regionsListJson.put(regionJSON);
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    String memberName = requestDataJSON.get("MemberRegions").get("memberName").textValue();
+
+    Cluster.Member clusterMember = cluster.getMember(StringUtils.makeCompliantName(memberName));
+
+    if (clusterMember != null) {
+      responseJSON.put("memberId", clusterMember.getId());
+      responseJSON.put(this.NAME, clusterMember.getName());
+      responseJSON.put("host", clusterMember.getHost());
+
+      // member's regions
+      Cluster.Region[] memberRegions = clusterMember.getMemberRegionsList();
+      ArrayNode regionsListJson = mapper.createArrayNode();
+      for (Cluster.Region memberRegion : memberRegions) {
+        ObjectNode regionJSON = mapper.createObjectNode();
+        regionJSON.put(this.NAME, memberRegion.getName());
+
+        if (PulseConstants.PRODUCT_NAME_SQLFIRE.equalsIgnoreCase(PulseController.getPulseProductSupport())) {
+          // Convert region path to dot separated region path
+          regionJSON.put("fullPath", StringUtils.getTableNameFromRegionName(memberRegion.getFullPath()));
+        } else {
+          regionJSON.put("fullPath", memberRegion.getFullPath());
         }
-        responseJSON.put("memberRegions", regionsListJson);
 
-        // response
-        responseJSON.put("status", "Normal");
+        regionJSON.put("type", memberRegion.getRegionType());
+        regionJSON.put("entryCount", memberRegion.getSystemRegionEntryCount());
+        Long entrySize = memberRegion.getEntrySize();
 
+        DecimalFormat form = new DecimalFormat(PulseConstants.DECIMAL_FORMAT_PATTERN_2);
+        String entrySizeInMB = form.format(entrySize / (1024f * 1024f));
+
+        if (entrySize < 0) {
+          regionJSON.put(this.ENTRY_SIZE, this.VALUE_NA);
+        } else {
+          regionJSON.put(this.ENTRY_SIZE, entrySizeInMB);
+        }
+        regionJSON.put("scope", memberRegion.getScope());
+        String diskStoreName = memberRegion.getDiskStoreName();
+        if (StringUtils.isNotNullNotEmptyNotWhiteSpace(diskStoreName)) {
+          regionJSON.put(this.DISC_STORE_NAME, diskStoreName);
+          regionJSON.put(this.DISC_SYNCHRONOUS,
+              memberRegion.isDiskSynchronous());
+        } else {
+          regionJSON.put(this.DISC_SYNCHRONOUS, this.VALUE_NA);
+          regionJSON.put(this.DISC_STORE_NAME, "");
+        }
+        regionJSON.put("gatewayEnabled", memberRegion.getWanEnabled());
+
+        regionsListJson.add(regionJSON);
       }
+      responseJSON.put("memberRegions", regionsListJson);
 
-      // Send json response
-      return responseJSON;
+      // response
+      responseJSON.put("status", "Normal");
 
-    } catch (JSONException e) {
-      throw new Exception(e);
     }
+
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
index 3a730c5..9ea701a 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java
@@ -19,11 +19,11 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
@@ -43,35 +43,34 @@ import javax.servlet.http.HttpServletRequest;
 @Scope("singleton")
 public class MembersListService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
     // members list
-    JSONArray memberListJson = new JSONArray();
+    ArrayNode memberListJson = mapper.createArrayNode();
     Cluster.Member[] memberSet = cluster.getMembers();
 
-    try {
-      for (Cluster.Member member : memberSet) {
-        JSONObject memberJSON = new JSONObject();
-        memberJSON.put("memberId", member.getId());
-        memberJSON.put("name", member.getName());
-        memberJSON.put("host", member.getHost());
-        memberJSON.put("hostnameForClients", member.getHostnameForClients());
-        memberListJson.put(memberJSON);
-      }
+    for (Cluster.Member member : memberSet) {
+      ObjectNode memberJSON = mapper.createObjectNode();
+      memberJSON.put("memberId", member.getId());
+      memberJSON.put("name", member.getName());
+      memberJSON.put("host", member.getHost());
 
-      // Response JSON
-      responseJSON.put("clusterMembers", memberListJson);
-      responseJSON.put("clusterName", cluster.getServerName());
-      // Send json response
-      return responseJSON;
-    } catch (JSONException e) {
-      throw new Exception(e);
+      memberListJson.add(memberJSON);
     }
+
+    // Response JSON
+    responseJSON.put("clusterMembers", memberListJson);
+    responseJSON.put("clusterName", cluster.getServerName());
+
+    // Send json response
+    return responseJSON;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
index e01c911..f3a6ee9 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java
@@ -21,6 +21,7 @@ package com.vmware.gemfire.tools.pulse.internal.service;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 
 /**
@@ -37,6 +38,11 @@ public interface PulseService {
   String VALUE_ON = "ON";
   String VALUE_OFF = "OFF";
 
-  JSONObject execute(HttpServletRequest httpServletRequest)
-      throws Exception;
+  default JSONObject execute(HttpServletRequest httpServletRequest) throws Exception {
+    return null;
+  }
+
+  default ObjectNode tempExecute(HttpServletRequest httpServletRequest) throws Exception {
+    return null;
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
index 7d6a7ef..b2e15c9 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java
@@ -19,15 +19,14 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class PulseVersionService
@@ -45,28 +44,21 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 @Scope("singleton")
 public class PulseVersionService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    // Response
+    responseJSON.put("pulseVersion", PulseController.pulseVersion.getPulseVersion());
+    responseJSON.put("buildId", PulseController.pulseVersion.getPulseBuildId());
+    responseJSON.put("buildDate", PulseController.pulseVersion.getPulseBuildDate());
+    responseJSON.put("sourceDate", PulseController.pulseVersion.getPulseSourceDate());
+    responseJSON.put("sourceRevision", PulseController.pulseVersion.getPulseSourceRevision());
+    responseJSON.put("sourceRepository", PulseController.pulseVersion.getPulseSourceRepository());
 
-    try {
-      // Response
-      responseJSON.put("pulseVersion",
-          PulseController.pulseVersion.getPulseVersion());
-      responseJSON.put("buildId",
-          PulseController.pulseVersion.getPulseBuildId());
-      responseJSON.put("buildDate",
-          PulseController.pulseVersion.getPulseBuildDate());
-      responseJSON.put("sourceDate",
-          PulseController.pulseVersion.getPulseSourceDate());
-      responseJSON.put("sourceRevision",
-          PulseController.pulseVersion.getPulseSourceRevision());
-      responseJSON.put("sourceRepository",
-          PulseController.pulseVersion.getPulseSourceRepository());
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
     // Send json response
     return responseJSON;
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
index a20a2ed..c3987b2 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java
@@ -21,6 +21,9 @@ package com.vmware.gemfire.tools.pulse.internal.service;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
@@ -46,107 +49,71 @@ import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 @Scope("singleton")
 public class QueryStatisticsService implements PulseService {
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   @Override
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
+    ObjectNode responseJSON = mapper.createObjectNode();
 
-    try {
-      Cluster.Statement[] stmts = cluster.getStatements();
+    Cluster.Statement[] stmts = cluster.getStatements();
 
-      JSONObject queryJSON;
-      JSONArray queryListJson = new JSONArray();
-      for (int i = 0; i < stmts.length; ++i) {
-        queryJSON = new JSONObject();
-        queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_QUERYDEFINITION,
-            stmts[i].getQueryDefinition());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_NUMTIMESCOMPILED,
-            (stmts[i].getNumTimesCompiled() < 0) ? this.VALUE_NA : stmts[i]
-                .getNumTimesCompiled());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_NUMEXECUTION,
-            (stmts[i].getNumExecution() < 0) ? this.VALUE_NA : stmts[i]
-                .getNumExecution());
-        queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_NUMEXECUTIONSINPROGRESS,
-            (stmts[i].getNumExecutionsInProgress() < 0) ? this.VALUE_NA
-                : stmts[i].getNumExecutionsInProgress());
-        queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_NUMTIMESGLOBALINDEXLOOKUP,
-            (stmts[i].getNumTimesGlobalIndexLookup() < 0) ? this.VALUE_NA
-                : stmts[i].getNumTimesGlobalIndexLookup());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_NUMROWSMODIFIED,
-            (stmts[i].getNumRowsModified() < 0) ? this.VALUE_NA : stmts[i]
-                .getNumRowsModified());
-        queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_PARSETIME, (stmts[i]
-            .getParseTime() < 0) ? this.VALUE_NA : stmts[i].getParseTime());
-        queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_BINDTIME, (stmts[i]
-            .getBindTime() < 0) ? this.VALUE_NA : stmts[i].getBindTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_OPTIMIZETIME,
-            (stmts[i].getOptimizeTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getOptimizeTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_ROUTINGINFOTIME,
-            (stmts[i].getRoutingInfoTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getRoutingInfoTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_GENERATETIME,
-            (stmts[i].getGenerateTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getGenerateTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_TOTALCOMPILATIONTIME,
-            (stmts[i].getTotalCompilationTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getTotalCompilationTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_EXECUTIONTIME,
-            (stmts[i].getExecutionTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getExecutionTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_PROJECTIONTIME,
-            (stmts[i].getProjectionTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getProjectionTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_TOTALEXECUTIONTIME,
-            (stmts[i].getTotalExecutionTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getTotalExecutionTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_ROWSMODIFICATIONTIME,
-            (stmts[i].getRowsModificationTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getRowsModificationTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_QNNUMROWSSEEN,
-            (stmts[i].getqNNumRowsSeen() < 0) ? this.VALUE_NA : stmts[i]
-                .getqNNumRowsSeen());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_QNMSGSENDTIME,
-            (stmts[i].getqNMsgSendTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getqNMsgSendTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_QNMSGSERTIME,
-            (stmts[i].getqNMsgSerTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getqNMsgSerTime());
-        queryJSON.put(
-            PulseConstants.MBEAN_ATTRIBUTE_QNRESPDESERTIME,
-            (stmts[i].getqNRespDeSerTime() < 0) ? this.VALUE_NA : stmts[i]
-                .getqNRespDeSerTime());
-        queryListJson.put(queryJSON);
-      }
-      responseJSON.put("queriesList", queryListJson);
+    ArrayNode queryListJson = mapper.createArrayNode();
+    for (int i = 0; i < stmts.length; ++i) {
+      ObjectNode queryJSON = mapper.createObjectNode();
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_QUERYDEFINITION, stmts[i].getQueryDefinition());
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_NUMTIMESCOMPILED,
+          mapper.valueToTree(stmts[i].getNumTimesCompiled() < 0 ? this.VALUE_NA : stmts[i].getNumTimesCompiled()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_NUMEXECUTION,
+          mapper.valueToTree(stmts[i].getNumExecution() < 0 ? this.VALUE_NA : stmts[i].getNumExecution()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_NUMEXECUTIONSINPROGRESS,
+          mapper.valueToTree(stmts[i].getNumExecutionsInProgress() < 0 ? this.VALUE_NA : stmts[i].getNumExecutionsInProgress()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_NUMTIMESGLOBALINDEXLOOKUP,
+          mapper.valueToTree(stmts[i].getNumTimesGlobalIndexLookup() < 0 ? this.VALUE_NA : stmts[i].getNumTimesGlobalIndexLookup()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_NUMROWSMODIFIED,
+          mapper.valueToTree(stmts[i].getNumRowsModified() < 0 ? this.VALUE_NA : stmts[i].getNumRowsModified()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_PARSETIME,
+          mapper.valueToTree(stmts[i].getParseTime() < 0 ? this.VALUE_NA : stmts[i].getParseTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_BINDTIME,
+          mapper.valueToTree(stmts[i].getBindTime() < 0 ? this.VALUE_NA : stmts[i].getBindTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_OPTIMIZETIME,
+          mapper.valueToTree(stmts[i].getOptimizeTime() < 0 ? this.VALUE_NA : stmts[i].getOptimizeTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_ROUTINGINFOTIME,
+          mapper.valueToTree(stmts[i].getRoutingInfoTime() < 0 ? this.VALUE_NA : stmts[i].getRoutingInfoTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_GENERATETIME,
+          mapper.valueToTree(stmts[i].getGenerateTime() < 1 ? this.VALUE_NA : stmts[i].getGenerateTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_TOTALCOMPILATIONTIME,
+          mapper.valueToTree(stmts[i].getTotalCompilationTime() < 0 ? this.VALUE_NA : stmts[i].getTotalCompilationTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_EXECUTIONTIME,
+          mapper.valueToTree(stmts[i].getExecutionTime() < 0 ? this.VALUE_NA : stmts[i].getExecutionTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_PROJECTIONTIME,
+          mapper.valueToTree(stmts[i].getProjectionTime() < 0 ? this.VALUE_NA : stmts[i].getProjectionTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_TOTALEXECUTIONTIME,
+          mapper.valueToTree(stmts[i].getTotalExecutionTime() < 0 ? this.VALUE_NA : stmts[i].getTotalExecutionTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_ROWSMODIFICATIONTIME,
+          mapper.valueToTree(stmts[i].getRowsModificationTime() < 0 ? this.VALUE_NA : stmts[i].getRowsModificationTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_QNNUMROWSSEEN,
+          mapper.valueToTree(stmts[i].getqNNumRowsSeen() < 0 ? this.VALUE_NA : stmts[i].getqNNumRowsSeen()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_QNMSGSENDTIME,
+          mapper.valueToTree(stmts[i].getqNMsgSendTime() < 0 ? this.VALUE_NA : stmts[i].getqNMsgSendTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_QNMSGSERTIME,
+          mapper.valueToTree(stmts[i].getqNMsgSerTime() < 0 ? this.VALUE_NA : stmts[i].getqNMsgSerTime()));
+      queryJSON.put(PulseConstants.MBEAN_ATTRIBUTE_QNRESPDESERTIME,
+          mapper.valueToTree(stmts[i].getqNRespDeSerTime() < 0 ? this.VALUE_NA : stmts[i].getqNRespDeSerTime()));
+      queryListJson.add(queryJSON);
+    }
+    responseJSON.put("queriesList", queryListJson);
 
-      // return jmx status
-      responseJSON.put("connectedFlag", cluster.isConnectedFlag());
-      responseJSON.put("connectedErrorMsg", cluster.getConnectionErrorMsg());
+    // return jmx status
+    responseJSON.put("connectedFlag", cluster.isConnectedFlag());
+    responseJSON.put("connectedErrorMsg", cluster.getConnectionErrorMsg());
 
-      // Send json response
-      return responseJSON;
+    // Send json response
+    return responseJSON;
 
-    } catch (JSONException e) {
-      throw new Exception(e);
-    }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
index 4aa5560..47fd20d 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java
@@ -19,18 +19,18 @@
 
 package com.vmware.gemfire.tools.pulse.internal.service;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
+import com.vmware.gemfire.tools.pulse.internal.data.Repository;
+import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
-import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
-import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class SystemAlertsService
@@ -47,37 +47,32 @@ import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 @Scope("singleton")
 public class SystemAlertsService implements PulseService {
 
-  public JSONObject execute(final HttpServletRequest request) throws Exception {
+  private static final ObjectMapper mapper = new ObjectMapper();
+
+  public ObjectNode tempExecute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();
 
     // json object to be sent as response
-    JSONObject responseJSON = new JSONObject();
-
-    try {
-      JSONObject requestDataJSON = new JSONObject(
-          request.getParameter("pulseData"));
-      int pageNumber = 1; // Default
-      String strPageNumber = requestDataJSON.getJSONObject("SystemAlerts")
-          .getString("pageNumber");
-      if (StringUtils.isNotNullNotEmptyNotWhiteSpace(strPageNumber)) {
-        try {
-          pageNumber = Integer.valueOf(strPageNumber);
-        } catch (NumberFormatException e) {
-        }
+    ObjectNode responseJSON = mapper.createObjectNode();
+
+    JsonNode requestDataJSON = mapper.readTree(request.getParameter("pulseData"));
+    int pageNumber = 1; // Default
+    String strPageNumber = requestDataJSON.get("SystemAlerts").get("pageNumber").textValue();
+    if (StringUtils.isNotNullNotEmptyNotWhiteSpace(strPageNumber)) {
+      try {
+        pageNumber = Integer.valueOf(strPageNumber);
+      } catch (NumberFormatException e) {
       }
-
-      // clucter's Members
-      responseJSON.put("systemAlerts", getAlertsJson(cluster, pageNumber));
-      responseJSON.put("pageNumber", cluster.getNotificationPageNumber());
-      responseJSON.put("connectedFlag", cluster.isConnectedFlag());
-      responseJSON.put("connectedErrorMsg", cluster.getConnectionErrorMsg());
-
-    } catch (JSONException e) {
-      throw new Exception(e);
     }
 
+    // cluster's Members
+    responseJSON.put("systemAlerts", getAlertsJson(cluster, pageNumber));
+    responseJSON.put("pageNumber", cluster.getNotificationPageNumber());
+    responseJSON.put("connectedFlag", cluster.isConnectedFlag());
+    responseJSON.put("connectedErrorMsg", cluster.getConnectionErrorMsg());
+
     // Send json response
     return responseJSON;
   }
@@ -89,23 +84,22 @@ public class SystemAlertsService implements PulseService {
    * @param cluster
    * @return JSONObject Array list
    */
-  public static JSONObject getAlertsJson(Cluster cluster, int pageNumber)
-      throws JSONException {
+  public static ObjectNode getAlertsJson(Cluster cluster, int pageNumber) {
     // getting list of all types of alerts
     Cluster.Alert[] alertsList = cluster.getAlertsList();
 
     // create alerts json
-    JSONObject alertsJsonObject = new JSONObject();
+    ObjectNode alertsJsonObject = mapper.createObjectNode();
 
     if ((alertsList != null) && (alertsList.length > 0)) {
-      JSONArray errorJsonArray = new JSONArray();
-      JSONArray severeJsonArray = new JSONArray();
-      JSONArray warningJsonArray = new JSONArray();
-      JSONArray infoJsonArray = new JSONArray();
+      ArrayNode errorJsonArray = mapper.createArrayNode();
+      ArrayNode severeJsonArray = mapper.createArrayNode();
+      ArrayNode warningJsonArray = mapper.createArrayNode();
+      ArrayNode infoJsonArray = mapper.createArrayNode();
 
       cluster.setNotificationPageNumber(pageNumber);
       for (Cluster.Alert alert : alertsList) {
-        JSONObject objAlertJson = new JSONObject();
+        ObjectNode objAlertJson = mapper.createObjectNode();
         objAlertJson.put("description", alert.getDescription());
         objAlertJson.put("memberName", alert.getMemberName());
         objAlertJson.put("severity", alert.getSeverity());
@@ -115,13 +109,13 @@ public class SystemAlertsService implements PulseService {
         objAlertJson.put("id", alert.getId());
 
         if (alert.getSeverity() == Cluster.Alert.SEVERE) {
-          severeJsonArray.put(objAlertJson);
+          severeJsonArray.add(objAlertJson);
         } else if (alert.getSeverity() == Cluster.Alert.ERROR) {
-          errorJsonArray.put(objAlertJson);
+          errorJsonArray.add(objAlertJson);
         } else if (alert.getSeverity() == Cluster.Alert.WARNING) {
-          warningJsonArray.put(objAlertJson);
+          warningJsonArray.add(objAlertJson);
         } else {
-          infoJsonArray.put(objAlertJson);
+          infoJsonArray.add(objAlertJson);
         }
       }
       alertsJsonObject.put("info", infoJsonArray);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
index c4f7a49..33e0a1c 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
@@ -1,13 +1,15 @@
 package com.vmware.gemfire.tools.pulse.controllers;
 
-import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
 import com.vmware.gemfire.tools.pulse.internal.PulseAppListener;
+import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConfig;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import org.apache.commons.collections.buffer.CircularFifoBuffer;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -35,6 +37,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.UUID;
 
+import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -50,13 +53,13 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 /**
  * @author Jens Deppe
  */
-@Category(IntegrationTest.class)
+@Category(UnitTest.class)
 @PrepareForTest(Repository.class)
 @RunWith(PowerMockRunner.class)
 @PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
 @WebAppConfiguration
 @ContextConfiguration("classpath*:mvc-dispatcher-servlet.xml")
-@PowerMockIgnore("*.IntegrationTest")
+@PowerMockIgnore("*.UnitTest")
 public class PulseControllerJUnitTest {
 
   @Autowired
@@ -79,6 +82,8 @@ public class PulseControllerJUnitTest {
   private static final String REGION_TYPE = "PARTITION";
   private static final String AEQ_LISTENER = "async-event-listener";
   private static final String CLIENT_NAME = "client-1";
+  private static final String PHYSICAL_HOST_NAME = "physical-host-1";
+  private static final String GEMFIRE_VERSION = "1.0.0";
 
   private static final Principal principal;
 
@@ -86,6 +91,8 @@ public class PulseControllerJUnitTest {
     principal = () -> PRINCIPAL_USER;
   }
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   @Before
   public void setup() throws Exception {
     this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
@@ -106,12 +113,14 @@ public class PulseControllerJUnitTest {
     region.setRegionOnMembers(new ArrayList<Cluster.RegionOnMember>() {{
       add(regionOnMember);
     }});
-    cluster.addClusterRegion("/mock-region", region);
+    cluster.addClusterRegion(REGION_PATH, region);
 
     Cluster.Member member = new Cluster.Member();
     member.setId(MEMBER_ID);
     member.setName(MEMBER_NAME);
     member.setUptime(1L);
+    member.setHost(PHYSICAL_HOST_NAME);
+    member.setGemfireVersion(GEMFIRE_VERSION);
 
     member.setMemberRegions(new HashMap<String, Cluster.Region>() {{
       put(REGION_NAME, region);
@@ -131,13 +140,35 @@ public class PulseControllerJUnitTest {
       put(CLIENT_NAME, client);
     }});
 
-    cluster.setMembersHMap(new HashMap() {{put(MEMBER_NAME, member);}});
+    cluster.setMembersHMap(new HashMap() {{
+      put(MEMBER_NAME, member);
+    }});
+    cluster.setPhysicalToMember(new HashMap() {{
+      put(PHYSICAL_HOST_NAME, new ArrayList() {{
+        add(member);
+      }});
+    }});
     cluster.setServerName(CLUSTER_NAME);
     cluster.setMemoryUsageTrend(new CircularFifoBuffer() {{
       add(1);
       add(2);
       add(3);
     }});
+    cluster.setWritePerSecTrend(new CircularFifoBuffer() {{
+      add(1);
+      add(2);
+      add(3);
+    }});
+    cluster.setThroughoutReadsTrend(new CircularFifoBuffer() {{
+      add(1);
+      add(2);
+      add(3);
+    }});
+    cluster.setThroughoutWritesTrend(new CircularFifoBuffer() {{
+      add(4);
+      add(5);
+      add(6);
+    }});
 
     Repository repo = Mockito.spy(Repository.class);
 
@@ -150,6 +181,13 @@ public class PulseControllerJUnitTest {
     File tempQueryLog = tempFolder.newFile("query_history.log");
     config.setQueryHistoryFileName(tempQueryLog.toString());
     doReturn(config).when(repo).getPulseConfig();
+
+    PulseController.pulseVersion.setPulseVersion("not empty");
+    PulseController.pulseVersion.setPulseBuildId("not empty");
+    PulseController.pulseVersion.setPulseBuildDate("not empty");
+    PulseController.pulseVersion.setPulseSourceDate("not empty");
+    PulseController.pulseVersion.setPulseSourceRevision("not empty");
+    PulseController.pulseVersion.setPulseSourceRepository("not empty");
   }
 
   @Test
@@ -160,7 +198,7 @@ public class PulseControllerJUnitTest {
         .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.ClusterDetails.userName").value(PRINCIPAL_USER))
-        .andExpect(jsonPath("$.ClusterDetails.totalHeap").value(0))
+        .andExpect(jsonPath("$.ClusterDetails.totalHeap").value(0D))
         .andExpect(jsonPath("$.ClusterDetails.clusterName").value(CLUSTER_NAME))
     ;
   }
@@ -172,10 +210,10 @@ public class PulseControllerJUnitTest {
         .principal(principal)
         .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk())
-        .andExpect(jsonPath("$.ClusterDiskThroughput.currentThroughputWrites").value(0))
-        .andExpect(jsonPath("$.ClusterDiskThroughput.throughputReads").isEmpty())
-        .andExpect(jsonPath("$.ClusterDiskThroughput.currentThroughputReads").value(0))
-        .andExpect(jsonPath("$.ClusterDiskThroughput.throughputWrites").isEmpty())
+        .andExpect(jsonPath("$.ClusterDiskThroughput.currentThroughputWrites").value(0D))
+        .andExpect(jsonPath("$.ClusterDiskThroughput.throughputReads", contains(1, 2, 3)))
+        .andExpect(jsonPath("$.ClusterDiskThroughput.currentThroughputReads").value(0D))
+        .andExpect(jsonPath("$.ClusterDiskThroughput.throughputWrites", contains(4, 5, 6)))
     ;
   }
 
@@ -200,7 +238,7 @@ public class PulseControllerJUnitTest {
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.ClusterKeyStatistics.readPerSecTrend").isEmpty())
         .andExpect(jsonPath("$.ClusterKeyStatistics.queriesPerSecTrend").isEmpty())
-        .andExpect(jsonPath("$.ClusterKeyStatistics.writePerSecTrend").isEmpty())
+        .andExpect(jsonPath("$.ClusterKeyStatistics.writePerSecTrend", contains(1, 2, 3)))
     ;
   }
 
@@ -212,7 +250,7 @@ public class PulseControllerJUnitTest {
         .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.ClusterMembers.members[0].serverGroups[0]").value("Default"))
-        .andExpect(jsonPath("$.ClusterMembers.members[0].cpuUsage").value(0))
+        .andExpect(jsonPath("$.ClusterMembers.members[0].cpuUsage").value(0D))
         .andExpect(jsonPath("$.ClusterMembers.members[0].clients").value(1))
         .andExpect(jsonPath("$.ClusterMembers.members[0].heapUsage").value(0))
         .andExpect(jsonPath("$.ClusterMembers.members[0].name").value(MEMBER_NAME))
@@ -233,9 +271,33 @@ public class PulseControllerJUnitTest {
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.ClusterMembersRGraph.memberCount").value(0))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.data").isEmpty())
-        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children").isEmpty())
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.name").value(0))
         .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.id").value(0))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].id").value(PHYSICAL_HOST_NAME))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].name").value(PHYSICAL_HOST_NAME))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.loadAvg").isEmpty())
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.sockets").isEmpty())
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.threads").value(0))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.cpuUsage").value(0D))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.memoryUsage").value(0))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.hostStatus").value("Normal"))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].data.$type").value("hostNormalNode"))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].id").value(MEMBER_ID))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].name").value(MEMBER_NAME))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.gemfireVersion").value(GEMFIRE_VERSION))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.memoryUsage").value(0))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.cpuUsage").value(0D))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.regions").value(1))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.host").value(PHYSICAL_HOST_NAME))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.port").value("-"))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.clients").value(1))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.gcPauses").value(0))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.numThreads").value(0))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.nodeType").value("memberNormalNode"))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.$type").value("memberNormalNode"))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.gatewaySender").value(0))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].data.gatewayReceiver").value(0))
+        .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children[0].children[0].children").isEmpty())
     ;
   }
 
@@ -263,7 +325,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterRegion.region[0].regionPath").value(REGION_PATH))
         .andExpect(jsonPath("$.ClusterRegion.region[0].diskReadsTrend").isEmpty())
         .andExpect(jsonPath("$.ClusterRegion.region[0].memoryUsage").value("0.0000"))
-        .andExpect(jsonPath("$.ClusterRegion.region[0].getsRate").value(0))
+        .andExpect(jsonPath("$.ClusterRegion.region[0].getsRate").value(0D))
         .andExpect(jsonPath("$.ClusterRegion.region[0].wanEnabled").value(false))
         .andExpect(jsonPath("$.ClusterRegion.region[0].memberCount").value(1))
         .andExpect(jsonPath("$.ClusterRegion.region[0].isHDFSWriteOnly").value("NA"))
@@ -272,7 +334,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterRegion.region[0].emptyNodes").value(0))
         .andExpect(jsonPath("$.ClusterRegion.region[0].type").value(REGION_TYPE))
         .andExpect(jsonPath("$.ClusterRegion.region[0].isEnableOffHeapMemory").value("OFF"))
-        .andExpect(jsonPath("$.ClusterRegion.region[0].putsRate").value(0))
+        .andExpect(jsonPath("$.ClusterRegion.region[0].putsRate").value(0D))
         .andExpect(jsonPath("$.ClusterRegion.region[0].totalMemory").value(0))
         .andExpect(jsonPath("$.ClusterRegion.region[0].entryCount").value(0))
         .andExpect(jsonPath("$.ClusterRegion.region[0].compressionCodec").value("NA"))
@@ -297,7 +359,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterRegions.regions[0].regionPath").value(REGION_PATH))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].diskReadsTrend").isEmpty())
         .andExpect(jsonPath("$.ClusterRegions.regions[0].memoryUsage").value("0.0000"))
-        .andExpect(jsonPath("$.ClusterRegions.regions[0].getsRate").value(0))
+        .andExpect(jsonPath("$.ClusterRegions.regions[0].getsRate").value(0D))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].wanEnabled").value(false))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].memberCount").value(1))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].isHDFSWriteOnly").value("NA"))
@@ -306,7 +368,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterRegions.regions[0].emptyNodes").value(0))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].type").value(REGION_TYPE))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].isEnableOffHeapMemory").value("OFF"))
-        .andExpect(jsonPath("$.ClusterRegions.regions[0].putsRate").value(0))
+        .andExpect(jsonPath("$.ClusterRegions.regions[0].putsRate").value(0D))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].totalMemory").value(0))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].entryCount").value(0))
         .andExpect(jsonPath("$.ClusterRegions.regions[0].compressionCodec").value("NA"))
@@ -328,13 +390,13 @@ public class PulseControllerJUnitTest {
         .principal(principal)
         .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk())
-        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.lruEvictionRate").value(0))
-        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.getsRate").value(0))
+        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.lruEvictionRate").value(0D))
+        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.getsRate").value(0D))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.emptyNodes").value(0))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.type").value(REGION_TYPE))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.isEnableOffHeapMemory").value("OFF"))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.path").value(REGION_PATH))
-        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].cpuUsage").value(0))
+        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].cpuUsage").value(0D))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].clients").value(1))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].heapUsage").value(0))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].name").value(MEMBER_NAME))
@@ -352,7 +414,7 @@ public class PulseControllerJUnitTest {
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.wanEnabled").value(false))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.memberCount").value(1))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.isHDFSWriteOnly").value("NA"))
-        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.putsRate").value(0))
+        .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.putsRate").value(0D))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.totalMemory").value(0))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.entryCount").value(0))
         .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.compressionCodec").value("NA"))
@@ -445,7 +507,7 @@ public class PulseControllerJUnitTest {
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.MemberDetails.name").value(MEMBER_NAME))
         .andExpect(jsonPath("$.MemberDetails.offHeapUsedSize").value(0))
-        .andExpect(jsonPath("$.MemberDetails.diskStorageUsed").value(0))
+        .andExpect(jsonPath("$.MemberDetails.diskStorageUsed").value(0D))
         .andExpect(jsonPath("$.MemberDetails.regionsCount").value(1))
         .andExpect(jsonPath("$.MemberDetails.clusterName").value(CLUSTER_NAME))
         .andExpect(jsonPath("$.MemberDetails.name").value(MEMBER_NAME))
@@ -468,8 +530,8 @@ public class PulseControllerJUnitTest {
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.MemberDiskThroughput.throughputWritesTrend").isEmpty())
         .andExpect(jsonPath("$.MemberDiskThroughput.throughputReadsTrend").isEmpty())
-        .andExpect(jsonPath("$.MemberDiskThroughput.throughputWrites").value(0))
-        .andExpect(jsonPath("$.MemberDiskThroughput.throughputReads").value(0))
+        .andExpect(jsonPath("$.MemberDiskThroughput.throughputWrites").value(0D))
+        .andExpect(jsonPath("$.MemberDiskThroughput.throughputReads").value(0D))
     ;
   }
 
@@ -571,12 +633,12 @@ public class PulseControllerJUnitTest {
         .principal(principal)
         .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk())
-        .andExpect(jsonPath("$.PulseVersion.sourceDate").isNotEmpty())
-        .andExpect(jsonPath("$.PulseVersion.sourceRepository").isNotEmpty())
-        .andExpect(jsonPath("$.PulseVersion.pulseVersion").isNotEmpty())
-        .andExpect(jsonPath("$.PulseVersion.sourceRevision").isNotEmpty())
-        .andExpect(jsonPath("$.PulseVersion.buildId").isNotEmpty())
-        .andExpect(jsonPath("$.PulseVersion.buildDate").isNotEmpty())
+        .andExpect(jsonPath("$.PulseVersion.sourceDate").value("not empty"))
+        .andExpect(jsonPath("$.PulseVersion.sourceRepository").value("not empty"))
+        .andExpect(jsonPath("$.PulseVersion.pulseVersion").value("not empty"))
+        .andExpect(jsonPath("$.PulseVersion.sourceRevision").value("not empty"))
+        .andExpect(jsonPath("$.PulseVersion.buildId").value("not empty"))
+        .andExpect(jsonPath("$.PulseVersion.buildDate").value("not empty"))
     ;
   }
 
@@ -691,7 +753,7 @@ public class PulseControllerJUnitTest {
 
   @Test
   public void dataBrowserQuery() throws Exception {
-    doReturn(new JSONObject().put("foo", "bar")).when(cluster).executeQuery(anyString(), anyString(), anyInt());
+    doReturn(mapper.createObjectNode().put("foo", "bar")).when(cluster).executeQuery(anyString(), anyString(), anyInt());
 
     this.mockMvc.perform(get("/dataBrowserQuery")
         .param("query", "SELECT * FROM " + REGION_PATH)
@@ -712,7 +774,7 @@ public class PulseControllerJUnitTest {
         .principal(principal)
         .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk())
-        .andExpect(jsonPath("$.queryHistory[0].queryText").value("SELECT * FROM " + REGION_PATH))
+        .andExpect(jsonPath("$.queryHistory[0].queryText").value("\"SELECT * FROM " + REGION_PATH + "\""))
     ;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java
index 0cd1d37..51cc279 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/PropMockDataUpdater.java
@@ -18,18 +18,8 @@
  */
 package com.vmware.gemfire.tools.pulse.testbed;
 
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Random;
-import java.util.ResourceBundle;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster.Alert;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster.Client;
@@ -40,13 +30,22 @@ import com.vmware.gemfire.tools.pulse.internal.data.Cluster.Region;
 import com.vmware.gemfire.tools.pulse.internal.data.IClusterUpdater;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
 import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Locator;
 import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Peer;
 import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Server;
 
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Random;
+import java.util.ResourceBundle;
 
 public class PropMockDataUpdater implements IClusterUpdater {
   private static final int MAX_HOSTS = 40;
@@ -61,6 +60,8 @@ public class PropMockDataUpdater implements IClusterUpdater {
   private TestBed testbed;
   private final String testbedFile = System.getProperty("pulse.propMockDataUpdaterFile");;
 
+  private final ObjectMapper mapper = new ObjectMapper();
+
   public PropMockDataUpdater(Cluster cluster) {
     this.cluster = cluster;
     try {
@@ -348,7 +349,6 @@ public class PropMockDataUpdater implements IClusterUpdater {
     gatewayReceiver.setStatus(true);
     gatewayReceiver.setBatchSize(Math.abs(r.nextInt(10)));
 
-
     int gatewaySenderCount = Math.abs(r.nextInt(10));
 
     List<GatewaySender> list = m.getGatewaySenderList();
@@ -357,7 +357,6 @@ public class PropMockDataUpdater implements IClusterUpdater {
       list.add(createGatewaySenderCount(r));
     }
 
-
     Map<String, List<Member>> physicalToMember = cluster.getPhysicalToMember();
 
     List<Cluster.Member> memberArrList = physicalToMember.get(m.getHost());
@@ -506,8 +505,7 @@ public class PropMockDataUpdater implements IClusterUpdater {
   }
 
   @Override
-  public JSONObject executeQuery(String queryText, String members, int limit)
-      throws JSONException {
+  public ObjectNode executeQuery(String queryText, String members, int limit) {
     // TODO for Sushant/Sachin - Add implementation for MockUpdater for Automation
     return null;
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6d3f5560/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/BaseServiceTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/BaseServiceTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/BaseServiceTest.java
index 8de628c..b607978 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/BaseServiceTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/BaseServiceTest.java
@@ -18,18 +18,11 @@
  */
 package com.vmware.gemfire.tools.pulse.tests.junit;
 
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.URI;
-import java.util.List;
-import java.util.Properties;
-
-import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gemstone.gemfire.test.junit.categories.UITest;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
+import com.google.gson.JsonObject;
+import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpUriRequest;
@@ -39,11 +32,23 @@ import org.apache.http.impl.client.BasicCookieStore;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
-import org.junit.*;
-
-import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.URI;
+import java.util.List;
+import java.util.Properties;
+
 
 /**
  * Base class to be extended by other JUnit test classes. This class defines and automatically invokes test for testing server login-logout so no need to add
@@ -61,14 +66,14 @@ public abstract class BaseServiceTest {
 
   protected static Properties propsForJUnit = new Properties();
   protected static String strHost = null;
-    protected static String strPort = null;
-    protected static String LOGIN_URL;
-    protected static String LOGOUT_URL;
-    protected static String IS_AUTHENTICATED_USER_URL;
-    protected static String PULSE_UPDATE_URL;
-
-    protected static final String PULSE_UPDATE_PARAM = "pulseData";
-    protected static final String PULSE_UPDATE_1_VALUE = "{'ClusterSelectedRegion':{'regionFullPath':'/GlobalVilage_2/GlobalVilage_9'}}";
+  protected static String strPort = null;
+  protected static String LOGIN_URL;
+  protected static String LOGOUT_URL;
+  protected static String IS_AUTHENTICATED_USER_URL;
+  protected static String PULSE_UPDATE_URL;
+
+  protected static final String PULSE_UPDATE_PARAM = "pulseData";
+  protected static final String PULSE_UPDATE_1_VALUE = "{'ClusterSelectedRegion':{'regionFullPath':'/GlobalVilage_2/GlobalVilage_9'}}";
   protected static final String PULSE_UPDATE_2_VALUE = "{'ClusterSelectedRegion':{'regionFullPath':'/Rubbish'}}";
 
   protected static final String PULSE_UPDATE_3_VALUE = "{'ClusterSelectedRegionsMember':{'regionFullPath':'/GlobalVilage_2/GlobalVilage_9'}}";
@@ -78,25 +83,27 @@ public abstract class BaseServiceTest {
   protected static final String PULSE_UPDATE_6_VALUE = "{'MemberGatewayHub':{'memberName':'pnq-visitor2'}}";
   protected static CloseableHttpClient httpclient = null;
 
+  private final ObjectMapper mapper = new ObjectMapper();
 
-    @BeforeClass
-    public static void beforeClass() throws Exception{
-        InputStream stream = BaseServiceTest.class.getClassLoader().getResourceAsStream("pulse.properties");
-
-        try{
-            propsForJUnit.load(stream);
-        } catch(Exception exProps){
-            System.out.println("BaseServiceTest :: Error loading properties from pulse.properties in classpath");
-        }
-        strHost = propsForJUnit.getProperty("pulse.host");
-        strPort = propsForJUnit.getProperty("pulse.port");
-        System.out.println("BaseServiceTest :: Loaded properties from classpath. Checking properties for hostname. Hostname found = " + strHost);
-        LOGIN_URL =                 "http://" + strHost + ":" + strPort + "/pulse/j_spring_security_check";
-        LOGOUT_URL =                "http://" + strHost + ":" + strPort + "/pulse/clusterLogout";
-        IS_AUTHENTICATED_USER_URL = "http://" + strHost + ":" + strPort + "/pulse/authenticateUser";
-        PULSE_UPDATE_URL =          "http://" + strHost + ":" + strPort + "/pulse/pulseUpdate";
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    InputStream stream = BaseServiceTest.class.getClassLoader().getResourceAsStream("pulse.properties");
 
+    try {
+      propsForJUnit.load(stream);
+    } catch (Exception exProps) {
+      System.out.println("BaseServiceTest :: Error loading properties from pulse.properties in classpath");
     }
+    strHost = propsForJUnit.getProperty("pulse.host");
+    strPort = propsForJUnit.getProperty("pulse.port");
+    System.out.println(
+        "BaseServiceTest :: Loaded properties from classpath. Checking properties for hostname. Hostname found = " + strHost);
+    LOGIN_URL = "http://" + strHost + ":" + strPort + "/pulse/j_spring_security_check";
+    LOGOUT_URL = "http://" + strHost + ":" + strPort + "/pulse/clusterLogout";
+    IS_AUTHENTICATED_USER_URL = "http://" + strHost + ":" + strPort + "/pulse/authenticateUser";
+    PULSE_UPDATE_URL = "http://" + strHost + ":" + strPort + "/pulse/pulseUpdate";
+
+  }
   /**
   *
   * @author rbhandekar
@@ -232,8 +239,8 @@ public abstract class BaseServiceTest {
             System.out.println("BaseServiceTest :: JSON response returned : " + jsonResp);
             EntityUtils.consume(entity);
 
-            JSONObject jsonObj = new JSONObject(jsonResp);
-            boolean isUserLoggedIn = jsonObj.getBoolean("isUserLoggedIn");
+            JsonNode jsonObj = mapper.readTree(jsonResp);
+            boolean isUserLoggedIn = jsonObj.get("isUserLoggedIn").booleanValue();
             Assert.assertNotNull("BaseServiceTest :: Server returned null response in 'isUserLoggedIn'", isUserLoggedIn);
             Assert.assertTrue("BaseServiceTest :: User login failed for this username, password", (isUserLoggedIn == true));
           } finally {


[28/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java
index 0000000,fae54d8..89c74ee
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java
@@@ -1,0 -1,214 +1,222 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.web.controllers;
+ 
+ import java.io.IOException;
++import java.util.Properties;
+ import java.util.concurrent.Callable;
+ 
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
++import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
+ import com.gemstone.gemfire.management.internal.web.util.ConvertUtils;
+ 
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.stereotype.Controller;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ import org.springframework.web.bind.annotation.RequestParam;
+ import org.springframework.web.bind.annotation.ResponseBody;
+ import org.springframework.web.multipart.MultipartFile;
+ 
+ /**
+  * The ConfigCommandsController class implements GemFire Management REST API web service endpoints for the Gfsh
+  * Config Commands.
+  * <p/>
+  * @author John Blum
+  * @see com.gemstone.gemfire.management.internal.cli.commands.ConfigCommands
+  * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractMultiPartCommandsController
+  * @see org.springframework.stereotype.Controller
+  * @see org.springframework.web.bind.annotation.PathVariable
+  * @see org.springframework.web.bind.annotation.RequestMapping
+  * @see org.springframework.web.bind.annotation.RequestMethod
+  * @see org.springframework.web.bind.annotation.RequestParam
+  * @see org.springframework.web.bind.annotation.ResponseBody
+  * @since 8.0
+  */
+ @Controller("configController")
+ @RequestMapping(AbstractCommandsController.REST_API_VERSION)
+ @SuppressWarnings("unused")
+ public class ConfigCommandsController extends AbstractMultiPartCommandsController {
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/config")
+   @ResponseBody
+   public String alterRuntime(@RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__GROUP, required = false) final String group,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__MEMBER, required = false) final String memberNameId,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__DISK__SPACE__LIMIT, required = false) final Integer archiveDiskSpaceLimit,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__FILE__SIZE__LIMIT, required = false) final Integer archiveFileSizeLimit,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__LOG__DISK__SPACE__LIMIT, required = false) final Integer logDiskSpaceLimit,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__LOG__FILE__SIZE__LIMIT, required = false) final Integer logFileSizeLimit,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__LOG__LEVEL, required = false) final String logLevel,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__ARCHIVE__FILE, required = false) final String statisticsArchiveFile,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLE__RATE, required = false) final Integer statisticsSampleRate,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLING__ENABLED, required = false) final Boolean enableStatistics,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__COPY__ON__READ, required = false) final Boolean copyOnRead,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__LOCK__LEASE, required = false) final Integer lockLease,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__LOCK__TIMEOUT, required = false) final Integer lockTimeout,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__MESSAGE__SYNC__INTERVAL, required = false) final Integer messageSyncInterval,
+                              @RequestParam(value = CliStrings.ALTER_RUNTIME_CONFIG__SEARCH__TIMEOUT, required = false) final Integer searchTimeout)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.ALTER_RUNTIME_CONFIG);
+ 
+     if (hasValue(memberNameId)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__MEMBER, memberNameId);
+     }
+ 
+     if (hasValue(group)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__GROUP, group);
+     }
+ 
+     if (hasValue(archiveDiskSpaceLimit)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__DISK__SPACE__LIMIT, Integer.toString(archiveDiskSpaceLimit));
+     }
+ 
+     if (hasValue(archiveFileSizeLimit)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__FILE__SIZE__LIMIT, Integer.toString(archiveFileSizeLimit));
+     }
+ 
+     if (hasValue(logDiskSpaceLimit)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__LOG__DISK__SPACE__LIMIT, Integer.toString(logDiskSpaceLimit));
+     }
+ 
+     if (hasValue(logFileSizeLimit)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__LOG__FILE__SIZE__LIMIT, Integer.toString(logFileSizeLimit));
+     }
+ 
+     if (hasValue(logLevel)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__LOG__LEVEL, logLevel);
+     }
+ 
+     if (hasValue(statisticsArchiveFile)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__ARCHIVE__FILE, statisticsArchiveFile);
+     }
+ 
+     if (hasValue(statisticsSampleRate)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLE__RATE, Integer.toString(statisticsSampleRate));
+     }
+ 
+     if (hasValue(enableStatistics)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLING__ENABLED, Boolean.toString(enableStatistics));
+     }
+ 
+     if (hasValue(copyOnRead)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__COPY__ON__READ, Boolean.toString(copyOnRead));
+     }
+ 
+     if (hasValue(lockLease)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__LOCK__LEASE, Integer.toString(lockLease));
+     }
+ 
+     if (hasValue(lockTimeout)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__LOCK__TIMEOUT, Integer.toString(lockTimeout));
+     }
+ 
+     if (hasValue(messageSyncInterval)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__MESSAGE__SYNC__INTERVAL, Integer.toString(messageSyncInterval));
+     }
+ 
+     if (hasValue(searchTimeout)) {
+       command.addOption(CliStrings.ALTER_RUNTIME_CONFIG__SEARCH__TIMEOUT, Integer.toString(searchTimeout));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/members/{member}/config")
+   @ResponseBody
+   public String describeConfig(@PathVariable("member") final String memberNameId,
+                                @RequestParam(value = CliStrings.DESCRIBE_CONFIG__HIDE__DEFAULTS, defaultValue = "true") final Boolean hideDefaults)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.DESCRIBE_CONFIG);
+ 
+     command.addOption(CliStrings.DESCRIBE_CONFIG__MEMBER, decode(memberNameId));
+     command.addOption(CliStrings.DESCRIBE_CONFIG__HIDE__DEFAULTS, String.valueOf(hideDefaults));
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/config")
+   public Callable<ResponseEntity<String>> exportConfig(@RequestParam(value = CliStrings.EXPORT_CONFIG__GROUP, required = false) final String[] groups,
+                                                        @RequestParam(value = CliStrings.EXPORT_CONFIG__MEMBER, required = false) final String[] members,
+                                                        @RequestParam(value = CliStrings.EXPORT_CONFIG__DIR, required = false) final String directory)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.EXPORT_CONFIG);
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.EXPORT_CONFIG__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.EXPORT_CONFIG__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(directory)) {
+       command.addOption(CliStrings.EXPORT_CONFIG__DIR, decode(directory));
+     }
+ 
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/config/cluster")
+   public Callable<ResponseEntity<String>> exportClusterConfig(@RequestParam(CliStrings.EXPORT_SHARED_CONFIG__FILE) final String zipFileName,
+                                                              @RequestParam(value = CliStrings.EXPORT_SHARED_CONFIG__DIR, required = false) final String directory)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.EXPORT_SHARED_CONFIG);
+ 
+     command.addOption(CliStrings.EXPORT_SHARED_CONFIG__FILE, zipFileName);
+ 
+     if (hasValue(directory)) {
+       command.addOption(CliStrings.EXPORT_SHARED_CONFIG__DIR, directory);
+     }
+ 
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/config/cluster")
+   public Callable<ResponseEntity<String>> importClusterConfig(@RequestParam(RESOURCES_REQUEST_PARAMETER) final MultipartFile[] zipFileResources,
+                                                              @RequestParam(value = CliStrings.IMPORT_SHARED_CONFIG__ZIP) final String zipFileName)
+     throws IOException
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.IMPORT_SHARED_CONFIG);
+ 
+     command.addOption(CliStrings.IMPORT_SHARED_CONFIG__ZIP, zipFileName);
+ 
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString(), ConvertUtils.convert(zipFileResources)), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), ConvertUtils.convert(zipFileResources), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java
index 0000000,2e81272..ed9ae9c
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java
@@@ -1,0 -1,241 +1,251 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.web.controllers;
+ 
++import java.util.Properties;
+ import java.util.concurrent.Callable;
+ 
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
++import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
+ 
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.stereotype.Controller;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ import org.springframework.web.bind.annotation.RequestParam;
+ import org.springframework.web.bind.annotation.ResponseBody;
+ import org.springframework.web.context.request.WebRequest;
+ 
+ /**
+  * The DataCommandsController class implements GemFire Management REST API web service endpoints for the
+  * Gfsh Data Commands.
+  * <p/>
+  * @author John Blum
+  * @see com.gemstone.gemfire.management.internal.cli.commands.DataCommands
+  * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController
+  * @see org.springframework.stereotype.Controller
+  * @see org.springframework.web.bind.annotation.PathVariable
+  * @see org.springframework.web.bind.annotation.RequestMapping
+  * @see org.springframework.web.bind.annotation.RequestMethod
+  * @see org.springframework.web.bind.annotation.RequestParam
+  * @see org.springframework.web.bind.annotation.ResponseBody
+  * @since 8.0
+  */
+ @Controller("dataController")
+ @RequestMapping(AbstractCommandsController.REST_API_VERSION)
+ @SuppressWarnings("unused")
+ public class DataCommandsController extends AbstractCommandsController {
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/regions/{region}/data")
+   @ResponseBody
+   public String get(@PathVariable("region") final String regionNamePath,
+                     @RequestParam(CliStrings.GET__KEY) final String key,
+                     @RequestParam(value = CliStrings.GET__KEYCLASS, required = false) final String keyClassName,
+                     @RequestParam(value = CliStrings.GET__VALUEKLASS, required = false) final String valueClassName,
+                     @RequestParam(value= CliStrings.GET__LOAD, defaultValue = "true") final Boolean loadOnCacheMiss)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.GET);
+ 
+     command.addOption(CliStrings.GET__REGIONNAME, decode(regionNamePath));
+     command.addOption(CliStrings.GET__KEY, key);
+     command.addOption(CliStrings.GET__LOAD, String.valueOf(Boolean.TRUE.equals(loadOnCacheMiss)));
+ 
+     if (hasValue(keyClassName)) {
+       command.addOption(CliStrings.GET__KEYCLASS, keyClassName);
+     }
+ 
+     if (hasValue(valueClassName)) {
+       command.addOption(CliStrings.GET__VALUEKLASS, valueClassName);
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.PUT, value = "/regions/{region}/data")
+   @ResponseBody
+   public String put(@PathVariable("region") final String regionNamePath,
+                     @RequestParam(CliStrings.PUT__KEY) final String key,
+                     @RequestParam(value = CliStrings.PUT__KEYCLASS, required = false) final String keyClassName,
+                     @RequestParam(CliStrings.PUT__VALUE) final String value,
+                     @RequestParam(value = CliStrings.PUT__VALUEKLASS, required = false) final String valueClassName,
+                     @RequestParam(value = CliStrings.PUT__PUTIFABSENT, defaultValue = "false") final Boolean putIfAbsent)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.PUT);
+ 
+     command.addOption(CliStrings.PUT__REGIONNAME, decode(regionNamePath));
+     command.addOption(CliStrings.PUT__KEY, key);
+     command.addOption(CliStrings.PUT__VALUE, decode(value));
+ 
+     if (hasValue(keyClassName)) {
+       command.addOption(CliStrings.PUT__KEYCLASS, keyClassName);
+     }
+ 
+     if (hasValue(valueClassName)) {
+       command.addOption(CliStrings.PUT__VALUEKLASS, valueClassName);
+     }
+ 
+     command.addOption(CliStrings.PUT__PUTIFABSENT, String.valueOf(putIfAbsent));
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.DELETE, value = "/regions/{region}/data")
+   @ResponseBody
+   public String remove(@PathVariable("region") final String regionNamePath,
+                        @RequestParam(value = CliStrings.REMOVE__ALL, defaultValue = "false") final Boolean allKeys,
+                        @RequestParam(value = CliStrings.REMOVE__KEY, required = false) final String key,
+                        @RequestParam(value = CliStrings.REMOVE__KEYCLASS, required = false) final String keyClassName) {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.REMOVE);
+ 
+     command.addOption(CliStrings.REMOVE__REGION, decode(regionNamePath));
+     command.addOption(CliStrings.REMOVE__ALL, String.valueOf(allKeys));
+ 
+     if (hasValue(key)) {
+       command.addOption(CliStrings.REMOVE__KEY, key);
+     }
+ 
+     if (hasValue(keyClassName)) {
+       command.addOption(CliStrings.REMOVE__KEYCLASS, keyClassName);
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/members/{member}/regions/{region}/data")
+   public Callable<ResponseEntity<String>> exportData(@PathVariable("member") final String memberNameId,
+                                                      @PathVariable("region") final String regionNamePath,
+                                                      @RequestParam(CliStrings.EXPORT_DATA__FILE) final String file)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.EXPORT_DATA);
+ 
+     command.addOption(CliStrings.EXPORT_DATA__MEMBER, decode(memberNameId));
+     command.addOption(CliStrings.EXPORT_DATA__REGION, decode(regionNamePath));
+     command.addOption(CliStrings.EXPORT_DATA__FILE, decode(file));
+ 
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/members/{member}/regions/{region}/data")
+   public Callable<ResponseEntity<String>> importData(@PathVariable("member") final String memberNameId,
+                                                      @PathVariable("region") final String regionNamePath,
+                                                      @RequestParam(CliStrings.IMPORT_DATA__FILE) final String file)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.IMPORT_DATA);
+ 
+     command.addOption(CliStrings.IMPORT_DATA__MEMBER, decode(memberNameId));
+     command.addOption(CliStrings.IMPORT_DATA__REGION, decode(regionNamePath));
+     command.addOption(CliStrings.IMPORT_DATA__FILE, decode(file));
+ 
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/regions/{region}/data/location")
+   @ResponseBody
+   public String locateEntry(@PathVariable("region") final String regionNamePath,
+                             @RequestParam(CliStrings.LOCATE_ENTRY__KEY) final String key,
+                             @RequestParam(value = CliStrings.LOCATE_ENTRY__KEYCLASS, required = false) final String keyClassName,
+                             @RequestParam(value = CliStrings.LOCATE_ENTRY__VALUEKLASS, required = false) final String valueClassName,
+                             @RequestParam(value = CliStrings.LOCATE_ENTRY__RECURSIVE, defaultValue = "false") final Boolean recursive)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.LOCATE_ENTRY);
+ 
+     command.addOption(CliStrings.LOCATE_ENTRY__REGIONNAME, decode(regionNamePath));
+     command.addOption(CliStrings.LOCATE_ENTRY__KEY, key);
+ 
+     if (hasValue(keyClassName)) {
+       command.addOption(CliStrings.LOCATE_ENTRY__KEYCLASS, keyClassName);
+     }
+ 
+     if (hasValue(valueClassName)) {
+       command.addOption(CliStrings.LOCATE_ENTRY__VALUEKLASS, valueClassName);
+     }
+ 
+     command.addOption(CliStrings.LOCATE_ENTRY__RECURSIVE, String.valueOf(recursive));
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/regions/data/query")
+   public Callable<ResponseEntity<String>> query(final WebRequest request,
+                                                 @RequestParam(CliStrings.QUERY__QUERY) final String oql,
+                                                 @RequestParam(value = CliStrings.QUERY__STEPNAME, defaultValue = CliStrings.QUERY__STEPNAME__DEFAULTVALUE) final String stepName,
+                                                 @RequestParam(value = CliStrings.QUERY__INTERACTIVE, defaultValue = "true") final Boolean interactive)
+   {
+     //logRequest(request);
+ 
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.QUERY);
+ 
+     command.addOption(CliStrings.QUERY__QUERY, decode(oql));
+     command.addOption(CliStrings.QUERY__STEPNAME, stepName);
+     command.addOption(CliStrings.QUERY__INTERACTIVE, String.valueOf(Boolean.TRUE.equals(interactive)));
+ 
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/regions/data", params = "op=rebalance")
+   public Callable<ResponseEntity<String>> rebalance(@RequestParam(value = CliStrings.REBALANCE__INCLUDEREGION, required = false) final String[] includedRegions,
+                                                     @RequestParam(value = CliStrings.REBALANCE__EXCLUDEREGION, required = false) final String[] excludedRegions,
+                                                     @RequestParam(value = CliStrings.REBALANCE__SIMULATE, defaultValue = "false") final Boolean simulate,
+                                                     @RequestParam(value = CliStrings.REBALANCE__TIMEOUT, defaultValue = "-1") final Long timeout)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.REBALANCE);
+ 
+     if (hasValue(includedRegions)) {
+       command.addOption(CliStrings.REBALANCE__INCLUDEREGION, StringUtils.concat(includedRegions,
+         StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(excludedRegions)) {
+       command.addOption(CliStrings.REBALANCE__EXCLUDEREGION, StringUtils.concat(excludedRegions,
+         StringUtils.COMMA_DELIMITER));
+     }
+ 
+     command.addOption(CliStrings.REBALANCE__SIMULATE, String.valueOf(simulate));
+     command.addOption(CliStrings.REBALANCE__TIMEOUT, String.valueOf(timeout));
+ 
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java
index 0000000,e537a29..0812058
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java
@@@ -1,0 -1,177 +1,184 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.web.controllers;
+ 
++import java.util.Properties;
+ import java.util.concurrent.Callable;
+ 
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
++import com.gemstone.gemfire.management.internal.security.CLIOperationContext;
++import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
+ 
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.stereotype.Controller;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ import org.springframework.web.bind.annotation.RequestParam;
+ import org.springframework.web.bind.annotation.ResponseBody;
+ 
+ /**
+  * The DiskStoreCommandsController class implements GemFire Management REST API web service endpoints for the
+  * Gfsh Disk Store Commands.
+  * <p/>
+  * @author John Blum
+  * @see com.gemstone.gemfire.management.internal.cli.commands.DiskStoreCommands
+  * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController
+  * @see org.springframework.stereotype.Controller
+  * @see org.springframework.web.bind.annotation.PathVariable
+  * @see org.springframework.web.bind.annotation.RequestMapping
+  * @see org.springframework.web.bind.annotation.RequestMethod
+  * @see org.springframework.web.bind.annotation.RequestParam
+  * @see org.springframework.web.bind.annotation.ResponseBody
+  * @since 8.0
+  */
+ @Controller("diskStoreController")
+ @RequestMapping(AbstractCommandsController.REST_API_VERSION)
+ @SuppressWarnings("unused")
+ public class DiskStoreCommandsController extends AbstractCommandsController {
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/diskstores")
+   @ResponseBody
+   public String listDiskStores() {
+     return processCommand(CliStrings.LIST_DISK_STORE);
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/diskstores", params = "op=backup")
+   public Callable<ResponseEntity<String>> backupDiskStore(@RequestParam(value = CliStrings.BACKUP_DISK_STORE__DISKDIRS) final String dir,
+                                                           @RequestParam(value = CliStrings.BACKUP_DISK_STORE__BASELINEDIR, required = false) final String baselineDir)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.BACKUP_DISK_STORE);
+ 
+     command.addOption(CliStrings.BACKUP_DISK_STORE__DISKDIRS, decode(dir));
+ 
+     if (hasValue(baselineDir)) {
+       command.addOption(CliStrings.BACKUP_DISK_STORE__BASELINEDIR, decode(baselineDir));
+     }
+ 
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/diskstores/{name}", params = "op=compact")
+   public Callable<ResponseEntity<String>> compactDiskStore(@PathVariable("name") final String diskStoreNameId,
+                                                            @RequestParam(value = CliStrings.COMPACT_DISK_STORE__GROUP, required = false) final String[] groups)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.COMPACT_DISK_STORE);
+ 
+     command.addOption(CliStrings.COMPACT_DISK_STORE__NAME, decode(diskStoreNameId));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.COMPACT_DISK_STORE__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/diskstores")
+   @ResponseBody
+   public String createDiskStore(@RequestParam(CliStrings.CREATE_DISK_STORE__NAME) final String diskStoreNameId,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__DIRECTORY_AND_SIZE) final String[] directoryAndSizes,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__ALLOW_FORCE_COMPACTION, defaultValue = "false") final Boolean allowForceCompaction,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__AUTO_COMPACT, defaultValue = "true") final Boolean autoCompact,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__COMPACTION_THRESHOLD, defaultValue = "50") final Integer compactionThreshold,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__MAX_OPLOG_SIZE, defaultValue = "1024") final Integer maxOplogSize,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__QUEUE_SIZE, defaultValue = "0") final Integer queueSize,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__TIME_INTERVAL, defaultValue = "1000") final Long timeInterval,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__WRITE_BUFFER_SIZE, defaultValue = "32768") final Integer writeBufferSize,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__DISK_USAGE_WARNING_PCT, defaultValue = "90") final Float diskUsageWarningPercentage,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__DISK_USAGE_CRITICAL_PCT, defaultValue = "99") final Integer diskUsageCriticalPercentage,
+                                 @RequestParam(value = CliStrings.CREATE_DISK_STORE__GROUP, required = false) final String[] groups)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.CREATE_DISK_STORE);
+ 
+     command.addOption(CliStrings.CREATE_DISK_STORE__NAME, diskStoreNameId);
+     command.addOption(CliStrings.CREATE_DISK_STORE__DIRECTORY_AND_SIZE, StringUtils.concat(directoryAndSizes, StringUtils.COMMA_DELIMITER));
+     command.addOption(CliStrings.CREATE_DISK_STORE__ALLOW_FORCE_COMPACTION, String.valueOf(Boolean.TRUE.equals(allowForceCompaction)));
+     command.addOption(CliStrings.CREATE_DISK_STORE__AUTO_COMPACT, String.valueOf(Boolean.TRUE.equals(autoCompact)));
+     command.addOption(CliStrings.CREATE_DISK_STORE__COMPACTION_THRESHOLD, String.valueOf(compactionThreshold));
+     command.addOption(CliStrings.CREATE_DISK_STORE__MAX_OPLOG_SIZE, String.valueOf(maxOplogSize));
+     command.addOption(CliStrings.CREATE_DISK_STORE__QUEUE_SIZE, String.valueOf(queueSize));
+     command.addOption(CliStrings.CREATE_DISK_STORE__TIME_INTERVAL, String.valueOf(timeInterval));
+     command.addOption(CliStrings.CREATE_DISK_STORE__WRITE_BUFFER_SIZE, String.valueOf(writeBufferSize));
+     command.addOption(CliStrings.CREATE_DISK_STORE__DISK_USAGE_WARNING_PCT, String.valueOf(diskUsageWarningPercentage));
+     command.addOption(CliStrings.CREATE_DISK_STORE__DISK_USAGE_CRITICAL_PCT, String.valueOf(diskUsageCriticalPercentage));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.CREATE_DISK_STORE__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/diskstores/{name}")
+   @ResponseBody
+   public String describeDiskStore(@PathVariable("name") final String diskStoreNameId,
+                                   @RequestParam(CliStrings.DESCRIBE_DISK_STORE__MEMBER) final String memberNameId)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.DESCRIBE_DISK_STORE);
+     command.addOption(CliStrings.DESCRIBE_DISK_STORE__MEMBER, memberNameId);
+     command.addOption(CliStrings.DESCRIBE_DISK_STORE__NAME, decode(diskStoreNameId));
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine whether Async functionality is required
+   @RequestMapping(method = RequestMethod.DELETE, value = "/diskstores/{name}")
+   @ResponseBody
+   public String destroyDiskStore(@PathVariable("name") final String diskStoreNameId,
+                                  @RequestParam(value = CliStrings.DESTROY_DISK_STORE__GROUP, required = false) final String[] groups)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.DESTROY_DISK_STORE);
+ 
+     command.addOption(CliStrings.DESTROY_DISK_STORE__NAME, decode(diskStoreNameId));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.DESTROY_DISK_STORE__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine whether Async functionality is required
+   @RequestMapping(method = RequestMethod.POST, value = "/diskstores/{id}", params = "op=revoke")
+   @ResponseBody
+   public String revokeMissingDiskStore(@PathVariable("id") final String diskStoreId) {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.REVOKE_MISSING_DISK_STORE);
+     command.addOption(CliStrings.REVOKE_MISSING_DISK_STORE__ID, decode(diskStoreId));
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/diskstores/missing")
+   @ResponseBody
+   public String showMissingDiskStores() {
+     return processCommand(CliStrings.SHOW_MISSING_DISK_STORE);
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java
index 0000000,8a932a0..a3e56fc
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java
@@@ -1,0 -1,142 +1,147 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.web.controllers;
+ 
++import java.util.Properties;
+ import java.util.concurrent.Callable;
+ 
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
++import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
+ 
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.stereotype.Controller;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ import org.springframework.web.bind.annotation.RequestParam;
+ import org.springframework.web.bind.annotation.ResponseBody;
+ 
+ /**
+  * The FunctionCommandsController class implements GemFire Management REST API web service endpoints for the
+  * Gfsh Function Commands.
+  * <p/>
+  * @author John Blum
+  * @see com.gemstone.gemfire.management.internal.cli.commands.FunctionCommands
+  * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController
+  * @see org.springframework.stereotype.Controller
+  * @see org.springframework.web.bind.annotation.PathVariable
+  * @see org.springframework.web.bind.annotation.RequestMapping
+  * @see org.springframework.web.bind.annotation.RequestMethod
+  * @see org.springframework.web.bind.annotation.RequestParam
+  * @see org.springframework.web.bind.annotation.ResponseBody
+  * @since 8.0
+  */
+ @Controller("functionController")
+ @RequestMapping(AbstractCommandsController.REST_API_VERSION)
+ @SuppressWarnings("unused")
+ public class FunctionCommandsController extends AbstractCommandsController {
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/functions")
+   @ResponseBody
+   public String listFunctions(@RequestParam(value = CliStrings.LIST_FUNCTION__GROUP, required = false) final String[] groups,
+                               @RequestParam(value = CliStrings.LIST_FUNCTION__MEMBER, required = false) final String[] members,
+                               @RequestParam(value = CliStrings.LIST_FUNCTION__MATCHES, required = false) final String matches)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.LIST_FUNCTION);
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.LIST_FUNCTION__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.LIST_FUNCTION__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(matches)) {
+       command.addOption(CliStrings.LIST_FUNCTION__MATCHES, matches);
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/functions/{id}")
+   public Callable<ResponseEntity<String>> executeFunction(@PathVariable("id") final String functionId,
+                                                           @RequestParam(value = CliStrings.EXECUTE_FUNCTION__ONGROUPS, required = false) final String groupName,
+                                                           @RequestParam(value = CliStrings.EXECUTE_FUNCTION__ONMEMBER, required = false) final String memberNameId,
+                                                           @RequestParam(value = CliStrings.EXECUTE_FUNCTION__ONREGION, required = false) final String regionNamePath,
+                                                           @RequestParam(value = CliStrings.EXECUTE_FUNCTION__ARGUMENTS, required = false) final String[] arguments,
+                                                           @RequestParam(value = CliStrings.EXECUTE_FUNCTION__FILTER, required = false) final String filter,
+                                                           @RequestParam(value = CliStrings.EXECUTE_FUNCTION__RESULTCOLLECTOR, required = false) final String resultCollector)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.EXECUTE_FUNCTION);
+ 
+     command.addOption(CliStrings.EXECUTE_FUNCTION__ID, decode(functionId));
+ 
+     if (hasValue(groupName)) {
+       command.addOption(CliStrings.EXECUTE_FUNCTION__ONGROUPS, groupName);
+     }
+ 
+     if (hasValue(memberNameId)) {
+       command.addOption(CliStrings.EXECUTE_FUNCTION__ONMEMBER, memberNameId);
+     }
+ 
+     if (hasValue(regionNamePath)) {
+       command.addOption(CliStrings.EXECUTE_FUNCTION__ONREGION, regionNamePath);
+     }
+ 
+     if (hasValue(arguments)) {
+       command.addOption(CliStrings.EXECUTE_FUNCTION__ARGUMENTS, StringUtils.concat(arguments, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(filter)) {
+       command.addOption(CliStrings.EXECUTE_FUNCTION__FILTER, filter);
+     }
+ 
+     if (hasValue(resultCollector)) {
+       command.addOption(CliStrings.EXECUTE_FUNCTION__RESULTCOLLECTOR, resultCollector);
+     }
+ 
++    
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+   @RequestMapping(method = RequestMethod.DELETE, value = "/functions/{id}")
+   @ResponseBody
+   public String destroyFunction(@PathVariable("id") final String functionId,
+                                 @RequestParam(value = CliStrings.DESTROY_FUNCTION__ONGROUPS, required = false) final String groupName,
+                                 @RequestParam(value = CliStrings.DESTROY_FUNCTION__ONMEMBER, required = false) final String memberNameId)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.DESTROY_FUNCTION);
+ 
+     command.addOption(CliStrings.DESTROY_FUNCTION__ID, decode(functionId));
+ 
+     if (hasValue(groupName)) {
+       command.addOption(CliStrings.DESTROY_FUNCTION__ONGROUPS, groupName);
+     }
+ 
+     if (hasValue(memberNameId)) {
+       command.addOption(CliStrings.DESTROY_FUNCTION__ONMEMBER, memberNameId);
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java
index 0000000,05af2fe..8ba7ae5
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java
@@@ -1,0 -1,271 +1,275 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.web.controllers;
+ 
++import java.util.Properties;
+ import java.util.concurrent.Callable;
+ 
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
++import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
+ 
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.stereotype.Controller;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ import org.springframework.web.bind.annotation.RequestParam;
+ import org.springframework.web.bind.annotation.ResponseBody;
+ 
+ /**
+  * The MiscellaneousCommandsController class implements GemFire Management REST API web service endpoints for the
+  * Gfsh Miscellaneous Commands.
+  * <p/>
+  * @author John Blum
+  * @see com.gemstone.gemfire.management.internal.cli.commands.MiscellaneousCommands
+  * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController
+  * @see org.springframework.stereotype.Controller
+  * @see org.springframework.web.bind.annotation.PathVariable
+  * @see org.springframework.web.bind.annotation.RequestMapping
+  * @see org.springframework.web.bind.annotation.RequestMethod
+  * @see org.springframework.web.bind.annotation.RequestParam
+  * @see org.springframework.web.bind.annotation.ResponseBody
+  * @since 8.0
+  */
+ @Controller("miscellaneousController")
+ @RequestMapping(AbstractCommandsController.REST_API_VERSION)
+ @SuppressWarnings("unused")
+ public class MiscellaneousCommandsController extends AbstractCommandsController {
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/logs")
+   public Callable<ResponseEntity<String>> exportLogs(@RequestParam(CliStrings.EXPORT_LOGS__DIR) final String directory,
+                                                      @RequestParam(value = CliStrings.EXPORT_LOGS__GROUP, required = false) final String[] groups,
+                                                      @RequestParam(value = CliStrings.EXPORT_LOGS__MEMBER, required = false) final String memberNameId,
+                                                      @RequestParam(value = CliStrings.EXPORT_LOGS__LOGLEVEL, required = false) final String logLevel,
+                                                      @RequestParam(value = CliStrings.EXPORT_LOGS__UPTO_LOGLEVEL, defaultValue = "false") final Boolean onlyLogLevel,
+                                                      @RequestParam(value = CliStrings.EXPORT_LOGS__MERGELOG, defaultValue = "false") final Boolean mergeLog,
+                                                      @RequestParam(value = CliStrings.EXPORT_LOGS__STARTTIME, required = false) final String startTime,
+                                                      @RequestParam(value = CliStrings.EXPORT_LOGS__ENDTIME, required = false) final String endTime)
+   {
+     final CommandStringBuilder command = new CommandStringBuilder(CliStrings.EXPORT_LOGS);
+ 
+     command.addOption(CliStrings.EXPORT_LOGS__DIR, decode(directory));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.EXPORT_LOGS__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(memberNameId)) {
+       command.addOption(CliStrings.EXPORT_LOGS__MEMBER, memberNameId);
+     }
+ 
+     if (hasValue(logLevel)) {
+       command.addOption(CliStrings.EXPORT_LOGS__LOGLEVEL, logLevel);
+     }
+ 
+     command.addOption(CliStrings.EXPORT_LOGS__UPTO_LOGLEVEL, String.valueOf(Boolean.TRUE.equals(onlyLogLevel)));
+     command.addOption(CliStrings.EXPORT_LOGS__MERGELOG, String.valueOf(Boolean.TRUE.equals(mergeLog)));
+ 
+     if (hasValue(startTime)) {
+       command.addOption(CliStrings.EXPORT_LOGS__STARTTIME, startTime);
+     }
+ 
+     if (hasValue(endTime)) {
+       command.addOption(CliStrings.EXPORT_LOGS__ENDTIME, endTime);
+     }
 -
++    
++    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
++    
+     return new Callable<ResponseEntity<String>>() {
+       @Override public ResponseEntity<String> call() throws Exception {
 -        return new ResponseEntity<String>(processCommand(command.toString()), HttpStatus.OK);
++        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
+       }
+     };
+   }
+ 
+   // TODO determine whether Async functionality is required
+   @RequestMapping(method = RequestMethod.GET, value = "/stacktraces")
+   @ResponseBody
+   public String exportStackTraces(@RequestParam(value = CliStrings.EXPORT_STACKTRACE__FILE) final String file,
+                                   @RequestParam(value = CliStrings.EXPORT_STACKTRACE__GROUP, required = false) final String groupName,
+                                   @RequestParam(value = CliStrings.EXPORT_STACKTRACE__MEMBER, required = false) final String memberNameId) {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.EXPORT_STACKTRACE);
+ 
+     command.addOption(CliStrings.EXPORT_STACKTRACE__FILE, decode(file));
+ 
+     if (hasValue(groupName)) {
+       command.addOption(CliStrings.EXPORT_STACKTRACE__GROUP, groupName);
+     }
+ 
+     if (hasValue(memberNameId)) {
+       command.addOption(CliStrings.EXPORT_STACKTRACE__MEMBER, memberNameId);
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   // TODO add Async functionality
+   @RequestMapping(method = RequestMethod.POST, value = "/gc")
+   @ResponseBody
+   public String gc(@RequestParam(value = CliStrings.GC__GROUP, required = false) final String[] groups) {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.GC);
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.GC__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   // TODO add Async functionality
+   @RequestMapping(method = RequestMethod.POST, value = "/members/{member}/gc")
+   @ResponseBody
+   public String gc(@PathVariable("member") final String memberNameId) {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.GC);
+     command.addOption(CliStrings.GC__MEMBER, decode(memberNameId));
+     return processCommand(command.toString());
+   }
+ 
+   // TODO add Async functionality
+   @RequestMapping(method = RequestMethod.GET, value = "/netstat")
+   @ResponseBody
+   public String netstat(@RequestParam(value = CliStrings.NETSTAT__MEMBER, required= false) final String[] members,
+                         @RequestParam(value = CliStrings.NETSTAT__GROUP, required = false) final String group,
+                         @RequestParam(value = CliStrings.NETSTAT__FILE, required = false) final String file,
+                         @RequestParam(value = CliStrings.NETSTAT__WITHLSOF, defaultValue = "false") final Boolean withLsof)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.NETSTAT);
+ 
+     addCommandOption(null, command, CliStrings.NETSTAT__MEMBER, members);
+     addCommandOption(null, command, CliStrings.NETSTAT__GROUP, group);
+     addCommandOption(null, command, CliStrings.NETSTAT__FILE, file);
+     addCommandOption(null, command, CliStrings.NETSTAT__WITHLSOF, withLsof);
+ 
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine if Async functionality is required
+   @RequestMapping(method = RequestMethod.GET, value = "/deadlocks")
+   @ResponseBody
+   public String showDeadLock(@RequestParam(CliStrings.SHOW_DEADLOCK__DEPENDENCIES__FILE) final String dependenciesFile) {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.SHOW_DEADLOCK);
+     command.addOption(CliStrings.SHOW_DEADLOCK__DEPENDENCIES__FILE, decode(dependenciesFile));
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine if Async functionality is required
+   @RequestMapping(method = RequestMethod.GET, value = "/members/{member}/log")
+   @ResponseBody
+   public String showLog(@PathVariable("member") final String memberNameId,
+                         @RequestParam(value = CliStrings.SHOW_LOG_LINE_NUM, defaultValue = "0") final Integer lines)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.SHOW_LOG);
+ 
+     command.addOption(CliStrings.SHOW_LOG_MEMBER, decode(memberNameId));
+     command.addOption(CliStrings.SHOW_LOG_LINE_NUM, String.valueOf(lines));
+ 
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine if Async functionality is required
+   @RequestMapping(method = RequestMethod.GET, value = "/metrics")
+   @ResponseBody
+   public String showMetrics(@RequestParam(value = CliStrings.SHOW_METRICS__MEMBER, required = false) final String memberNameId,
+                             @RequestParam(value = CliStrings.SHOW_METRICS__REGION, required = false) final String regionNamePath,
+                             @RequestParam(value = CliStrings.SHOW_METRICS__FILE, required = false) final String file,
+                             @RequestParam(value = CliStrings.SHOW_METRICS__CACHESERVER__PORT, required = false) final String cacheServerPort,
+                             @RequestParam(value = CliStrings.SHOW_METRICS__CATEGORY, required = false) final String[] categories)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.SHOW_METRICS);
+ 
+     if (hasValue(memberNameId)) {
+       command.addOption(CliStrings.SHOW_METRICS__MEMBER, memberNameId);
+     }
+ 
+     if (hasValue(regionNamePath)) {
+       command.addOption(CliStrings.SHOW_METRICS__REGION, regionNamePath);
+     }
+ 
+     if (hasValue(file)) {
+       command.addOption(CliStrings.SHOW_METRICS__FILE, file);
+     }
+ 
+     if (hasValue(cacheServerPort)) {
+       command.addOption(CliStrings.SHOW_METRICS__CACHESERVER__PORT, cacheServerPort);
+     }
+ 
+     if (hasValue(categories)) {
+       command.addOption(CliStrings.SHOW_METRICS__CATEGORY, StringUtils.concat(categories, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/shutdown")
+   @ResponseBody
+   public String shutdown(@RequestParam(value = CliStrings.SHUTDOWN__TIMEOUT, defaultValue = "-1") final Integer timeout) {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.SHUTDOWN);
+     command.addOption(CliStrings.SHUTDOWN__TIMEOUT, String.valueOf(timeout));
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine whether the {groups} and {members} path variables corresponding to the --groups and --members
+   // command-line options in the 'change loglevel' Gfsh command actually accept multiple values, and...
+   // TODO if so, then change the groups and members method parameters to String[] types.
+   // TODO If not, then these options should be renamed!
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/groups/{groups}/loglevel")
+   @ResponseBody
+   public String changeLogLevelForGroups(@PathVariable("groups") final String groups,
+                                         @RequestParam(value = CliStrings.CHANGE_LOGLEVEL__LOGLEVEL, required = true) final String logLevel)
+   {
+     return internalChangeLogLevel(groups, null, logLevel);
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/members/{members}/loglevel")
+   @ResponseBody
+   public String changeLogLevelForMembers(@PathVariable("members") final String members,
+                                          @RequestParam(value = CliStrings.CHANGE_LOGLEVEL__LOGLEVEL, required = true) final String logLevel)
+   {
+     return internalChangeLogLevel(null, members, logLevel);
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/members/{members}/groups/{groups}/loglevel")
+   @ResponseBody
+   public String changeLogLevelForMembersAndGroups(@PathVariable("members") final String members,
+                                                   @PathVariable("groups") final String groups,
+                                                   @RequestParam(value = CliStrings.CHANGE_LOGLEVEL__LOGLEVEL) final String logLevel)
+   {
+     return internalChangeLogLevel(groups, members, logLevel);
+   }
+ 
+   // NOTE since "logLevel" is "required", then just set the option; no need to validate it's value.
+   private String internalChangeLogLevel(final String groups, final String members, final String logLevel) {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.CHANGE_LOGLEVEL);
+ 
+     command.addOption(CliStrings.CHANGE_LOGLEVEL__LOGLEVEL, decode(logLevel));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.CHANGE_LOGLEVEL__GROUPS, decode(groups));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.CHANGE_LOGLEVEL__MEMBER, decode(members));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsController.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsController.java
index 0000000,7841392..b3e3279
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsController.java
@@@ -1,0 -1,403 +1,403 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.management.internal.web.controllers;
+ 
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
+ 
+ import org.springframework.stereotype.Controller;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ import org.springframework.web.bind.annotation.RequestParam;
+ import org.springframework.web.bind.annotation.ResponseBody;
+ 
+ /**
+  * The WanCommandsController class implements the GemFire Management REST API web service endpoints for the
+  * Gfsh WAN Commands.
+  * 
+  * @author John Blum
+  * @author bolgesby
+  * @see com.gemstone.gemfire.management.internal.cli.commands.WanCommands
+  * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController
+  * @see org.springframework.stereotype.Controller
+  * @see org.springframework.web.bind.annotation.RequestMapping
+  * @see org.springframework.web.bind.annotation.RequestMethod
+  * @see org.springframework.web.bind.annotation.RequestParam
+  * @see org.springframework.web.bind.annotation.ResponseBody
+  * @since 8.0
+  */
+ @Controller("wanController")
+ @RequestMapping(AbstractCommandsController.REST_API_VERSION)
+ @SuppressWarnings("unused")
+ public class WanCommandsController extends AbstractCommandsController {
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/gateways")
+   @ResponseBody
+   public String listGateways(@RequestParam(value = CliStrings.LIST_GATEWAY__GROUP, required = false) final String[] groups,
+                              @RequestParam(value = CliStrings.LIST_GATEWAY__MEMBER, required = false) final String[] members)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.LIST_GATEWAY);
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.LIST_GATEWAY__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.LIST_GATEWAY__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/gateways/receivers")
+   @ResponseBody
+   public String createGatewayReceiver(@RequestParam(value = CliStrings.CREATE_GATEWAYRECEIVER__GROUP, required = false) final String[] groups,
+                                       @RequestParam(value = CliStrings.CREATE_GATEWAYRECEIVER__MANUALSTART, required = false) final Boolean manualStart,
+                                       @RequestParam(value = CliStrings.CREATE_GATEWAYRECEIVER__MEMBER, required = false) final String[] members,
+                                       @RequestParam(value = CliStrings.CREATE_GATEWAYRECEIVER__STARTPORT, required = false) final Integer startPort,
+                                       @RequestParam(value = CliStrings.CREATE_GATEWAYRECEIVER__ENDPORT, required = false) final Integer endPort,
+                                       @RequestParam(value = CliStrings.CREATE_GATEWAYRECEIVER__BINDADDRESS, required = false) final String bindAddress,
+                                       @RequestParam(value = CliStrings.CREATE_GATEWAYRECEIVER__MAXTIMEBETWEENPINGS, required = false) final Integer maximumTimeBetweenPings,
+                                       @RequestParam(value = CliStrings.CREATE_GATEWAYRECEIVER__SOCKETBUFFERSIZE, required = false) final Integer socketBufferSize,
+                                       @RequestParam(value = CliStrings.CREATE_GATEWAYRECEIVER__GATEWAYTRANSPORTFILTER, required = false) final String[] gatewayTransportFilters)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.CREATE_GATEWAYRECEIVER);
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.CREATE_GATEWAYRECEIVER__GROUP, StringUtils.concat(groups,
+         StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(manualStart)) {
+       command.addOption(CliStrings.CREATE_GATEWAYRECEIVER__MANUALSTART, String.valueOf(manualStart));
+     }
+     
+     if (hasValue(members)) {
+       command.addOption(CliStrings.CREATE_GATEWAYRECEIVER__MEMBER, StringUtils.concat(members,
+         StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(startPort)) {
+       command.addOption(CliStrings.CREATE_GATEWAYRECEIVER__STARTPORT, String.valueOf(startPort));
+     }
+ 
+     if (hasValue(endPort)) {
+       command.addOption(CliStrings.CREATE_GATEWAYRECEIVER__ENDPORT, String.valueOf(endPort));
+     }
+ 
+     if (hasValue(bindAddress)) {
+       command.addOption(CliStrings.CREATE_GATEWAYRECEIVER__BINDADDRESS, bindAddress);
+     }
+ 
+     if (hasValue(maximumTimeBetweenPings)) {
+       command.addOption(CliStrings.CREATE_GATEWAYRECEIVER__MAXTIMEBETWEENPINGS, String.valueOf(maximumTimeBetweenPings));
+     }
+ 
+     if (hasValue(socketBufferSize)) {
+       command.addOption(CliStrings.CREATE_GATEWAYRECEIVER__SOCKETBUFFERSIZE, String.valueOf(socketBufferSize));
+     }
+ 
+     if (hasValue(gatewayTransportFilters)) {
+       command.addOption(CliStrings.CREATE_GATEWAYRECEIVER__GATEWAYTRANSPORTFILTER, StringUtils.concat(
+         gatewayTransportFilters, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/gateways/senders")
+   @ResponseBody
+   public String createGatewaySender(@RequestParam(CliStrings.CREATE_GATEWAYSENDER__ID) final String gatewaySenderId,
+                                     @RequestParam(CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID) final Integer remoteDistributedSystemId,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__GROUP, required = false) final String[] groups,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__MEMBER, required = false) final String[] members,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__PARALLEL, required = false) final Boolean parallel,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__MANUALSTART, required = false) final Boolean manualStart,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE, required = false) final Integer socketBufferSize,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT, required = false) final Integer socketReadTimeout,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION, required = false) final Boolean enableBatchConflation,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE, required = false) final Integer batchSize,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL, required = false) final Integer batchTimeInterval,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE, required = false) final Boolean enablePersistence,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__DISKSTORENAME, required = false) final String diskStoreName,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS, required = false) final Boolean diskSynchronous,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY, required = false) final Integer maxQueueMemory,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD, required = false) final Integer alertThreshold,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS, required = false) final Integer dispatcherThreads,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY, required = false) final String orderPolicy,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__GATEWAYEVENTFILTER, required = false) final String[] gatewayEventFilters,
+                                     @RequestParam(value = CliStrings.CREATE_GATEWAYSENDER__GATEWAYTRANSPORTFILTER, required = false) final String[] gatewayTransportFilters)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.CREATE_GATEWAYSENDER);
+ 
+     command.addOption(CliStrings.CREATE_GATEWAYSENDER__ID, gatewaySenderId);
+     command.addOption(CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID, String.valueOf(remoteDistributedSystemId));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(parallel)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__PARALLEL, String.valueOf(parallel));
+     }
+ 
+     if (hasValue(manualStart)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__MANUALSTART, String.valueOf(manualStart));
+     }
+ 
+     if (hasValue(socketBufferSize)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__SOCKETBUFFERSIZE, String.valueOf(socketBufferSize));
+     }
+ 
+     if (hasValue(socketReadTimeout)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__SOCKETREADTIMEOUT, String.valueOf(socketReadTimeout));
+     }
+ 
+     if (hasValue(enableBatchConflation)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__ENABLEBATCHCONFLATION, String.valueOf(enableBatchConflation));
+     }
+ 
+     if (hasValue(batchSize)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__BATCHSIZE, String.valueOf(batchSize));
+     }
+ 
+     if (hasValue(batchTimeInterval)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__BATCHTIMEINTERVAL, String.valueOf(batchTimeInterval));
+     }
+ 
+     if (hasValue(enablePersistence)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__ENABLEPERSISTENCE, String.valueOf(enablePersistence));
+     }
+ 
+     if (hasValue(diskStoreName)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__DISKSTORENAME, diskStoreName);
+     }
+ 
+     if (hasValue(diskSynchronous)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__DISKSYNCHRONOUS, String.valueOf(diskSynchronous));
+     }
+ 
+     if (hasValue(maxQueueMemory)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__MAXQUEUEMEMORY, String.valueOf(maxQueueMemory));
+     }
+ 
+     if (hasValue(alertThreshold)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__ALERTTHRESHOLD, String.valueOf(alertThreshold));
+     }
+ 
+     if (hasValue(dispatcherThreads)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS, String.valueOf(dispatcherThreads));
+     }
+ 
+     if (hasValue(orderPolicy)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__ORDERPOLICY, orderPolicy);
+     }
+ 
+     if (hasValue(gatewayEventFilters)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__GATEWAYEVENTFILTER, StringUtils.concat(gatewayEventFilters,
+         StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(gatewayTransportFilters)) {
+       command.addOption(CliStrings.CREATE_GATEWAYSENDER__GATEWAYTRANSPORTFILTER, StringUtils.concat(
+         gatewayTransportFilters, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/gateways/senders/{id}", params = "op=load-balance")
+   @ResponseBody
+   public String loadBalanceGatewaySender(@PathVariable("id") final String gatewaySenderId) {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.LOAD_BALANCE_GATEWAYSENDER);
+ 
+     command.addOption(CliStrings.LOAD_BALANCE_GATEWAYSENDER__ID, decode(gatewaySenderId));
+ 
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine whether Async functionality is required
+   @RequestMapping(method = RequestMethod.POST, value = "/gateways/senders/{id}", params = "op=pause")
+   @ResponseBody
+   public String pauseGatewaySender(@PathVariable("id") final String gatewaySenderId,
+                                    @RequestParam(value = CliStrings.PAUSE_GATEWAYSENDER__GROUP, required = false) final String[] groups,
+                                    @RequestParam(value = CliStrings.PAUSE_GATEWAYSENDER__MEMBER, required = false) final String[] members)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.PAUSE_GATEWAYSENDER);
+ 
+     command.addOption(CliStrings.PAUSE_GATEWAYSENDER__ID, decode(gatewaySenderId));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.PAUSE_GATEWAYSENDER__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.PAUSE_GATEWAYSENDER__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine whether Async functionality is required
+   @RequestMapping(method = RequestMethod.POST, value = "/gateways/senders/{id}", params = "op=resume")
+   @ResponseBody
+   public String resumeGatewaySender(@PathVariable("id") final String gatewaySenderId,
+                                     @RequestParam(value = CliStrings.RESUME_GATEWAYSENDER__GROUP, required = false) final String[] groups,
+                                     @RequestParam(value = CliStrings.RESUME_GATEWAYSENDER__MEMBER, required = false) final String[] members)
+   {
 -    CommandStringBuilder command = new CommandStringBuilder(CliStrings.RESUME_GATEWAYSENDER__ID);
++    CommandStringBuilder command = new CommandStringBuilder(CliStrings.RESUME_GATEWAYSENDER);
+ 
+     command.addOption(CliStrings.RESUME_GATEWAYSENDER__ID, decode(gatewaySenderId));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.RESUME_GATEWAYSENDER__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.RESUME_GATEWAYSENDER__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine whether Async functionality is required
+   @RequestMapping(method = RequestMethod.POST, value = "/gateways/receivers", params = "op=start")
+   @ResponseBody
+   public String startGatewayReceiver(@RequestParam(value = CliStrings.START_GATEWAYRECEIVER__GROUP, required = false) final String[] groups,
+                                      @RequestParam(value = CliStrings.START_GATEWAYRECEIVER__MEMBER, required = false) final String[] members)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.START_GATEWAYRECEIVER);
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.START_GATEWAYRECEIVER__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.START_GATEWAYRECEIVER__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   // TODO determine whether Async functionality is required
+   @RequestMapping(method = RequestMethod.POST, value = "/gateways/senders", params = "op=start")
+   @ResponseBody
+   public String startGatewaySender(@RequestParam(CliStrings.START_GATEWAYSENDER__ID) final String gatewaySenderId,
+                                    @RequestParam(value = CliStrings.START_GATEWAYSENDER__GROUP, required = false) final String[] groups,
+                                    @RequestParam(value = CliStrings.START_GATEWAYSENDER__MEMBER, required = false) final String[] members)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.START_GATEWAYSENDER);
+ 
+     command.addOption(CliStrings.START_GATEWAYSENDER__ID, gatewaySenderId);
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.START_GATEWAYSENDER__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.START_GATEWAYSENDER__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/gateways/receivers")
+   @ResponseBody
+   public String statusGatewayReceivers(@RequestParam(value = CliStrings.STATUS_GATEWAYRECEIVER__GROUP, required = false) final String[] groups,
+                                        @RequestParam(value = CliStrings.STATUS_GATEWAYRECEIVER__MEMBER, required = false) final String[] members)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.STATUS_GATEWAYRECEIVER);
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.STATUS_GATEWAYRECEIVER__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.STATUS_GATEWAYRECEIVER__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.GET, value = "/gateways/senders/{id}")
+   @ResponseBody
+   public String statusGatewaySenders(@PathVariable("id") final String gatewaySenderId,
+                                      @RequestParam(value = CliStrings.STATUS_GATEWAYSENDER__GROUP, required = false) final String[] groups,
+                                      @RequestParam(value = CliStrings.STATUS_GATEWAYSENDER__MEMBER, required = false) final String[] members)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.STATUS_GATEWAYSENDER);
+ 
+     command.addOption(CliStrings.STATUS_GATEWAYSENDER__ID, decode(gatewaySenderId));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.STATUS_GATEWAYSENDER__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.STATUS_GATEWAYSENDER__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/gateways/receivers", params = "op=stop")
+   @ResponseBody
+   public String stopGatewayReceiver(@RequestParam(value = CliStrings.STOP_GATEWAYRECEIVER__GROUP, required = false) final String[] groups,
+                                     @RequestParam(value = CliStrings.STOP_GATEWAYRECEIVER__MEMBER, required = false) final String[] members)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.STOP_GATEWAYRECEIVER);
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.STOP_GATEWAYRECEIVER__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.STOP_GATEWAYRECEIVER__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+   @RequestMapping(method = RequestMethod.POST, value = "/gateways/senders/{id}", params = "op=stop")
+   @ResponseBody
+   public String stopGatewaySender(@PathVariable("id") final String gatewaySenderId,
+                                   @RequestParam(value = CliStrings.STOP_GATEWAYRECEIVER__GROUP, required = false) final String[] groups,
+                                   @RequestParam(value = CliStrings.STOP_GATEWAYRECEIVER__MEMBER, required = false) final String[] members)
+   {
+     CommandStringBuilder command = new CommandStringBuilder(CliStrings.STOP_GATEWAYSENDER);
+ 
+     command.addOption(CliStrings.STOP_GATEWAYSENDER__ID, decode(gatewaySenderId));
+ 
+     if (hasValue(groups)) {
+       command.addOption(CliStrings.STOP_GATEWAYSENDER__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     if (hasValue(members)) {
+       command.addOption(CliStrings.STOP_GATEWAYSENDER__MEMBER, StringUtils.concat(members, StringUtils.COMMA_DELIMITER));
+     }
+ 
+     return processCommand(command.toString());
+   }
+ 
+ }


[36/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/LauncherLifecycleCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/LauncherLifecycleCommands.java
index 0000000,8eae00b..3ec52e3
mode 000000,100755..100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/LauncherLifecycleCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/LauncherLifecycleCommands.java
@@@ -1,0 -1,2803 +1,2816 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.awt.Desktop;
+ import java.io.BufferedReader;
+ import java.io.BufferedWriter;
+ import java.io.File;
+ import java.io.FileFilter;
+ import java.io.FileNotFoundException;
+ import java.io.FileReader;
+ import java.io.FileWriter;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+ import java.net.InetAddress;
+ import java.net.MalformedURLException;
+ import java.net.URI;
+ import java.net.UnknownHostException;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.EmptyStackException;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.Set;
+ import java.util.Stack;
+ import java.util.TreeSet;
+ import java.util.concurrent.TimeUnit;
+ import java.util.concurrent.atomic.AtomicReference;
+ 
+ import javax.management.MalformedObjectNameException;
+ import javax.management.ObjectName;
+ import javax.management.Query;
+ import javax.management.QueryExp;
+ import javax.net.ssl.SSLException;
+ import javax.net.ssl.SSLHandshakeException;
+ 
+ import com.gemstone.gemfire.GemFireException;
+ import com.gemstone.gemfire.SystemFailure;
+ import com.gemstone.gemfire.cache.server.CacheServer;
+ import com.gemstone.gemfire.distributed.AbstractLauncher;
+ import com.gemstone.gemfire.distributed.AbstractLauncher.ServiceState;
+ import com.gemstone.gemfire.distributed.AbstractLauncher.Status;
+ import com.gemstone.gemfire.distributed.LocatorLauncher;
+ import com.gemstone.gemfire.distributed.LocatorLauncher.LocatorState;
+ import com.gemstone.gemfire.distributed.ServerLauncher;
+ import com.gemstone.gemfire.distributed.ServerLauncher.ServerState;
+ import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+ import com.gemstone.gemfire.distributed.internal.tcpserver.TcpClient;
+ import com.gemstone.gemfire.internal.DistributionLocator;
+ import com.gemstone.gemfire.internal.GemFireVersion;
+ import com.gemstone.gemfire.internal.OSProcess;
+ import com.gemstone.gemfire.internal.SocketCreator;
+ import com.gemstone.gemfire.internal.cache.persistence.PersistentMemberPattern;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.internal.lang.ClassUtils;
+ import com.gemstone.gemfire.internal.lang.ObjectUtils;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.internal.lang.SystemUtils;
+ import com.gemstone.gemfire.internal.process.ClusterConfigurationNotAvailableException;
+ import com.gemstone.gemfire.internal.process.NonBlockingProcessStreamReader;
+ import com.gemstone.gemfire.internal.process.ProcessLauncherContext;
+ import com.gemstone.gemfire.internal.process.ProcessStreamReader;
+ import com.gemstone.gemfire.internal.process.ProcessStreamReader.InputListener;
+ import com.gemstone.gemfire.internal.process.ProcessStreamReader.ReadingMode;
+ import com.gemstone.gemfire.internal.process.ProcessType;
+ import com.gemstone.gemfire.internal.process.ProcessUtils;
+ import com.gemstone.gemfire.internal.process.signal.SignalEvent;
+ import com.gemstone.gemfire.internal.process.signal.SignalListener;
+ import com.gemstone.gemfire.internal.util.IOUtils;
+ import com.gemstone.gemfire.internal.util.StopWatch;
+ import com.gemstone.gemfire.lang.AttachAPINotFoundException;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
+ import com.gemstone.gemfire.management.MemberMXBean;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.ManagementConstants;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.converters.ConnectionEndpointConverter;
+ import com.gemstone.gemfire.management.internal.cli.domain.ConnectToLocatorResult;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.InfoResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.cli.shell.JmxOperationInvoker;
+ import com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker;
+ import com.gemstone.gemfire.management.internal.cli.util.CauseFinder;
+ import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
+ import com.gemstone.gemfire.management.internal.cli.util.ConnectionEndpoint;
+ import com.gemstone.gemfire.management.internal.cli.util.JConsoleNotFoundException;
+ import com.gemstone.gemfire.management.internal.cli.util.VisualVmNotFoundException;
+ import com.gemstone.gemfire.management.internal.configuration.domain.SharedConfigurationStatus;
+ import com.gemstone.gemfire.management.internal.configuration.messages.SharedConfigurationStatusRequest;
+ import com.gemstone.gemfire.management.internal.configuration.messages.SharedConfigurationStatusResponse;
 -
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ /**
+  * The LauncherLifecycleCommands class encapsulates all GemFire launcher commands for GemFire tools (like starting
+  * GemFire Monitor (GFMon) and Visual Statistics Display (VSD)) as well external tools (like jconsole).
+  * <p>
+  * @author John Blum
+  * @see com.gemstone.gemfire.distributed.LocatorLauncher
+  * @see com.gemstone.gemfire.distributed.ServerLauncher
+  * @see com.gemstone.gemfire.management.internal.cli.commands.AbstractCommandsSupport
+  * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
+  * @since 7.0
+  */
+ @SuppressWarnings("unused")
+ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
+ 
+   private static final String LOCATOR_TERM_NAME = "Locator";
+   private static final String SERVER_TERM_NAME  = "Server";
+   
+   private static final long PROCESS_STREAM_READER_JOIN_TIMEOUT_MILLIS = 30*1000;
+   private static final long PROCESS_STREAM_READER_ASYNC_STOP_TIMEOUT_MILLIS = 5*1000;
+   private static final long WAITING_FOR_STOP_TO_MAKE_PID_GO_AWAY_TIMEOUT_MILLIS = 30*1000;
+   private static final long WAITING_FOR_PID_FILE_TO_CONTAIN_PID_TIMEOUT_MILLIS = 2*1000;
+   
+   protected static final int CMS_INITIAL_OCCUPANCY_FRACTION = 60;
+   protected static final int DEFAULT_PROCESS_OUTPUT_WAIT_TIME_MILLISECONDS = 5000;
+   protected static final int INVALID_PID = -1;
+   protected static final int MINIMUM_HEAP_FREE_RATIO = 10;
+   protected static final int NUM_ATTEMPTS_FOR_SHARED_CONFIGURATION_STATUS = 3;
+ 
+   protected static final AtomicReference<Boolean> ATTACH_API_AVAILABLE = new AtomicReference<>(null);
+ 
+   protected static final String ATTACH_API_CLASS_NAME = "com.sun.tools.attach.AttachNotSupportedException";
+   protected static final String GEMFIRE_HOME = System.getenv("GEMFIRE");
+   protected static final String JAVA_HOME = System.getProperty("java.home");
+   protected static final String LOCALHOST = "localhost";
+ 
+   // MUST CHANGE THIS TO REGEX SINCE VERSION CHANGES IN JAR NAME
+   protected static final String GEMFIRE_JAR_PATHNAME = IOUtils.appendToPath(GEMFIRE_HOME, "lib", GemFireVersion.getGemFireJarFileName());
+ 
+   protected static final String CORE_DEPENDENCIES_JAR_PATHNAME =
+     IOUtils.appendToPath(GEMFIRE_HOME, "lib", "geode-dependencies.jar");
+ 
+   protected static final String SPRING_AOP_JAR_NAME_PREFIX = "spring-aop";
+   protected static final String SPRING_BEANS_JAR_NAME_PREFIX = "spring-beans";
+   protected static final String SPRING_CONTEXT_JAR_NAME_PREFIX = "spring-context";
+   protected static final String SPRING_CONTEXT_SUPPORT_JAR_NAME_PREFIX = "spring-context-support";
+   protected static final String SPRING_DATA_COMMONS_JAR_NAME_PREFIX = "spring-data-commons";
+   protected static final String SPRING_DATA_GEMFIRE_JAR_NAME_PREFIX = "spring-data-gemfire";
+   protected static final String SPRING_EXPRESSION_JAR_NAME_PREFIX = "spring-expression";
+   protected static final String SPRING_TX_JAR_NAME_PREFIX = "spring-tx";
+ 
+   protected static final Set<String> SPRING_JAR_NAME_PREFIXES;
+ 
+   static {
+     Set<String> springJarNamePrefixes = new HashSet<>(8);
+ 
+     springJarNamePrefixes.add(SPRING_AOP_JAR_NAME_PREFIX);
+     springJarNamePrefixes.add(SPRING_BEANS_JAR_NAME_PREFIX);
+     springJarNamePrefixes.add(SPRING_CONTEXT_JAR_NAME_PREFIX);
+     springJarNamePrefixes.add(SPRING_CONTEXT_SUPPORT_JAR_NAME_PREFIX);
+     springJarNamePrefixes.add(SPRING_DATA_COMMONS_JAR_NAME_PREFIX);
+     springJarNamePrefixes.add(SPRING_DATA_GEMFIRE_JAR_NAME_PREFIX);
+     springJarNamePrefixes.add(SPRING_EXPRESSION_JAR_NAME_PREFIX);
+     springJarNamePrefixes.add(SPRING_TX_JAR_NAME_PREFIX);
+ 
+     SPRING_JAR_NAME_PREFIXES = Collections.unmodifiableSet(springJarNamePrefixes);
+   }
+ 
+   protected static boolean isAttachApiAvailable() {
+     if (ATTACH_API_AVAILABLE.get() == null) {
+       try {
+         ClassUtils.forName(ATTACH_API_CLASS_NAME, new AttachAPINotFoundException());
+         ATTACH_API_AVAILABLE.set(Boolean.TRUE);
+       }
+       catch (AttachAPINotFoundException ignore) {
+         ATTACH_API_AVAILABLE.set(Boolean.FALSE);
+       }
+     }
+ 
+     return ATTACH_API_AVAILABLE.get();
+   }
+ 
+   @CliCommand(value = CliStrings.START_LOCATOR, help = CliStrings.START_LOCATOR__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_LOCATOR, CliStrings.TOPIC_GEMFIRE_LIFECYCLE })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result startLocator(@CliOption(key = CliStrings.START_LOCATOR__MEMBER_NAME,
+                                         mandatory = true,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__MEMBER_NAME__HELP)
+                              final String memberName,
+                              @CliOption(key = CliStrings.START_LOCATOR__BIND_ADDRESS,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__BIND_ADDRESS__HELP)
+                              final String bindAddress,
+                              @CliOption(key = CliStrings.START_LOCATOR__CLASSPATH,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__CLASSPATH__HELP)
+                              final String classpath,
+                              @CliOption(key = CliStrings.START_LOCATOR__FORCE,
+                                         unspecifiedDefaultValue = "false",
+                                         specifiedDefaultValue = "true",
+                                         help = CliStrings.START_LOCATOR__FORCE__HELP)
+                              final Boolean force,
+                              @CliOption(key = CliStrings.START_LOCATOR__GROUP,
+                                         optionContext = ConverterHint.MEMBERGROUP,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__GROUP__HELP)
+                              final String group,
+                              @CliOption(key = CliStrings.START_LOCATOR__HOSTNAME_FOR_CLIENTS,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__HOSTNAME_FOR_CLIENTS__HELP)
+                              final String hostnameForClients,
+                              @CliOption(key = CliStrings.START_LOCATOR__INCLUDE_SYSTEM_CLASSPATH,
+                                         specifiedDefaultValue = "true",
+                                         unspecifiedDefaultValue = "false",
+                                         help = CliStrings.START_LOCATOR__INCLUDE_SYSTEM_CLASSPATH__HELP)
+                              final Boolean includeSystemClasspath,
+                              @CliOption(key = CliStrings.START_LOCATOR__LOCATORS,
+                                         optionContext = ConverterHint.LOCATOR_DISCOVERY_CONFIG,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__LOCATORS__HELP)
+                              final String locators,
+                              @CliOption(key = CliStrings.START_LOCATOR__LOG_LEVEL,
+                                         optionContext = ConverterHint.LOG_LEVEL,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__LOG_LEVEL__HELP)
+                              final String logLevel,
+                              @CliOption(key = CliStrings.START_LOCATOR__MCAST_ADDRESS,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__MCAST_ADDRESS__HELP)
+                              final String mcastBindAddress,
+                              @CliOption(key = CliStrings.START_LOCATOR__MCAST_PORT,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__MCAST_PORT__HELP)
+                              final Integer mcastPort,
+                              @CliOption(key = CliStrings.START_LOCATOR__PORT,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__PORT__HELP)
+                              final Integer port,
+                              @CliOption(key = CliStrings.START_LOCATOR__DIR,
+                                         optionContext = ConverterHint.DIR_PATHSTRING,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__DIR__HELP)
+                              String workingDirectory,
+                              @CliOption(key = CliStrings.START_LOCATOR__PROPERTIES,
+                                         optionContext = ConverterHint.FILE_PATHSTRING,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__PROPERTIES__HELP)
+                              String gemfirePropertiesPathname,
+                              @CliOption(key = CliStrings.START_LOCATOR__SECURITY_PROPERTIES,
+                                         optionContext = ConverterHint.FILE_PATHSTRING,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__SECURITY_PROPERTIES__HELP)
+                              String gemfireSecurityPropertiesPathname,
+                              @CliOption(key = CliStrings.START_LOCATOR__INITIALHEAP,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__INITIALHEAP__HELP)
+                              final String initialHeap,
+                              @CliOption(key = CliStrings.START_LOCATOR__MAXHEAP,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__MAXHEAP__HELP)
+                              final String maxHeap,
+                              @CliOption(key = CliStrings.START_LOCATOR__J,
+                                         optionContext = ConverterHint.STRING_LIST,
+                                         unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                         help = CliStrings.START_LOCATOR__J__HELP)
+                              @CliMetaData(valueSeparator = ",")
+                              final String[] jvmArgsOpts,
+                              @CliOption (key = CliStrings.START_LOCATOR__CONNECT,
+                                         unspecifiedDefaultValue = "true",
+                                         specifiedDefaultValue = "true",
+                                         help = CliStrings.START_LOCATOR__CONNECT__HELP)
+                              final boolean connect,
+                              @CliOption(key = CliStrings.START_LOCATOR__ENABLE__SHARED__CONFIGURATION,
+                                         unspecifiedDefaultValue = "true",
+                                         specifiedDefaultValue = "true",
+                                         help = CliStrings.START_LOCATOR__ENABLE__SHARED__CONFIGURATION__HELP)
+                              final boolean enableSharedConfiguration,
+                              @CliOption(key = CliStrings.START_LOCATOR__LOAD__SHARED_CONFIGURATION__FROM__FILESYSTEM,
+                                         unspecifiedDefaultValue = "false",
+                                         help = CliStrings.START_LOCATOR__LOAD__SHARED_CONFIGURATION__FROM__FILESYSTEM__HELP)
+                              final boolean loadSharedConfigurationFromDirectory,
+                              @CliOption(key = CliStrings.START_LOCATOR__CLUSTER__CONFIG__DIR,
+                                         unspecifiedDefaultValue = "",
+                                         help = CliStrings.START_LOCATOR__CLUSTER__CONFIG__DIR__HELP)
+                              final String clusterConfigDir
+   ) {
+     try {
+       if (workingDirectory == null) {
+         // attempt to use or make sub-directory using memberName...
+         File locatorWorkingDirectory = new File(memberName);
+ 
+         if (!(locatorWorkingDirectory.exists() || locatorWorkingDirectory.mkdir())) {
+           throw new IllegalStateException(CliStrings.format(CliStrings.START_LOCATOR__MSG__COULD_NOT_CREATE_DIRECTORY_0_VERIFY_PERMISSIONS,
+             locatorWorkingDirectory.getAbsolutePath()));
+         }
+ 
+         workingDirectory = IOUtils.tryGetCanonicalPathElseGetAbsolutePath(locatorWorkingDirectory);
+       }
+ 
+       gemfirePropertiesPathname = CliUtil.resolvePathname(gemfirePropertiesPathname);
+ 
+       if (!StringUtils.isBlank(gemfirePropertiesPathname) && !IOUtils.isExistingPathname(gemfirePropertiesPathname)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE,
+           StringUtils.EMPTY_STRING, gemfirePropertiesPathname));
+       }
+ 
+       gemfireSecurityPropertiesPathname = CliUtil.resolvePathname(gemfireSecurityPropertiesPathname);
+ 
+       if (!StringUtils.isBlank(gemfireSecurityPropertiesPathname) && !IOUtils.isExistingPathname(gemfireSecurityPropertiesPathname)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE,
+           "Security ", gemfireSecurityPropertiesPathname));
+       }
+ 
+       File locatorPidFile = new File(workingDirectory, ProcessType.LOCATOR.getPidFileName());
+ 
+       final int oldPid = readPid(locatorPidFile);
+ 
+       Properties gemfireProperties = new Properties();
+ 
+       gemfireProperties.setProperty(DistributionConfig.GROUPS_NAME, StringUtils.valueOf(group, StringUtils.EMPTY_STRING));
+       gemfireProperties.setProperty(DistributionConfig.LOCATORS_NAME, StringUtils.valueOf(locators, StringUtils.EMPTY_STRING));
+       gemfireProperties.setProperty(DistributionConfig.LOG_LEVEL_NAME, StringUtils.valueOf(logLevel, StringUtils.EMPTY_STRING));
+       gemfireProperties.setProperty(DistributionConfig.MCAST_ADDRESS_NAME, StringUtils.valueOf(mcastBindAddress, StringUtils.EMPTY_STRING));
+       gemfireProperties.setProperty(DistributionConfig.MCAST_PORT_NAME, StringUtils.valueOf(mcastPort, StringUtils.EMPTY_STRING));
+       gemfireProperties.setProperty(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, StringUtils.valueOf(enableSharedConfiguration, StringUtils.EMPTY_STRING));
+       gemfireProperties.setProperty(DistributionConfig.LOAD_CLUSTER_CONFIG_FROM_DIR_NAME, StringUtils.valueOf(loadSharedConfigurationFromDirectory, StringUtils.EMPTY_STRING));
+       gemfireProperties.setProperty(DistributionConfig.CLUSTER_CONFIGURATION_DIR, StringUtils.valueOf(clusterConfigDir, StringUtils.EMPTY_STRING));
+       
+       // read the OSProcess enable redirect system property here -- TODO: replace with new GFSH argument
+       final boolean redirectOutput = Boolean.getBoolean(OSProcess.ENABLE_OUTPUT_REDIRECTION_PROPERTY);
+       LocatorLauncher locatorLauncher = new LocatorLauncher.Builder()
+         .setBindAddress(bindAddress)
+         .setForce(force)
+         .setHostnameForClients(hostnameForClients)
+         .setMemberName(memberName)
+         .setPort(port)
+         .setRedirectOutput(redirectOutput)
+         .setWorkingDirectory(workingDirectory)
+         .build();
+ 
+       String[] locatorCommandLine = createStartLocatorCommandLine(locatorLauncher, gemfirePropertiesPathname,
+           gemfireSecurityPropertiesPathname, gemfireProperties, classpath, includeSystemClasspath, jvmArgsOpts, initialHeap, maxHeap);
+ 
+       //getGfsh().logInfo(StringUtils.concat(locatorCommandLine, " "), null);
+ 
+       final Process locatorProcess = new ProcessBuilder(locatorCommandLine)
+         .directory(new File(locatorLauncher.getWorkingDirectory()))
+         .start();
+ 
+       locatorProcess.getInputStream().close();
+       locatorProcess.getOutputStream().close();
+ 
+       // fix TRAC bug #51967 by using NON_BLOCKING on Windows
+       final ReadingMode readingMode = SystemUtils.isWindows() ? ReadingMode.NON_BLOCKING : ReadingMode.BLOCKING;
+ 
+       final StringBuffer message = new StringBuffer(); // need thread-safe StringBuffer
+       InputListener inputListener = new InputListener() {
+         @Override
+         public void notifyInputLine(String line) {
+           message.append(line);
+           if (readingMode == ReadingMode.BLOCKING) {
+             message.append(StringUtils.LINE_SEPARATOR);
+           }
+         }
+       };
+ 
+       ProcessStreamReader stderrReader = new ProcessStreamReader.Builder(locatorProcess)
+           .inputStream(locatorProcess.getErrorStream())
+           .inputListener(inputListener)
+           .readingMode(readingMode)
+           .continueReadingMillis(2*1000)
+           .build()
+           .start();
+ 
+       LocatorState locatorState;
+ 
+       String previousLocatorStatusMessage = null;
+ 
+       LauncherSignalListener locatorSignalListener = new LauncherSignalListener();
+ 
+       final boolean registeredLocatorSignalListener = getGfsh().getSignalHandler().registerListener(locatorSignalListener);
+ 
+       try {
+         getGfsh().logInfo(String.format(CliStrings.START_LOCATOR__RUN_MESSAGE,
+           IOUtils.tryGetCanonicalPathElseGetAbsolutePath(new File(locatorLauncher.getWorkingDirectory()))), null);
+ 
+         do {
+           try {
+             final int exitValue = locatorProcess.exitValue();
+ 
+             stderrReader.join(PROCESS_STREAM_READER_JOIN_TIMEOUT_MILLIS); // was Long.MAX_VALUE
+ 
+             //Gfsh.println(message);
+ 
+             return ResultBuilder.createShellClientErrorResult(String.format(
+               CliStrings.START_LOCATOR__PROCESS_TERMINATED_ABNORMALLY_ERROR_MESSAGE,
+                 exitValue, locatorLauncher.getWorkingDirectory(), message.toString()));
+           }
+           catch (IllegalThreadStateException ignore) {
+             // the IllegalThreadStateException is expected; it means the Locator's process has not terminated,
+             // and basically should not
+             Gfsh.print(".");
+ 
+             synchronized (this) {
+               TimeUnit.MILLISECONDS.timedWait(this, 500);
+             }
+ 
+             locatorState = (ProcessUtils.isAttachApiAvailable() ? locatorStatus(locatorPidFile, oldPid, memberName)
+                 : locatorStatus(workingDirectory, memberName));
+ 
+             String currentLocatorStatusMessage = locatorState.getStatusMessage();
+ 
+             if (isStartingOrNotResponding(locatorState.getStatus())
+               && !(StringUtils.isBlank(currentLocatorStatusMessage)
+                 || currentLocatorStatusMessage.equalsIgnoreCase(previousLocatorStatusMessage)))
+             {
+               Gfsh.println();
+               Gfsh.println(currentLocatorStatusMessage);
+               previousLocatorStatusMessage = currentLocatorStatusMessage;
+             }
+           }
+         }
+         while (!(registeredLocatorSignalListener && locatorSignalListener.isSignaled())
+           && isStartingOrNotResponding(locatorState.getStatus()));
+       }
+       finally {
+         stderrReader.stopAsync(PROCESS_STREAM_READER_ASYNC_STOP_TIMEOUT_MILLIS); // stop will close ErrorStream
+         getGfsh().getSignalHandler().unregisterListener(locatorSignalListener);
+       }
+ 
+       Gfsh.println();
+ 
+       final boolean asyncStart = (registeredLocatorSignalListener && locatorSignalListener.isSignaled()
+         && isStartingNotRespondingOrNull(locatorState));
+ 
+       InfoResultData infoResultData = ResultBuilder.createInfoResultData();
+ 
+       if (asyncStart) {
+         infoResultData.addLine(String.format(CliStrings.ASYNC_PROCESS_LAUNCH_MESSAGE, LOCATOR_TERM_NAME));
+       }
+       else {
+         infoResultData.addLine(locatorState.toString());
+ 
+         String locatorHostName = StringUtils.defaultIfBlank(locatorLauncher.getHostnameForClients(), getLocalHost());
+         int locatorPort = locatorLauncher.getPort();
+ 
+         // AUTO-CONNECT
+         // If the connect succeeds add the connected message to the result,
+         // Else, ask the user to use the "connect" command to connect to the Locator.
+         if (shouldAutoConnect(connect)) {
+           doAutoConnect(locatorHostName, locatorPort, gemfirePropertiesPathname, gemfireSecurityPropertiesPathname,
+             infoResultData);
+         }
+ 
+         // Report on the state of the Shared Configuration service if enabled...
+         if (enableSharedConfiguration) {
+           infoResultData.addLine(getSharedConfigurationStatusFromLocator(locatorHostName, locatorPort));
+         }
+       }
+ 
+       return ResultBuilder.buildResult(infoResultData);
+     }
+     catch (IllegalArgumentException e) {
+       String message = e.getMessage();
+       if (message != null && message.matches(LocalizedStrings.Launcher_Builder_UNKNOWN_HOST_ERROR_MESSAGE.toLocalizedString(".+"))) {
+         message = CliStrings.format(CliStrings.LAUNCHERLIFECYCLECOMMANDS__MSG__FAILED_TO_START_0_REASON_1, LOCATOR_TERM_NAME, message);
+       }
+       return ResultBuilder.createUserErrorResult(message);
+     }
+     catch (IllegalStateException e) {
+       return ResultBuilder.createUserErrorResult(e.getMessage());
+     }
+     catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     }
+     catch (Throwable t) {
+       SystemFailure.checkFailure();
+       String errorMessage = String.format(CliStrings.START_LOCATOR__GENERAL_ERROR_MESSAGE,
+         StringUtils.defaultIfBlank(workingDirectory, memberName), getLocatorId(bindAddress, port),
+         toString(t, getGfsh().getDebug()));
+       getGfsh().logToFile(errorMessage, t);
+       return ResultBuilder.createShellClientErrorResult(errorMessage);
+     }
+     finally {
+       Gfsh.redirectInternalJavaLoggers();
+     }
+   }
+ 
+   protected String[] createStartLocatorCommandLine(final LocatorLauncher launcher,
+                                                    final String gemfirePropertiesPathname,
+                                                    final String gemfireSecurityPropertiesPathname,
+                                                    final Properties gemfireProperties,
+                                                    final String userClasspath,
+                                                    final Boolean includeSystemClasspath,
+                                                    final String[] jvmArgsOpts,
+                                                    final String initialHeap,
+                                                    final String maxHeap)
+     throws MalformedObjectNameException
+   {
+     List<String> commandLine = new ArrayList<>();
+ 
+     commandLine.add(getJavaPath());
+     commandLine.add("-server");
+     commandLine.add("-classpath");
+     commandLine.add(getLocatorClasspath(Boolean.TRUE.equals(includeSystemClasspath), userClasspath));
+ 
+     addCurrentLocators(commandLine, gemfireProperties);
+     addGemFirePropertyFile(commandLine, gemfirePropertiesPathname);
+     addGemFireSecurityPropertyFile(commandLine, gemfireSecurityPropertiesPathname);
+     addGemFireSystemProperties(commandLine, gemfireProperties);
+     addJvmArgumentsAndOptions(commandLine, jvmArgsOpts);
+     addInitialHeap(commandLine, initialHeap);
+     addMaxHeap(commandLine, maxHeap);
+ 
+     commandLine.add("-D".concat(AbstractLauncher.SIGNAL_HANDLER_REGISTRATION_SYSTEM_PROPERTY.concat("=true")));
+     commandLine.add("-Djava.awt.headless=true");
+     commandLine.add("-Dsun.rmi.dgc.server.gcInterval".concat("=").concat(Long.toString(Long.MAX_VALUE-1)));
+     commandLine.add(LocatorLauncher.class.getName());
+     commandLine.add(LocatorLauncher.Command.START.getName());
+ 
+     if (!StringUtils.isBlank(launcher.getMemberName())) {
+       commandLine.add(launcher.getMemberName());
+     }
+ 
+     if (launcher.getBindAddress() != null) {
+       commandLine.add("--bind-address=" + launcher.getBindAddress().getCanonicalHostName());
+     }
+ 
+     if (launcher.isDebugging() || isDebugging()) {
+       commandLine.add("--debug");
+     }
+ 
+     if (launcher.isForcing()) {
+       commandLine.add("--force");
+     }
+ 
+     if (!StringUtils.isBlank(launcher.getHostnameForClients())) {
+       commandLine.add("--hostname-for-clients=" + launcher.getHostnameForClients());
+     }
+ 
+     if (launcher.getPort() != null) {
+       commandLine.add("--port=" + launcher.getPort());
+     }
+ 
+     if (launcher.isRedirectingOutput()) {
+       commandLine.add("--redirect-output");
+     }
+ 
+     return commandLine.toArray(new String[commandLine.size()]);
+   }
+ 
+   // TODO should we connect implicitly when in non-interactive, headless mode (e.g. gfsh -e "start locator ...")?
+   // With execute option (-e), there could be multiple commands which might presume that a prior "start locator"
+   // has formed the connection.
+   private boolean shouldAutoConnect(final boolean connect) {
+     return (connect && !(getGfsh() == null || isConnectedAndReady()));
+   }
+ 
+   private boolean doAutoConnect(final String locatorHostname,
+                                 final int locatorPort,
+                                 final String gemfirePropertiesPathname,
+                                 final String gemfireSecurityPropertiesPathname,
+                                 final InfoResultData infoResultData)
+   {
+     boolean connectSuccess = false;
+     boolean jmxManagerAuthEnabled = false;
+     boolean jmxManagerSslEnabled = false;
+ 
+     Map<String, String> configurationProperties = loadConfigurationProperties(gemfireSecurityPropertiesPathname,
+       loadConfigurationProperties(gemfirePropertiesPathname));
+     Map<String, String> locatorConfigurationProperties = new HashMap<>(configurationProperties);
+ 
+     String responseFailureMessage = null;
+ 
+     for (int attempts = 0; (attempts < 10 && !connectSuccess); attempts++) {
+       try {
+         ConnectToLocatorResult connectToLocatorResult = ShellCommands.connectToLocator(locatorHostname, locatorPort,
+           ShellCommands.getConnectLocatorTimeoutInMS() / 4, locatorConfigurationProperties);
+ 
+         ConnectionEndpoint memberEndpoint = connectToLocatorResult.getMemberEndpoint();
+ 
+         jmxManagerSslEnabled = connectToLocatorResult.isJmxManagerSslEnabled();
+ 
+         if (!jmxManagerSslEnabled) {
+           configurationProperties.clear();
+         }
+ 
+         getGfsh().setOperationInvoker(new JmxOperationInvoker(memberEndpoint.getHost(), memberEndpoint.getPort(),
 -          null, null, configurationProperties));
++          null, null, configurationProperties, null));
+ 
+         String shellAndLogMessage = CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS, memberEndpoint.toString(false));
+ 
+         infoResultData.addLine("\n");
+         infoResultData.addLine(shellAndLogMessage);
+         getGfsh().logToFile(shellAndLogMessage, null);
+ 
+         connectSuccess = true;
+         responseFailureMessage = null;
+       }
+       catch (IllegalStateException unexpected) {
+         if (CauseFinder.indexOfCause(unexpected, ClassCastException.class, false) != -1) {
+           responseFailureMessage = "The Locator might require SSL Configuration.";
+         }
+       }
+       catch (SecurityException ignore) {
+         getGfsh().logToFile(ignore.getMessage(), ignore);
+         jmxManagerAuthEnabled = true;
+         break; // no need to continue after SecurityException
+       }
+       catch (SSLException ignore) {
+         if (ignore instanceof SSLHandshakeException) {
+           // try to connect again without SSL since the SSL handshake failed implying a plain text connection...
+           locatorConfigurationProperties.clear();
+         }
+         else {
+           // another type of SSL error occurred (possibly a configuration issue); pass the buck...
+           getGfsh().logToFile(ignore.getMessage(), ignore);
+           responseFailureMessage = "Check your SSL configuration and try again.";
+           break;
+         }
+       }
+       catch (Exception ignore) {
+         getGfsh().logToFile(ignore.getMessage(), ignore);
+         responseFailureMessage = "Failed to connect; unknown cause: " + ignore.getMessage();
+       }
+     }
+ 
+     if (!connectSuccess) {
+       doOnConnectionFailure(locatorHostname, locatorPort, jmxManagerAuthEnabled, jmxManagerSslEnabled, infoResultData);
+     }
+ 
+     if (!StringUtils.isBlank(responseFailureMessage)) {
+       infoResultData.addLine("\n");
+       infoResultData.addLine(responseFailureMessage);
+     }
+ 
+     return connectSuccess;
+   }
+ 
+   private void doOnConnectionFailure(final String locatorHostName,
+                                      final int locatorPort,
+                                      final boolean jmxManagerAuthEnabled,
+                                      final boolean jmxManagerSslEnabled,
+                                      final InfoResultData infoResultData)
+   {
+     infoResultData.addLine("\n");
+     infoResultData.addLine(CliStrings.format(CliStrings.START_LOCATOR__USE__0__TO__CONNECT,
+       new CommandStringBuilder(CliStrings.CONNECT).addOption(CliStrings.CONNECT__LOCATOR,
+         locatorHostName + "[" + locatorPort + "]").toString()));
+ 
+     StringBuilder message = new StringBuilder();
+ 
+     if (jmxManagerAuthEnabled) {
+       message.append("Authentication");
+     }
+     if (jmxManagerSslEnabled) {
+       message.append(jmxManagerAuthEnabled ? " and " : StringUtils.EMPTY_STRING).append("SSL configuration");
+     }
+     if (jmxManagerAuthEnabled || jmxManagerSslEnabled) {
+       message.append(" required to connect to the Manager.");
+       infoResultData.addLine("\n");
+       infoResultData.addLine(message.toString());
+     }
+   }
+ 
+   private Map<String, String> loadConfigurationProperties(final String configurationPropertiesPathname) {
+     return loadConfigurationProperties(configurationPropertiesPathname, null);
+   }
+ 
+   private Map<String, String> loadConfigurationProperties(final String configurationPropertiesPathname,
+                                                           Map<String, String> configurationProperties)
+   {
+     configurationProperties = (configurationProperties != null ? configurationProperties
+       : new HashMap<String, String>());
+ 
+     if (IOUtils.isExistingPathname(configurationPropertiesPathname)) {
+       try {
+         configurationProperties.putAll(ShellCommands.loadPropertiesFromURL(
+           new File(configurationPropertiesPathname).toURI().toURL()));
+       }
+       catch (MalformedURLException ignore) {
+         LogWrapper.getInstance().warning(String.format(
+           "Failed to load GemFire configuration properties from pathname (%1$s)!",
+             configurationPropertiesPathname), ignore);
+       }
+     }
+ 
+     return configurationProperties;
+   }
+ 
+   private String getSharedConfigurationStatusFromLocatorState(LocatorState locatorState) throws ClassNotFoundException, IOException {
+     return getSharedConfigurationStatusFromLocator(locatorState.getHost(), Integer.parseInt(locatorState.getPort()));
+   }
+ 
+   private String getSharedConfigurationStatusFromLocator(String locatorHostName, int locatorPort) throws ClassNotFoundException, IOException  {
+     final StringBuilder buffer = new StringBuilder();
+     
+     try {
+       final InetAddress networkAddress = InetAddress.getByName(locatorHostName);
+ 
+       SharedConfigurationStatusResponse statusResponse = (SharedConfigurationStatusResponse)
+         TcpClient.requestToServer(networkAddress, locatorPort, new SharedConfigurationStatusRequest(), 10000, true);
+       
+       for (int i=0; i<NUM_ATTEMPTS_FOR_SHARED_CONFIGURATION_STATUS; i++) {
+         if (statusResponse.getStatus().equals(SharedConfigurationStatus.STARTED) || statusResponse.getStatus().equals(SharedConfigurationStatus.NOT_STARTED)) {
+           statusResponse = (SharedConfigurationStatusResponse) TcpClient.requestToServer(networkAddress, locatorPort, new SharedConfigurationStatusRequest(), 10000, true);
+           try {
+             Thread.sleep(5000);
+           } catch (InterruptedException e) {
+             //Swallow the exception
+           }
+         } else {
+           break;
+         }
+       }
+       
+       switch (statusResponse.getStatus()) {
+         case RUNNING:
+           buffer.append("\nCluster configuration service is up and running.");
+           break;
+         case STOPPED:
+           buffer.append("\nCluster configuration service failed to start , please check the log file for errors.");
+           break;
+         case WAITING:
+           buffer.append("\nCluster configuration service is waiting for other locators with newer shared configuration data.");
+           Set<PersistentMemberPattern> pmpSet = statusResponse.getOtherLocatorInformation();
+           if (!pmpSet.isEmpty()) {
+             buffer.append("\nThis locator might have stale cluster configuration data.");
+             buffer.append("\nFollowing locators contain potentially newer cluster configuration data");
+ 
+             for (PersistentMemberPattern pmp : pmpSet) {
+               buffer.append("\nHost : ").append(pmp.getHost());
+               buffer.append("\nDirectory : ").append(pmp.getDirectory());
+             }
+           }
+           else {
+             buffer.append("\nPlease check the log file for errors");
+           }
+           break;
+         case UNDETERMINED:
+           buffer.append("\nUnable to determine the status of shared configuration service, please check the log file");
+           break;
+         case NOT_STARTED:
+           buffer.append("\nCluster configuration service has not been started yet");
+           break;
+         case STARTED:
+           buffer.append("\nCluster configuration service has been started, but its not running yet");
+           break;
+       }
+     }
+     catch (Exception e) {
+       // TODO fix this once Trac Bug #50513 gets fixed
+       // NOTE this ClassCastException occurs if the a plain text TCP/IP connection is used to connect to a Locator
+       // configured with SSL.
+       getGfsh().logToFile(String.format("Failed to get the status of the Shared Configuration Service running on Locator (%1$s[%2$d])!",
+         locatorHostName, locatorPort), e);
+     }
+ 
+     return buffer.toString();
+   }
+ 
+   @CliCommand(value = CliStrings.STATUS_LOCATOR, help = CliStrings.STATUS_LOCATOR__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_LOCATOR, CliStrings.TOPIC_GEMFIRE_LIFECYCLE })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result statusLocator(@CliOption(key = CliStrings.STATUS_LOCATOR__MEMBER,
+                                          optionContext = ConverterHint.LOCATOR_MEMBER_IDNAME,
+                                          unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                          help = CliStrings.STATUS_LOCATOR__MEMBER__HELP)
+                               final String member,
+                               @CliOption(key = CliStrings.STATUS_LOCATOR__HOST,
+                                          unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                          help = CliStrings.STATUS_LOCATOR__HOST__HELP)
+                               final String locatorHost,
+                               @CliOption(key = CliStrings.STATUS_LOCATOR__PORT,
+                                          unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                          help = CliStrings.STATUS_LOCATOR__PORT__HELP)
+                               final Integer locatorPort,
+                               @CliOption(key = CliStrings.STATUS_LOCATOR__PID,
+                                          unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                          help = CliStrings.STATUS_LOCATOR__PID__HELP)
+                               final Integer pid,
+                               @CliOption(key = CliStrings.STATUS_LOCATOR__DIR,
+                                          optionContext = ConverterHint.DIR_PATHSTRING,
+                                          unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                          help = CliStrings.STATUS_LOCATOR__DIR__HELP)
+                               final String workingDirectory)
+   {
+     try {
+       if (!StringUtils.isBlank(member)) {
+         if (isConnectedAndReady()) {
+           final MemberMXBean locatorProxy = getMemberMXBean(member);
+ 
+           if (locatorProxy != null) {
+             LocatorState state = LocatorState.fromJson(locatorProxy.status());
+             return createStatusLocatorResult(state);
+           }
+           else {
+             return ResultBuilder.createUserErrorResult(CliStrings.format(
+               CliStrings.STATUS_LOCATOR__NO_LOCATOR_FOUND_FOR_MEMBER_ERROR_MESSAGE, member));
+           }
+         }
+         else {
+           return ResultBuilder.createUserErrorResult(CliStrings.format(
+             CliStrings.STATUS_SERVICE__GFSH_NOT_CONNECTED_ERROR_MESSAGE, LOCATOR_TERM_NAME));
+         }
+       }
+       else {
+         final LocatorLauncher locatorLauncher = new LocatorLauncher.Builder()
+           .setCommand(LocatorLauncher.Command.STATUS)
+           .setBindAddress(locatorHost)
+           .setDebug(isDebugging())
+           .setPid(pid)
+           .setPort(locatorPort)
+           .setWorkingDirectory(workingDirectory)
+           .build();
+ 
+         final LocatorState state = locatorLauncher.status();
+         return createStatusLocatorResult(state);
+       }
+     }
+     catch (IllegalArgumentException e) {
+       return ResultBuilder.createUserErrorResult(e.getMessage());
+     }
+     catch (IllegalStateException e) {
+       return ResultBuilder.createUserErrorResult(e.getMessage());
+     }
+     catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     }
+     catch (Throwable t) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.STATUS_LOCATOR__GENERAL_ERROR_MESSAGE,
+         getLocatorId(locatorHost, locatorPort), StringUtils.defaultIfBlank(workingDirectory, SystemUtils.CURRENT_DIRECTORY),
+           toString(t, getGfsh().getDebug())));
+     }
+   }
+ 
+   @CliCommand(value=CliStrings.STOP_LOCATOR, help=CliStrings.STOP_LOCATOR__HELP)
+   @CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GEMFIRE_LOCATOR, CliStrings.TOPIC_GEMFIRE_LIFECYCLE})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result stopLocator(@CliOption(key = CliStrings.STOP_LOCATOR__MEMBER,
+                                        optionContext = ConverterHint.LOCATOR_MEMBER_IDNAME,
+                                        unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help=CliStrings.STOP_LOCATOR__MEMBER__HELP)
+                             final String member,
+                             @CliOption(key=CliStrings.STOP_LOCATOR__PID,
+                                        unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help=CliStrings.STOP_LOCATOR__PID__HELP)
+                             final Integer pid,
+                             @CliOption(key=CliStrings.STOP_LOCATOR__DIR,
+                                        optionContext = ConverterHint.DIR_PATHSTRING,
+                                        unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help=CliStrings.STOP_LOCATOR__DIR__HELP)
+                             final String workingDirectory)
+   {
+     LocatorState locatorState;
+ 
+     try {
+       if (!StringUtils.isBlank(member)) {
+         if (isConnectedAndReady()) {
+           final MemberMXBean locatorProxy = getMemberMXBean(member);
+ 
+           if (locatorProxy != null) {
+             if (!locatorProxy.isLocator()) {
+               throw new IllegalStateException(CliStrings.format(CliStrings.STOP_LOCATOR__NOT_LOCATOR_ERROR_MESSAGE, member));
+             }
+ 
+             if (locatorProxy.isServer()) {
+               throw new IllegalStateException(CliStrings.format(CliStrings.STOP_LOCATOR__LOCATOR_IS_CACHE_SERVER_ERROR_MESSAGE, member));
+             }
+ 
+             locatorState = LocatorState.fromJson(locatorProxy.status());
+             locatorProxy.shutDownMember();
+           }
+           else {
+             return ResultBuilder.createUserErrorResult(CliStrings.format(
+               CliStrings.STOP_LOCATOR__NO_LOCATOR_FOUND_FOR_MEMBER_ERROR_MESSAGE, member));
+           }
+         }
+         else {
+           return ResultBuilder.createUserErrorResult(CliStrings.format(
+             CliStrings.STOP_SERVICE__GFSH_NOT_CONNECTED_ERROR_MESSAGE, LOCATOR_TERM_NAME));
+         }
+       }
+       else {
+         final LocatorLauncher locatorLauncher = new LocatorLauncher.Builder()
+           .setCommand(LocatorLauncher.Command.STOP)
+           .setDebug(isDebugging())
+           .setPid(pid)
+           .setWorkingDirectory(workingDirectory)
+           .build();
+ 
+         locatorState = locatorLauncher.status();
+         locatorLauncher.stop();
+       }
+ 
+       if (Status.ONLINE.equals(locatorState.getStatus())) {
+         getGfsh().logInfo(String.format(CliStrings.STOP_LOCATOR__STOPPING_LOCATOR_MESSAGE,
+           locatorState.getWorkingDirectory(), locatorState.getServiceLocation(), locatorState.getMemberName(),
+             locatorState.getPid(), locatorState.getLogFile()), null);
+ 
+         StopWatch stopWatch = new StopWatch(true);
+         while (isVmWithProcessIdRunning(locatorState.getPid())) {
+           Gfsh.print(".");
+           if (stopWatch.elapsedTimeMillis() > WAITING_FOR_STOP_TO_MAKE_PID_GO_AWAY_TIMEOUT_MILLIS) {
+             break;
+           }
+           synchronized (this) {
+             TimeUnit.MILLISECONDS.timedWait(this, 500);
+           }
+         }
+ 
+         return ResultBuilder.createInfoResult(StringUtils.EMPTY_STRING);
+       }
+       else {
+         return ResultBuilder.createUserErrorResult(locatorState.toString());
+       }
+     }
+     catch (IllegalArgumentException e) {
+       return ResultBuilder.createUserErrorResult(e.getMessage());
+     }
+     catch (IllegalStateException e) {
+       return ResultBuilder.createUserErrorResult(e.getMessage());
+     }
+     catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     }
+     catch (Throwable t) {
+       SystemFailure.checkFailure();
+       return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.STOP_LOCATOR__GENERAL_ERROR_MESSAGE,
+         toString(t, getGfsh().getDebug())));
+     } finally {
+       Gfsh.redirectInternalJavaLoggers();
+     }
+   }
+ 
+   // TODO re-evaluate whether a MalformedObjectNameException should be thrown here; just because we were not able to find
+   // the "current" Locators in order to conveniently add the new member to the GemFire cluster does not mean we should
+   // throw an Exception!
+   protected void addCurrentLocators(final List<String> commandLine, final Properties gemfireProperties) throws MalformedObjectNameException {
+     if (StringUtils.isBlank(gemfireProperties.getProperty(DistributionConfig.LOCATORS_NAME))) {
+       String currentLocators = getCurrentLocators();
+ 
+       if (!StringUtils.isBlank(currentLocators)) {
+         commandLine.add("-D".concat(ProcessLauncherContext.OVERRIDDEN_DEFAULTS_PREFIX)
+           .concat(DistributionConfig.LOCATORS_NAME).concat("=").concat(currentLocators));
+       }
+     }
+   }
+   
+   protected Result createStatusLocatorResult(final LocatorState state) throws NumberFormatException, IOException, ClassNotFoundException {
+     InfoResultData infoResultData = ResultBuilder.createInfoResultData();
+     infoResultData.addLine(state.toString());
+     infoResultData.addLine(getSharedConfigurationStatusFromLocatorState(state));
+     return ResultBuilder.buildResult(infoResultData);
+   }
+ 
+   protected void addGemFirePropertyFile(final List<String> commandLine, final String gemfirePropertiesPathname) {
+     if (!StringUtils.isBlank(gemfirePropertiesPathname)) {
+       commandLine.add("-DgemfirePropertyFile=" + gemfirePropertiesPathname);
+     }
+   }
+ 
+   protected void addGemFireSecurityPropertyFile(final List<String> commandLine, final String gemfireSecurityPropertiesPathname) {
+     if (!StringUtils.isBlank(gemfireSecurityPropertiesPathname)) {
+       commandLine.add("-DgemfireSecurityPropertyFile=" + gemfireSecurityPropertiesPathname);
+     }
+   }
+ 
+   protected void addGemFireSystemProperties(final List<String> commandLine, final Properties gemfireProperties) {
+     for (final Object property : gemfireProperties.keySet()) {
+       final String propertyName = property.toString();
+       final String propertyValue = gemfireProperties.getProperty(propertyName);
+       if (!StringUtils.isBlank(propertyValue)) {
+         commandLine.add("-Dgemfire." + propertyName + "=" + propertyValue);
+       }
+     }
+   }
+ 
+   protected void addInitialHeap(final List<String> commandLine, final String initialHeap) {
+     if (!StringUtils.isBlank(initialHeap)) {
+       commandLine.add("-Xms" + initialHeap);
+     }
+   }
+ 
+   protected void addJvmArgumentsAndOptions(final List<String> commandLine, final String[] jvmArgsOpts) {
+     if (jvmArgsOpts != null) {
+       commandLine.addAll(Arrays.asList(jvmArgsOpts));
+     }
+   }
+ 
+   // Fix for Bug #47192 - "Causing the GemFire member (JVM process) to exit on OutOfMemoryErrors"
+   protected void addJvmOptionsForOutOfMemoryErrors(final List<String> commandLine) {
+     if (SystemUtils.isHotSpotVM()) {
+       if (SystemUtils.isWindows()) {
+         // ProcessBuilder "on Windows" needs every word (space separated) to be
+         // a different element in the array/list. See #47312. Need to study why!
+         commandLine.add("-XX:OnOutOfMemoryError=taskkill /F /PID %p");
+       }
+       else { // All other platforms (Linux, Mac OS X, UNIX, etc)
+         commandLine.add("-XX:OnOutOfMemoryError=kill -KILL %p");
+       }
+     }
+     else if (SystemUtils.isJ9VM()) {
+       // NOTE IBM states the following IBM J9 JVM command-line option/switch has side-effects on "performance",
+       // as noted in the reference documentation...
+       // http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.60/diag/appendixes/cmdline/commands_jvm.html
+       commandLine.add("-Xcheck:memory");
+     }
+     else if (SystemUtils.isJRockitVM()) {
+       // NOTE the following Oracle JRockit JVM documentation was referenced to identify the appropriate JVM option to
+       // set when handling OutOfMemoryErrors.
+       // http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionXX.html
+       commandLine.add("-XXexitOnOutOfMemory");
+     }
+   }
+ 
+   protected void addMaxHeap(final List<String> commandLine, final String maxHeap) {
+     if (!StringUtils.isBlank(maxHeap)) {
+       commandLine.add("-Xmx" + maxHeap);
+       commandLine.add("-XX:+UseConcMarkSweepGC");
+       commandLine.add("-XX:CMSInitiatingOccupancyFraction=" + CMS_INITIAL_OCCUPANCY_FRACTION);
+       //commandLine.add("-XX:MinHeapFreeRatio=" + MINIMUM_HEAP_FREE_RATIO);
+     }
+   }
+ 
+   protected LocatorState locatorStatus(final File locatorPidFile, final int oldPid, final String memberName) {
+     final int newPid = readPid(locatorPidFile);
+ 
+     if (newPid != INVALID_PID && newPid != oldPid) {
+       LocatorState locatorState = new LocatorLauncher.Builder().setPid(newPid).build().status();
+ 
+       if (ObjectUtils.equals(locatorState.getMemberName(), memberName)) {
+         return locatorState;
+       }
+     }
+ 
+     return new LocatorState(new LocatorLauncher.Builder().build(), Status.NOT_RESPONDING);
+   }
+ 
+   protected LocatorState locatorStatus(final String workingDirectory, final String memberName) {
+     LocatorState locatorState = new LocatorLauncher.Builder().setWorkingDirectory(workingDirectory).build().status();
+ 
+     if (ObjectUtils.equals(locatorState.getMemberName(), memberName)) {
+       return locatorState;
+     }
+ 
+     return new LocatorState(new LocatorLauncher.Builder().build(), Status.NOT_RESPONDING);
+   }
+ 
+   protected String readErrorStream(final Process process) throws IOException {
+     BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
+     StringBuilder message = new StringBuilder();
+ 
+     for (String line = reader.readLine(); line != null; line = reader.readLine()) {
+       message.append(line);
+       message.append(StringUtils.LINE_SEPARATOR);
+     }
+ 
+     IOUtils.close(reader);
+ 
+     return message.toString();
+   }
+ 
+   protected int readPid(final File pidFile) {
+     assert pidFile != null : "The file from which to read the process ID (pid) cannot be null!";
+ 
+     if (pidFile.isFile()) {
+       BufferedReader fileReader = null;
+       try {
+         fileReader = new BufferedReader(new FileReader(pidFile));
+         return Integer.parseInt(fileReader.readLine());
+       }
+       catch (IOException ignore) {
+       }
+       catch (NumberFormatException  ignore) {
+       }
+       finally {
+         IOUtils.close(fileReader);
+       }
+     }
+ 
+     return INVALID_PID;
+   }
+ 
+   protected ServerState serverStatus(final File serverPidFile, final int oldPid, final String memberName) {
+     final int newPid = readPid(serverPidFile);
+ 
+     if (newPid != INVALID_PID && newPid != oldPid) {
+       ServerState serverState = new ServerLauncher.Builder().setPid(newPid).setDisableDefaultServer(true)
+         .build().status();
+ 
+       if (ObjectUtils.equals(serverState.getMemberName(), memberName)) {
+         return serverState;
+       }
+     }
+ 
+     return new ServerState(new ServerLauncher.Builder().build(), Status.NOT_RESPONDING);
+   }
+ 
+   protected ServerState serverStatus(final String workingDirectory, final String memberName) {
+     ServerState serverState = new ServerLauncher.Builder().setWorkingDirectory(workingDirectory)
+       .setDisableDefaultServer(true).build().status();
+ 
+     if (ObjectUtils.equals(serverState.getMemberName(), memberName)) {
+       return serverState;
+     }
+ 
+     return new ServerState(new ServerLauncher.Builder().build(), Status.NOT_RESPONDING);
+   }
+ 
+   @Deprecated
+   protected String getClasspath(final String userClasspath) {
+     String classpath = getSystemClasspath();
+ 
+     if (!StringUtils.isBlank(userClasspath)) {
+       classpath += (File.pathSeparator + userClasspath);
+     }
+ 
+     return classpath;
+   }
+ 
+   protected String getLocatorClasspath(final boolean includeSystemClasspath, final String userClasspath) {
+     return toClasspath(includeSystemClasspath, new String[] { CORE_DEPENDENCIES_JAR_PATHNAME }, userClasspath);
+   }
+ 
+   protected String getServerClasspath(final boolean includeSystemClasspath,
+                                       final boolean includeSpringDependencies,
+                                       final String userClasspath)
+   {
+     List<String> jarFilePathnames = new ArrayList<>();
+ 
+     jarFilePathnames.add(CORE_DEPENDENCIES_JAR_PATHNAME);
+ 
+     if (includeSpringDependencies) {
+       jarFilePathnames.addAll(getSpringJars());
+     }
+ 
+     return toClasspath(includeSystemClasspath, jarFilePathnames.toArray(new String[jarFilePathnames.size()]),
+       userClasspath);
+   }
+ 
+   protected List<String> getSpringJars() {
+     File gemfireHomeDirectory= new File(GEMFIRE_HOME);
+ 
+     assertArgument(gemfireHomeDirectory.isDirectory(),
+       "Please set the GEMFIRE environment variable to the product installation directory.");
+ 
+     List<String> springJarFilePathnames = new ArrayList<>(SPRING_JAR_NAME_PREFIXES.size());
+ 
+     for (File jarFile : new File(gemfireHomeDirectory, "lib").listFiles(new FileFilter() {
+       @Override public boolean accept(final File pathname) {
+         return (pathname.getName().startsWith("spring-") && pathname.getAbsolutePath().endsWith(".jar"));
+       }
+     })) {
+       String jarFileName = jarFile.getName();
+       String jarFileNamePrefix = jarFileName.substring(0, jarFileName.lastIndexOf("-"));
+ 
+       if (SPRING_JAR_NAME_PREFIXES.contains(jarFileNamePrefix.toLowerCase().trim())) {
+         springJarFilePathnames.add(jarFile.getAbsolutePath());
+       }
+     }
+ 
+     assertState(springJarFilePathnames.size() == SPRING_JAR_NAME_PREFIXES.size(),
+       "Unable to find all the necessary Spring JAR files in $GEMFIRE/lib (%1$s): expected (%2$s); but was (%3$s)",
+         gemfireHomeDirectory, SPRING_JAR_NAME_PREFIXES, springJarFilePathnames);
+ 
+     return springJarFilePathnames;
+   }
+ 
+   protected String getSystemClasspath() {
+     return System.getProperty("java.class.path");
+   }
+ 
+   String toClasspath(final boolean includeSystemClasspath, String[] jarFilePathnames, String... userClasspaths) {
+     // gemfire jar must absolutely be the first JAR file on the CLASSPATH!!!
+     String classpath = getGemFireJarPath();
+ 
+     userClasspaths = (userClasspaths != null ? userClasspaths : StringUtils.EMPTY_STRING_ARRAY);
+ 
+     // Then, include user-specified classes on CLASSPATH to enable the user to override GemFire JAR dependencies
+     // with application-specific versions; this logic/block corresponds to classes/jar-files specified with the
+     // --classpath option to the 'start locator' and 'start server commands'; also this will override any
+     // System CLASSPATH environment variable setting, which is consistent with the Java platform behavior...
+     for (String userClasspath : userClasspaths) {
+       if (!StringUtils.isBlank(userClasspath)) {
+         classpath += (classpath.isEmpty() ? StringUtils.EMPTY_STRING : File.pathSeparator);
+         classpath += userClasspath;
+       }
+     }
+ 
+     // Now, include any System-specified CLASSPATH environment variable setting...
+     if (includeSystemClasspath) {
+       classpath += File.pathSeparator;
+       classpath += getSystemClasspath();
+     }
+ 
+     jarFilePathnames = (jarFilePathnames != null ? jarFilePathnames : StringUtils.EMPTY_STRING_ARRAY);
+ 
+     // And finally, include all GemFire dependencies on the CLASSPATH...
+     for (String jarFilePathname : jarFilePathnames) {
+       if (!StringUtils.isBlank(jarFilePathname)) {
+         classpath += (classpath.isEmpty() ? StringUtils.EMPTY_STRING : File.pathSeparator);
+         classpath += jarFilePathname;
+       }
+     }
+ 
+     return classpath;
+   }
+ 
+   protected String getGemFireJarPath() {
+     String classpath = getSystemClasspath();
+     String gemfireJarPath = GEMFIRE_JAR_PATHNAME;
+ 
+     for (String classpathElement : classpath.split(File.pathSeparator)) {
+       // MUST CHANGE THIS TO REGEX SINCE VERSION CHANGES IN JAR NAME
+       if (classpathElement.endsWith("gemfire-core-8.2.0.0-SNAPSHOT.jar")) {
+         gemfireJarPath = classpathElement;
+         break;
+       }
+     }
+ 
+     return gemfireJarPath;
+   }
+ 
+   protected String getJavaPath() {
+     return new File(new File(JAVA_HOME, "bin"), "java").getPath();
+   }
+ 
+   @Deprecated
+   protected String getToolsJarPath() throws AttachAPINotFoundException {
+     String toolsJarPathname = null;
+ 
+     if (!SystemUtils.isMacOSX()) {
+       toolsJarPathname = IOUtils.appendToPath(JAVA_HOME, "lib", "tools.jar");
+ 
+       if (!IOUtils.isExistingPathname(toolsJarPathname)) {
+         // perhaps the java.home System property refers to the JRE ($JAVA_HOME/jre)...
+         String JDK_HOME = new File(JAVA_HOME).getParentFile().getPath();
+         toolsJarPathname = IOUtils.appendToPath(JDK_HOME, "lib", "tools.jar");
+       }
+ 
+       try {
+         IOUtils.verifyPathnameExists(toolsJarPathname);
+       }
+       catch (IOException e) {
+         throw new AttachAPINotFoundException(getAttachAPINotFoundMessage());
+       }
+     }
+ 
+     return toolsJarPathname;
+   }
+ 
+   // TODO refactor the following method into a common base class or utility class
+   protected String getLocalHost() {
+     try {
+       return SocketCreator.getLocalHost().getCanonicalHostName();
+     }
+     catch (UnknownHostException ignore) {
+       return LOCALHOST;
+     }
+   }
+ 
+   protected String getAttachAPINotFoundMessage() {
+     return CliStrings.format(CliStrings.ATTACH_API_IN_0_NOT_FOUND_ERROR_MESSAGE,
+       ((SystemUtils.isMacOSX() && SystemUtils.isAppleJVM()) ? "classes.jar" : "tools.jar"));
+   }
+ 
+   protected String getLocatorId(final String host, final Integer port) {
+     final String locatorHost = (host != null ? host : getLocalHost());
+     final String locatorPort = StringUtils.valueOf(port, String.valueOf(DistributionLocator.DEFAULT_LOCATOR_PORT));
+     return locatorHost.concat("[").concat(locatorPort).concat("]");
+   }
+ 
+   /**
+    * Gets a proxy to the DistributedSystemMXBean from the GemFire Manager's MBeanServer, or null if unable to find
+    * the DistributedSystemMXBean.
+    * </p>
+    * @return a proxy to the DistributedSystemMXBean from the GemFire Manager's MBeanServer, or null if unable to find
+    * the DistributedSystemMXBean.
+    */
+   protected DistributedSystemMXBean getDistributedSystemMXBean() throws IOException, MalformedObjectNameException {
+     assertState(isConnectedAndReady(), "Gfsh must be connected in order to get proxy to a GemFire DistributedSystemMXBean.");
+     return getGfsh().getOperationInvoker().getDistributedSystemMXBean();
+   }
+ 
+   /**
+    * Gets a proxy to the MemberMXBean for the GemFire member specified by member name or ID from the GemFire Manager's
+    * MBeanServer.
+    * </p>
+    * @param member a String indicating the GemFire member's name or ID.
+    * @return a proxy to the MemberMXBean having the specified GemFire member's name or ID from the GemFire Manager's
+    * MBeanServer, or null if no GemFire member could be found with the specified member name or ID.
+    * @see #getMemberMXBean(String, String)
+    */
+   protected MemberMXBean getMemberMXBean(final String member) throws IOException {
+     return getMemberMXBean(null, member);
+   }
+ 
+   protected MemberMXBean getMemberMXBean(final String serviceName, final String member) throws IOException {
+     assertState(isConnectedAndReady(), "Gfsh must be connected in order to get proxy to a GemFire Member MBean.");
+ 
+     MemberMXBean memberBean = null;
+ 
+     try {
+       String objectNamePattern = ManagementConstants.OBJECTNAME__PREFIX;
+ 
+       objectNamePattern += (StringUtils.isBlank(serviceName) ? StringUtils.EMPTY_STRING
+         : "service=" + serviceName + StringUtils.COMMA_DELIMITER);
+       objectNamePattern += "type=Member,*";
+ 
+       // NOTE throws a MalformedObjectNameException, however, this should not happen since the ObjectName is constructed
+       // here in a conforming pattern
+       final ObjectName objectName = ObjectName.getInstance(objectNamePattern);
+ 
+       final QueryExp query = Query.or(
+         Query.eq(Query.attr("Name"), Query.value(member)),
+         Query.eq(Query.attr("Id"), Query.value(member))
+       );
+ 
+       final Set<ObjectName> memberObjectNames = getGfsh().getOperationInvoker().queryNames(objectName, query);
+ 
+       if (!memberObjectNames.isEmpty()) {
+         memberBean = getGfsh().getOperationInvoker().getMBeanProxy(memberObjectNames.iterator().next(), MemberMXBean.class);
+       }
+     }
+     catch (MalformedObjectNameException e) {
+       getGfsh().logSevere(e.getMessage(), e);
+     }
+ 
+     return memberBean;
+   }
+ 
+   protected String getServerId(final String host, final Integer port) {
+     String serverHost = (host != null ? host : getLocalHost());
+     String serverPort = StringUtils.valueOf(port, String.valueOf(CacheServer.DEFAULT_PORT));
+     return serverHost.concat("[").concat(serverPort).concat("]");
+   }
+ 
+   protected boolean isStartingNotRespondingOrNull(final ServiceState serviceState) {
+     return (serviceState == null || isStartingOrNotResponding(serviceState.getStatus()));
+   }
+ 
+   protected boolean isStartingOrNotResponding(final Status processStatus) {
+     return (Status.NOT_RESPONDING.equals(processStatus) || Status.STARTING.equals(processStatus));
+   }
+ 
+   protected boolean isVmWithProcessIdRunning(final Integer pid) {
+     // note: this will use JNA if available or Attach if available or return false if neither is available
+     return ProcessUtils.isProcessAlive(pid);
+   }
+ 
+   @CliCommand(value = CliStrings.START_SERVER, help = CliStrings.START_SERVER__HELP)
+   @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_SERVER, CliStrings.TOPIC_GEMFIRE_LIFECYCLE })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result startServer(@CliOption(key = CliStrings.START_SERVER__ASSIGN_BUCKETS,
+                                       unspecifiedDefaultValue = "false",
+                                       specifiedDefaultValue = "true",
+                                       help = CliStrings.START_SERVER__ASSIGN_BUCKETS__HELP)
+                             final Boolean assignBuckets,
+                             @CliOption(key = CliStrings.START_SERVER__BIND_ADDRESS,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__BIND_ADDRESS__HELP)
+                             final String bindAddress,
+                             @CliOption(key = CliStrings.START_SERVER__CACHE_XML_FILE,
+                                       optionContext = ConverterHint.FILE_PATHSTRING,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__CACHE_XML_FILE__HELP)
+                             String cacheXmlPathname,
+                             @CliOption(key = CliStrings.START_SERVER__CLASSPATH,
+                                       /*optionContext = ConverterHint.FILE_PATHSTRING, // there's an issue with TAB here*/
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__CLASSPATH__HELP)
+                             final String classpath,
+                             @CliOption(key = CliStrings.START_SERVER__CRITICAL__HEAP__PERCENTAGE,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__CRITICAL__HEAP__HELP)
+                             final Float criticalHeapPercentage,
+                             @CliOption(key = CliStrings.START_SERVER__CRITICAL_OFF_HEAP_PERCENTAGE,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__CRITICAL_OFF_HEAP__HELP)
+                             final Float criticalOffHeapPercentage,
+                             @CliOption(key = CliStrings.START_SERVER__DIR,
+                                        optionContext = ConverterHint.DIR_PATHSTRING,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__DIR__HELP)
+                             String workingDirectory,
+                             @CliOption(key = CliStrings.START_SERVER__DISABLE_DEFAULT_SERVER,
+                                       unspecifiedDefaultValue = "false",
+                                       specifiedDefaultValue = "true",
+                                       help = CliStrings.START_SERVER__DISABLE_DEFAULT_SERVER__HELP)
+                             final Boolean disableDefaultServer,
+                             @CliOption(key = CliStrings.START_SERVER__DISABLE_EXIT_WHEN_OUT_OF_MEMORY,
+                                       unspecifiedDefaultValue = "false",
+                                       specifiedDefaultValue = "true",
+                                       help = CliStrings.START_SERVER__DISABLE_EXIT_WHEN_OUT_OF_MEMORY_HELP)
+                             final Boolean disableExitWhenOutOfMemory,
+                             @CliOption(key = CliStrings.START_SERVER__ENABLE_TIME_STATISTICS,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       specifiedDefaultValue = "true",
+                                       help = CliStrings.START_SERVER__ENABLE_TIME_STATISTICS__HELP)
+                             final Boolean enableTimeStatistics,
+                             @CliOption(key = CliStrings.START_SERVER__EVICTION__HEAP__PERCENTAGE,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__EVICTION__HEAP__PERCENTAGE__HELP)
+                             final Float evictionHeapPercentage,
+                             @CliOption(key = CliStrings.START_SERVER__EVICTION_OFF_HEAP_PERCENTAGE,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__EVICTION_OFF_HEAP_PERCENTAGE__HELP)
+                             final Float evictionOffHeapPercentage,
+                             @CliOption(key = CliStrings.START_SERVER__FORCE,
+                                       unspecifiedDefaultValue = "false",
+                                       specifiedDefaultValue = "true",
+                                       help = CliStrings.START_SERVER__FORCE__HELP)
+                             final Boolean force,
+                             @CliOption(key = CliStrings.START_SERVER__GROUP,
+                                        optionContext = ConverterHint.MEMBERGROUP,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__GROUP__HELP)
+                             final String group,
+                             @CliOption(key = CliStrings.START_SERVER__HOSTNAME__FOR__CLIENTS,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__HOSTNAME__FOR__CLIENTS__HELP)
+                             final String hostNameForClients,
+                             @CliOption(key = CliStrings.START_SERVER__INCLUDE_SYSTEM_CLASSPATH,
+                                       specifiedDefaultValue = "true",
+                                       unspecifiedDefaultValue = "false",
+                                       help = CliStrings.START_SERVER__INCLUDE_SYSTEM_CLASSPATH__HELP)
+                             final Boolean includeSystemClasspath,
+                             @CliOption(key = CliStrings.START_SERVER__INITIAL_HEAP,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__INITIAL_HEAP__HELP)
+                             final String initialHeap,
+                             @CliOption(key = CliStrings.START_SERVER__J,
+                                        optionContext = ConverterHint.STRING_LIST,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__J__HELP)
+                             @CliMetaData(valueSeparator = ",")
+                             final String[] jvmArgsOpts, 
+                             @CliOption(key = CliStrings.START_SERVER__LOCATORS,
+                                       optionContext = ConverterHint.LOCATOR_DISCOVERY_CONFIG,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__LOCATORS__HELP)
+                             final String locators,
+                             @CliOption(key = CliStrings.START_SERVER__LOCATOR_WAIT_TIME,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__LOCATOR_WAIT_TIME_HELP)
+                             final Integer locatorWaitTime,
+                             @CliOption(key = CliStrings.START_SERVER__LOCK_MEMORY,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        specifiedDefaultValue = "true",
+                                        help = CliStrings.START_SERVER__LOCK_MEMORY__HELP)
+                             final Boolean lockMemory,
+                             @CliOption(key = CliStrings.START_SERVER__LOG_LEVEL,
+                                       optionContext = ConverterHint.LOG_LEVEL,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__LOG_LEVEL__HELP)
+                             final String logLevel,
+                             @CliOption(key = CliStrings.START_SERVER__MAX__CONNECTIONS,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__MAX__CONNECTIONS__HELP)
+                             final Integer maxConnections,
+                             @CliOption(key = CliStrings.START_SERVER__MAXHEAP,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__MAXHEAP__HELP)
+                             final String maxHeap,
+                             @CliOption(key = CliStrings.START_SERVER__MAX__MESSAGE__COUNT,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__MAX__MESSAGE__COUNT__HELP)
+                             final Integer maxMessageCount,
+                             @CliOption(key = CliStrings.START_SERVER__MAX__THREADS,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__MAX__THREADS__HELP)
+                             final Integer maxThreads,
+                             @CliOption(key = CliStrings.START_SERVER__MCAST_ADDRESS,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__MCAST_ADDRESS__HELP)
+                             final String mcastBindAddress,
+                             @CliOption(key = CliStrings.START_SERVER__MCAST_PORT,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__MCAST_PORT__HELP)
+                             final Integer mcastPort,
+                             @CliOption(key = CliStrings.START_SERVER__MEMCACHED_PORT,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__MEMCACHED_PORT__HELP)
+                             final Integer memcachedPort,
+                             @CliOption(key = CliStrings.START_SERVER__MEMCACHED_PROTOCOL,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__MEMCACHED_PROTOCOL__HELP)
+                             final String memcachedProtocol,
+                             @CliOption(key = CliStrings.START_SERVER__MEMCACHED_BIND_ADDRESS,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__MEMCACHED_BIND_ADDRESS__HELP)
+                             final String memcachedBindAddress,
+                             @CliOption(key = CliStrings.START_SERVER__REDIS_PORT,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__REDIS_PORT__HELP)
+                             final Integer redisPort,
+                             @CliOption(key = CliStrings.START_SERVER__REDIS_BIND_ADDRESS,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__REDIS_BIND_ADDRESS__HELP)
+                             final String redisBindAddress,
+                             @CliOption(key = CliStrings.START_SERVER__REDIS_PASSWORD,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__REDIS_PASSWORD__HELP)
+                             final String redisPassword,
+                             @CliOption(key = CliStrings.START_SERVER__MESSAGE__TIME__TO__LIVE,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__MESSAGE__TIME__TO__LIVE__HELP)
+                             final Integer messageTimeToLive,
+                             @CliOption(key = CliStrings.START_SERVER__NAME,
+                                        mandatory = true,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__NAME__HELP)
+                             final String memberName,
+                             @CliOption(key = CliStrings.START_SERVER__OFF_HEAP_MEMORY_SIZE,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__OFF_HEAP_MEMORY_SIZE__HELP)
+                             final String offHeapMemorySize,
+                             @CliOption(key = CliStrings.START_SERVER__PROPERTIES,
+                                        optionContext = ConverterHint.FILE_PATHSTRING,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__PROPERTIES__HELP)
+                             String gemfirePropertiesPathname,
+                             @CliOption(key = CliStrings.START_SERVER__REBALANCE,
+                                       unspecifiedDefaultValue = "false",
+                                       specifiedDefaultValue = "true",
+                                       help = CliStrings.START_SERVER__REBALANCE__HELP)
+                             final Boolean rebalance,
+                             @CliOption(key = CliStrings.START_SERVER__SECURITY_PROPERTIES,
+                                        optionContext = ConverterHint.FILE_PATHSTRING,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__SECURITY_PROPERTIES__HELP)
+                             String gemfireSecurityPropertiesPathname,
+                             @CliOption(key = CliStrings.START_SERVER__SERVER_BIND_ADDRESS,
+                                       unspecifiedDefaultValue = CacheServer.DEFAULT_BIND_ADDRESS,
+                                       help = CliStrings.START_SERVER__SERVER_BIND_ADDRESS__HELP)
+                             final String serverBindAddress,
+                             @CliOption(key = CliStrings.START_SERVER__SERVER_PORT,
+                                       unspecifiedDefaultValue = ("" + CacheServer.DEFAULT_PORT),
+                                       help = CliStrings.START_SERVER__SERVER_PORT__HELP)
+                             final Integer serverPort,
+                             @CliOption(key = CliStrings.START_SERVER__SOCKET__BUFFER__SIZE,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__SOCKET__BUFFER__SIZE__HELP)
+                             final Integer socketBufferSize,
+                             @CliOption(key = CliStrings.START_SERVER__SPRING_XML_LOCATION,
+                                        unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                        help = CliStrings.START_SERVER__SPRING_XML_LOCATION_HELP)
+                             final String springXmlLocation,
+                             @CliOption(key = CliStrings.START_SERVER__STATISTIC_ARCHIVE_FILE,
+                                       unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                                       help = CliStrings.START_SERVER__STATISTIC_ARCHIVE_FILE__HELP)
+                             final String statisticsArchivePathname,
+                             @CliOption(key = CliStrings.START_SERVER__USE_CLUSTER_CONFIGURATION,
+                                       unspecifiedDefaultValue = "true",
+                                       specifiedDefaultValue = "true",
+                                       help = CliStrings.START_SERVER__USE_CLUSTER_CONFIGURATION__HELP)
+                             final Boolean requestSharedConfiguration)
+                             // NOTICE: keep the parameters in alphabetical order based on their CliStrings.START_SERVER_* text
+   {
+ 
+     try {
+       if (workingDirectory == null) {
+         // attempt to use or make sub-directory using memberName...
+         File serverWorkingDirectory = new File(memberName);
+ 
+         if (!(serverWorkingDirectory.exists() || serverWorkingDirectory.mkdir())) {
+           throw new IllegalStateException(CliStrings.format(CliStrings.START_SERVER__MSG__COULD_NOT_CREATE_DIRECTORY_0_VERIFY_PERMISSIONS,
+             serverWorkingDirectory.getAbsolutePath()));
+         }
+ 
+         workingDirectory = IOUtils.tryGetCanonicalPathElseGetAbsolutePath(serverWorkingDirectory);
+       }
+ 
+       cacheXmlPathname = CliUtil.resolvePathname(cacheXmlPathname);
+ 
+       if (!StringUtils.isBlank(cacheXmlPathname) && !IOUtils.isExistingPathname(cacheXmlPathname)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.CACHE_XML_NOT_FOUND_MESSAGE, cacheXmlPathname));
+       }
+ 
+       gemfirePropertiesPathname = CliUtil.resolvePathname(gemfirePropertiesPathname);
+ 
+       if (!StringUtils.isBlank(gemfirePropertiesPathname) && !IOUtils.isExistingPathname(gemfirePropertiesPathname)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE,
+           StringUtils.EMPTY_STRING, gemfirePropertiesPathname));
+       }
+ 
+       gemfireSecurityPropertiesPathname = CliUtil.resolvePathname(gemfireSecurityPropertiesPathname);
+ 
+       if (!StringUtils.isBlank(gemfireSecurityPropertiesPathname) && !IOUtils.isExistingPathname(gemfireSecurityPropertiesPathname)) {
+         return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE,
+           "Security ", gemfireSecurityPropertiesPathname));
+       }
+ 
+       File serverPidFile = new File(workingDirectory, ProcessType.SERVER.getPidFileName());
+ 
+     

<TRUNCATED>


[18/50] [abbrv] incubator-geode git commit: GEODE-944: also check loopback address. This fixes the unit test failure on ubuntu.

Posted by je...@apache.org.
GEODE-944: also check loopback address. This fixes the unit test
failure on ubuntu.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/d8522c23
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/d8522c23
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/d8522c23

Branch: refs/heads/feature/GEODE-17
Commit: d8522c23a87077699e5192041d7427192cb40c63
Parents: c32e1b4
Author: Jianxia Chen <jc...@pivotal.io>
Authored: Wed Feb 24 09:28:23 2016 -0800
Committer: Jianxia Chen <jc...@pivotal.io>
Committed: Wed Feb 24 09:28:23 2016 -0800

----------------------------------------------------------------------
 .../java/com/gemstone/gemfire/distributed/LocatorLauncher.java  | 5 +++--
 .../java/com/gemstone/gemfire/distributed/ServerLauncher.java   | 5 +++--
 .../main/java/com/gemstone/gemfire/internal/SocketCreator.java  | 3 +++
 3 files changed, 9 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d8522c23/geode-core/src/main/java/com/gemstone/gemfire/distributed/LocatorLauncher.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/LocatorLauncher.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/LocatorLauncher.java
index b0be89f..cfbad53 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/LocatorLauncher.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/LocatorLauncher.java
@@ -1480,8 +1480,9 @@ public final class LocatorLauncher extends AbstractLauncher<String> {
       }
       else {
         try {
-          this.bindAddress = InetAddress.getByName(bindAddress);
-          if (SocketCreator.isLocalHost(this.bindAddress)) {
+          InetAddress address = InetAddress.getByName(bindAddress);
+          if (SocketCreator.isLocalHost(address)) {
+            this.bindAddress = address;
             return this;
           }
           else {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d8522c23/geode-core/src/main/java/com/gemstone/gemfire/distributed/ServerLauncher.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/ServerLauncher.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/ServerLauncher.java
index f13bb73..4f43370 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/ServerLauncher.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/ServerLauncher.java
@@ -1958,8 +1958,9 @@ public final class ServerLauncher extends AbstractLauncher<String> {
       // NOTE only set the 'bind address' if the user specified a value
       else {
         try {
-          this.serverBindAddress = InetAddress.getByName(serverBindAddress);
-          if (SocketCreator.isLocalHost(this.serverBindAddress)) {
+          InetAddress bindAddress = InetAddress.getByName(serverBindAddress);
+          if (SocketCreator.isLocalHost(bindAddress)) {
+            this.serverBindAddress = bindAddress;
             this.serverBindAddressSetByUser = true;
             return this;
           }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d8522c23/geode-core/src/main/java/com/gemstone/gemfire/internal/SocketCreator.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/SocketCreator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/SocketCreator.java
index 9a74abd..5bfa7bd 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/SocketCreator.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/SocketCreator.java
@@ -1311,6 +1311,9 @@ public class SocketCreator {
       if (InetAddressUtil.LOCALHOST.equals(host)) {
         return true;
       }
+      else if (((InetAddress) host).isLoopbackAddress()) {
+        return true;
+      }
       else {
         try {
           Enumeration en=NetworkInterface.getNetworkInterfaces();


[08/50] [abbrv] incubator-geode git commit: GEODE-907: Clean up some issues after rebasing

Posted by je...@apache.org.
GEODE-907: Clean up some issues after rebasing

- CPU usage should be a double and not a string


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/f42c86d8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/f42c86d8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/f42c86d8

Branch: refs/heads/feature/GEODE-17
Commit: f42c86d81c4e9d84432056c508831a26d9e946d7
Parents: 022733e
Author: Jens Deppe <jd...@pivotal.io>
Authored: Sat Feb 20 21:56:25 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Feb 23 14:04:51 2016 -0800

----------------------------------------------------------------------
 geode-pulse/build.gradle                                |  3 +++
 .../pulse/internal/service/ClusterMemberService.java    | 12 ++++++++----
 .../pulse/controllers/PulseControllerJUnitTest.java     |  3 +--
 3 files changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f42c86d8/geode-pulse/build.gradle
----------------------------------------------------------------------
diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle
index cf07751..4879345 100755
--- a/geode-pulse/build.gradle
+++ b/geode-pulse/build.gradle
@@ -36,6 +36,9 @@ dependencies {
   compile 'org.springframework.security:spring-security-ldap:' + project.'spring-security.version'
   compile 'org.springframework.security:spring-security-web:' + project.'spring-security.version'
   compile 'org.springframework:spring-tx:' + project.'spring-tx.version'
+  compile 'com.fasterxml.jackson.core:jackson-annotations:' + project.'jackson.version'
+  compile 'com.fasterxml.jackson.core:jackson-core:' + project.'jackson.version'
+  compile 'com.fasterxml.jackson.core:jackson-databind:' + project.'jackson.version'
 
   providedCompile 'commons-logging:commons-logging:' + project.'commons-logging.version'
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f42c86d8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
index 4b535cb..25c405a 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java
@@ -32,6 +32,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
@@ -89,19 +91,17 @@ public class ClusterMemberService implements PulseService {
       }
       memberJSON.put("redundancyZones", mapper.valueToTree(redundancyZones));
 
-      DecimalFormat df2 = new DecimalFormat(PulseConstants.DECIMAL_FORMAT_PATTERN);
-
       long usedHeapSize = cluster.getUsedHeapSize();
       long currentHeap = clusterMember.getCurrentHeapSize();
       if (usedHeapSize > 0) {
         double heapUsage = ((double) currentHeap / (double) usedHeapSize) * 100;
-        memberJSON.put(this.HEAP_USAGE, Double.valueOf(df2.format(heapUsage)));
+        memberJSON.put(this.HEAP_USAGE, truncate(heapUsage, 2));
       } else {
         memberJSON.put(this.HEAP_USAGE, 0);
       }
       double currentCPUUsage = clusterMember.getCpuUsage();
 
-      memberJSON.put("cpuUsage", df2.format(currentCPUUsage));
+      memberJSON.put("cpuUsage", truncate(currentCPUUsage, 2));
       memberJSON.put("currentHeapUsage", clusterMember.getCurrentHeapSize());
       memberJSON.put("isManager", clusterMember.isManager());
       memberJSON.put("uptime", TimeUtils.convertTimeSecondsToHMS(clusterMember.getUptime()));
@@ -125,4 +125,8 @@ public class ClusterMemberService implements PulseService {
     // Send json response
     return responseJSON;
   }
+
+  private double truncate(double value, int places) {
+    return new BigDecimal(value).setScale(places, RoundingMode.HALF_UP).doubleValue();
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f42c86d8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
index 664126d..9ae6c0c 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
@@ -3,7 +3,6 @@ package com.vmware.gemfire.tools.pulse.controllers;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 import com.vmware.gemfire.tools.pulse.internal.PulseAppListener;
-import com.vmware.gemfire.tools.pulse.internal.ServiceConfiguration;
 import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConfig;
@@ -123,7 +122,7 @@ public class PulseControllerJUnitTest {
     member.setUptime(1L);
     member.setHost(PHYSICAL_HOST_NAME);
     member.setGemfireVersion(GEMFIRE_VERSION);
-    member.setCpuUsage(55.77D);
+    member.setCpuUsage(55.77123D);
 
     member.setMemberRegions(new HashMap<String, Cluster.Region>() {{
       put(REGION_NAME, region);


[48/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
index 0000000,c09d618..25bb67b
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
@@@ -1,0 -1,2207 +1,2217 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.distributed;
+ 
+ import java.io.File;
+ import java.net.InetAddress;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Properties;
+ import java.util.Set;
+ import java.util.concurrent.TimeUnit;
+ 
+ import com.gemstone.gemfire.CancelCriterion;
+ import com.gemstone.gemfire.LogWriter;
+ import com.gemstone.gemfire.StatisticsFactory;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.client.ClientCache;
+ import com.gemstone.gemfire.cache.client.ClientCacheFactory;
+ import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+ import com.gemstone.gemfire.distributed.internal.DistributionManager;
+ import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
+ import com.gemstone.gemfire.internal.Assert;
+ import com.gemstone.gemfire.internal.ClassPathLoader;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.internal.tcp.ConnectionTable;
+ import com.gemstone.gemfire.internal.util.IOUtils;
+ import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
+ import com.gemstone.gemfire.redis.GemFireRedisServer;
+ import com.gemstone.gemfire.security.GemFireSecurityException;
+ 
+ /**
+  * A "connection" to a GemFire distributed system.  A
+  * <code>DistributedSystem</code> is created by invoking the {@link
+  * #connect} method with a configuration as described <a
+  * href="#configuration">below</a>.  A <code>DistributedSystem</code>
+  * is used when calling {@link
+  * com.gemstone.gemfire.cache.CacheFactory#create}.  This class should
+  * not be confused with the {@link
+  * com.gemstone.gemfire.admin.AdminDistributedSystem
+  * AdminDistributedSystem} interface that is used for administering a
+  * distributed system.
+  *
+  * <P>
+  *
+  * When a program connects to the distributed system, a "distribution
+  * manager" is started in this VM and the other members of the
+  * distributed system are located.  This discovery is performed
+  * by contacting "locators"
+  * running on a given host and port.  All DistributedSystems that are
+  * configured to use the same same
+  * locators are part of the same distributed system.
+  *
+  * <P>
+  *
+  * The current version of GemFire only supports creating one
+  * <code>DistributedSystem</code> per virtual machine.  Attempts to
+  * connect to multiple distributed systems (that is calling {@link
+  * #connect} multiple times with different configuration
+  * <code>Properties</code>) will result in an {@link
+  * IllegalStateException} being thrown (if <code>connect</code> is
+  * invoked multiple times with equivalent <code>Properties</code>,
+  * then the same instance of <code>DistributedSystem</code> will be
+  * returned).  A common practice is to connect to the distributed
+  * system and store a reference to the <code>DistributedSystem</code>
+  * object in a well-known location such as a <code>static</code>
+  * variable.  This practice provides access to the
+  * <code>DistributedSystem</code> slightly faster than invoking
+  * <code>connect</code> multiple times.  Note that it is always
+  * advisable to {@link #disconnect()} from the distributed system when a
+  * program will no longer access it.  Disconnecting frees up certain
+  * resources and allows your application to connect to a different
+  * distributed system, if desirable.
+  *
+  * <P>
+  *
+  * <CENTER>
+  * <B><a name="configuration">Configuration</a></B>
+  * </CENTER>
+  *
+  * <P>
+  *
+  * There are a number of configuration properties that can be set when
+  * a program {@linkplain #connect connects} to a distributed system.
+  *
+  * <P>
+  *
+  * <B>Distribution Configuration Properties</B>
+  *
+  * <dl>
+  *   <a name="groups"><dt>groups</dt></a>
+  *   <dd><U>Description</U>: Defines the list of groups this member belongs to.
+  *   Use commas to separate group names.
+  *   Note that anything defined by the roles gemfire property will also be considered a group.
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 7.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="name"><dt>name</dt></a>
+  *   <dd><U>Description</U>: Uniquely identifies a member in its distributed system.
+  *   If two members with the same name try to join the same distributed system
+  *   then the second join will fail.</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+ 
+  * <dl>
+  *   <a name="distributed-system-id"><dt>distributed-system-id</dt></a>
+  *<dd> A number that uniquely identifies this distributed system, when
+  * using the WAN gateway to share data between multiple distributed systems. This
+  * setting is only required when using the WAN gateway in conjunction with
+  * the Portable Data eXchange (PDX) serialization format.
+  * 
+  * If set, this setting must be the same for every member in this distributed
+  * system. It must be different than the number in other distributed systems
+  * that this one will connect to using the WAN.
+  * 
+  * -1 means no setting.</dd>
+  * 
+  *   <dd><U>Range</U>-1..255</dd>
+  *   <dd><U>Default</U>: "-1"</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="mcast-port"><dt>mcast-port</dt></a>
+  *   <dd><U>Description</U>: The port used for multicast networking.
+  *   If zero, then multicast will be disabled and unicast messaging will
+  *   be used.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="mcast-address"><dt>mcast-address</dt></a>
+  *   <dd><U>Description</U>: The IP address used for multicast
+  *   networking.  If mcast-port is zero, then mcast-address is
+  *   ignored.
+  *   </dd>
+  *   <dd><U>Default</U>: "239.192.81.1"</dd>
+  * </dl>
+  * <dl>
+  *   <a name="mcast-ttl"><dt>mcast-ttl</dt></a>
+  *   <dd><U>Description</U>: Determines how far through your network
+  *   the multicast packets used by GemFire will propagate.
+  *   <dd><U>Default</U>: "32"</dd>
+  *   <dd><U>Allowed values</U>: 0..255</dd>
+  *   <dd><U>Since</U>: 4.1</dd>
+  * </dl>
+  * <dl>
+  *   <a name="mcast-send-buffer-size"><dt>mcast-send-buffer-size</dt></a>
+  *   <dd><U>Description</U>: Sets the size of the socket buffer used for
+  *    outgoing multicast transmissions.
+  *   <dd><U>Default</U>: "65535"</dd>
+  *   <dd><U>Allowed values</U>: 2048..Operating System maximum</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="mcast-recv-buffer-size"><dt>mcast-recv-buffer-size</dt></a>
+  *   <dd><U>Description</U>: Sets the size of the socket buffer used for
+  *    incoming multicast transmissions.  You should set this high if there will be
+  *    high volumes of messages.
+  *   <dd><U>Default</U>: "1048576"</dd>
+  *   <dd><U>Allowed values</U>: 2048..Operating System maximum</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="mcast-flow-control"><dt>mcast-flow-control</dt></a>
+  *   <dd><U>Description</U>: Configures the flow-of-control protocol for
+  *    multicast messaging.  There are three settings that are separated
+  *    by commas:  byteAllowance (integer), rechargeThreshold (float) and
+  *    rechargeBlockMs (integer).  The byteAllowance determines how many bytes
+  *    can be sent without a recharge from other processes.  The rechargeThreshold
+  *    tells receivers how low the sender's initial to remaining allowance
+  *    ratio should be before sending a recharge.  The rechargeBlockMs
+  *    tells the sender how long to wait for a recharge before explicitly
+  *    requesting one.</dd>
+  *   <dd><U>Deprecated</U>: as of 9.0 GemFire does not include a flow-of-control protocol for multicast messaging.</dd>
+  *   <dd><U>Default</U>: "1048576,0.25,5000"</dd>
+  *   <dd><U>Allowed values</U>: 100000-maxInt, 0.1-0.5, 500-60000</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="udp-send-buffer-size"><dt>udp-send-buffer-size</dt></a>
+  *   <dd><U>Description</U>: Sets the size of the socket buffer used for
+  *    outgoing udp point-to-point transmissions.
+  *   <dd><U>Default</U>: "65535"</dd>
+  *   <dd><U>Allowed values</U>: 2048..Operating System maximum</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="udp-recv-buffer-size"><dt>udp-recv-buffer-size</dt></a>
+  *   <dd><U>Description</U>: Sets the size of the socket buffer used for
+  *    incoming udp point-to-point transmissions.  Note: if multicast is not
+  *    enabled and disable-tcp is not enabled, a reduced default size of
+  *    65535 is used.
+  *   <dd><U>Default</U>: "1048576 if multicast is enabled or disable-tcp is true, 131071 if not"</dd>
+  *   <dd><U>Allowed values</U>: 2048..Operating System maximum</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="udp-fragment-size"><dt>udp-fragment-size</dt></a>
+  *   <dd><U>Description</U>: When messages are sent over datagram sockets,
+  *    GemFire breaks large messages down into fragments for transmission.
+  *    This property sets the maximum fragment size for transmission.
+  *   <dd><U>Default</U>: "60000"</dd>
+  *   <dd><U>Allowed values</U>: 1000..60000</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="disable-tcp"><dt>disable-tcp</dt></a>
+  *   <dd><U>Description</U>: Turns off use of tcp/ip sockets, forcing the
+  *    cache to use datagram sockets for all communication.  This is useful
+  *    if you have a large number of processes in the distributed cache since
+  *    it eliminates the per-connection reader-thread that is otherwise required.
+  *    However, udp communications are somewhat slower than tcp/ip communications
+  *    due to the extra work required in Java to break messages down to
+  *    transmittable sizes, and the extra work required to guarantee
+  *    message delivery.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="tcp-port"><dt>tcp-port</dt></a>
+  *   <dd><U>Description</U>: A 16-bit integer that determines the tcp/ip port number to listen on
+  *     for cache communications.  If zero, the operating system will select
+  *     an available port to listen on.  Each process on a machine must have
+  *     its own tcp-port.  Note that some operating systems restrict the range
+  *     of ports usable by non-privileged users, and using restricted port
+  *     numbers can cause runtime errors in GemFire startup.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..65535</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="member-timeout"><dt>member-timeout</dt></a>
+  *   <dd><U>Description</U>: Sets the timeout interval, in milliseconds, used
+  *   to determine whether another process is alive or not.  When another process
+  *   appears to be gone, GemFire sends it an ARE-YOU-DEAD message and waits
+  *   for the member-timeout period for it to respond and declare it is not dead.
+  *   </dd>
+  *   <dd><U>Default</U>: "5000"</dd>
+  *   <dd><U>Allowed values</U>: 1000-600000</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="bind-address"><dt>bind-address</dt></a>
+  *   <dd><U>Description</U>: The IP address that this distributed system's
+  *   server sockets will listen on.
+  *   If set to an empty string then the local machine's
+  *   default address will be listened on.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * <!--
+  * <dl>
+  *   <a name="server-bind-address"><dt>server-bind-address</dt></a>
+  *   <dd><U>Description</U>: The IP address that this distributed system's
+  *   server sockets in a client-server topology will listen on.
+  *   If set to an empty string then all of the local machine's
+  *   addresses will be listened on.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * -->
+  * <dl>
+  *   <a name="membership-port-range"><dt>membership-port-range</dt></a>
+  *   <dd><U>Description</U>: The allowed range of ports for use in forming an
+  *   unique membership identifier (UDP), for failure detection purposes (TCP) and
+  *   to listen on for peer connections (TCP). This range is given as two numbers
+  *   separated by a minus sign. Minimum 3 values in range are required to
+  *   successfully startup.
+  *   </dd>
+  *   <dd><U>Default</U>: 1024-65535</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="locators"><dt>locators</dt></a>
+  *   <dd><U>Description</U>: A list of locators (host and port) that
+  *   are used to find other member of the distributed system.  This
+  *   attribute's value is a possibly empty comma separated list.  Each
+  *   element must be of the form "hostName[portNum]" and may be of the
+  *   form "host:bindAddress[port]" if a specific bind address is to be
+  *   used on the locator machine.  The square
+  *   brackets around the portNum are literal character and must be
+  *   specified.<p>
+  *   Since IPv6 bind addresses may contain colons, you may use an at symbol
+  *   instead of a colon to separate the host name and bind address.
+  *   For example, "server1@fdf0:76cf:a0ed:9449::5[12233]" specifies a locator
+  *   running on "server1" and bound to fdf0:76cf:a0ed:9449::5 on port 12233.<p>
+  *   If "locators" is empty
+  *   then this distributed system will be isolated from all other GemFire
+  *   processes.<p>
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="locator-wait-time"><dt>locator-wait-time</dt></a>
+  *   <dd><U>Description</U>: The number of seconds to wait for a locator to start
+  *   if one is not available when attempting to join the distributed system.  This
+  *   setting can be used when locators and peers are being started all at once in
+  *   order to have the peers be patient and wait for the locators to finish starting
+  *   up before attempting to join the distributed system..<p>
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  * 
+  * <dl>
+  *   <a name="remote-locators"><dt>remote-locators</dt></a>
+  *   <dd><U>Description</U>: A list of locators (host and port) that a cluster
+  *   will use in order to connect to a remote site in a multi-site (WAN) 
+  *   configuration. This attribute's value is a possibly comma separated list.
+  *   <p>For each remote locator, provide a hostname and/or address 
+  *   (separated by '@', if you use both), followed by a port number in brackets.
+  *   <p>Examples:
+  *   remote-locators=address1[port1],address2[port2]
+  *   <p>
+  *   remote-locators=hostName1@address1[port1],hostName2@address2[port2]
+  *   <p>
+  *   remote-locators=hostName1[port1],hostName2[port2]<p>
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="start-locator"><dt>start-locator</dt></a>
+  *   <dd><U>Description</U>: A host name or bind-address and port 
+  *   ("host[port],peer=<true|false>,server=<true|false>")
+  *   that are used to start a locator in the same process as the DistributedSystem.
+  *   The locator is started when the DistributedSystem connects,
+  *   and is stopped when the DistributedSystem disconnects.  To start a
+  *   locator that is not tied to the DistributedSystem's lifecycle, see
+  *   the {@link Locator} class in this same package.<p>
+  *   
+  *   The peer and server parameters are optional. They specify whether
+  *   the locator can be used for peers to discover each other, or for clients
+  *   to discover peers. By default both are true.
+  *   </dd>
+  *   <dd><U>Default</U>: "" (doesn't start a locator)</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ssl-enabled"><dt>ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: If true, all gemfire socket communication is
+  *   configured to use SSL through JSSE.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#cluster-ssl-enabled"><code>cluster-ssl-enabled</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ssl-protocols"><dt>ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#cluster-ssl-protocols"><code>cluster-ssl-protocols</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ssl-ciphers"><dt>ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#cluster-ssl-ciphers"><code>cluster-ssl-ciphers</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ssl-require-authentication"><dt>ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the client
+  *   side of the connection to be authenticated.
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#cluster-ssl-require-authentication"><code>cluster-ssl-require-authentication</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="cluster-ssl-enabled"><dt>cluster-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: If true, all gemfire socket communication is
+  *   configured to use SSL through JSSE. Preferably Use cluster-ssl-* properties
+  *   rather than ssl-* properties.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-protocols"><dt>cluster-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL protocols to
+  *   enable. Those listed must be supported by the available providers.Preferably
+  *   use cluster-ssl-* properties rather than ssl-* properties.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-ciphers"><dt>cluster-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL cipher suites to
+  *   enable. Those listed must be supported by the available providers.Preferably
+  *   use cluster-ssl-* properties rather than ssl-* properties.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-require-authentication"><dt>cluster-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the
+  *   client side of the connection to be authenticated.Preferably use
+  *   cluster-ssl-* properties rather than ssl-* properties.
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-keystore"><dt>cluster-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-keystore-type"><dt>cluster-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-keystore-password"><dt>cluster-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-truststore"><dt>cluster-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by distributed member (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-truststore-password"><dt>cluster-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="ack-wait-threshold"><dt>ack-wait-threshold</dt></a>
+  *   <dd><U>Description</U>: The number of seconds the distributed
+  *   system will wait for a message to be acknowledged before it sends
+  *   a <i>warning</i> level alert to signal that something might be wrong with the system
+  *   node that is unresponsive.  After sending this alert the waiter
+  *   continues to wait. The alerts are logged in the log as warnings
+  *   and will cause an alert notification in the Admin API and GemFire
+  *   JMX Agent.</dd>
+  *   <dd><U>Default</U>: "15"</dd>
+  *   <dd><U>Allowed values</U>: 1..2147483647</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ack-severe-alert-threshold"><dt>ack-severe-alert-threshold</dt></a>
+  *   <dd><U>Description</U>:
+  *   The number of seconds the distributed
+  *   system will wait after the ack-wait-threshold for a message to be
+  *   acknowledged before it issues an alert at <i>severe</i> level.  The
+  *   default value is zero, which turns off this feature.<p>
+  *   when ack-severe-alert-threshold is used, GemFire will also initiate
+  *   additional checks to see if the process is alive.  These checks will
+  *   begin when the ack-wait-threshold is reached and will continue until
+  *   GemFire has been able to communicate with the process and ascertain its
+  *   status.
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..2147483647</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="conserve-sockets"><dt>conserve-sockets</dt></a>
+  *   <dd><U>Description</U>: If "true" then a minimal number of sockets
+  *   will be used when connecting to the distributed system. This conserves
+  *   resource usage but can cause performance to suffer.
+  *   If "false" then every application thread that sends
+  *   distribution messages to other members of the distributed system
+  *   will own its own sockets and have exclusive access to them.
+  *   The length of time a thread can have exclusive access to a socket
+  *   can be configured with "socket-lease-time".
+  *   <dd><U>Default</U>: "true"</dd>
+  *   <dd><U>Allowed values</U>: true|false</dd>
+  *   <dd><U>Since</U>: 4.1</dd>
+  * </dl>
+  * <dl>
+  *   <a name="socket-lease-time"><dt>socket-lease-time</dt></a>
+  *   <dd><U>Description</U>: The number of milliseconds a thread
+  *   can keep exclusive access to a socket that it is not actively using.
+  *   Once a thread loses its lease to a socket it will need to re-acquire
+  *   a socket the next time it sends a message.
+  *   A value of zero causes socket leases to never expire.
+  *   This property is ignored if "conserve-sockets" is true.
+  *   <dd><U>Default</U>: "15000"</dd>
+  *   <dd><U>Allowed values</U>: 0..600000</dd>
+  *   <dd><U>Since</U>: 4.1</dd>
+  * </dl>
+  * <dl>
+  *   <a name="socket-buffer-size"><dt>socket-buffer-size</dt></a>
+  *   <dd><U>Description</U>: The size of each socket buffer, in bytes.
+  *   Smaller buffers conserve memory. Larger buffers can improve performance;
+  *   in particular if large messages are being sent.
+  *   <dd><U>Default</U>: "32768"</dd>
+  *   <dd><U>Allowed values</U>: 128..16777215</dd>
+  *   <dd><U>Since</U>: 4.1</dd>
+  * </dl>
+  * <dl>
+  *   <a name="conflate-events"><dt>conflate-events</dt></a>
+  *   <dd><U>Description</U>: This is a client-side property that is passed to
+  *   the server. Allowable values are "server", "true", and "false". With the
+  *   "server" setting, this client&apos;s servers use their own client queue
+  *   conflation settings. With a "true" setting, the servers disregard their
+  *   own configuration and enable conflation of events for all regions for the
+  *   client. A "false" setting causes the client&apos;s servers to disable
+  *   conflation for all regions for the client.
+  *   <dd><U>Default</U>: "server"</dd>
+  *   <dd><U>Since</U>: 5.7</dd>
+  * </dl>
+  * <dl>
+  *   <a name="durable-client-id"><dt>durable-client-id</dt></a>
+  *   <dd><U>Description</U>: The id to be used by this durable client. When a
+  *   durable client connects to a server, this id is used by the server to
+  *   identify it. The server will accumulate updates for a durable client
+  *   while it is disconnected and deliver these events to the client when it
+  *   reconnects.
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 5.5</dd>
+  * </dl>
+  * <dl>
+  *   <a name="durable-client-timeout"><dt>durable-client-timeout</dt></a>
+  *   <dd><U>Description</U>: The number of seconds a disconnected durable
+  *   client is kept alive and updates are accumulated for it by the server
+  *   before it is terminated.
+  *   <dd><U>Default</U>: "300"</dd>
+  *   <dd><U>Since</U>: 5.5</dd>
+  * </dl>
+  *<dl>
+  *   <a name="security-"><dt>security-</dt></a>
+  *   <dd><U>Description</U>: Mechanism to define client credentials.
+  *   All tags with "security-" prefix is packaged together as security properties 
+  *   and passed as an argument to getCredentials of Authentication module.
+  *   These tags cannot have null values. 
+  *   </dd>
+  *   <dd><U>Default</U>: Optional</dd>
+  *   <dd><U>Allowed values</U>: any string</dd>
+  * </dl>
+  * 
+  *<dl>
+  *   <a name="security-client-auth-init"><dt>security-client-auth-init</dt></a>
+  *   <dd><U>Description</U>: Authentication module name for Clients that requires to act
+  *   upon credentials read from the gemfire.properties file.
+  *   Module must implement AuthInitialize interface.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Allowed values</U>: jar file:class name</dd>
+  *</dl>
+  * 
++ *<dl>
++ *   <a name="security-rest-token-service"><dt>security-rest-token-service</dt></a>
++ *   <dd><U>Description</U>: Token service module name for REST servers that that is 
++ *   required to manage tokens.
++ *   Module must implement TokenService interface.
++ *   </dd>
++ *   <dd><U>Default</U>: ""</dd>
++ *   <dd><U>Allowed values</U>: jar file:class name.method name</dd>
++ *</dl>
++ *
+  * <dl>
+  * <a name="delta-propagation">
+  * <dt>delta-propagation</dt>
+  * </a>
+  * <dd><U>Description</U>: "true" indicates that server propagates delta
+  * generated from {@link com.gemstone.gemfire.Delta} type of objects. If "false"
+  * then server propagates full object but not delta. </dd>
+  * <dd><U>Default</U>: "true"</dd>
+  * <dd><U>Allowed values</U>: true|false</dd>
+  * </dl> 
+  * 
+  * <b>Network Partitioning Detection</b>
+  * 
+  * <dl>
+  *   <a name="enable-network-partition-detection"><dt>enable-network-partition-detection</dt></a>
+  *   <dd><U>Description</U>: Turns on network partitioning detection algorithms, which
+  *   detect loss of quorum and shuts down losing partitions.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="disable-auto-reconnect"><dt>disable-auto-reconnect</dt></a>
+  *   <dd><U>Description</U>: By default GemFire will attempt to reconnect and
+  *   reinitialize the cache when it has been forced out of the distributed system
+  *   by a network-partition event or has otherwise been shunned by other members.
+  *   This setting will turn off this behavior.</dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="max-wait-time-reconnect"><dt>max-wait-time-reconnect</dt></a>
+  *   <dd><U>Description</U>: Specifies the time in milliseconds to wait before each reconnect attempt when
+  *   a member of the distributed system is forced out of the system and auto-reconnect
+  *   is enabled (see <a href="#disable-auto-reconnect"><code>disable-auto-reconnect</code></a>) or if the deprecated required-roles
+  *   feature is being used and a role-loss has triggered a shutdown and reconnect.
+  *   </dd>
+  *   <dd><U>Default</U>: "60000"</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  *
+  * <b>Redundancy Management</b>
+  * 
+  * <dl>
+  *   <a name="enforce-unique-host"><dt>enforce-unique-host</dt></a>
+  *   <dd><U>Description</U>: Whether or not partitioned regions will
+  *   put redundant copies of the same data in different JVMs running on the same physical host.
+  *   
+  *   By default, partitioned regions will try to put redundancy copies on different physical hosts, but it may 
+  *   put them on the same physical host if no other hosts are available. Setting this property to true
+  *   will prevent partitions regions from ever putting redundant copies of data on the same physical host.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="redundancy-zone"><dt>redundancy-zone</dt></a>
+  *   <dd><u>Description</u>: Defines the redundancy zone from this member. If this property is set, partitioned
+  *   regions will not put two redundant copies of data in two members with the same redundancy zone setting.   
+  *   </dd>
+  *   <dd><u>Default</u>: ""</dd>
+  * </dl>
+  *
+  * <B>Logging Configuration Properties</B>
+  *
+  * <dl>
+  *   <a name="log-file"><dt>log-file</dt></a>
+  *   <dd><U>Description</U>: Name of the file to write logging
+  *   messages to.  If the file name if "" (default) then messages are
+  *   written to standard out.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="log-level"><dt>log-level</dt></a>
+  *   <dd><U>Description</U>:The type of log messages that will
+  *   actually write to the log file.
+  *   </dd>
+  *   <dd><U>Default</U>: "config"</dd>
+  *   <dd><U>Allowed values</U>: all|finest|finer|fine|config|info|warning|severe|none</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="statistic-sampling-enabled"><dt>statistic-sampling-enabled</dt></a>
+  *   <dd><U>Description</U>: "true" causes the statistics to be
+  *   sampled periodically and operating system statistics to be
+  *   fetched each time a sample is taken.  "false" disables sampling
+  *   which also disables operating system statistic collection.  Non
+  *   OS statistics will still be recorded in memory and can be viewed
+  *   by administration tools.  However, charts will show no activity
+  *   and no statistics will be archived while sampling is
+  *   disabled.
+  *   Starting in 7.0 the default value has been changed to true.
+  *   If statistic sampling is disabled it will also cause various
+  *   metrics seen in gfsh and pulse to always be zero.
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd>
+  *   <dd><U>Allowed values</U>: true|false</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="statistic-sample-rate"><dt>statistic-sample-rate</dt></a>
+  *   <dd><U>Description</U>:The rate, in milliseconds, at which samples
+  *   of the statistics will be taken.
+  *   If set to a value less than 1000 the rate will be set to 1000 because
+  *   the VSD tool does not support sub-second sampling.
+  *   </dd>
+  *   <dd><U>Default</U>: "1000"</dd>
+  *   <dd><U>Allowed values</U>: 100..60000</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="statistic-archive-file"><dt>statistic-archive-file</dt></a>
+  *   <dd><U>Description</U>: The file that statistic samples are
+  *   written to.  An empty string (default) disables statistic
+  *   archival.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="enable-time-statistics"><dt>enable-time-statistics</dt></a>
+  *   <dd><U>Description</U>: "true" causes additional time-based statistics to be
+  *   gathered for gemfire operations.  This can aid in discovering
+  *   where time is going in cache operations, albeit at the expense of
+  *   extra clock probes on every operation.  "false" disables the additional
+  *   time-based statistics.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="log-file-size-limit"><dt>log-file-size-limit</dt></a>
+  *   <dd><U>Description</U>: Limits, in megabytes, how large the current log
+  *   file can grow before it is closed and logging rolls on to a new file.
+  *   Set to zero to disable log rolling.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..1000000</dd>
+  * </dl>
+  * <dl>
+  *   <a name="log-disk-space-limit"><dt>log-disk-space-limit</dt></a>
+  *   <dd><U>Description</U>: Limits, in megabytes, how much disk space can be
+  *   consumed by old inactive log files. When the limit is
+  *   exceeded the oldest inactive log file is deleted.
+  *   Set to zero to disable automatic log file deletion.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..1000000</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="archive-file-size-limit"><dt>archive-file-size-limit</dt></a>
+  *   <dd><U>Description</U>: Limits, in megabytes, how large the current statistic archive
+  *   file can grow before it is closed and archival rolls on to a new file.
+  *   Set to zero to disable archive rolling.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..1000000</dd>
+  * </dl>
+  * <dl>
+  *   <a name="archive-disk-space-limit"><dt>archive-disk-space-limit</dt></a>
+  *   <dd><U>Description</U>: Limits, in megabytes, how much disk space can be
+  *   consumed by old inactive statistic archive files. When the limit is
+  *   exceeded the oldest inactive archive is deleted.
+  *   Set to zero to disable automatic archive deletion.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..1000000</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="roles"><dt>roles</dt></a>
+  *   <dd><U>Description</U>: Specifies the application roles that this member
+  *   performs in the distributed system. This is a comma delimited list of
+  *   user-defined strings. Any number of members can be configured to perform
+  *   the same role, and a member can be configured to perform any number of
+  *   roles.
+  *   Note that anything defined by the groups gemfire property will also be considered a role.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  *   <dd><U>Deprecated</U>: as of 7.0 use <a href="#groups"><code>groups</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="max-wait-time-reconnect"><dt>max-wait-time-reconnect</dt></a>
+  *   <dd><U>Description</U>: Specifies the time in milliseconds to wait before each reconnect attempt when
+  *   a member of the distributed system is forced out of the system and auto-reconnect
+  *   is enabled (see <a href="#disable-auto-reconnect"><code>disable-auto-reconnect</code></a>) or if the deprecated required-roles
+  *   feature is being used and a role-loss has triggered a shutdown and reconnect.
+  *   </dd>
+  *   <dd><U>Default</U>: "60000"</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="max-num-reconnect-tries"><dt>max-num-reconnect-tries</dt></a>
+  *   <dd><U>Description</U>: Specifies the maximum number or times to attempt
+  *   to reconnect to the distributed system when required roles are missing.
+  *   This does not apply to reconnect attempts due to a forced disconnect.
+  *   </dd>
+  *   <dd><U>Default</U>: "3"</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  * <B>Cache Configuration Properties</B>
+  *
+  * <dl>
+  *   <a name="cache-xml-file"><dt>cache-xml-file</dt></a>
+  *   <dd><U>Description</U>: Specifies the name of the XML file or resource
+  *   to initialize the cache with when it is
+  *   {@linkplain com.gemstone.gemfire.cache.CacheFactory#create created}.
+  *   Create will first look for a file that matches the value of this property.
+  *   If a file is not found then it will be searched for using
+  *   {@link java.lang.ClassLoader#getResource}.  If the value of this
+  *   property is the empty string (<code>""</code>), then the cache
+  *   will not be declaratively initialized.</dd>
+  *   <dd><U>Default</U>: "cache.xml"</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="memcached-port"><dt>memcached-port</dt></a>
+  *   <dd><U>Description</U>: Specifies the port used by {@link GemFireMemcachedServer}
+  *   which enables memcached clients to connect and store data in GemFire distributed system.
+  *   see {@link GemFireMemcachedServer} for other configuration options.</dd>
+  *   <dd><U>Default</U>: "0" disables GemFireMemcachedServer</dd>
+  *   <dd><U>Allowed values</U>: 0..65535</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="memcached-protocol"><dt>memcached-protocol</dt></a>
+  *   <dd><U>Description</U>: Specifies the protocol used by {@link GemFireMemcachedServer}</dd>
+  *   <dd><U>Default</U>: "ASCII"</dd>
+  *   <dd><U>Allowed values</U>: "ASCII" "BINARY"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="memcached-bind-address"><dt>memcached-bind-address</dt></a>
+  *   <dd><U>Description</U>: Specifies the bind address used by {@link GemFireMemcachedServer}</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="redis-port"><dt>redis-port</dt></a>
+  *   <dd><U>Description</U>: Specifies the port used by {@link GemFireRedisServer}
+  *   which enables redis clients to connect and store data in GemFire distributed system.
+  *   see {@link GemFireRedisServer} for other configuration options.</dd>
+  *   <dd><U>Default</U>: "0" disables GemFireMemcachedServer</dd>
+  *   <dd><U>Allowed values</U>: 0..65535</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="redis-bind-address"><dt>redis-bind-address</dt></a>
+  *   <dd><U>Description</U>: Specifies the bind address used by {@link GemFireRedisServer}</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="redis-password"><dt>redis-password</dt></a>
+  *   <dd><U>Description</U>: Specifies the password to authenticate a client of {@link GemFireRedisServer}</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <B>Asynchronous Message Properties</B>
+  *
+  * <dl>
+  *   <a name="async-distribution-timeout"><dt>async-distribution-timeout</dt></a>
+  *   <dd><U>Description</U>: The number of milliseconds before a
+  *   publishing process should attempt to distribute a cache operation
+  *   before switching over to asynchronous messaging for this process.
+  *   To enable asynchronous messaging, the value must be set above
+  *   zero. If a thread that is publishing to the cache exceeds this value
+  *   when attempting to distribute to this process, it will switch to
+  *   asynchronous messaging until this process catches up, departs, or
+  *   some specified limit is reached, such as <a href="#async-queue-timeout">
+  *   async-queue-timeout</a> or <a href="#async-max-queue-size">
+  *   async-max-queue-size</a>.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..60000</dd>
+  * </dl>
+  * <dl>
+  *   <a name="async-queue-timeout"><dt>async-queue-timeout</dt></a>
+  *   <dd><U>Description</U>: The number of milliseconds a queuing
+  *   publisher may enqueue asynchronous messages without any distribution
+  *   to this process before that publisher requests this process to
+  *   depart. If a queuing publisher has not been able to send this process
+  *   any cache operations prior to the timeout, this process will attempt
+  *   to close its cache and disconnect from the distributed system.
+  *   </dd>
+  *   <dd><U>Default</U>: "60000"</dd>
+  *   <dd><U>Allowed values</U>: 0..86400000</dd>
+  * </dl>
+  * <dl>
+  *   <a name="async-max-queue-size"><dt>async-max-queue-size</dt></a>
+  *   <dd><U>Description</U>: The maximum size in megabytes that a
+  *   publishing process should be allowed to asynchronously enqueue
+  *   for this process before asking this process to depart from the
+  *   distributed system.
+  *   </dd>
+  *   <dd><U>Default</U>: "8"</dd>
+  *   <dd><U>Allowed values</U>: 0..1024</dd>
+  * </dl>
+  * 
+  * <b>JMX Management</b>
+  * 
+  * <dl>
+  *   <a name="jmx-manager"><dt>jmx-manager</dt></a>
+  *   <dd><U>Description</U>: If true then this member is willing to be a jmx-manager.
+  *   All the other jmx-manager properties will be used when it does become a manager.
+  *   If this property is false then all other jmx-manager properties are ignored.
+  *   </dd>
+  *   <dd><U>Default</U>: "false except on locators"</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="jmx-manager-start"><dt>jmx-manager-start</dt></a>
+  *   <dd><U>Description</U>: If true then this member will start a jmx manager when
+  *   it creates a cache. Management tools like gfsh can be configured to connect
+  *   to the jmx-manager. In most cases you should not set this because a jmx manager will
+  *   automatically be started when needed on a member that sets "jmx-manager" to true.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-port"><dt>jmx-manager-port</dt></a>
+  *   <dd><U>Description</U>: The port this jmx manager will listen to for client connections.
+  *   If this property is set to zero then GemFire will not allow remote client connections 
+  *   but you can alternatively use the standard system properties supported by the JVM 
+  *   for configuring access from remote JMX clients.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "1099"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl"><dt>jmx-manager-ssl</dt></a>
+  *   <dd><U>Description</U>: If true and jmx-manager-port is not zero then the jmx-manager
+  *   will only accept ssl connections. Note that the ssl-enabled property does not apply to the jmx-manager
+  *   but the other ssl properties do. This allows ssl to be configured for just the jmx-manager
+  *   without needing to configure it for the other GemFire connections.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#jmx-manager-ssl-enabled"><code>jmx-manager-ssl-enabled</code></a> instead.</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-enabled"><dt>jmx-manager-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: If true and jmx-manager-port is not zero then the jmx-manager
+  *   will only accept ssl connections. Note that the ssl-enabled property does not apply to the jmx-manager
+  *   but the other ssl properties do. This allows ssl to be configured for just the jmx-manager
+  *   without needing to configure it for the other GemFire connections.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl> 
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-ciphers"><dt>jmx-manager-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>   
+  *   <dd><U>Default</U>: "any"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-protocols"><dt>jmx-manager-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-require-authentication"><dt>jmx-manager-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the client
+  *   side of the connection to be authenticated.
+  *   </dd>   
+  *   <dd><U>Default</U>: "true"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-keystore"><dt>jmx-manager-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-keystore-type"><dt>jmx-manager-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-keystore-password"><dt>jmx-manager-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-truststore"><dt>jmx-manager-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by manager (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-truststore-password"><dt>jmx-manager-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-bind-address"><dt>jmx-manager-bind-address</dt></a>
+  *   <dd><U>Description</U>: By default the jmx-manager when configured with a port will listen
+  *   on all the local host's addresses. You can use this property to configure what ip address
+  *   or host name the jmx-manager will listen on. In addition, if the embedded http server is
+  *   started, it will also bind to this address if it is set.
+  *   Ignored if jmx-manager is false or jmx-manager-port is zero.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-hostname-for-clients"><dt>jmx-manager-hostname-for-clients</dt></a>
+  *   <dd><U>Description</U>: Lets you control what hostname will be given to clients that ask
+  *   the locator for the location of a jmx manager. By default the ip address that the jmx-manager
+  *   reports is used. But for clients on a different network this property allows you to configure
+  *   a different hostname that will be given to clients.
+  *   Ignored if jmx-manager is false or jmx-manager-port is zero.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-password-file"><dt>jmx-manager-password-file</dt></a>
+  *   <dd><U>Description</U>: By default the jmx-manager will allow clients without credentials to connect.
+  *   If this property is set to the name of a file then only clients that connect with credentials that
+  *   match an entry in this file will be allowed.
+  *   Most JVMs require that the file is only readable by the owner.
+  *   For more information about the format of this file see Oracle's documentation of the
+  *   com.sun.management.jmxremote.password.file system property.
+  *   Ignored if jmx-manager is false or if jmx-manager-port is zero.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="jmx-manager-access-file"><dt>jmx-manager-access-file</dt></a>
+  *   <dd><U>Description</U>: By default the jmx-manager will allow full access to all mbeans by any client.
+  *   If this property is set to the name of a file then it can restrict clients to only being able to read
+  *   mbeans; they will not be able to modify mbeans. The access level can be configured differently in this
+  *   file for each user name defined in the password file.
+  *   For more information about the format of this file see Oracle's documentation of the
+  *   com.sun.management.jmxremote.access.file system property.
+  *   Ignored if jmx-manager is false or if jmx-manager-port is zero.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="jmx-manager-http-port"><dt>jmx-manager-http-port</dt></a>
+  *   <dd><U>Description</U>: If non-zero then when the jmx manager is started, an embedded
+  *   web server will also be started and will listen on this port.
+  *   The web server is used to host the GemFire Pulse application.
+  *   If you are hosting the Pulse web app in your own web server, then disable
+  *   this embedded server by setting this property to zero.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "7070"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#http-service-port"><code>http-service-port</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="jmx-manager-update-rate"><dt>jmx-manager-update-rate</dt></a>
+  *   <dd><U>Description</U>: The rate, in milliseconds, at which this member will push updates
+  *   to any jmx managers. Currently this value should be greater than or equal to the
+  *   statistic-sample-rate. Setting this value too high will cause stale values to be
+  *   seen by gfsh and pulse.
+  *   </dd>
+  *   <dd><U>Default</U>: "2000"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-port"><dt>http-service-port</dt></a>
+  *   <dd><U>Description</U>: Specifies the port used by the GemFire HTTP service. If
+  *   configured with non-zero value, then an HTTP service will listen on this port.
+  *   A value of "0" disables Gemfire HTTP service.
+  *   </dd>
+  *   <dd><U>Default</U>: "7070" </dd>
+  *   <dd><U>Allowed values</U>: 0..65535</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="http-service-bind-address"><dt>http-service-bind-address</dt></a>
+  *   <dd><U>Description</U>: The address where the GemFire HTTP service will listen
+  *   for remote connections. One can use this property to configure what ip
+  *   address or host name the HTTP service will listen on. When not set, by
+  *   default the HTTP service will listen on the local host's address.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <b> HTTP Service SSL Configuration </b>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-enabled"><dt>http-service-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: Specifies if http service is started with separate ssl configuration.
+  *   If not specified, global property cluster-ssl-enabled (and its other related properties) are used
+  *   to secure http service. All http-service-ssl-* properties are inherited from cluster-ssl-* properties. 
+  *   User can ovverride them using specific http-service-ssl-* property.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>false</code></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl> 
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-ciphers"><dt>http-service-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="http-service-ssl-protocols"><dt>http-service-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="http-service-ssl-require-authentication"><dt>http-service-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the client
+  *   side of the connection to be authenticated.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>false</code></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-keystore"><dt>http-service-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-keystore-type"><dt>http-service-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-keystore-password"><dt>http-service-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-truststore"><dt>http-service-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by server (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="http-service-ssl-truststore-password"><dt>http-service-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="start-dev-rest-api"><dt>start-dev-rest-api</dt></a>
+  *   <dd><U>Description</U>: If true then developer(API) REST service will be
+  *   started when cache is created. REST service can be configured using
+  *   <code>http-service-port</code> and <code>http-service-bind-address</code>
+  *   properties.</dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <b>Off-Heap Memory</b>
+  * 
+  * <dl>
+  *   <a name="off-heap-memory-size"><dt>off-heap-memory-size</dt></a>
+  *   <dd><U>Description</U>: The total size of off-heap memory specified as
+  *   off-heap-memory-size=<n>[g|m]. <n> is the size. [g|m] indicates
+  *   whether the size should be interpreted as gigabytes or megabytes.
+  *   By default no off-heap memory is allocated.
+  *   A non-zero value will cause that much memory to be allocated from the operating
+  *   system and reserved for off-heap use.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>""</code></dd>
+  *   <dd><U>Since</U>: 9.0</dd>
+  * </dl>
+  * 
+  * <b>Cluster Configuration Service</b>
+  * <dl>
+  *   <a name="enable-cluster-configuration"><dt>enable-cluster-configuration</dt></a>
+  *   <dd><U>Description</U>: "true" causes creation of cluster configuration service on dedicated locators. The cluster configuration service on dedicated locator(s) 
+  *   would serve the configuration to new members joining the distributed system and also save the configuration changes caused by the Gfsh commands.
+  *   This property is only applicable to dedicated locators. 
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd> 
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="use-cluster-configuration"><dt>use-cluster-configuration</dt></a>
+  *   <dd><U>Description</U>: This property is only applicable for data members (non client and non locator) 
+  *   "true" causes a member to request and uses the configuration from cluster configuration services running on dedicated locators. 
+  *   "false" causes a member to not request the configuration from the configuration services running on the locator(s).
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd> 
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="load-cluster-configuration-from-dir"><dt>load-cluster-configuration-from-dir</dt></a>
+  *   <dd><U>Description</U>: "true" causes loading of cluster configuration from "cluster_config" directory in the locator. 
+  *   This property is only applicable to dedicated locators which have "enable-cluster-configuration" set to true.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  *  * <dl>
+  *   <a name="cluster-configuration-dir"><dt>cluster-configuration-dir</dt></a>
+  *   <dd><U>Description</U>: This property specifies the directory in which the cluster configuration related disk-store and artifacts are stored  
+  *   This property is only applicable to dedicated locators which have "enable-cluster-configuration" set to true.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Allowed values</U></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <b> Server SSL Configuration </b>
+  * 
+  * <dl>
+  *   <a name="server-ssl-enabled"><dt>server-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: Specifies if server is started with separate ssl configuration.
+  *   If not specified global property ssl-enabled (and its other related properties) are used
+  *   to create server socket
+  *   </dd>
+  *   <dd><U>Default</U>: <code>false</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl> 
+  * 
+  * <dl>
+  *   <a name="server-ssl-ciphers"><dt>server-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="server-ssl-protocols"><dt>server-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="server-ssl-require-authentication"><dt>server-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the client
+  *   side of the connection to be authenticated.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-keystore"><dt>server-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-keystore-type"><dt>server-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-keystore-password"><dt>server-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-truststore"><dt>server-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by server (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-truststore-password"><dt>server-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <b> Gateway SSL Configuration </b>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-enabled"><dt>gateway-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: Specifies if gateway is started with separate ssl configuration.
+  *   If not specified global property ssl-enabled (and its other related properties) are used
+  *   to create gateway socket
+  *   </dd>
+  *   <dd><U>Default</U>: <code>false</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl> 
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-ciphers"><dt>gateway-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="gateway-ssl-protocols"><dt>gateway-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="gateway-ssl-require-authentication"><dt>gateway-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the Gateway Sender
+  *   side of the connection to be authenticated.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-keystore"><dt>gateway-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-keystore-type"><dt>gateway-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-keystore-password"><dt>gateway-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-truststore"><dt>gateway-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by server (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-truststore-password"><dt>gateway-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <b>Miscellaneous</b> 
+  *
+  * <dl>
+  *   <a name="lock-memory"><dt>lock-memory</dt></a>
+  *   <dd><U>Description</U>: Include this option to lock GemFire heap and off-heap memory pages into RAM.
+  *   This prevents the operating system from swapping the pages out to disk, which can cause sever
+  *   performance degradation. When you use this command, also configure the operating system limits for
+  *   locked memory.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>"false"</code></dd>
+  *   <dd><U>Since</U>: 9.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="deploy-working-dir"><dt>deploy-working-dir</dt></a>
+  *   <dd><U>Description</U>: Specifies the working directory which this
+  *   distributed member will use to persist deployed JAR files.  This directory
+  *   should be unchanged when restarting the member so that it can read what
+  *   was previously persisted. The default is the current working directory
+  *   as determined by <code>System.getProperty("user.dir")</code>.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>System.getProperty("user.dir")</code></dd>
+  *   <dd><U>Since</U>: 7.0</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="user-command-packages"><dt>user-command-packages</dt></a>
+  *   <dd><U>Description</U>: A comma separated list of Java packages that
+  *   contain classes implementing the <code>CommandMarker</code> interface.
+  *   Matching classes will be loaded when the VM starts and will be available
+  *   in the GFSH command-line utility.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>""</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * @author Darrel Schneider
+  * @author Bruce Schuchardt
+  *
+  * @since 3.0
+  */
+ public abstract class DistributedSystem implements StatisticsFactory {
+ 
+   /** 
+    * The instances of <code>DistributedSystem</code> created in this
+    * VM. Presently only one connect to a distributed system is allowed in a VM.
+    * This set is never modified in place (it is always read only) but
+    * the reference can be updated by holders of {@link #existingSystemsLock}.
+    */
+   protected static volatile List existingSystems = Collections.EMPTY_LIST;
+   /**
+    * This lock must be changed to add or remove a system.
+    * It is notified when a system is removed.
+    * 
+    * @see #existingSystems
+    */
+   protected static final Object existingSystemsLock = new Object();
+ 
+   //public static Properties props = new Properties();
+ 
+   /**
+    * Used to indicate a reconnect is tried in case of required role
+    * loss.
+    * */
+ 
+  // public static boolean reconnect = false;
+ 
+   ////////////////////////  Static Methods  ////////////////////////
+ 
+   /**
+    * Connects to a GemFire distributed system with a configuration
+    * supplemented by the given properties.
+    * <P>The actual configuration attribute values used to connect comes
+    * from the following sources:
+    * <OL>
+    * <LI>System properties. If a system property named
+    *     "<code>gemfire.</code><em>propertyName</em>" is defined
+    *     and its value is not an empty string
+    *     then its value will be used for the named configuration attribute.
+    *
+    * <LI>Code properties. Otherwise if a property is defined in the <code>config</code>
+    *     parameter object and its value is not an empty string
+    *     then its value will be used for that configuration attribute.
+    * <LI>File properties. Otherwise if a property is defined in a configuration property
+    *     file found by this application and its value is not an empty string
+    *     then its value will be used for that configuration attribute.
+    *     A configuration property file may not exist.
+    *     See the following section for how configuration property files are found.
+    * <LI>Defaults. Otherwise a default value is used.
+    * </OL>
+    * <P>
+    * The name of the property file can be
+    * specified using the "gemfirePropertyFile" system property.
+    * If the system property is set to a relative file name then it
+    * is searched for in following locations.
+    * If the system property is set to an absolute file name then that
+    * file is used as the property file.
+    * If the system property is not set, then the name of the property
+    * file defaults to "gemfire.properties".  The configuration file is
+    * searched for in the following locations:
+    *
+    * <OL>
+    * <LI>Current directory (directory in which the VM was
+    *     launched)</LI>
+    * <LI>User's home directory</LI>
+    * <LI>Class path (loaded as a {@linkplain
+    *     ClassLoader#getResource(String) system resource})</LI>
+    * </OL>
+    *
+    * If the configuration file cannot be located, then the property
+    * will have its default value as described <a
+    * href="#configuration">above</a>.
+    *
+    * @param config
+    *        The <a href="#configuration">configuration properties</a>
+    *        used when connecting to the distributed system
+    *
+    * @throws IllegalArgumentException
+    *         If <code>config</code> contains an unknown configuration
+    *         property or a configuration property does not have an
+    *         allowed value.  Note that the values of boolean
+    *         properties are parsed using {@link Boolean#valueOf(java.lang.String)}.
+    *         Therefore all values other than "true" values will be
+    *         considered <code>false</code> -- an exception will not be
+    *         thrown.
+    * @throws IllegalStateException
+    *         If a <code>DistributedSystem</code> with a different
+    *         configuration has already been created in this VM or if
+    *         this VM is {@link
+    *         com.gemstone.gemfire.admin.AdminDistributedSystem
+    *         administering} a distributed system.
+    * @throws com.gemstone.gemfire.GemFireIOException
+    *         Problems while reading configuration properties file or
+    *         while opening the log file.
+    * @throws com.gemstone.gemfire.GemFireConfigException
+    *         The distribution transport is not configured correctly
+    *
+    * @deprecated as of 6.5 use {@link CacheFactory#create} or {@link ClientCacheFactory#create} instead.
+    *
+    * */
+   public static DistributedSystem connect(Properties config) {
+     if (config == null) {
+       // fix for bug 33992
+       config = new Properties();
+     }
+ //     {
+ //       LogWriterI18n logger =
+ //         new LocalLogWriter(LocalLogWriter.ALL_LEVEL, System.out);
+ //       logger.info("DistributedSystem: Connecting with " + config,
+ //                   new Exception("Stack trace"));
+ //     }
+     synchronized (existingSystemsLock) {
+       if (DistributionManager.isDedicatedAdminVM) {
+         // For a dedicated admin VM, check to see if there is already
+         // a connect that will suit our purposes.
+         DistributedSystem existingSystem = getConnection(config);
+         if (existingSystem != null) {
+           return existingSystem;
+         }
+ 
+       } else {
+         boolean existingSystemDisconnecting = true;
+         while (!existingSystems.isEmpty() && existingSystemDisconnecting) {
+           Assert.assertTrue(existingSystems.size() == 1);
+ 
+           InternalDistributedSystem existingSystem =
+               (InternalDistributedSystem) existingSystems.get(0);
+           existingSystemDisconnecting = existingSystem.isDisconnecting();
+           if (existingSystemDisconnecting) {
+             boolean interrupted = Thread.interrupted();
+             try {
+               // no notify for existingSystemsLock, just to release the sync
+               existingSystemsLock.wait(50);
+             } 
+             catch (InterruptedException ex) {
+               interrupted = true;
+             }
+             finally {
+               if (interrupted) {
+                 Thread.currentThread().interrupt();
+               }
+             }
+           } else if (existingSystem.isConnected()) {
+             existingSystem.validateSameProperties(config,
+                 existingSystem.isConnected());
+             return existingSystem;
+           } else {
+           // This should not happen: existingSystem.isConnected()==false && existingSystem.isDisconnecting()==false 
+             throw new AssertionError("system should not be disconnecting==false and isConnected==falsed");
+           }
+         }
+       }
+ 
+       // Make a new connection to the distributed system
+       try {
+         InternalDistributedSystem newSystem =
+           InternalDistributedSystem.newInstance(config);
+         addSystem(newSystem);
+         return newSystem;
+ 
+       }
+       catch (GemFireSecurityException ex) {
+         ex.fillInStackTrace(); // Make it harder to figure out where jgroups code lives.
+         throw ex;
+       }
+     }
+   }
+ 
+   protected static void addSystem(InternalDistributedSystem newSystem) {
+     synchronized (existingSystemsLock) {
+       int size = existingSystems.size();
+       if (size == 0) {
+         existingSystems = Collections.singletonList(newSystem);
+       }
+       else {
+         ArrayList l = new ArrayList(size+1);
+         l.addAll(existingSystems);
+         l.add(0, newSystem);
+         existingSystems = Collections.unmodifiableList(l);
+       }
+     }
+   }
+   protected static boolean removeSystem(InternalDistributedSystem oldSystem) {
+     synchronized (existingSystemsLock) {
+       ArrayList l = new ArrayList(existingSystems);
+       boolean result = l.remove(oldSystem);
+       if (result) {
+         int size = l.size();
+         if (size == 0) {
+           existingSystems = Collections.EMPTY_LIST;
+         }
+         else if (size == 1) {
+           existingSystems = Collections.singletonList(l.get(0));
+         }
+         else {
+           existingSystems = Collections.unmodifiableList(l);
+         }
+       }
+       return result;
+     }
+   }
+   
+   /**
+    * Sets the calling thread's socket policy.
+    * This value will override that default set by the
+    * <code>conserve-sockets</code> configuration property.
+    * @param conserveSockets If <code>true</code> then calling thread will share
+    *   socket connections with other threads.
+    *   If <code>false</code> then calling thread will have its own sockets.
+    * @since 4.1
+    */
+   public static void setThreadsSocketPolicy(boolean conserveSockets) {
+     if (conserveSockets) {
+       ConnectionTable.threadWantsSharedResources();
+     } else {
+       ConnectionTable.threadWantsOwnResources();
+     }
+   }
+ 
+ 
+ 
+   /**
+    * Frees up any socket resources owned by the calling thread.
+    * @since 4.1
+    */
+   public static void releaseThreadsSockets() {
+     ConnectionTable.releaseThreadsSockets();
+   }
+ 
+   /**
+    * Returns an existing connection to the distributed system
+    * described by the given properties.
+    *
+    * @since 4.0
+    */
+   private static DistributedSystem getConnection(Properties config) {
+     // In an admin VM you can have a connection to more than one
+     // distributed system.  If we are already connected to the desired
+     // distributed system, return that connection.
+     List l = existingSystems;
+     for (Iterator iter = l.iterator(); iter.hasNext(); ) {
+       InternalDistributedSystem existingSystem =
+         (InternalDistributedSystem) iter.next();
+       if (existingSystem.sameSystemAs(config)) {
+         Assert.assertTrue(existingSystem.isConnected());
+         return existingSystem;
+       }
+     }
+ 
+     return null;
+   }
+ 
+   /**
+    * Returns a connection to the distributed system that is
+    * appropriate for administration.  This method is for internal use
+    * only by the admin API.
+    *
+    * @since 4.0
+    */
+   protected static DistributedSystem connectForAdmin(Properties props) {
+     DistributedSystem existing = getConnection(props);
+     if (existing != null) {
+       return existing;
+ 
+     } else {
+       //logger.info("creating new distributed system for admin");
+       //for (java.util.Enumeration en=props.propertyNames(); en.hasMoreElements(); ) {
+       //  String prop=(String)en.nextElement();
+       //  logger.info(prop + "=" + props.getProperty(prop));
+       //}
+       props.setProperty(DistributionConfig.CONSERVE_SOCKETS_NAME, "true");
+       // LOG: no longer using the LogWriter that was passed in
+       return connect(props);
+     }
+   }
+ 
+   /**
+    * see {@link com.gemstone.gemfire.admin.AdminDistributedSystemFactory}
+    * @since 5.7
+    */
+   protected static void setEnableAdministrationOnly(boolean adminOnly) {
+     synchronized (existingSystemsLock) {
+       if( existingSystems != null && !existingSystems.isEmpty()) {
+         throw new IllegalStateException(
+           LocalizedStrings.DistributedSystem_THIS_VM_ALREADY_HAS_ONE_OR_MORE_DISTRIBUTED_SYSTEM_CONNECTIONS_0
+             .toLocalizedString(existingSystems));
+       }
+       DistributionManager.isDedicatedAdminVM = adminOnly;
+     }
+   }
+ 
+ //   /**
+ //    * Connects to a GemFire distributed system with a configuration
+ //    * supplemented by the given properties.
+ //    *
+ //    * @param config
+ //    *        The <a href="#configuration">configuration properties</a>
+ //    *        used when connecting to the distributed system
+ //    * @param callback
+ //    *        A user-specified object that is delivered with the {@link
+ //    *        com.gemstone.gemfire.admin.SystemMembershipEvent}
+ //    *        triggered by connecting.
+ //    *
+ //    * @see #connect(Properties)
+ //    * @see com.gemstone.gemfire.admin.SystemMembershipListener#memberJoined
+ //    *
+ //    * @since 4.0
+ //    */
+ //   public static DistributedSystem connect(Properties config,
+ //                                           Object callback) {
+ //     throw new UnsupportedOperationException("Not implemented yet");
+ //   }
+ 
+   //////////////////////  Constructors  //////////////////////
+ 
+   /**
+    * Creates a new instance of <code>DistributedSystem</code>.  This
+    * constructor is protected so that it may only be invoked by
+    * subclasses.
+    */
+   protected DistributedSystem() {
+ 
+   }
+ 
+   ////////////////////  Instance Methods  ////////////////////
+ 
+   /**
+    * Returns the <code>LogWriter</code> used for logging information.
+    * See <A href="#logFile">logFile</A>.
+    *
+    * @throws IllegalStateException
+    *         This VM has {@linkplain #disconnect() disconnected} from the
+    *         distributed system.
+    */
+   public abstract LogWriter getLogWriter();
+ 
+   /**
+    * Returns the <code>LogWriter</code> used for logging security related
+    * information. See <A href="#logFile">logFile</A>.
+    * 
+    * @throws IllegalStateException
+    *                 This VM has {@linkplain #disconnect() disconnected} from
+    *                 the distributed system.
+    * @since 5.5
+    */
+   public abstract LogWriter getSecurityLogWriter();
+ 
+   /**
+    * Returns the configuration properties.
+    * @return the configuration Properties
+    */
+   public abstract Properties getProperties();
+ 
+   /**
+    * Returns the security specific configuration properties.
+    * @return the configuration Properties
+    * @since 5.5
+    */
+   public abstract Properties getSecurityProperties();
+ 
+   /**
+    * 
+    * @return the cancel criterion for this system
+    */
+   public abstract CancelCriterion getCancelCriterion();
+   
+   /**
+    * Disconnects from this distributed system.  This operation will
+    * close the distribution manager and render the {@link
+    * com.gemstone.gemfire.cache.Cache Cache} and all distributed
+    * collections obtained from this distributed system inoperable.
+    * After a disconnect has completed, a VM may connect to another
+    * distributed system.
+    *
+    * <P>
+    *
+    * Attempts to access a distributed system after a VM has
+    * disconnected from it will result in an {@link
+    * IllegalStateException} being thrown.
+    * @deprecated as of 6.5 use {@link Cache#close} or {@link ClientCache#close} instead.
+    */
+   public abstract void disconnect();
+   /**
+    * Returns whether or not this <code>DistributedSystem</code> is
+    * connected to the distributed system.
+    *
+    * @see #disconnect()
+    */
+   public abstract boolean isConnected();
+ 
+   /**
+    * Returns the id of this connection to the distributed system.
+    *
+    * @deprecated {@link #getDistributedMember} provides an identity for
+    *             this connection that is unique across the entire
+    *             distributed system.
+    */
+   @Deprecated
+   public abstract long getId();
+ 
+   /**
+    * Returns a string that uniquely identifies this connection to the
+    * distributed system.
+    *
+    * @see com.gemstone.gemfire.admin.SystemMembershipEvent#getMemberId
+    *
+    * @since 4.0
+    * @deprecated as of GemFire 5.0, use {@link #getDistributedMember} instead
+    */
+   @Deprecated
+   public abstract String getMemberId();
+ 
+   /**
+    * Returns the {@link DistributedMember} that identifies this connection to
+    * the distributed system.
+    * @return the member that represents this distributed system connection.
+    * @since 5.0
+    */
+   public abstract DistributedMember getDistributedMember();
+   
+   /**
+    * Returns a set of all the other members in this distributed system.
+    * @return returns a set of all the other members in this distributed system.
+    * @since 7.0
+    */
+   public abstract Set<DistributedMember> getAllOtherMembers();
+ 
+   /**
+    * Returns a set of all the members in the given group.
+    * Members join a group be setting the "groups" gemfire property.
+    * @return returns a set of all the member in a group.
+    * @since 7.0
+    */
+   public abstract Set<DistributedMember> getGroupMembers(String group);
+   
+   
+   /**
+    * Find the set of distributed members running on a given address
+    * 
+    * @return a set of all DistributedMembers that have any interfaces
+    * that match the given IP address. May be empty if there are no members.
+    * 
+    * @since 7.1
+    */ 
+    public abstract Set<DistributedMember> findDistributedMembers(InetAddress address);
+ 
+    /**
+    * Find the distributed member with the given name
+    * 
+    * @return the distributed member that has the given name, or null if
+    * no member is currently running with the given name.
+    * 
+    * @since 7.1
+    */
+    public abstract DistributedMember findDistributedMember(String name);
+ 
+   /**
+    * Returns the <a href="#name">name</a> of this connection to the
+    * distributed system.
+    */
+   public abstract String getName();
+ 
+   /**
+    * The <code>PROPERTIES_FILE_PROPERTY</code> is the system property
+    * that can be used to specify the name of the properties file that the 
+    * connect method will check for when it looks for a properties file. Unless
+    * the value specifies the fully qualified path to the file, the file will 
+    * be searched for, in order, in the following directories:
+    * <ol>
+    * <li> the current directory
+    * <li> the home directory
+    * <li> the class path
+    * </ol>
+    * Only the first file found will be used.
+    * <p>
+    * The default value is {@link #PROPERTIES_FILE_DEFAULT}. However 
+    * if the <code>PROPERTIES_FILE_PROPERTY</code> is set then its value 
+    * will be used instead of the default. If this value is a relative file
+    * system path then the above search is done.  If it is an absolute
+    * file system path then that file must exist; no search for it is
+    * done.
+    * 
+    * @see #PROPERTIES_FILE_DEFAULT
+    * @see #getPropertiesFile()
+    * @since 9.0
+    */
+   public static final String PROPERTIES_FILE_PROPERTY = "gemfirePropertyFile";
+   
+   /** 
+    * The default value of <code>PROPERTIES_FILE_PROPERTY</code> is
+    * <code>"gemfire.properties"</code>. The location of the file will be 
+    * resolved during connect as described for {@link #PROPERTIES_FILE_PROPERTY}.
+    * 
+    * @see #PROPERTIES_FILE_PROPERTY
+    * @see #getPropertiesFile()
+    * @since 9.0
+    */
+   public static final String PROPERTIES_FILE_DEFAULT = "gemfire.properties";
+ 
+   /**
+    * Returns the current value of {@link #PROPERTIES_FILE_PROPERTY} system 
+    * property if set or the default value {@link #PROPERTIES_FILE_DEFAULT}.
+    * 
+    * @see #PROPERTIES_FILE_PROPERTY
+    * @see #PROPERTIES_FILE_DEFAULT
+    * @since 9.0
+    */
+   public static String getPropertiesFile() {
+ 	return System.getProperty(PROPERTIES_FILE_PROPERTY, PROPERTIES_FILE_DEFAULT);
+   }
+   
+   /**
+    * The <code>PROPERTY_FILE</code> is the name of the
+    * properties file that the connect method will check for when
+    * it looks for a properties file.
+    * The file will be searched for, in order, in the following directories:
+    * <ol>
+    * <li> the current directory
+    * <li> the home directory
+    * <li> the class path
+    * </ol>
+    * Only the first file found will be used.
+    * <p>
+    * The default value of PROPERTY_FILE is
+    * <code>"gemfire.properties"</code>.  However if the
+    * "gemfirePropertyFile" system property is set then its value is
+    * the value of PROPERTY_FILE. If this value is a relative file
+    * system path then the above search is done.  If it is an absolute
+    * file system path then that file must exist; no search for it is
+    * done.
+    * 
+    * @see #getPropertiesFile()
+    * @since 5.0
+    * @deprecated As of 9.0, please use {@link #getPropertiesFile()} instead. 
+    */
+   public static String PROPERTY_FILE = getPropertiesFile();
+ 
+   /**
+    * The <code>SECURITY_PROPERTIES_FILE_PROPERTY</code> is the system property
+    * that can be used to specify the name of the property file that the 
+    * connect method will check for when it looks for a property file. Unless
+    * the value specifies the fully qualified path to the file, the file will 
+    * be searched for, in order, in the following directories:
+    * <ol>
+    * <li> the current directory
+    * <li> the home directory
+    * <li> the class path
+    * </ol>
+    * Only the first file found will be used.
+    * <p>
+    * The default value is {@link #SECURITY_PROPERTIES_FILE_DEFAULT}. However 
+    * if the <code>SECURITY_PROPERTIES_FILE_PROPERTY</code> is set then its value 
+    * will be used instead of the default. If this value is a relative file
+    * system path then the above search is done.  If it is an absolute
+    * file system path then that file must exist; no search for it is
+    * done.
+    * 
+    * @see #SECURITY_PROPERTIES_FILE_DEFAULT
+    * @see #getSecurityPropertiesFile()
+    * @since 9.0
+    */
+   public static final String SECURITY_PROPERTIES_FILE_PROPERTY = "gemfireSecurityPropertyFile";
+   
+   /** 
+    * The default value of <code>SECURITY_PROPERTIES_FILE_PROPERTY</code> is
+    * <code>"gfsecurity.properties"</code>. The location of the file will be 
+    * resolved during connect as described for {@link #SECURITY_PROPERTIES_FILE_PROPERTY}.
+    * 
+    * @see #SECURITY_PROPERTIES_FILE_PROPERTY
+    * @see #getSecurityPropertiesFile()
+    * @since 9.0
+    */
+   public static final String SECURITY_PROPERTIES_FILE_DEFAULT = "gfsecurity.properties";
+ 
+   /**
+    * Returns the current value of {@link #SECURITY_PROPERTIES_FILE_PROPERTY} system 
+    * property if set or the default value {@link #SECURITY_PROPERTIES_FILE_DEFAULT}.
+    * 
+    * @see #SECURITY_PROPERTIES_FILE_PROPERTY
+    * @see #SECURITY_PROPERTIES_FILE_DEFAULT
+    * @since 9.0
+    */
+   public static String getSecurityPropertiesFile() {
+ 	return System.getProperty(SECURITY_PROPERTIES_FILE_PROPERTY, SECURITY_PROPERTIES_FILE_DEFAULT);
+   }
+   
+   /**
+    * The <code>SECURITY_PROPERTY_FILE</code> is the name of the
+    * property file that the connect method will check for when
+    * it looks for a security property file.
+    * The file will be searched for, in order, in the following directories:
+    * <ol>
+    * <li> the current directory
+    * <li> the home directory
+    * <li> th

<TRUNCATED>


[02/50] [abbrv] incubator-geode git commit: GEODE-907: Missed some import references

Posted by je...@apache.org.
GEODE-907: Missed some import references


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/b4d4cebb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/b4d4cebb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/b4d4cebb

Branch: refs/heads/feature/GEODE-17
Commit: b4d4cebbd4a2fae38bc030876b0abe9f3c7f26c8
Parents: 589ced4
Author: Jens Deppe <jd...@pivotal.io>
Authored: Thu Feb 18 19:35:42 2016 -0800
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Feb 23 14:04:50 2016 -0800

----------------------------------------------------------------------
 .../com/vmware/gemfire/tools/pulse/internal/data/Cluster.java    | 2 ++
 .../vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java  | 4 +---
 .../pulse/internal/service/MemberDiskThroughputService.java      | 3 +--
 .../tools/pulse/internal/service/MemberKeyStatisticsService.java | 3 +--
 4 files changed, 5 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b4d4cebb/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
index 5c6bb40..471cc01 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
@@ -59,6 +59,8 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.commons.collections.buffer.CircularFifoBuffer;
 
+import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
+
 /**
  * Class Cluster This class is the Data Model for the data used for the Pulse
  * Web UI.

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b4d4cebb/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java
index 3706f12..9c7358a 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java
@@ -28,8 +28,6 @@ import java.util.logging.Logger;
 
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConfig;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
-import com.vmware.gemfire.tools.pulse.internal.log.MessageFormatter;
 
 /**
  * Class PulseLogWriter
@@ -97,7 +95,7 @@ public class PulseLogWriter implements LogWriter {
    * @param jsonErr
    * @param errorData
    */
-  public void logJSONError(JSONException jsonErr, Object errorData) {
+  public void logJSONError(Exception jsonErr, Object errorData) {
 
     // print details of thrown exception and data that couldn't be converted to
     // json

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b4d4cebb/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
index 145c0b9..1b2d6ad 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java
@@ -24,7 +24,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
@@ -48,7 +47,7 @@ public class MemberDiskThroughputService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode execute(final HttpServletRequest request) throws Exception, JSONException {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b4d4cebb/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
index 2c70d84..7fd317b 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java
@@ -24,7 +24,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
-import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
@@ -48,7 +47,7 @@ public class MemberKeyStatisticsService implements PulseService {
 
   private final ObjectMapper mapper = new ObjectMapper();
 
-  public ObjectNode execute(final HttpServletRequest request) throws Exception, JSONException {
+  public ObjectNode execute(final HttpServletRequest request) throws Exception {
 
     // get cluster object
     Cluster cluster = Repository.get().getCluster();


[22/50] [abbrv] incubator-geode git commit: GEODE-983: NPE with transactions on PR with overflow

Posted by je...@apache.org.
GEODE-983: NPE with transactions on PR with overflow

Use a BucketRegion while faulting-in an overflowed value.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/deaa7aa6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/deaa7aa6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/deaa7aa6

Branch: refs/heads/feature/GEODE-17
Commit: deaa7aa68e368b26d8fea203d5273a37e7892a2a
Parents: d50623b
Author: Swapnil Bawaskar <sb...@pivotal.io>
Authored: Wed Feb 24 17:26:20 2016 -0800
Committer: Swapnil Bawaskar <sb...@pivotal.io>
Committed: Thu Feb 25 10:06:49 2016 -0800

----------------------------------------------------------------------
 .../gemfire/internal/cache/TXState.java         |  4 +-
 .../cache/lru/TransactionsWithOverflowTest.java | 85 ++++++++++++++++++++
 2 files changed, 87 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/deaa7aa6/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXState.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXState.java
index 8215957..02237b7 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXState.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXState.java
@@ -1362,7 +1362,7 @@ public class TXState implements TXStateInterface {
       if (txr == null) {
         txr = txWriteRegion(localRegion, keyInfo);
       }
-      result = localRegion.createReadEntry(txr, keyInfo, createIfAbsent);
+      result = dataReg.createReadEntry(txr, keyInfo, createIfAbsent);
     }
     
     if (result != null) {
@@ -1379,7 +1379,7 @@ public class TXState implements TXStateInterface {
        * 
        */
       if (txr!=null) {
-        txr.cleanupNonDirtyEntries(localRegion);
+        txr.cleanupNonDirtyEntries(dataReg);
       }
       if (expectedOldValue==null) {
         /*

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/deaa7aa6/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/lru/TransactionsWithOverflowTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/lru/TransactionsWithOverflowTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/lru/TransactionsWithOverflowTest.java
new file mode 100644
index 0000000..fc906b6
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/lru/TransactionsWithOverflowTest.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gemstone.gemfire.internal.cache.lru;
+
+import com.gemstone.gemfire.cache.*;
+import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
+
+import java.io.File;
+import java.util.Properties;
+
+/**
+ * Test for transactional operations on overflowed data
+ */
+@Category(IntegrationTest.class)
+public class TransactionsWithOverflowTest {
+
+  @Rule
+  public TestName name = new TestName();
+
+  private Cache cache;
+
+  private String createDiskStoreAndGetName() {
+    Cache cache = getCache();
+    File[] diskDirs = new File[1];
+    diskDirs[0] = new File("diskRegionDirs/"+getClass().getCanonicalName());
+    diskDirs[0].mkdirs();
+    DiskStoreFactory diskStoreFactory = cache.createDiskStoreFactory();
+    diskStoreFactory.setDiskDirs(diskDirs);
+    String diskStoreName = getClass().getName();
+    diskStoreFactory.create(diskStoreName);
+    return diskStoreName;
+  }
+
+  @Test
+  public void testpartitionedRegionWithOverflow() {
+    Cache cache = getCache();
+    String diskStoreName = createDiskStoreAndGetName();
+    Region pr = createOverflowPR(cache, diskStoreName);
+    for (int i=0; i<5;i++) {
+      pr.put(i, "value"+i);
+    }
+    CacheTransactionManager mgr = cache.getCacheTransactionManager();
+    mgr.begin();
+    pr.destroy(1);
+    mgr.commit();
+  }
+
+  private Cache getCache() {
+    if (cache == null) {
+      Properties props = new Properties();
+      props.setProperty("locators", "");
+      props.setProperty("mcast-port","0");
+      cache = new CacheFactory(props).create();
+    }
+    return cache;
+  }
+
+  private Region createOverflowPR(Cache cache, String diskStoreName) {
+    RegionFactory rf = cache.createRegionFactory();
+    rf.setDataPolicy(DataPolicy.PARTITION);
+    rf.setEvictionAttributes(EvictionAttributes.createLRUEntryAttributes(1, EvictionAction.OVERFLOW_TO_DISK));
+    rf.setPartitionAttributes(new PartitionAttributesFactory().setTotalNumBuckets(1).create());
+    rf.setDiskStoreName(diskStoreName);
+    return rf.create(name.getMethodName());
+  }
+}
\ No newline at end of file


[46/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
index 0000000,fc2fca7..71dc92a
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
@@@ -1,0 -1,3533 +1,3564 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.distributed.internal;
+ 
+ import com.gemstone.gemfire.GemFireConfigException;
+ import com.gemstone.gemfire.GemFireIOException;
+ import com.gemstone.gemfire.distributed.DistributedSystem;
+ import com.gemstone.gemfire.internal.ConfigSource;
+ import com.gemstone.gemfire.internal.SocketCreator;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.internal.process.ProcessLauncherContext;
+ import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.io.Serializable;
+ import java.net.InetAddress;
+ import java.net.URL;
+ import java.net.UnknownHostException;
+ import java.util.*;
+ 
+ /**
+  * Provides an implementation of <code>DistributionConfig</code> that
+  * knows how to read the configuration file.
+  *
+  * <P>
+  *
+  * Note that if you add a property to this interface, should should
+  * update  the {@link
+  * #DistributionConfigImpl(DistributionConfig) copy constructor}.
+  *
+  * @see InternalDistributedSystem
+  *
+  * @author David Whitlock
+  * @author Darrel Schneider
+  * @author Bruce Schuchardt
+  *
+  * @since 2.1
+  */
+ public class DistributionConfigImpl
+   extends AbstractDistributionConfig
+   implements Serializable {
+ 
+   private static final long serialVersionUID = 4096393792893825167L;
+ 
+   /** The name of the distribution manager/shared memory connection */
+   private String name = DEFAULT_NAME;
+ 
+   /** The tcp/ip port used for distribution */
+   private int tcpPort = DEFAULT_TCP_PORT;
+ 
+   /** The multicast port used for distribution */
+   private int mcastPort = DEFAULT_MCAST_PORT;
+ 
+   /** The multicast ttl used for distribution */
+   private int mcastTtl = DEFAULT_MCAST_TTL;
+ 
+   private int socketLeaseTime = DEFAULT_SOCKET_LEASE_TIME;
+   private int socketBufferSize = DEFAULT_SOCKET_BUFFER_SIZE;
+   private boolean conserveSockets = DEFAULT_CONSERVE_SOCKETS;
+ 
+   /** Comma-delimited list of the application roles performed by this member. */
+   private String roles = DEFAULT_ROLES;
+ 
+   /** The multicast address used for distribution */
+   private InetAddress mcastAddress = DEFAULT_MCAST_ADDRESS;
+ 
+   /** The address server socket's should listen on */
+   private String bindAddress = DEFAULT_BIND_ADDRESS;
+ 
+   /** The address server socket's in a  client-server topology should listen on */
+   private String serverBindAddress = DEFAULT_SERVER_BIND_ADDRESS;
+ 
+   /** The locations of the distribution locators */
+   private String locators = DEFAULT_LOCATORS;
+   
+   /** The amount of time to wait for a locator to appear when starting up */
+   private int locatorWaitTime;
+   
+   /** The name of the log file */
+   private File logFile = DEFAULT_LOG_FILE;
+   
+   protected File deployWorkingDir = DEFAULT_DEPLOY_WORKING_DIR;
+   
+   /** The level at which log messages are logged
+    *
+    * @see com.gemstone.gemfire.internal.logging.LogWriterImpl#levelNameToCode(String)
+    */
+   protected int logLevel = DEFAULT_LOG_LEVEL;
+ 
+   /** bind-address and host of locator to start */
+   private String startLocator = DEFAULT_START_LOCATOR;
+ 
+   /** port of locator to start.  use bind-address as host name */
+   private int startLocatorPort;
+ 
+   /** Is statistic sampling enabled? */
+   protected boolean statisticSamplingEnabled = DEFAULT_STATISTIC_SAMPLING_ENABLED;
+ 
+   /** The rate (in milliseconds) at which statistics are sampled */
+   protected int statisticSampleRate = DEFAULT_STATISTIC_SAMPLE_RATE;
+ 
+   /** The name of the file to which statistics should be archived */
+   protected File statisticArchiveFile = DEFAULT_STATISTIC_ARCHIVE_FILE;
+ 
+   /** The amount of time to wait for a ACK message */
+   private int ackWaitThreshold = DEFAULT_ACK_WAIT_THRESHOLD;
+ 
+   /**
+    * The amount of time to wait for a ACK message after the ackWaitThreshold
+    * before shunning members that haven't responded.  If zero, this feature
+    * is disabled.
+    */
+   private int ackForceDisconnectThreshold = DEFAULT_ACK_SEVERE_ALERT_THRESHOLD;
+ 
+   /** The name of an XML file used to initialize the cache */
+   private File cacheXmlFile = Boolean.getBoolean(InternalLocator.FORCE_LOCATOR_DM_TYPE) ? new File("") : DEFAULT_CACHE_XML_FILE;
+ 
+   protected int archiveDiskSpaceLimit = DEFAULT_ARCHIVE_DISK_SPACE_LIMIT;
+   protected int archiveFileSizeLimit = DEFAULT_ARCHIVE_FILE_SIZE_LIMIT;
+   protected int logDiskSpaceLimit = DEFAULT_LOG_DISK_SPACE_LIMIT;
+   protected int logFileSizeLimit = DEFAULT_LOG_FILE_SIZE_LIMIT;
+ 
+   protected boolean sslEnabled = DEFAULT_SSL_ENABLED;
+   protected String sslProtocols = DEFAULT_SSL_PROTOCOLS;
+   protected String sslCiphers = DEFAULT_SSL_CIPHERS;
+   protected boolean sslRequireAuthentication = DEFAULT_SSL_REQUIRE_AUTHENTICATION;
+ 
+   protected boolean clusterSSLEnabled = DEFAULT_CLUSTER_SSL_ENABLED;
+   protected String clusterSSLProtocols = DEFAULT_CLUSTER_SSL_PROTOCOLS;
+   protected String clusterSSLCiphers = DEFAULT_CLUSTER_SSL_CIPHERS;
+   protected boolean clusterSSLRequireAuthentication = DEFAULT_CLUSTER_SSL_REQUIRE_AUTHENTICATION;
+   protected String clusterSSLKeyStore = DEFAULT_CLUSTER_SSL_KEYSTORE;
+   protected String clusterSSLKeyStoreType = DEFAULT_CLUSTER_SSL_KEYSTORE_TYPE;
+   protected String clusterSSLKeyStorePassword = DEFAULT_CLUSTER_SSL_KEYSTORE_PASSWORD;
+   protected String clusterSSLTrustStore = DEFAULT_CLUSTER_SSL_TRUSTSTORE;
+   protected String clusterSSLTrustStorePassword = DEFAULT_CLUSTER_SSL_TRUSTSTORE_PASSWORD;
+   
+   /** multicast send buffer size, in bytes */
+   protected int mcastSendBufferSize = DEFAULT_MCAST_SEND_BUFFER_SIZE;
+   /** multicast receive buffer size, in bytes */
+   protected int mcastRecvBufferSize = DEFAULT_MCAST_RECV_BUFFER_SIZE;
+   /** flow-of-control parameters for multicast messaging */
+   protected FlowControlParams mcastFlowControl = DEFAULT_MCAST_FLOW_CONTROL;
+ 
+   /** datagram socket send buffer size, in bytes */
+   protected int udpSendBufferSize = DEFAULT_UDP_SEND_BUFFER_SIZE;
+   /** datagram socket receive buffer size, in bytes */
+   protected int udpRecvBufferSize = DEFAULT_UDP_RECV_BUFFER_SIZE;
+   /** max datagram message size, in bytes.  This should be < 64k */
+   protected int udpFragmentSize = DEFAULT_UDP_FRAGMENT_SIZE;
+ 
+   /** whether tcp/ip sockets should be disabled */
+   protected boolean disableTcp = DEFAULT_DISABLE_TCP;
+ 
+   /** whether time statistics should be enabled for the distributed system */
+   protected boolean enableTimeStatistics = DEFAULT_ENABLE_TIME_STATISTICS;
+ 
+   /** member contact timeout, in milliseconds, for failure detection */
+   protected int memberTimeout = DEFAULT_MEMBER_TIMEOUT;
+   
+   /** the Jgroups port ranges allowed */
+   protected int[] membershipPortRange = DEFAULT_MEMBERSHIP_PORT_RANGE;
+   
+   /**
+    * Max wait time for the member before reconnecting to the DS in case of
+    * required role loss.
+    * */
+   private int maxWaitTimeForReconnect = DEFAULT_MAX_WAIT_TIME_FOR_RECONNECT;
+   /**
+    * Max number of tries allowed for reconnect in case of required role loss.
+    * */
+   private int maxNumReconnectTries = DEFAULT_MAX_NUM_RECONNECT_TRIES;
+ 
+ 
+   protected int asyncDistributionTimeout = DEFAULT_ASYNC_DISTRIBUTION_TIMEOUT;
+   protected int asyncQueueTimeout = DEFAULT_ASYNC_QUEUE_TIMEOUT;
+   protected int asyncMaxQueueSize = DEFAULT_ASYNC_MAX_QUEUE_SIZE;
+ 
+   /** @since 5.7 */
+   private String clientConflation = CLIENT_CONFLATION_PROP_VALUE_DEFAULT;
+ 
+   /** The id of the durable client */
+   private String durableClientId = DEFAULT_DURABLE_CLIENT_ID;
+ 
+   /** The timeout of the durable client */
+   private int durableClientTimeout = DEFAULT_DURABLE_CLIENT_TIMEOUT;
+ 
+   /** The client authentication initialization method name*/
+   private String securityClientAuthInit = DEFAULT_SECURITY_CLIENT_AUTH_INIT;
+ 
+   /** The client authenticating method name*/
+   private String securityClientAuthenticator = DEFAULT_SECURITY_CLIENT_AUTHENTICATOR;
+ 
+   /** The client Diffie-Hellman method name*/
+   private String securityClientDHAlgo = DEFAULT_SECURITY_CLIENT_DHALGO;
+ 
+   /** The peer authentication initialization method name*/
+   private String securityPeerAuthInit = DEFAULT_SECURITY_PEER_AUTH_INIT;
+ 
+   /** The peer authenticating method name*/
+   private String securityPeerAuthenticator = DEFAULT_SECURITY_PEER_AUTHENTICATOR;
+ 
+   /** The client authorization method name*/
+   private String securityClientAccessor = DEFAULT_SECURITY_CLIENT_ACCESSOR;
+ 
+   /** The post-processing client authorization method name*/
+   private String securityClientAccessorPP = DEFAULT_SECURITY_CLIENT_ACCESSOR_PP;
+ 
++  /** The token service method name*/
++  private String securityRestTokenService = DEFAULT_SECURITY_REST_TOKEN_SERVICE;
++
+   /**
+    * The level at which security related log messages are logged
+    *
+    * @see com.gemstone.gemfire.internal.logging.LogWriterImpl#levelNameToCode(String)
+    */
+   protected int securityLogLevel = DEFAULT_LOG_LEVEL;
+ 
+   /** whether network partition detection algorithms are enabled */
+   private boolean enableNetworkPartitionDetection = DEFAULT_ENABLE_NETWORK_PARTITION_DETECTION;
+   
+   /** whether auto reconnect after network partition is disabled */
+   private boolean disableAutoReconnect = DEFAULT_DISABLE_AUTO_RECONNECT;
+ 
+   /** The security log file */
+   private File securityLogFile = DEFAULT_SECURITY_LOG_FILE;
+ 
+   /** The p2p membership check timeout */
+   private int securityPeerMembershipTimeout = DEFAULT_SECURITY_PEER_VERIFYMEMBER_TIMEOUT;
+ 
+   /** The member security credentials */
+   private Properties security = new Properties();
+ 
+   /** The User defined properties to be used for cache.xml replacements */
+   private Properties userDefinedProps = new Properties();
+   /**
+    * Prefix to use for properties that are put as JVM java properties for use
+    * with layers (e.g. jgroups membership) that do not have a
+    * <code>DistributionConfig</code> object.
+    */
+   public static final String SECURITY_SYSTEM_PREFIX = GEMFIRE_PREFIX + "sys.";
+ 
+   /** whether to remove unresponsive client or not */
+   private boolean removeUnresponsiveClient = DEFAULT_REMOVE_UNRESPONSIVE_CLIENT;
+ 
+   /** Is delta propagation enabled or not **/
+   private boolean deltaPropagation = DEFAULT_DELTA_PROPAGATION;
+   
+   private Map props;
+   
+   private int distributedSystemId = DistributionConfig.DEFAULT_DISTRIBUTED_SYSTEM_ID;
+ 
+   /** The locations of the remote distribution locators */
+   private String remoteLocators = DEFAULT_REMOTE_LOCATORS;
+   
+   private boolean enforceUniqueHost = DistributionConfig.DEFAULT_ENFORCE_UNIQUE_HOST;
+   
+   private String redundancyZone = DistributionConfig.DEFAULT_REDUNDANCY_ZONE;
+ 
+   /** holds the ssl properties specified in gfsecurity.properties */
+   private Properties sslProperties = new Properties();
+   
+   /** holds the ssl properties specified in gfsecurity.properties */
+   private Properties clusterSSLProperties = new Properties();
+   
+   private String groups = DEFAULT_GROUPS;
+   
+   protected boolean enableSharedConfiguration = DistributionConfig.DEFAULT_ENABLE_CLUSTER_CONFIGURATION;
+   protected boolean useSharedConfiguration = DistributionConfig.DEFAULT_USE_CLUSTER_CONFIGURATION;
+   protected boolean loadSharedConfigurationFromDir = DistributionConfig.DEFAULT_LOAD_CLUSTER_CONFIG_FROM_DIR;
+   protected String clusterConfigDir = DistributionConfig.DEFAULT_CLUSTER_CONFIGURATION_DIR;
+   
+   
+   private int httpServicePort = DEFAULT_HTTP_SERVICE_PORT;
+ 
+   private String httpServiceBindAddress = DEFAULT_HTTP_SERVICE_BIND_ADDRESS;
+   
+   private boolean startDevRestApi = DEFAULT_START_DEV_REST_API;
+   /**
+    * port on which {@link GemFireMemcachedServer} server is started
+    */
+   private int memcachedPort;
+ 
+   /**
+    * protocol for GemFireMemcachedServer
+    */
+   private String memcachedProtocol = DEFAULT_MEMCACHED_PROTOCOL;
+ 
+   /**
+    * Bind address for GemFireMemcachedServer
+    */
+   private String memcachedBindAddress = DEFAULT_MEMCACHED_BIND_ADDRESS;
+   
+   /** Are distributed transactions enabled or not */
+   private boolean distributedTransactions = DEFAULT_DISTRIBUTED_TRANSACTIONS;
+ 
+   
+   /**
+    * port on which {@link com.gemstone.gemfire.redis.GemFireRedisServer} is started
+    */
+   private int redisPort = DEFAULT_REDIS_PORT;
+   
+   /**
+    * Bind address for GemFireRedisServer
+    */
+   private String redisBindAddress = DEFAULT_REDIS_BIND_ADDRESS;
+   
+   private String redisPassword = DEFAULT_REDIS_PASSWORD;
+ 
+   private boolean jmxManager = Boolean.getBoolean(InternalLocator.FORCE_LOCATOR_DM_TYPE) ? true : DEFAULT_JMX_MANAGER;
+   private boolean jmxManagerStart = DEFAULT_JMX_MANAGER_START;
+   
+   private int jmxManagerPort = DEFAULT_JMX_MANAGER_PORT;
+   private String jmxManagerBindAddress = DEFAULT_JMX_MANAGER_BIND_ADDRESS;
+   private String jmxManagerHostnameForClients = DEFAULT_JMX_MANAGER_HOSTNAME_FOR_CLIENTS;
+   private String jmxManagerPasswordFile = DEFAULT_JMX_MANAGER_PASSWORD_FILE;
+   private String jmxManagerAccessFile = DEFAULT_JMX_MANAGER_ACCESS_FILE;
+   private int jmxManagerHttpPort = DEFAULT_HTTP_SERVICE_PORT; 
+   private int jmxManagerUpdateRate = DEFAULT_JMX_MANAGER_UPDATE_RATE;
+  
+   private boolean jmxManagerSSL = DEFAULT_JMX_MANAGER_SSL;
+   private boolean jmxManagerSSLEnabled = DEFAULT_JMX_MANAGER_SSL_ENABLED;
+   private boolean jmxManagerSslRequireAuthentication = DEFAULT_JMX_MANAGER_SSL_REQUIRE_AUTHENTICATION;
+   private String jmxManagerSslProtocols = DEFAULT_JMX_MANAGER_SSL_PROTOCOLS;
+   private String jmxManagerSslCiphers = DEFAULT_JMX_MANAGER_SSL_CIPHERS;
+   private Properties jmxManagerSslProperties = new Properties();
+   
+   protected String jmxManagerSSLKeyStore = DEFAULT_JMX_MANAGER_SSL_KEYSTORE;
+   protected String jmxManagerSSLKeyStoreType = DEFAULT_JMX_MANAGER_SSL_KEYSTORE_TYPE;
+   protected String jmxManagerSSLKeyStorePassword = DEFAULT_JMX_MANAGER_SSL_KEYSTORE_PASSWORD;
+   protected String jmxManagerSSLTrustStore = DEFAULT_JMX_MANAGER_SSL_TRUSTSTORE;
+   protected String jmxManagerSSLTrustStorePassword = DEFAULT_JMX_MANAGER_SSL_TRUSTSTORE_PASSWORD;
+   
+   private boolean serverSSLEnabled = DEFAULT_SERVER_SSL_ENABLED;
+   private boolean serverSslRequireAuthentication = DEFAULT_SERVER_SSL_REQUIRE_AUTHENTICATION;
+   private String serverSslProtocols = DEFAULT_SERVER_SSL_PROTOCOLS;
+   private String serverSslCiphers = DEFAULT_SERVER_SSL_CIPHERS;
+   private Properties serverSslProperties = new Properties();
+   
+   protected String serverSSLKeyStore = DEFAULT_SERVER_SSL_KEYSTORE;
+   protected String serverSSLKeyStoreType = DEFAULT_SERVER_SSL_KEYSTORE_TYPE;
+   protected String serverSSLKeyStorePassword = DEFAULT_SERVER_SSL_KEYSTORE_PASSWORD;
+   protected String serverSSLTrustStore = DEFAULT_SERVER_SSL_TRUSTSTORE;
+   protected String serverSSLTrustStorePassword = DEFAULT_SERVER_SSL_TRUSTSTORE_PASSWORD;
+ 
+   private boolean gatewaySSLEnabled = DEFAULT_GATEWAY_SSL_ENABLED;
+   private boolean gatewaySslRequireAuthentication = DEFAULT_GATEWAY_SSL_REQUIRE_AUTHENTICATION;
+   private String gatewaySslProtocols = DEFAULT_GATEWAY_SSL_PROTOCOLS;
+   private String gatewaySslCiphers = DEFAULT_GATEWAY_SSL_CIPHERS;
+   private Properties gatewaySslProperties = new Properties();
+   
+   protected String gatewaySSLKeyStore = DEFAULT_GATEWAY_SSL_KEYSTORE;
+   protected String gatewaySSLKeyStoreType = DEFAULT_GATEWAY_SSL_KEYSTORE_TYPE;
+   protected String gatewaySSLKeyStorePassword = DEFAULT_GATEWAY_SSL_KEYSTORE_PASSWORD;
+   protected String gatewaySSLTrustStore = DEFAULT_GATEWAY_SSL_TRUSTSTORE;
+   protected String gatewaySSLTrustStorePassword = DEFAULT_GATEWAY_SSL_TRUSTSTORE_PASSWORD;
+   
+   
+   private boolean httpServiceSSLEnabled = DEFAULT_HTTP_SERVICE_SSL_ENABLED;
+   private boolean httpServiceSSLRequireAuthentication = DEFAULT_HTTP_SERVICE_SSL_REQUIRE_AUTHENTICATION;
+   private String httpServiceSSLProtocols = DEFAULT_HTTP_SERVICE_SSL_PROTOCOLS;
+   private String httpServiceSSLCiphers = DEFAULT_HTTP_SERVICE_SSL_CIPHERS;
+   private Properties httpServiceSSLProperties = new Properties();
+   
+   protected String httpServiceSSLKeyStore = DEFAULT_HTTP_SERVICE_SSL_KEYSTORE;
+   protected String httpServiceSSLKeyStoreType = DEFAULT_HTTP_SERVICE_SSL_KEYSTORE_TYPE;
+   protected String httpServiceSSLKeyStorePassword = DEFAULT_HTTP_SERVICE_SSL_KEYSTORE_PASSWORD;
+   protected String httpServiceSSLTrustStore = DEFAULT_HTTP_SERVICE_SSL_TRUSTSTORE;
+   protected String httpServiceSSLTrustStorePassword = DEFAULT_HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD;
+   
+   private Map<String, ConfigSource> sourceMap = Collections.synchronizedMap(new HashMap<String, ConfigSource>());
+   
+   protected String userCommandPackages = DEFAULT_USER_COMMAND_PACKAGES;
+   
+   /** "off-heap-memory-size" with value of "" or "<size>[g|m]" */
+   protected String offHeapMemorySize = DEFAULT_OFF_HEAP_MEMORY_SIZE;
+   
+   /** Whether pages should be locked into memory or allowed to swap to disk */
+   private boolean lockMemory = DEFAULT_LOCK_MEMORY;
+   
+   //////////////////////  Constructors  //////////////////////
+ 
+   /**
+    * Create a new <code>DistributionConfigImpl</code> from the
+    * contents of another <code>DistributionConfig</code>.
+    */
+   public DistributionConfigImpl(DistributionConfig other) {
+     this.name = other.getName();
+     this.tcpPort = other.getTcpPort();
+     this.mcastPort = other.getMcastPort();
+     this.mcastTtl = other.getMcastTtl();
+     this.socketLeaseTime = other.getSocketLeaseTime();
+     this.socketBufferSize = other.getSocketBufferSize();
+     this.conserveSockets = other.getConserveSockets();
+     this.roles = other.getRoles();
+     this.mcastAddress = other.getMcastAddress();
+     this.bindAddress = other.getBindAddress();
+     this.serverBindAddress = other.getServerBindAddress();
+     this.locators = ((DistributionConfigImpl)other).locators; 
+     this.locatorWaitTime = other.getLocatorWaitTime();
+     this.remoteLocators = other.getRemoteLocators();
+     this.startLocator = other.getStartLocator();
+     this.startLocatorPort = ((DistributionConfigImpl)other).startLocatorPort;
+     this.deployWorkingDir = other.getDeployWorkingDir();
+     this.logFile = other.getLogFile();
+     this.logLevel = other.getLogLevel();
+     this.statisticSamplingEnabled = other.getStatisticSamplingEnabled();
+     this.statisticSampleRate = other.getStatisticSampleRate();
+     this.statisticArchiveFile = other.getStatisticArchiveFile();
+     this.ackWaitThreshold = other.getAckWaitThreshold();
+     this.ackForceDisconnectThreshold = other.getAckSevereAlertThreshold();
+     this.cacheXmlFile = other.getCacheXmlFile();
+     this.archiveDiskSpaceLimit = other.getArchiveDiskSpaceLimit();
+     this.archiveFileSizeLimit = other.getArchiveFileSizeLimit();
+     this.logDiskSpaceLimit = other.getLogDiskSpaceLimit();
+     this.logFileSizeLimit = other.getLogFileSizeLimit();
+     this.sslEnabled = other.getSSLEnabled();
+     this.sslProtocols = other.getSSLProtocols();
+     this.sslCiphers = other.getSSLCiphers();
+     this.sslRequireAuthentication = other.getSSLRequireAuthentication();
+     this.clusterSSLEnabled = other.getClusterSSLEnabled();
+     this.clusterSSLProtocols = other.getClusterSSLProtocols();
+     this.clusterSSLCiphers = other.getClusterSSLCiphers();
+     this.clusterSSLRequireAuthentication = other.getClusterSSLRequireAuthentication();
+     this.clusterSSLKeyStore = other.getClusterSSLKeyStore();
+     this.clusterSSLKeyStoreType= other.getClusterSSLKeyStoreType();
+     this.clusterSSLKeyStorePassword= other.getClusterSSLKeyStorePassword();
+     this.clusterSSLTrustStore= other.getClusterSSLTrustStore();
+     this.clusterSSLTrustStorePassword= other.getClusterSSLTrustStorePassword();
+     this.asyncDistributionTimeout = other.getAsyncDistributionTimeout();
+     this.asyncQueueTimeout = other.getAsyncQueueTimeout();
+     this.asyncMaxQueueSize = other.getAsyncMaxQueueSize();
+     this.modifiable = true;
+     // the following were added after version 4.1.2
+     this.mcastSendBufferSize = other.getMcastSendBufferSize();
+     this.mcastRecvBufferSize = other.getMcastRecvBufferSize();
+     this.mcastFlowControl = other.getMcastFlowControl();
+     this.udpSendBufferSize = other.getUdpSendBufferSize();
+     this.udpRecvBufferSize = other.getUdpRecvBufferSize();
+     this.udpFragmentSize = other.getUdpFragmentSize();
+     this.disableTcp = other.getDisableTcp();
+     this.enableTimeStatistics = other.getEnableTimeStatistics();
+     this.memberTimeout = other.getMemberTimeout();
+     this.membershipPortRange = other.getMembershipPortRange();
+     this.maxWaitTimeForReconnect = other.getMaxWaitTimeForReconnect();
+     this.maxNumReconnectTries = other.getMaxNumReconnectTries();
+     this.clientConflation = other.getClientConflation();
+     this.durableClientId = other.getDurableClientId();
+     this.durableClientTimeout = other.getDurableClientTimeout();
+ 
+     this.enableNetworkPartitionDetection = other.getEnableNetworkPartitionDetection();
+     this.disableAutoReconnect = other.getDisableAutoReconnect();
+ 
+     this.securityClientAuthInit = other.getSecurityClientAuthInit();
+     this.securityClientAuthenticator = other.getSecurityClientAuthenticator();
+     this.securityClientDHAlgo = other.getSecurityClientDHAlgo();
+     this.securityPeerAuthInit = other.getSecurityPeerAuthInit();
+     this.securityPeerAuthenticator = other.getSecurityPeerAuthenticator();
+     this.securityClientAccessor = other.getSecurityClientAccessor();
+     this.securityClientAccessorPP = other.getSecurityClientAccessorPP();
+     this.securityPeerMembershipTimeout = other.getSecurityPeerMembershipTimeout();
+     this.securityLogLevel = other.getSecurityLogLevel();
+     this.securityLogFile = other.getSecurityLogFile();
+     this.security.putAll(other.getSecurityProps());
+     this.removeUnresponsiveClient = other.getRemoveUnresponsiveClient();
+     this.deltaPropagation = other.getDeltaPropagation();
+     this.distributedSystemId = other.getDistributedSystemId();
+     this.redundancyZone = other.getRedundancyZone();
+     this.enforceUniqueHost = other.getEnforceUniqueHost();
+     this.sslProperties = other.getSSLProperties();
+     this.clusterSSLProperties = other.getClusterSSLProperties();
+     this.jmxManagerSslProperties = other.getJmxSSLProperties();
+     //Similar to this.security, assigning userDefinedProps
+     this.userDefinedProps.putAll(other.getUserDefinedProps());
+     
+     // following added for 7.0
+     this.groups = other.getGroups();
+     this.jmxManager = other.getJmxManager();
+     this.jmxManagerStart = other.getJmxManagerStart();
+     this.jmxManagerSSL = other.getJmxManagerSSL();
+     this.jmxManagerSSLEnabled = other.getJmxManagerSSLEnabled();
+     this.jmxManagerSslRequireAuthentication = other.getJmxManagerSSLRequireAuthentication();
+     this.jmxManagerSslProtocols = other.getJmxManagerSSLProtocols();
+     this.jmxManagerSslCiphers = other.getJmxManagerSSLCiphers();
+     this.jmxManagerSSLKeyStore = other.getJmxManagerSSLKeyStore();
+     this.jmxManagerSSLKeyStoreType= other.getJmxManagerSSLKeyStoreType();
+     this.jmxManagerSSLKeyStorePassword= other.getJmxManagerSSLKeyStorePassword();
+     this.jmxManagerSSLTrustStore= other.getJmxManagerSSLTrustStore();
+     this.jmxManagerSSLTrustStorePassword= other.getJmxManagerSSLTrustStorePassword();
+     this.jmxManagerSslProperties = other.getJmxSSLProperties();
+     this.jmxManagerPort = other.getJmxManagerPort();
+     this.jmxManagerBindAddress = other.getJmxManagerBindAddress();
+     this.jmxManagerHostnameForClients = other.getJmxManagerHostnameForClients();
+     this.jmxManagerPasswordFile = other.getJmxManagerPasswordFile();
+     this.jmxManagerAccessFile = other.getJmxManagerAccessFile();
+     this.jmxManagerHttpPort = other.getJmxManagerHttpPort();
+     this.jmxManagerUpdateRate = other.getJmxManagerUpdateRate();
+     this.memcachedPort = other.getMemcachedPort();
+     this.memcachedProtocol = other.getMemcachedProtocol();
+     this.memcachedBindAddress = other.getMemcachedBindAddress();
+     this.redisPort = other.getRedisPort();
+     this.redisBindAddress = other.getRedisBindAddress();
+     this.redisPassword = other.getRedisPassword();
+     this.userCommandPackages = other.getUserCommandPackages();
+     
+     // following added for 8.0
+     this.enableSharedConfiguration = other.getEnableClusterConfiguration();
+     this.loadSharedConfigurationFromDir = other.getLoadClusterConfigFromDir();
+     this.clusterConfigDir = other.getClusterConfigDir();
+     this.useSharedConfiguration = other.getUseSharedConfiguration();
+     this.serverSSLEnabled = other.getServerSSLEnabled();
+     this.serverSslRequireAuthentication = other.getServerSSLRequireAuthentication();
+     this.serverSslProtocols = other.getServerSSLProtocols();
+     this.serverSslCiphers = other.getServerSSLCiphers();
+     this.serverSSLKeyStore = other.getServerSSLKeyStore();
+     this.serverSSLKeyStoreType= other.getServerSSLKeyStoreType();
+     this.serverSSLKeyStorePassword= other.getServerSSLKeyStorePassword();
+     this.serverSSLTrustStore= other.getServerSSLTrustStore();
+     this.serverSSLTrustStorePassword= other.getServerSSLTrustStorePassword();
+     this.serverSslProperties = other.getServerSSLProperties();
+     
+     this.gatewaySSLEnabled = other.getGatewaySSLEnabled();
+     this.gatewaySslRequireAuthentication = other.getGatewaySSLRequireAuthentication();
+     this.gatewaySslProtocols = other.getGatewaySSLProtocols();
+     this.gatewaySslCiphers = other.getGatewaySSLCiphers();
+     this.gatewaySSLKeyStore = other.getGatewaySSLKeyStore();
+     this.gatewaySSLKeyStoreType= other.getGatewaySSLKeyStoreType();
+     this.gatewaySSLKeyStorePassword= other.getGatewaySSLKeyStorePassword();
+     this.gatewaySSLTrustStore= other.getGatewaySSLTrustStore();
+     this.gatewaySSLTrustStorePassword= other.getGatewaySSLTrustStorePassword();
+     this.gatewaySslProperties = other.getGatewaySSLProperties();
+     
+     this.httpServicePort = other.getHttpServicePort();
+     this.httpServiceBindAddress = other.getHttpServiceBindAddress();
+     
+     this.httpServiceSSLEnabled = other.getHttpServiceSSLEnabled();
+     this.httpServiceSSLCiphers = other.getHttpServiceSSLCiphers();
+     this.httpServiceSSLProtocols = other.getHttpServiceSSLProtocols();
+     this.httpServiceSSLRequireAuthentication = other.getHttpServiceSSLRequireAuthentication();
+     this.httpServiceSSLKeyStore = other.getHttpServiceSSLKeyStore();
+     this.httpServiceSSLKeyStorePassword = other.getHttpServiceSSLKeyStorePassword();
+     this.httpServiceSSLKeyStoreType = other.getHttpServiceSSLKeyStoreType();
+     this.httpServiceSSLTrustStore = other.getHttpServiceSSLTrustStore();
+     this.httpServiceSSLTrustStorePassword = other.getHttpServiceSSLTrustStorePassword();
+     this.httpServiceSSLProperties = other.getHttpServiceSSLProperties();
+     
+     this.startDevRestApi = other.getStartDevRestApi();
+ 
++    // Following added for 8.2
++    this.securityRestTokenService = other.getSecurityRestTokenService();
++
+     // following added for 9.0
+     this.offHeapMemorySize = other.getOffHeapMemorySize();
+     
+     Map<String, ConfigSource> otherSources = ((DistributionConfigImpl)other).sourceMap;
+     if (otherSources != null) {
+       this.sourceMap = new HashMap<String, ConfigSource>(otherSources);
+     }
+     
+     this.lockMemory = other.getLockMemory();
+     this.distributedTransactions = other.getDistributedTransactions();
+   }
+ 
+   /**
+    * Set to true to make attributes writable.
+    * Set to false to make attributes read only.
+    * By default they are read only.
+    */
+   protected boolean modifiable = false;
+ 
+   @Override
+   protected boolean _modifiableDefault() {
+     return modifiable;
+   }
+ 
+   /**
+    * Creates a default application config. Does not read any
+    * properties. Currently only used by DistributionConfigImpl.main.
+    */
+   private DistributionConfigImpl() {
+     // do nothing. We just want a default config
+   }
+ 
+   /**
+    * Creates a new <code>DistributionConfigImpl</code> with the given
+    * non-default configuration properties.  See {@link
+    * com.gemstone.gemfire.distributed.DistributedSystem#connect} for a
+    * list of exceptions that may be thrown.
+    *
+    * @param nonDefault
+    *        The configuration properties specified by the caller
+    */
+   public DistributionConfigImpl(Properties nonDefault) {
+     this(nonDefault, false, false);
+   }
+ 
+   /**
+    * Creates a new <code>DistributionConfigImpl</code> with the given
+    * non-default configuration properties. See
+    * {@link com.gemstone.gemfire.distributed.DistributedSystem#connect} for a
+    * list of exceptions that may be thrown.
+    * 
+    * @param nonDefault
+    *          The configuration properties specified by the caller
+    * @param ignoreGemFirePropsFile
+    *          whether to skip loading distributed system properties from
+    *          gemfire.properties file
+    *          
+    * @since 6.5
+    */
+   
+   public DistributionConfigImpl(Properties nonDefault, 
+       boolean ignoreGemFirePropsFile) {
+     this(nonDefault, ignoreGemFirePropsFile, false);
+   }
+   
+   /**
+    * Creates a new <code>DistributionConfigImpl</code> with the given
+    * non-default configuration properties. See
+    * {@link com.gemstone.gemfire.distributed.DistributedSystem#connect} for a
+    * list of exceptions that may be thrown.
+    * 
+    * @param nonDefault
+    *          The configuration properties specified by the caller
+    * @param ignoreGemFirePropsFile
+    *          whether to skip loading distributed system properties from
+    *          gemfire.properties file
+    * @param isConnected
+    *          whether to skip Validation for SSL properties and copy of ssl
+    *          properties to other ssl properties. This parameter will be used
+    *          till we provide support for ssl-* properties.
+    * 
+    * @since 8.0
+    */
+   public DistributionConfigImpl(Properties nonDefault, 
+                                 boolean ignoreGemFirePropsFile, boolean isConnected) {
+     HashMap props = new HashMap();
+     if (!ignoreGemFirePropsFile) {//For admin bug #40434
+       props.putAll(loadPropertiesFromURL(DistributedSystem.getPropertyFileURL(), false));
+     }
+     props.putAll(loadPropertiesFromURL(DistributedSystem.getSecurityPropertiesFileURL(), true));
+ 
+     // Now override values picked up from the file with values passed
+     // in from the caller's code
+     if (nonDefault != null) {
+       props.putAll(nonDefault);
+       setSource(nonDefault, ConfigSource.api());
+     }
+     //Now remove all user defined properties from props.
+     for (Object entry : props.entrySet()) {
+       Map.Entry<String, String> ent = (Map.Entry<String, String>)entry; 
+       if (((String)ent.getKey()).startsWith(USERDEFINED_PREFIX_NAME)){
+         userDefinedProps.put(ent.getKey(), ent.getValue());
+       }
+     }
+     // Now override values picked up from the file or code with values
+     // from the system properties.
+     String[] attNames = getAttributeNames();
+ 
+     // For gemfire.security-* properties, we will need to look at
+     // all the system properties instead of looping through attNames
+     Set attNameSet = new HashSet();
+     for (int index = 0; index < attNames.length; ++index) {
+       attNameSet.add(GEMFIRE_PREFIX + attNames[index]);
+     }
+ 
+     /* clone() is a synchronized method for Properties (actually in Hashtable) */
+     Properties sysProps = (Properties) System.getProperties().clone();
+     Iterator<?> sysPropsIter = sysProps.entrySet().iterator();
+     while (sysPropsIter.hasNext()) {
+       Map.Entry sysEntry = (Map.Entry)sysPropsIter.next();
+       String sysName = (String)sysEntry.getKey();
+       if (attNameSet.contains(sysName)
+           || sysName.startsWith(GEMFIRE_PREFIX + SECURITY_PREFIX_NAME)
+           || sysName.startsWith(GEMFIRE_PREFIX + SSL_SYSTEM_PROPS_NAME)) {
+         String sysValue = (String)sysEntry.getValue();
+         if (sysValue != null) {
+           String attName = sysName.substring(GEMFIRE_PREFIX.length());
+           props.put(attName, sysValue);
+           this.sourceMap.put(attName, ConfigSource.sysprop());
+         }
+       }
+     }
+     sysProps.clear(); //clearing cloned SysProps
+     
+     final Properties overriddenDefaults = ProcessLauncherContext.getOverriddenDefaults();
+     if (!overriddenDefaults.isEmpty()) {
+       for (String key : overriddenDefaults.stringPropertyNames()) {
+         // only apply the overridden default if it's not already specified in props
+         final String property = key.substring(ProcessLauncherContext.OVERRIDDEN_DEFAULTS_PREFIX.length());
+         if (!props.containsKey((property))) {
+           props.put(property, overriddenDefaults.getProperty(key));
+           this.sourceMap.put(property, ConfigSource.launcher());
+         }
+       }
+     }
+     
+     // this is case of locator and DS is started through
+     // Locator.startLocatorAndDS, In this case I don't need to validate SSL
+     // properties. This fix is till the time we support SSL properties. Once SSl
+     // properties is depprecated, boolean isConnected will be removed
+     if (!isConnected) {
+       validateOldSSLVsNewSSLProperties(props);
+     }
+     initialize(props);
+ 
+     if (securityPeerAuthInit != null && securityPeerAuthInit.length() > 0) {
+       System.setProperty(SECURITY_SYSTEM_PREFIX + SECURITY_PEER_AUTH_INIT_NAME,
+           securityPeerAuthInit);
+     }
+     if (securityPeerAuthenticator != null
+         && securityPeerAuthenticator.length() > 0) {
+       System.setProperty(SECURITY_SYSTEM_PREFIX
+           + SECURITY_PEER_AUTHENTICATOR_NAME, securityPeerAuthenticator);
+     }
+ 
+     Iterator iter = security.entrySet().iterator();
+     while (iter.hasNext()) {
+       Map.Entry entry = (Map.Entry)iter.next();
+       System.setProperty(SECURITY_SYSTEM_PREFIX + (String)entry.getKey(),
+           (String)entry.getValue());
+     }
+     computeMcastPortDefault();
+     if (!isConnected) {
+       copySSLPropsToClusterSSLProps();
+       copySSLPropsToServerSSLProps();
+       copySSLPropsToJMXSSLProps();
+       copyClusterSSLPropsToGatewaySSLProps();
+       copySSLPropsToHTTPSSLProps();
+     }
+   }
+   
+   private void validateOldSSLVsNewSSLProperties(Map props) {
+     String sslEnabledString = (String)props.get(SSL_ENABLED_NAME);
+     String clusterSSLEnabledString =(String)props.get(CLUSTER_SSL_ENABLED_NAME);
+     if(sslEnabledString != null && clusterSSLEnabledString != null){
+       boolean sslEnabled = new Boolean(sslEnabledString).booleanValue();
+       boolean clusterSSLEnabled =new Boolean(clusterSSLEnabledString).booleanValue();
+       if (sslEnabled != DEFAULT_SSL_ENABLED
+           && clusterSSLEnabled != DEFAULT_CLUSTER_SSL_ENABLED) {
+         throw new IllegalArgumentException(
+             "Gemfire property \'ssl-enabled\' and \'cluster-ssl-enabled\' can not be used at the same time. Prefer way is to use all \'cluster-ssl*\' properties instead of \'ssl-*\'.");
+       }
+     }
+     
+     String sslCipher = (String)props.get(SSL_CIPHERS_NAME);
+     String clusterSSLCipher = (String)props.get(CLUSTER_SSL_CIPHERS_NAME);
+     if (sslCipher != null && sslCipher != DEFAULT_SSL_CIPHERS
+         && clusterSSLCipher != null && clusterSSLCipher != DEFAULT_CLUSTER_SSL_CIPHERS) {
+       throw new IllegalArgumentException(
+           "Gemfire property \'ssl-cipher\' and \'cluster-ssl-cipher\' can not be used at the same time. Prefer way is to use all \'cluster-ssl*\' properties instead of \'ssl-*\'.");
+     }
+ 
+     String sslProtocol = (String)props.get(SSL_PROTOCOLS_NAME);
+     String clusterSSLProtocol = (String)props.get(CLUSTER_SSL_PROTOCOLS_NAME);
+     if (sslProtocol != null && sslProtocol != DEFAULT_SSL_PROTOCOLS
+         && clusterSSLProtocol != null && clusterSSLProtocol != DEFAULT_CLUSTER_SSL_PROTOCOLS ) {
+       throw new IllegalArgumentException(
+           "Gemfire property \'ssl-protocols\' and \'cluster-ssl-protocols\' can not be used at the same time. Prefer way is to use all \'cluster-ssl*\' properties instead of \'ssl-*\'.");
+     }
+     
+     String sslReqAuthString = (String)props.get(SSL_REQUIRE_AUTHENTICATION_NAME);
+     String clusterReqAuthString =(String)props.get(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME);
+     if(sslReqAuthString != null && clusterReqAuthString != null){
+       boolean sslReqAuth = new Boolean(sslReqAuthString).booleanValue();
+       boolean clusterSSLReqAuth =new Boolean(clusterReqAuthString).booleanValue();
+       if (sslReqAuth != DEFAULT_SSL_REQUIRE_AUTHENTICATION
+           && clusterSSLReqAuth != DEFAULT_CLUSTER_SSL_REQUIRE_AUTHENTICATION) {
+         throw new IllegalArgumentException(
+             "Gemfire property \'ssl-require-authentication\' and \'cluster-ssl-require-authentication\' can not be used at the same time. Prefer way is to use all \'cluster-ssl*\' properties instead of \'ssl-*\'.");
+       }
+     }
+     
+     String jmxSSLString = (String)props.get(JMX_MANAGER_SSL_NAME);
+     String jmxSSLEnabledString =(String)props.get(JMX_MANAGER_SSL_ENABLED_NAME);
+     if(jmxSSLString != null && jmxSSLEnabledString != null){
+       boolean jmxSSL = new Boolean(jmxSSLString).booleanValue();
+       boolean jmxSSLEnabled =new Boolean(jmxSSLEnabledString).booleanValue();
+       if (jmxSSL != DEFAULT_SSL_ENABLED
+           && jmxSSLEnabled != DEFAULT_CLUSTER_SSL_ENABLED) {
+         throw new IllegalArgumentException(
+             "Gemfire property \'jmx-manager-ssl\' and \'jmx-manager-ssl-enabled\' can not be used at the same time. Prefer way is to use \'jmx-manager-ssl-enabled\' instead of \'jmx-manager-ssl\'.");
+       }
+     }
+   }
+   
+   /*
+    * ssl-* properties will be copied in cluster-ssl-* properties. Socket is using cluster-ssl-* properties
+    */
+   private void copySSLPropsToClusterSSLProps() {
+     boolean clusterSSLOverriden = this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME)!=null;
+     boolean p2pSSLOverRidden = this.sourceMap.get(SSL_ENABLED_NAME)!=null;
+     
+     if(p2pSSLOverRidden && !clusterSSLOverriden) {
+       this.clusterSSLEnabled  = this.sslEnabled;
+       this.sourceMap.put(CLUSTER_SSL_ENABLED_NAME,this.sourceMap.get(SSL_ENABLED_NAME));
+       
+       if(this.sourceMap.get(SSL_CIPHERS_NAME)!=null) {
+         this.clusterSSLCiphers = this.sslCiphers;
+         this.sourceMap.put(CLUSTER_SSL_CIPHERS_NAME,this.sourceMap.get(SSL_CIPHERS_NAME));
+       }
+       
+       if(this.sourceMap.get(SSL_PROTOCOLS_NAME)!=null) {
+         this.clusterSSLProtocols = this.sslProtocols;
+         this.sourceMap.put(CLUSTER_SSL_PROTOCOLS_NAME,this.sourceMap.get(SSL_PROTOCOLS_NAME));
+       }
+       
+       if(this.sourceMap.get(SSL_REQUIRE_AUTHENTICATION_NAME)!=null) {
+         this.clusterSSLRequireAuthentication = this.sslRequireAuthentication;
+         this.sourceMap.put(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME,this.sourceMap.get(SSL_REQUIRE_AUTHENTICATION_NAME));
+       }      
+       this.clusterSSLProperties.putAll(this.sslProperties);
+     }  
+   }
+   
+   /*
+    * if jmx-manager-ssl is true and jmx-manager-ssl-enabled is false then override jmx-manager-ssl-enabled with jmx-manager-ssl
+    * if jmx-manager-ssl-enabled is false, then use the properties from cluster-ssl-* properties
+    * if jmx-manager-ssl-*properties are given then use them, and copy the unspecified jmx-manager properties from cluster-properties 
+    */
+   private void copySSLPropsToJMXSSLProps() {
+     boolean jmxSSLEnabledOverriden = this.sourceMap.get(JMX_MANAGER_SSL_ENABLED_NAME)!=null;
+     boolean jmxSSLOverriden = this.sourceMap.get(JMX_MANAGER_SSL_NAME)!=null;
+     boolean clusterSSLOverRidden = this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME)!=null;
+     
+     if(jmxSSLOverriden && !jmxSSLEnabledOverriden) {
+       this.jmxManagerSSLEnabled  = this.jmxManagerSSL;
+       this.sourceMap.put(JMX_MANAGER_SSL_ENABLED_NAME,this.sourceMap.get(JMX_MANAGER_SSL_NAME));
+     }
+     
+     if(clusterSSLOverRidden && !jmxSSLOverriden && !jmxSSLEnabledOverriden) {
+       this.jmxManagerSSLEnabled  = this.clusterSSLEnabled;
+       this.sourceMap.put(JMX_MANAGER_SSL_ENABLED_NAME,this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME));
+       if(this.sourceMap.get(CLUSTER_SSL_CIPHERS_NAME)!=null) {
+         this.jmxManagerSslCiphers = this.clusterSSLCiphers;
+         this.sourceMap.put(JMX_MANAGER_SSL_CIPHERS_NAME,this.sourceMap.get(CLUSTER_SSL_CIPHERS_NAME));
+       }
+       
+       if(this.sourceMap.get(CLUSTER_SSL_PROTOCOLS_NAME)!=null) {
+         this.jmxManagerSslProtocols = this.clusterSSLProtocols;
+         this.sourceMap.put(JMX_MANAGER_SSL_PROTOCOLS_NAME,this.sourceMap.get(CLUSTER_SSL_PROTOCOLS_NAME));
+       }
+       
+       if(this.sourceMap.get(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME)!=null) {
+         this.jmxManagerSslRequireAuthentication = this.clusterSSLRequireAuthentication;
+         this.sourceMap.put(JMX_MANAGER_SSL_REQUIRE_AUTHENTICATION_NAME,this.sourceMap.get(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME));
+       }      
+ 
+       if(this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME)!=null) {
+         this.jmxManagerSSLKeyStore = this.clusterSSLKeyStore;
+         this.sourceMap.put(JMX_MANAGER_SSL_KEYSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME)!=null) {
+         this.jmxManagerSSLKeyStoreType = this.clusterSSLKeyStoreType;
+         this.sourceMap.put(JMX_MANAGER_SSL_KEYSTORE_TYPE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME)!=null) {
+         this.jmxManagerSSLKeyStorePassword = this.clusterSSLKeyStorePassword;
+         this.sourceMap.put(JMX_MANAGER_SSL_KEYSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME)!=null) {
+         this.jmxManagerSSLTrustStore= this.clusterSSLTrustStore;
+         this.sourceMap.put(JMX_MANAGER_SSL_TRUSTSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME)!=null) {
+         this.jmxManagerSSLTrustStorePassword= this.clusterSSLTrustStorePassword;
+         this.sourceMap.put(JMX_MANAGER_SSL_TRUSTSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME));
+       }
+       this.jmxManagerSslProperties.putAll(this.clusterSSLProperties);
+     }   
+     
+     if(jmxSSLOverriden || jmxSSLEnabledOverriden){
+       if(this.sourceMap.get(JMX_MANAGER_SSL_KEYSTORE_NAME)==null && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME) != null) {
+         this.jmxManagerSSLKeyStore = this.clusterSSLKeyStore;
+         this.sourceMap.put(JMX_MANAGER_SSL_KEYSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME));
+       }
+       if(this.sourceMap.get(JMX_MANAGER_SSL_KEYSTORE_TYPE_NAME)==null && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME) != null) {
+         this.jmxManagerSSLKeyStoreType = this.clusterSSLKeyStoreType;
+         this.sourceMap.put(JMX_MANAGER_SSL_KEYSTORE_TYPE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME));
+       }
+       if(this.sourceMap.get(JMX_MANAGER_SSL_KEYSTORE_PASSWORD_NAME)==null && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME) != null) {
+         this.jmxManagerSSLKeyStorePassword = this.clusterSSLKeyStorePassword;
+         this.sourceMap.put(JMX_MANAGER_SSL_KEYSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME));
+       }
+       if(this.sourceMap.get(JMX_MANAGER_SSL_TRUSTSTORE_NAME)==null && this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME) != null) {
+         this.jmxManagerSSLTrustStore= this.clusterSSLTrustStore;
+         this.sourceMap.put(JMX_MANAGER_SSL_TRUSTSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME));
+       }
+       if(this.sourceMap.get(JMX_MANAGER_SSL_TRUSTSTORE_PASSWORD_NAME)==null && this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME) != null) {
+         this.jmxManagerSSLTrustStorePassword= this.clusterSSLTrustStorePassword;
+         this.sourceMap.put(JMX_MANAGER_SSL_TRUSTSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME));
+       }
+     }
+   
+   }
+   
+   /*
+    * if http-service-ssl-enabled is false, then use the properties from cluster-ssl-* properties
+    * if http-service-ssl-*properties are given then use them, and copy the unspecified http-service properties from cluster-properties 
+    */
+   private void copySSLPropsToHTTPSSLProps() {
+     boolean httpServiceSSLEnabledOverriden = this.sourceMap.get(HTTP_SERVICE_SSL_ENABLED_NAME) != null;
+ 
+     boolean clusterSSLOverRidden = this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME) != null;
+ 
+     if (clusterSSLOverRidden && !httpServiceSSLEnabledOverriden) {
+       this.httpServiceSSLEnabled = this.clusterSSLEnabled;
+       this.sourceMap.put(HTTP_SERVICE_SSL_ENABLED_NAME, this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME));
+ 
+       if (this.sourceMap.get(CLUSTER_SSL_CIPHERS_NAME) != null) {
+         this.httpServiceSSLCiphers = this.clusterSSLCiphers;
+         this.sourceMap.put(HTTP_SERVICE_SSL_CIPHERS_NAME, this.sourceMap.get(CLUSTER_SSL_CIPHERS_NAME));
+       }
+ 
+       if (this.sourceMap.get(CLUSTER_SSL_PROTOCOLS_NAME) != null) {
+         this.httpServiceSSLProtocols = this.clusterSSLProtocols;
+         this.sourceMap.put(HTTP_SERVICE_SSL_PROTOCOLS_NAME, this.sourceMap.get(CLUSTER_SSL_PROTOCOLS_NAME));
+       }
+ 
+       if (this.sourceMap.get(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME) != null) {
+         this.httpServiceSSLRequireAuthentication = this.clusterSSLRequireAuthentication;
+         this.sourceMap.put(HTTP_SERVICE_SSL_REQUIRE_AUTHENTICATION_NAME,
+             this.sourceMap.get(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME));
+       }
+ 
+       if (this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME) != null) {
+         this.httpServiceSSLKeyStore = this.clusterSSLKeyStore;
+         this.sourceMap.put(HTTP_SERVICE_SSL_KEYSTORE_NAME, this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME));
+       }
+       if (this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME) != null) {
+         this.httpServiceSSLKeyStoreType = this.clusterSSLKeyStoreType;
+         this.sourceMap.put(HTTP_SERVICE_SSL_KEYSTORE_TYPE_NAME, this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME));
+       }
+       if (this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME) != null) {
+         this.httpServiceSSLKeyStorePassword = this.clusterSSLKeyStorePassword;
+         this.sourceMap.put(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD_NAME,
+             this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME));
+       }
+       if (this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME) != null) {
+         this.httpServiceSSLTrustStore = this.clusterSSLTrustStore;
+         this.sourceMap.put(HTTP_SERVICE_SSL_TRUSTSTORE_NAME, this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME));
+       }
+       if (this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME) != null) {
+         this.httpServiceSSLTrustStorePassword = this.clusterSSLTrustStorePassword;
+         this.sourceMap.put(HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD_NAME,
+             this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME));
+       }
+       this.httpServiceSSLProperties.putAll(this.clusterSSLProperties);
+     }
+ 
+     if (httpServiceSSLEnabledOverriden) {
+       if (this.sourceMap.get(HTTP_SERVICE_SSL_KEYSTORE_NAME) == null
+           && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME) != null) {
+         this.httpServiceSSLKeyStore = this.clusterSSLKeyStore;
+         this.sourceMap.put(HTTP_SERVICE_SSL_KEYSTORE_NAME, this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME));
+       }
+       if (this.sourceMap.get(HTTP_SERVICE_SSL_KEYSTORE_TYPE_NAME) == null
+           && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME) != null) {
+         this.httpServiceSSLKeyStoreType = this.clusterSSLKeyStoreType;
+         this.sourceMap.put(HTTP_SERVICE_SSL_KEYSTORE_TYPE_NAME, this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME));
+       }
+       if (this.sourceMap.get(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD_NAME) == null
+           && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME) != null) {
+         this.httpServiceSSLKeyStorePassword = this.clusterSSLKeyStorePassword;
+         this.sourceMap.put(HTTP_SERVICE_SSL_KEYSTORE_PASSWORD_NAME,
+             this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME));
+       }
+       if (this.sourceMap.get(HTTP_SERVICE_SSL_TRUSTSTORE_NAME) == null
+           && this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME) != null) {
+         this.httpServiceSSLTrustStore = this.clusterSSLTrustStore;
+         this.sourceMap.put(HTTP_SERVICE_SSL_TRUSTSTORE_NAME, this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME));
+       }
+       if (this.sourceMap.get(HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD_NAME) == null
+           && this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME) != null) {
+         this.httpServiceSSLTrustStorePassword = this.clusterSSLTrustStorePassword;
+         this.sourceMap.put(HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD_NAME,
+             this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME));
+       }
+     }
+   
+   }
+ 
+   /*
+    * if server-ssl-enabled is false, then use the properties from cluster-ssl-* properties
+    * if server-ssl-*properties are given then use them, and copy the unspecified server properties from cluster-properties 
+    */
+   private void copySSLPropsToServerSSLProps() {
+     boolean cacheServerSSLOverriden = this.sourceMap.get(SERVER_SSL_ENABLED_NAME)!=null;
+     boolean clusterSSLOverRidden = this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME)!=null;
+     
+     if(clusterSSLOverRidden && !cacheServerSSLOverriden) {
+       this.serverSSLEnabled  = this.clusterSSLEnabled;
+       this.sourceMap.put(SERVER_SSL_ENABLED_NAME,this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME));
+       if(this.sourceMap.get(CLUSTER_SSL_CIPHERS_NAME)!=null) {
+         this.serverSslCiphers = this.clusterSSLCiphers;
+         this.sourceMap.put(SERVER_SSL_CIPHERS_NAME,this.sourceMap.get(CLUSTER_SSL_CIPHERS_NAME));
+       }
+       
+       if(this.sourceMap.get(CLUSTER_SSL_PROTOCOLS_NAME)!=null) {
+         this.serverSslProtocols = this.clusterSSLProtocols;
+         this.sourceMap.put(SERVER_SSL_PROTOCOLS_NAME,this.sourceMap.get(CLUSTER_SSL_PROTOCOLS_NAME));
+       }
+       
+       if(this.sourceMap.get(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME)!=null) {
+         this.serverSslRequireAuthentication = this.clusterSSLRequireAuthentication;
+         this.sourceMap.put(SERVER_SSL_REQUIRE_AUTHENTICATION_NAME,this.sourceMap.get(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME));
+       }      
+ 
+       if(this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME)!=null) {
+         this.serverSSLKeyStore = this.clusterSSLKeyStore;
+         this.sourceMap.put(SERVER_SSL_KEYSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME)!=null) {
+         this.serverSSLKeyStoreType = this.clusterSSLKeyStoreType;
+         this.sourceMap.put(SERVER_SSL_KEYSTORE_TYPE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME)!=null) {
+         this.serverSSLKeyStorePassword = this.clusterSSLKeyStorePassword;
+         this.sourceMap.put(SERVER_SSL_KEYSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME)!=null) {
+         this.serverSSLTrustStore= this.clusterSSLTrustStore;
+         this.sourceMap.put(SERVER_SSL_TRUSTSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME)!=null) {
+         this.serverSSLTrustStorePassword= this.clusterSSLTrustStorePassword;
+         this.sourceMap.put(SERVER_SSL_TRUSTSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME));
+       }
+       this.serverSslProperties.putAll(this.clusterSSLProperties);
+     }   
+     
+     if(cacheServerSSLOverriden){
+       if(this.sourceMap.get(SERVER_SSL_KEYSTORE_NAME)==null && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME) != null) {
+         this.serverSSLKeyStore = this.clusterSSLKeyStore;
+         this.sourceMap.put(SERVER_SSL_KEYSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME));
+       }
+       if(this.sourceMap.get(SERVER_SSL_KEYSTORE_TYPE_NAME)==null && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME) != null) {
+         this.serverSSLKeyStoreType = this.clusterSSLKeyStoreType;
+         this.sourceMap.put(SERVER_SSL_KEYSTORE_TYPE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME));
+       }
+       if(this.sourceMap.get(SERVER_SSL_KEYSTORE_PASSWORD_NAME)==null && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME) != null) {
+         this.serverSSLKeyStorePassword = this.clusterSSLKeyStorePassword;
+         this.sourceMap.put(SERVER_SSL_KEYSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME));
+       }
+       if(this.sourceMap.get(SERVER_SSL_TRUSTSTORE_NAME)==null && this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME) != null) {
+         this.serverSSLTrustStore= this.clusterSSLTrustStore;
+         this.sourceMap.put(SERVER_SSL_TRUSTSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME));
+       }
+       if(this.sourceMap.get(SERVER_SSL_TRUSTSTORE_PASSWORD_NAME)==null && this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME) != null) {
+         this.serverSSLTrustStorePassword= this.clusterSSLTrustStorePassword;
+         this.sourceMap.put(SERVER_SSL_TRUSTSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME));
+       }
+     }
+   }
+ 
+   /*
+    * if gateway-ssl-enabled is false, then use the properties from cluster-ssl-* properties
+    * if gateway-ssl-*properties are given then use them, and copy the unspecified gateway properties from cluster-properties 
+    */
+   private void copyClusterSSLPropsToGatewaySSLProps() {
+     boolean gatewaySSLOverriden = this.sourceMap.get(GATEWAY_SSL_ENABLED_NAME)!=null;
+     boolean clusterSSLOverRidden = this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME)!=null;
+     
+     if(clusterSSLOverRidden && !gatewaySSLOverriden) {
+       this.gatewaySSLEnabled  = this.clusterSSLEnabled;
+       this.sourceMap.put(GATEWAY_SSL_ENABLED_NAME,this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME));
+       if(this.sourceMap.get(CLUSTER_SSL_CIPHERS_NAME)!=null) {
+         this.gatewaySslCiphers = this.clusterSSLCiphers;
+         this.sourceMap.put(GATEWAY_SSL_CIPHERS_NAME,this.sourceMap.get(CLUSTER_SSL_CIPHERS_NAME));
+       }
+       
+       if(this.sourceMap.get(CLUSTER_SSL_PROTOCOLS_NAME)!=null) {
+         this.gatewaySslProtocols = this.clusterSSLProtocols;
+         this.sourceMap.put(GATEWAY_SSL_PROTOCOLS_NAME,this.sourceMap.get(CLUSTER_SSL_PROTOCOLS_NAME));
+       }
+       
+       if(this.sourceMap.get(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME)!=null) {
+         this.gatewaySslRequireAuthentication = this.clusterSSLRequireAuthentication;
+         this.sourceMap.put(GATEWAY_SSL_REQUIRE_AUTHENTICATION_NAME,this.sourceMap.get(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME));
+       }      
+ 
+       if(this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME)!=null) {
+         this.gatewaySSLKeyStore = this.clusterSSLKeyStore;
+         this.sourceMap.put(GATEWAY_SSL_KEYSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME)!=null) {
+         this.gatewaySSLKeyStoreType = this.clusterSSLKeyStoreType;
+         this.sourceMap.put(GATEWAY_SSL_KEYSTORE_TYPE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME)!=null) {
+         this.gatewaySSLKeyStorePassword = this.clusterSSLKeyStorePassword;
+         this.sourceMap.put(GATEWAY_SSL_KEYSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME)!=null) {
+         this.gatewaySSLTrustStore= this.clusterSSLTrustStore;
+         this.sourceMap.put(GATEWAY_SSL_TRUSTSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME));
+       }
+       if(this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME)!=null) {
+         this.gatewaySSLTrustStorePassword= this.clusterSSLTrustStorePassword;
+         this.sourceMap.put(GATEWAY_SSL_TRUSTSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME));
+       }
+       this.gatewaySslProperties.putAll(this.clusterSSLProperties);
+     }   
+     
+     if(gatewaySSLOverriden){
+       if(this.sourceMap.get(GATEWAY_SSL_KEYSTORE_NAME)==null && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME) != null) {
+         this.gatewaySSLKeyStore = this.clusterSSLKeyStore;
+         this.sourceMap.put(GATEWAY_SSL_KEYSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_NAME));
+       }
+       if(this.sourceMap.get(GATEWAY_SSL_KEYSTORE_TYPE_NAME)==null && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME) != null) {
+         this.gatewaySSLKeyStoreType = this.clusterSSLKeyStoreType;
+         this.sourceMap.put(GATEWAY_SSL_KEYSTORE_TYPE_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_TYPE_NAME));
+       }
+       if(this.sourceMap.get(GATEWAY_SSL_KEYSTORE_PASSWORD_NAME)==null && this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME) != null) {
+         this.gatewaySSLKeyStorePassword = this.clusterSSLKeyStorePassword;
+         this.sourceMap.put(GATEWAY_SSL_KEYSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME));
+       }
+       if(this.sourceMap.get(GATEWAY_SSL_TRUSTSTORE_NAME)==null && this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME)!= null) {
+         this.gatewaySSLTrustStore= this.clusterSSLTrustStore;
+         this.sourceMap.put(GATEWAY_SSL_TRUSTSTORE_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_NAME));
+       }
+       if(this.sourceMap.get(GATEWAY_SSL_TRUSTSTORE_PASSWORD_NAME)==null && this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME) != null) {
+         this.gatewaySSLTrustStorePassword= this.clusterSSLTrustStorePassword;
+         this.sourceMap.put(GATEWAY_SSL_TRUSTSTORE_PASSWORD_NAME,this.sourceMap.get(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME));
+       }
+     }
+   }
+   
+   
+   private void computeMcastPortDefault() {
+     // a no-op since multicast discovery has been removed
+     // and the default mcast port is now zero
+     
+ //    ConfigSource cs = getAttSourceMap().get(MCAST_PORT_NAME);
+ //    if (cs == null) {
+ //      String locators = getLocators();
+ //      if (locators != null && !locators.isEmpty()) {
+ //        this.mcastPort = 0; // fixes 46308
+ //      }
+ //    }
+   }
+   
+   /**
+    * Produce a DistributionConfigImpl for the given properties and return it.
+    */
+   public static DistributionConfigImpl produce(Properties props) {
+     if (props != null) {
+       Object o = props.get(DS_CONFIG_NAME);
+       if (o instanceof DistributionConfigImpl) {
+         return (DistributionConfigImpl) o;
+       }
+     }
+     return new DistributionConfigImpl(props, false, false);
+   }
+   
+   /**
+    * Produce a DistributionConfigImpl for the given properties and return it.
+    */
+   public static DistributionConfigImpl produce(Properties props, boolean isConnected) {
+     if (props != null) {
+       Object o = props.get(DS_CONFIG_NAME);
+       if (o instanceof DistributionConfigImpl) {
+         return (DistributionConfigImpl) o;
+       }
+     }
+     return new DistributionConfigImpl(props, false, isConnected);
+   }
+ 
+   public void setApiProps(Properties apiProps) {
+     if (apiProps != null) {
+       setSource(apiProps, ConfigSource.api());
+       this.modifiable = true;
+       Iterator it = apiProps.entrySet().iterator();
+       while (it.hasNext()) {
+         Map.Entry me = (Map.Entry)it.next();
+         String propName = (String)me.getKey();
+         this.props.put(propName, me.getValue());
+         if (specialPropName(propName)) {
+           continue;
+         }
+         String propVal = (String)me.getValue();
+         if (propVal != null) {
+           this.setAttribute(propName, propVal.trim(), this.sourceMap.get(propName));
+         }
+       }
+       computeMcastPortDefault();
+       // Make attributes read only
+       this.modifiable = false;
+     }
+   }
+   
+   public static boolean specialPropName(String propName) {
+     return propName.equalsIgnoreCase(SSL_ENABLED_NAME) ||
+         propName.equalsIgnoreCase(CLUSTER_SSL_ENABLED_NAME) ||
+         propName.equals(SECURITY_PEER_AUTH_INIT_NAME) ||
+         propName.equals(SECURITY_PEER_AUTHENTICATOR_NAME) ||
+         propName.equals(LOG_WRITER_NAME) ||
+         propName.equals(DS_CONFIG_NAME) ||
+         propName.equals(SECURITY_LOG_WRITER_NAME) ||
+         propName.equals(LOG_OUTPUTSTREAM_NAME) ||
+         propName.equals(SECURITY_LOG_OUTPUTSTREAM_NAME);
+   }
+   
+   @Override
+   protected Map<String, ConfigSource> getAttSourceMap() {
+     return this.sourceMap;
+   }
+ 
+   public Properties getUserDefinedProps() {
+     return userDefinedProps;
+   }
+ 
+   /**
+    * Loads the properties from gemfire.properties & gfsecurity.properties files
+    * into given Properties object.
+    * 
+    * @param p
+    *          the Properties to fill in
+    * @throws GemFireIOException
+    *           when error occurs while reading properties file
+    */
+   public static void loadGemFireProperties(Properties p) throws GemFireIOException {
+     loadGemFireProperties(p, false);
+   }
+   
+   /**
+    * Loads the properties from gemfire.properties & gfsecurity.properties files
+    * into given Properties object. if <code>ignoreGemFirePropsFile</code> is
+    * <code>true</code>, properties are not read from gemfire.properties.
+    * 
+    * @param p
+    *          the Properties to fill in
+    * @param ignoreGemFirePropsFile
+    *          whether to ignore properties from gemfire.properties
+    * @throws GemFireIOException
+    *           when error occurs while reading properties file
+    */
+   // Fix for #44924
+   public static void loadGemFireProperties(Properties p, 
+                     boolean ignoreGemFirePropsFile) throws GemFireIOException {
+     if (!ignoreGemFirePropsFile) {
+       loadPropertiesFromURL(p, DistributedSystem.getPropertyFileURL());
+     }
+     // load the security properties file
+     loadPropertiesFromURL(p, DistributedSystem.getSecurityPropertiesFileURL());
+   }
+ 
+   /**
+    * For every key in p mark it as being from the given source.
+    */
+   private void setSource(Properties p, ConfigSource source) {
+     if (source == null) {
+       throw new IllegalArgumentException("Valid ConfigSource must be specified instead of null.");
+     }
+     for (Object k: p.keySet()) {
+       this.sourceMap.put((String)k, source);
+     }
+   }
+   
+   private Properties loadPropertiesFromURL(URL url, boolean secure) {
+     Properties result = new Properties();
+     loadPropertiesFromURL(result, url);
+     if (!result.isEmpty()) {
+       setSource(result, ConfigSource.file(url.toString(), secure));
+     }
+     return result;
+   }
+   
+   private static void loadPropertiesFromURL(Properties p, URL url) {
+     if (url != null) {
+       try {
+         p.load(url.openStream());
+       } catch (IOException io) {
+         throw new GemFireIOException(LocalizedStrings.DistributionConfigImpl_FAILED_READING_0.toLocalizedString(url), io);
+       }
+     }
+   }
+   
+   private void initialize(Map props) {
+     // Allow attributes to be modified
+     this.modifiable = true;
+     this.props = props;
+     Iterator it = props.entrySet().iterator();
+     while (it.hasNext()) {
+       Map.Entry me = (Map.Entry)it.next();
+       String propName = (String)me.getKey();
+       // if ssl-enabled is set to true before the mcast port is set to 0, then it will error.
+       // security should not be enabled before the mcast port is set to 0.
+       if (specialPropName(propName)) {
+         continue;
+       }
+       Object propVal = me.getValue();
+       if (propVal != null  &&  (propVal instanceof String)) { // weed out extraneous non-string properties
+         this.setAttribute(propName, ((String)propVal).trim(), this.sourceMap.get(propName));
+       }
+     }
+     // now set ssl-enabled if needed...
+     if ( props.containsKey(SSL_ENABLED_NAME) ) {
+       this.setAttribute(SSL_ENABLED_NAME, (String) props.get( SSL_ENABLED_NAME ), this.sourceMap.get(SSL_ENABLED_NAME) );
+     }
+     if ( props.containsKey(CLUSTER_SSL_ENABLED_NAME) ) {
+       this.setAttribute(CLUSTER_SSL_ENABLED_NAME, (String) props.get( CLUSTER_SSL_ENABLED_NAME ), this.sourceMap.get(CLUSTER_SSL_ENABLED_NAME) );
+     }
+     // now set the security authInit if needed
+     if (props.containsKey(SECURITY_PEER_AUTH_INIT_NAME)) {
+       this.setAttribute(SECURITY_PEER_AUTH_INIT_NAME, (String)props
+           .get(SECURITY_PEER_AUTH_INIT_NAME),
+           this.sourceMap.get(SECURITY_PEER_AUTH_INIT_NAME));
+     }
+     // and security authenticator if needed
+     if (props.containsKey(SECURITY_PEER_AUTHENTICATOR_NAME)) {
+       this.setAttribute(SECURITY_PEER_AUTHENTICATOR_NAME, (String)props
+           .get(SECURITY_PEER_AUTHENTICATOR_NAME),
+           this.sourceMap.get(SECURITY_PEER_AUTHENTICATOR_NAME));
+     }
+ 
+     // Make attributes read only
+     this.modifiable = false;
+   }
+ 
+   public void close() {
+     // Clear the extra stuff from System properties
+     Properties props = System.getProperties();
+     props.remove(SECURITY_SYSTEM_PREFIX + SECURITY_PEER_AUTH_INIT_NAME);
+     props.remove(SECURITY_SYSTEM_PREFIX + SECURITY_PEER_AUTHENTICATOR_NAME);
+ 
+     Iterator iter = security.keySet().iterator();
+     while (iter.hasNext()) {
+       props.remove(SECURITY_SYSTEM_PREFIX + (String)iter.next());
+     }
+     System.setProperties(props);
+   }
+ 
+   ////////////////////  Configuration Methods  ////////////////////
+ 
+   public String getName() {
+     return this.name;
+   }
+ 
+   public int getTcpPort() {
+     return this.tcpPort;
+   }
+ 
+   public int getMcastPort() {
+     return this.mcastPort;
+   }
+   public int getMcastTtl() {
+     return this.mcastTtl;
+   }
+   public int getSocketLeaseTime() {
+     return this.socketLeaseTime;
+   }
+   public int getSocketBufferSize() {
+     return this.socketBufferSize;
+   }
+   public boolean getConserveSockets() {
+     return this.conserveSockets;
+   }
+   public String getRoles() {
+     return this.roles;
+   }
+ 
+   public int getMaxWaitTimeForReconnect(){
+   return this.maxWaitTimeForReconnect;
+   }
+ 
+   public int getMaxNumReconnectTries(){
+     return this.maxNumReconnectTries;
+   }
+ 
+   public InetAddress getMcastAddress() {
+     try {
+       return this.mcastAddress;
+     }
+     catch (Exception e) {
+       e.printStackTrace();
+       return null;
+     }
+   }
+ 
+   public String getBindAddress() {
+     return this.bindAddress;
+   }
+ 
+   public String getServerBindAddress() {
+     return this.serverBindAddress;
+   }
+ 
+   public String getLocators() {
+     if (this.startLocator != null && this.startLocator.length() > 0) {
+       String locs = this.locators;
+       String startL = getStartLocator();
+       int comma = startL.indexOf(',');
+       if (comma >= 0) {
+         startL = startL.substring(0, comma);
+       }
+       if (locs.length() > 0) {
+         if (locs.contains(startL)) {
+           return locs; // fix for bug 43929
+         }
+         return locs + "," + startL;
+       } else {
+         return startL;
+       }
+     }
+     return this.locators;
+   }
+ 
+   public String getStartLocator() {
+     if (this.startLocatorPort > 0) {
+       if (this.bindAddress != null) {
+         return this.bindAddress + "["+this.startLocatorPort+"]";
+       }
+       try {
+         return SocketCreator.getHostName(SocketCreator.getLocalHost()) + "["+this.startLocatorPort+"]";
+       }
+       catch (UnknownHostException e) {
+         // punt and use this.startLocator instead
+       }
+     }
+     return this.startLocator;
+   }
+ 
+   public File getDeployWorkingDir() {
+     return this.deployWorkingDir;
+   }
+ 
+   public File getLogFile() {
+     return this.logFile;
+   }
+ 
+   public int getLogLevel() {
+     return this.logLevel;
+   }
+ 
+   public boolean getStatisticSamplingEnabled() {
+     return this.statisticSamplingEnabled;
+   }
+ 
+   public int getStatisticSampleRate() {
+     return this.statisticSampleRate;
+   }
+ 
+   public File getStatisticArchiveFile() {
+     return this.statisticArchiveFile;
+   }
+ 
+   public int getAckWaitThreshold() {
+     return this.ackWaitThreshold;
+   }
+ 
+   public int getAckSevereAlertThreshold() {
+     return this.ackForceDisconnectThreshold;
+   }
+ 
+   public File getCacheXmlFile() {
+     return this.cacheXmlFile;
+   }
+ 
+   public boolean getSSLEnabled( ) {
+     return this.sslEnabled;
+   }
+ 
+   public String getSSLProtocols( ) {
+     return this.sslProtocols;
+   }
+ 
+   public String getSSLCiphers( ) {
+     return this.sslCiphers;
+   }
+ 
+   public boolean getSSLRequireAuthentication( ) {
+     return this.sslRequireAuthentication;
+   }
+ 
+   public boolean getClusterSSLEnabled( ) {
+     return this.clusterSSLEnabled;
+   }
+ 
+   public String getClusterSSLProtocols( ) {
+     return this.clusterSSLProtocols;
+   }
+ 
+   public String getClusterSSLCiphers( ) {
+     return this.clusterSSLCiphers;
+   }
+ 
+   public boolean getClusterSSLRequireAuthentication( ) {
+     return this.clusterSSLRequireAuthentication;
+   }
+   
+   public String getClusterSSLKeyStore( ){
+     return this.clusterSSLKeyStore;
+   }
+   public String getClusterSSLKeyStoreType( ){
+     return this.clusterSSLKeyStoreType;
+   }
+   
+   public String getClusterSSLKeyStorePassword( ){
+     return this.clusterSSLKeyStorePassword;
+   }
+   
+   public String getClusterSSLTrustStore( ){
+     return this.clusterSSLTrustStore;
+   }
+   
+   public String getClusterSSLTrustStorePassword( ){
+     return this.clusterSSLTrustStorePassword;
+   }
+   
+   public int getAsyncDistributionTimeout() {
+     return this.asyncDistributionTimeout;
+   }
+   public int getAsyncQueueTimeout() {
+     return this.asyncQueueTimeout;
+   }
+   public int getAsyncMaxQueueSize() {
+     return this.asyncMaxQueueSize;
+   }
+ 
+   public String getUserCommandPackages() {
+     return this.userCommandPackages;
+   }
+     
+   public int getHttpServicePort() {
+     return this.httpServicePort;
+   }
+ 
+   public void setHttpServicePort(int value) {
+     this.httpServicePort = (Integer)checkAttribute(HTTP_SERVICE_PORT_NAME, value);
+   }
+   
+   public String getHttpServiceBindAddress() {
+     return this.httpServiceBindAddress;
+   }
+   
+   public void setHttpServiceBindAddress(String value) {
+     this.httpServiceBindAddress = (String)checkAttribute(HTTP_SERVICE_BIND_ADDRESS_NAME, value);
+   }
+   
+   public boolean getStartDevRestApi(){
+     return this.startDevRestApi;
+   }
+   
+   public void setStartDevRestApi(boolean value){
+     this.startDevRestApi = value;
+   }
+  
+   public void setUserCommandPackages(String value) {
+     this.userCommandPackages = (String)checkAttribute(USER_COMMAND_PACKAGES, value);
+   }
+ 
+   public boolean getDeltaPropagation() {
+     return this.deltaPropagation;
+   }
+ 
+   public void setDeltaPropagation(boolean value) {
+     this.deltaPropagation = (Boolean)checkAttribute(DELTA_PROPAGATION_PROP_NAME, value);
+   }
+ 
+   public void setName(String value) {
+     if (value == null) {
+       value = DEFAULT_NAME;
+     }
+     this.name = (String)checkAttribute(NAME_NAME, value);
+   }
+   public void setTcpPort(int value) {
+     this.tcpPort = (Integer)checkAttribute(TCP_PORT_NAME, value);
+   }
+   public void setMcastPort(int value) {
+     this.mcastPort = (Integer)checkAttribute(MCAST_PORT_NAME, value);
+   }
+   public void setMcastTtl(int value) {
+     this.mcastTtl = (Integer)checkAttribute(MCAST_TTL_NAME, value);
+   }
+   public void setSocketLeaseTime(int value) {
+     this.socketLeaseTime = (Integer)checkAttribute(SOCKET_LEASE_TIME_NAME, value);
+   }
+   public void setSocketBufferSize(int value) {
+     this.socketBufferSize = (Integer)checkAttribute(SOCKET_BUFFER_SIZE_NAME, value);
+   }
+   public void setConserveSockets(boolean value) {
+     this.conserveSockets = (Boolean)checkAttribute(CONSERVE_SOCKETS_NAME, value);
+   }
+   public void setRoles(String value) {
+     this.roles = (String)checkAttribute(ROLES_NAME, value);
+   }
+ 
+   public void setMaxWaitTimeForReconnect(int value){
+     this.maxWaitTimeForReconnect = value;
+   }
+ 
+   public void setMaxNumReconnectTries(int value){
+     this.maxNumReconnectTries = value;
+   }
+ 
+   public void setMcastAddress(InetAddress value) {
+     this.mcastAddress = (InetAddress)checkAttribute(MCAST_ADDRESS_NAME, value);
+   }
+   public void setBindAddress(String value) {
+     this.bindAddress = (String)checkAttribute(BIND_ADDRESS_NAME, value);
+   }
+   public void setServerBindAddress(String value) {
+     this.serverBindAddress = (String)checkAttribute(SERVER_BIND_ADDRESS_NAME, value);
+   }
+   public void setLocators(String value) {
+     if (value == null) {
+       value = DEFAULT_LOCATORS;
+     }
+     this.locators = (String)checkAttribute(LOCATORS_NAME, value);
+   }
+   
+   public void setLocatorWaitTime(int value) {
+     this.locatorWaitTime = value;
+   }
+   
+   public int getLocatorWaitTime() {
+     return this.locatorWaitTime;
+   }
+   
+   public void setDeployWorkingDir(File value) {
+     this.deployWorkingDir = (File)checkAttribute(DEPLOY_WORKING_DIR, value);
+   }
+   public void setLogFile(File value) {
+     this.logFile = (File)checkAttribute(LOG_FILE_NAME, value);
+   }
+   public void setLogLevel(int value) {
+     this.logLevel = (Integer)checkAttribute(LOG_LEVEL_NAME, value);
+   }
+   /**
+    * the locator startup code must be able to modify the locator log file in order
+    * to establish a default log file if one hasn't been specified by the user.
+    * This method will change the log file, but only in the configuration settings -
+    * it won't affect a running distributed system's log file
+    */
+   public void unsafeSetLogFile(File value) {
+     this.logFile = value;
+   }
+   public void setStartLocator(String value) {
+     startLocatorPort = 0;
+     if (value == null) {
+       value = DEFAULT_START_LOCATOR;
+     }
+     else {
+       // bug 37938 - allow just a port
+       boolean alldigits = true;
+       for (int i=0; i<value.length(); i++) {
+         char c = value.charAt(i);
+         if (!Character.isDigit(c)) {
+           alldigits = false;
+           break;
+         }
+       }
+       if (value.length() > 0 && alldigits) {
+         try {
+           int port = Integer.parseInt(value);
+           if (port < 0 || port > 65535) {
+             throw new GemFireConfigException("Illegal port specified for start-locator");
+           }
+           startLocatorPort = port;
+         }
+         catch (NumberFormatException e) {
+           throw new GemFireConfigException("Illegal port specified for start-locator", e);
+         }
+       }
+       else {
+         value = (String)checkAttribute(START_LOCATOR_NAME, value);
+       }
+     }
+     this.startLocator = value;
+   }
+   public void setStatisticSamplingEnabled(boolean value) {
+     this.statisticSamplingEnabled = (Boolean)checkAttribute(STATISTIC_SAMPLING_ENABLED_NAME, value);
+   }
+   public void setStatisticSampleRate(int value) {
+     value = (Integer)checkAttribute(STATISTIC_SAMPLE_RATE_NAME, value);
+     if (value < DEFAULT_STATISTIC_SAMPLE_RATE) {
+       // fix 48228
+       InternalDistributedSystem ids = InternalDistributedSystem.getConnectedInstance();
+       if (ids != null) {
+         ids.getLogWriter().info("Setting statistic-sample-rate to " + DEFAULT_STATISTIC_SAMPLE_RATE + " instead of the requested " + value + " because VSD does not work with sub-second sampling.");
+       }
+       value = DEFAULT_STATISTIC_SAMPLE_RATE;
+     }
+     this.statisticSampleRate = value;
+   }
+   public void setStatisticArchiveFile(File value) {
+     if (value == null) {
+       value = new File("");
+     }
+     this.statisticArchiveFile = (File)checkAttribute(STATISTIC_ARCHIVE_FILE_NAME, value);
+   }
+   public void setCacheXmlFile(File value) {
+     this.cacheXmlFile = (File)checkAttribute(CACHE_XML_FILE_NAME, value);
+   }
+   public void setAckWaitThreshold(int value) {
+     this.ackWaitThreshold = (Integer)checkAttribute(ACK_WAIT_THRESHOLD_NAME, value);
+   }
+ 
+   public void setAckSevereAlertThreshold(int value) {
+     this.ackForceDisconnectThreshold = (Integer)checkAttribute(ACK_SEVERE_ALERT_THRESHOLD_NAME, value);
+   }
+ 
+   public int getArchiveDiskSpaceLimit() {
+     return this.archiveDiskSpaceLimit;
+   }
+   public void setArchiveDiskSpaceLimit(int value) {
+     this.archiveDiskSpaceLimit = (Integer)checkAttribute(ARCHIVE_DISK_SPACE_LIMIT_NAME, value);
+   }
+   public int getArchiveFileSizeLimit() {
+     return this.archiveFileSizeLimit;
+   }
+   public void setArchiveFileSizeLimit(int value) {
+     this.archiveFileSizeLimit = (Integer)checkAttribute(ARCHIVE_FILE_SIZE_LIMIT_NAME, value);
+   }
+   public int getLogDiskSpaceLimit() {
+     return this.logDiskSpaceLimit;
+   }
+   public void setLogDiskSpaceLimit(int value) {
+     this.logDiskSpaceLimit = (Integer)checkAttribute(LOG_DISK_SPACE_LIMIT_NAME, value);
+   }
+   public int getLogFileSizeLimit() {
+     return this.logFileSizeLimit;
+   }
+   public void setLogFileSizeLimit(int value) {
+     this.logFileSizeLimit = (Integer)checkAttribute(LOG_FILE_SIZE_LIMIT_NAME, value);
+   }
+   public void setSSLEnabled( boolean value ) {
+     this.sslEnabled = (Boolean)checkAttribute(SSL_ENABLED_NAME, value);
+   }
+   public void setSSLProtocols( String value ) {
+     this.sslProtocols = (String)checkAttribute(SSL_PROTOCOLS_NAME, value);
+   }
+   public void setSSLCiphers( String value ) {
+     this.sslCiphers = (String)checkAttribute(SSL_CIPHERS_NAME, value);
+   }
+   public void setSSLRequireAuthentication( boolean value ){
+     this.sslRequireAuthentication = (Boolean)checkAttribute(SSL_REQUIRE_AUTHENTICATION_NAME, value);
+   }
+ 
+   public void setClusterSSLEnabled( boolean value ) {
+     this.clusterSSLEnabled = (Boolean)checkAttribute(CLUSTER_SSL_ENABLED_NAME, value);
+   }
+   public void setClusterSSLProtocols( String value ) {
+     this.clusterSSLProtocols = (String)checkAttribute(CLUSTER_SSL_PROTOCOLS_NAME, value);
+   }
+   public void setClusterSSLCiphers( String value ) {
+     this.clusterSSLCiphers = (String)checkAttribute(CLUSTER_SSL_CIPHERS_NAME, value);
+   }
+   public void setClusterSSLRequireAuthentication( boolean value ){
+     this.clusterSSLRequireAuthentication = (Boolean)checkAttribute(CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME, value);
+   }
+   
+   public void setClusterSSLKeyStore( String value ) {
+     value = (String)checkAttribute(CLUSTER_SSL_KEYSTORE_NAME, value);
+    this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_NAME, value);
+    this.clusterSSLKeyStore = value;
+   }
+   public void setClusterSSLKeyStoreType( String value ) {
+     value =  (String)checkAttribute(CLUSTER_SSL_KEYSTORE_TYPE_NAME, value);
+     this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_TYPE_NAME, value);
+     this.clusterSSLKeyStoreType = value;
+   }
+   public void setClusterSSLKeyStorePassword( String value ) {
+     value = (String)checkAttribute(CLUSTER_SSL_KEYSTORE_PASSWORD_NAME, value);
+     this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + KEY_STORE_PASSWORD_NAME, value);
+     this.clusterSSLKeyStorePassword =value;
+   }
+   public void setClusterSSLTrustStore( String value ) {
+     value = (String)checkAttribute(CLUSTER_SSL_TRUSTSTORE_NAME, value);
+     this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_NAME, value);
+     this.clusterSSLTrustStore = value;
+   }
+   public void setClusterSSLTrustStorePassword( String value ) {
+     value = (String)checkAttribute(CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME, value);
+     this.getClusterSSLProperties().setProperty(SSL_SYSTEM_PROPS_NAME + TRUST_STORE_PASSWORD_NAME, value);
+     this.clusterSSLTrustStorePassword = value;
+   }
+   
+   public int getMcastSendBufferSize() {
+     return mcastSendBufferSize;
+   }
+ 
+   public void setMcastSendBufferSize(int value) {
+     mcastSendBufferSize = (Integer)checkAttribute(MCAST_SEND_BUFFER_SIZE_NAME, value);
+   }
+ 
+   public int getMcastRecvBufferSize() {
+     return mcastRecvBufferSize;
+   }
+ 
+   public void setMcastRecvBufferSize(int value) {
+     mcastRecvBufferSize = (Integer)checkAttribute(MCAST_RECV_BUFFER_SIZE_NAME, value);
+   }
+   public void setAsyncDistributionTimeout(int value) {
+     this.asyncDistributionTimeout = (Integer)checkAttribute(ASYNC_DISTRIBUTION_TIMEOUT_NAME, value);
+   }
+   public void setAsyncQueueTimeout(int value) {
+     this.asyncQueueTimeout = (Integer)checkAttribute(ASYNC_QUEUE_TIMEOUT_NAME, value);
+   }
+   public void setAsyncMaxQueueSize(int value) {
+     this.asyncMaxQueueSize = (Integer)checkAttribute(ASYNC_MAX_QUEUE_SIZE_NAME, value);
+   }
+ 
+   public FlowControlParams getMcastFlowControl() {
+     return mcastFlowControl;
+   }
+ 
+   public void setMcastFlowControl(FlowControlParams values) {
+     mcastFlowControl = (FlowControlParams)checkAttribute(MCAST_FLOW_CONTROL_NAME, values);
+   }
+ 
+   public int getUdpFragmentSize() {
+     return udpFragmentSize;
+   }
+ 
+   public void setUdpFragmentSize(int value) {
+     udpFragmentSize = (Integer)checkAttribute(UDP_FRAGMENT_SIZE_NAME, value);
+   }
+ 
+   public int getUdpSendBufferSize() {
+     return udpSendBufferSize;
+   }
+ 
+   public void setUdpSendBufferSize(int value) {
+     udpSendBufferSize = (Integer)checkAttribute(UDP_SEND_BUFFER_SIZE_NAME, value);
+   }
+ 
+   public int getUdpRecvBufferSize() {
+     return udpRecvBufferSize;
+   }
+ 
+   public void setUdpRecvBufferSize(int value) {
+     udpRecvBufferSize = (Integer)checkAttribute(UDP_RECV_BUFFER_SIZE_NAME, value);
+   }
+ 
+   public boolean getDisableTcp() {
+     return disableTcp;
+   }
+ 
+   public void setDisableTcp(boolean newValue) {
+     disableTcp = newValue;
+   }
+ 
+   public boolean getEnableTimeStatistics() {
+     return enableTimeStatistics;
+   }
+ 
+   public void setEnableTimeStatistics(boolean newValue) {
+     enableTimeStatistics = newValue;
+   }
+ 
+   public int getMemberTimeout() {
+     return memberTimeout;
+   }
+ 
+   public void setMemberTimeout(int value) {
+     memberTimeout = (Integer)checkAttribute(MEMBER_TIMEOUT_NAME, value);
+   }
+ 
+   /** @since 5.7 */
+   public String getClientConflation() {
+     return this.clientConflation;
+   }
+ 
+   /** @since 5.7 */
+   public void setClientConflation(String value) {
+     this.clientConflation = (String)checkAttribute(CLIENT_CONFLATION_PROP_NAME, value);
+   }
+ 
+   public String getDurableClientId() {
+     return durableClientId;
+   }
+ 
+   public void setDurableClientId(String value) {
+     durableClientId = (String)checkAttribute(DURABLE_CLIENT_ID_NAME, value);
+   }
+ 
+   public int getDurableClientTimeout() {
+     return durableClientTimeout;
+   }
+ 
+   public void setDurableClientTimeout(int value) {
+     durableClientTimeout = (Integer)checkAttribute(DURABLE_CLIENT_TIMEOUT_NAME, value);
+   }
+ 
+   public String getSecurityClientAuthInit() {
+     return securityClientAuthInit;
+   }
+ 
+   public void setSecurityClientAuthInit(String value) {
+     securityClientAuthInit = (String)checkAttribute(SECURITY_CLIENT_AUTH_INIT_NAME, value);
+   }
+ 
+   public String getSecurityClientAuthenticator() {
+     return securityClientAuthenticator;
+   }
+ 
++  public String getSecurityRestTokenService() {
++    return securityRestTokenService;
++  }
++
+   public boolean getEnableNetworkPartitionDetection() {
+     return this.enableNetworkPartitionDetection;
+   }
+   public void setEnableNetworkPartitionDetection(boolean value) {
+     this.enableNetworkPartitionDetection = value;
+   }
+   
+   public boolean getDisableAutoReconnect() {
+     return this.disableAutoReconnect;
+   }
+   public void setDisableAutoReconnect(boolean value) {
+     this.disableAutoReconnect = value;
+   }
+ 
+   public void setSecurityClientAuthenticator(String value) {
+     securityClientAuthenticator = (String)checkAttribute(SECURITY_CLIENT_AUTHENTICATOR_NAME, value);
+   }
+ 
++  public void setSecurityRestTokenService(String value) {
++    checkSecurityRestTokenService(value);
++    securityRestTokenService = value;
++  }
++
+   public String getSecurityClientDHAlgo() {
+     return securityClientDHAlgo;
+   }
+ 
+   public void setSecurityClientDHAlgo(String value) {
+     securityClientDHAlgo = (String)checkAttribute(SECURITY_CLIENT_DHALGO_NAME, value);
+   }
+ 
+   public String getSecurityPeerAuthInit() {
+     return securityPeerAuthInit;
+   }
+ 
+   public void setSecurityPeerAuthInit(String value) {
+     securityPeerAuthInit = (String)checkAttribute(SECURITY_PEER_AUTH_INIT_NAME, value);
+   }
+ 
+   public String getSecurityPeerAuthenticator() {
+     return securityPeerAuthenticator;
+   }
+ 
+   public void setSecurityPeerAuthenticator(String value) {
+     securityPeerAuthenticator = (String)checkAttribute(SECURITY_PEER_AUTHENTICATOR_NAME, value);
+   }
+ 
+   public String getSecurityClientAccessor() {
+     return securityClientAccessor;
+   }
+ 
+   public void setSecurityClientAccessor(String value) {
+     securityClientAccessor = (String)checkAttribute(SECURITY_CLIENT_ACCESSOR_NAME, value);
+   }
+ 
+   public String getSecurityClientAccessorPP() {
+     return securityClientAccessorPP;
+   }
+ 
+   public void setSecurityClientAccessorPP(String value) {
+     securityClientAccessorPP = (String)checkAttribute(SECURITY_CLIENT_ACCESSOR_PP_NAME, value);
+   }
+ 
+   public int getSecurityLogLevel() {
+     return securityLogLevel;
+   }
+ 
+   public void setSecurityLogLevel(int value) {
+     securityLogLevel = (Integer)checkAttribute(SECURITY_LOG_LEVEL_NAME, value);
+   }
+ 
+   public File getSecurityLogFile() {
+     return securityLogFile;
+   }
+ 
+   public void setSecurityLogFile(File value) {
+     securityLogFile = (File)checkAttribute(SECURITY_LOG_FILE_NAME, value);
+   }
+ 
+   public int getSecurityPeerMembershipTimeout() {
+     return securityPeerMembershipTimeout;
+   }
+ 
+   public void setSecurityPeerMembershipTimeout(int value) {
+     securityPeerMembershipTimeout = (Integer)checkAttribute(SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME, value);
+   }
+ 
+   public Properties getSecurityProps() {
+     return security;
+   }
+ 
+   public String getSecurity(String attName) {
+ 
+     Stri

<TRUNCATED>


[21/50] [abbrv] incubator-geode git commit: GEODE-979 CI Failure: ParameterBindingJUnitTest.testMultithreadedBindUsingSameQueryObject failed with NullPointerException

Posted by je...@apache.org.
GEODE-979 CI Failure: ParameterBindingJUnitTest.testMultithreadedBindUsingSameQueryObject failed with NullPointerException

LinkedList should not be added to concurrently
Moved some of the latch logic to guarantee that all threads are queued before starting
Added an awaitTerminate call to make sure all threads are done working before returning results


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/d50623b0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/d50623b0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/d50623b0

Branch: refs/heads/feature/GEODE-17
Commit: d50623b04f253b51182114c9fd277db20afeba8b
Parents: 4951bfa
Author: Jason Huynh <hu...@gmail.com>
Authored: Wed Feb 24 14:05:08 2016 -0800
Committer: Jason Huynh <hu...@gmail.com>
Committed: Wed Feb 24 14:58:09 2016 -0800

----------------------------------------------------------------------
 .../gemstone/gemfire/cache/query/MultithreadedTester.java    | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/d50623b0/geode-core/src/test/java/com/gemstone/gemfire/cache/query/MultithreadedTester.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/MultithreadedTester.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/MultithreadedTester.java
index 3142566..adea4a3 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/MultithreadedTester.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/MultithreadedTester.java
@@ -31,14 +31,15 @@ public class MultithreadedTester {
 
   
   public static Collection<Object> runMultithreaded(Collection<Callable> callables) throws InterruptedException {
-    final CountDownLatch allRunnablesAreSubmitted = new CountDownLatch(1);
+    final CountDownLatch allRunnablesAreSubmitted = new CountDownLatch(callables.size());
     final CountDownLatch callablesComplete = new CountDownLatch(callables.size());
     final ExecutorService executor = Executors.newFixedThreadPool(callables.size());
     final LinkedList<Future> futures = new LinkedList<>();
     //Submit all tasks to the executor
-    callables.parallelStream().forEach(callable -> {
+    callables.forEach(callable -> {
       futures.add(executor.submit(() -> {
         try {
+          allRunnablesAreSubmitted.countDown();
           allRunnablesAreSubmitted.await(60, TimeUnit.SECONDS);
           return callable.call();
         }
@@ -50,11 +51,10 @@ public class MultithreadedTester {
         }
       }));
     });
-    //Unlock all tasks
-    allRunnablesAreSubmitted.countDown();
     //Wait until all tasks are complete
     callablesComplete.await(60, TimeUnit.SECONDS);
     executor.shutdown();
+    executor.awaitTermination(60, TimeUnit.SECONDS);
     return convertFutureToResult(futures);
   }
 


[41/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
index 0000000,bf1fdf0..6286bdd
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
@@@ -1,0 -1,1200 +1,1206 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.lang.reflect.Array;
+ import java.text.MessageFormat;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Map.Entry;
+ import java.util.Set;
+ import java.util.TreeSet;
+ import java.util.regex.Pattern;
+ 
+ import javax.management.MBeanServer;
+ import javax.management.MalformedObjectNameException;
+ import javax.management.ObjectName;
+ 
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.LogWriter;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.DataPolicy;
+ import com.gemstone.gemfire.cache.ExpirationAttributes;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.cache.RegionAttributes;
+ import com.gemstone.gemfire.cache.RegionShortcut;
+ import com.gemstone.gemfire.cache.Scope;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.compression.Compressor;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.distributed.internal.DistributionManager;
+ import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+ import com.gemstone.gemfire.internal.ClassPathLoader;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.cache.xmlcache.CacheXml;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.internal.lang.StringUtils;
+ import com.gemstone.gemfire.management.DistributedRegionMXBean;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
+ import com.gemstone.gemfire.management.ManagementService;
+ import com.gemstone.gemfire.management.RegionAttributesData;
+ import com.gemstone.gemfire.management.RegionMXBean;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.cli.Result.Status;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.FetchRegionAttributesFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.FetchRegionAttributesFunction.FetchRegionAttributesFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.RegionAlterFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.RegionCreateFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.RegionDestroyFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.RegionFunctionArgs;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.util.RegionPath;
+ import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
+ import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * 
+  * @author Abhishek Chaudhari
+  * @since 7.0
+  */
+ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport {
+   public static final Set<RegionShortcut> PERSISTENT_OVERFLOW_SHORTCUTS = new TreeSet<RegionShortcut>();
+   
+   static {
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.PARTITION_PERSISTENT);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.PARTITION_REDUNDANT_PERSISTENT);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.PARTITION_OVERFLOW);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.PARTITION_REDUNDANT_OVERFLOW);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.PARTITION_PERSISTENT_OVERFLOW);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.PARTITION_REDUNDANT_PERSISTENT_OVERFLOW);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.REPLICATE_PERSISTENT);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.REPLICATE_OVERFLOW);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.REPLICATE_PERSISTENT_OVERFLOW);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.LOCAL_PERSISTENT);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.LOCAL_OVERFLOW);
+     PERSISTENT_OVERFLOW_SHORTCUTS.add(RegionShortcut.LOCAL_PERSISTENT_OVERFLOW);
+   }
+ 
+   @CliCommand (value = CliStrings.CREATE_REGION, help = CliStrings.CREATE_REGION__HELP)
+   @CliMetaData (relatedTopic = CliStrings.TOPIC_GEMFIRE_REGION, writesToSharedConfiguration = true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.CREATE_REGION)
+   public Result createRegion(
+       @CliOption (key = CliStrings.CREATE_REGION__REGION,
+                   mandatory = true,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__REGION__HELP)
+       String regionPath,
+       @CliOption (key = CliStrings.CREATE_REGION__REGIONSHORTCUT,
+                   mandatory = false,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__REGIONSHORTCUT__HELP)
+       RegionShortcut regionShortcut,
+       @CliOption (key = CliStrings.CREATE_REGION__USEATTRIBUTESFROM,
+                   optionContext = ConverterHint.REGIONPATH,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__USEATTRIBUTESFROM__HELP)
+       String useAttributesFrom, 
+       @CliOption (key = CliStrings.CREATE_REGION__GROUP,
+                   optionContext = ConverterHint.MEMBERGROUP,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",")
+       String[] groups,
+       @CliOption (key = CliStrings.CREATE_REGION__SKIPIFEXISTS,
+                   unspecifiedDefaultValue = "true",
+                   specifiedDefaultValue = "true",
+                   help = CliStrings.CREATE_REGION__SKIPIFEXISTS__HELP)
+       boolean skipIfExists,
+       
+       // the following should all be in alphabetical order according to
+       // their key string
+       @CliOption (key = CliStrings.CREATE_REGION__ASYNCEVENTQUEUEID,
+                   help = CliStrings.CREATE_REGION__ASYNCEVENTQUEUEID__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] asyncEventQueueIds,
+       @CliOption (key = CliStrings.CREATE_REGION__CACHELISTENER,
+                   help = CliStrings.CREATE_REGION__CACHELISTENER__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] cacheListener,
+       @CliOption (key = CliStrings.CREATE_REGION__CACHELOADER,
+                   help = CliStrings.CREATE_REGION__CACHELOADER__HELP)
+       String cacheLoader,
+       @CliOption (key = CliStrings.CREATE_REGION__CACHEWRITER,
+                   help = CliStrings.CREATE_REGION__CACHEWRITER__HELP)
+       String cacheWriter,
+       @CliOption (key = CliStrings.CREATE_REGION__COLOCATEDWITH,
+                   optionContext = ConverterHint.REGIONPATH,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__COLOCATEDWITH__HELP)
+       String prColocatedWith,
+       @CliOption (key = CliStrings.CREATE_REGION__COMPRESSOR,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__COMPRESSOR__HELP)
+       String compressor,
+       @CliOption (key = CliStrings.CREATE_REGION__CONCURRENCYLEVEL,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__CONCURRENCYLEVEL__HELP)
+       Integer concurrencyLevel,
+       @CliOption (key = CliStrings.CREATE_REGION__DISKSTORE,
+                   help = CliStrings.CREATE_REGION__DISKSTORE__HELP)
+       String diskStore,
+       @CliOption (key = CliStrings.CREATE_REGION__ENABLEASYNCCONFLATION,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__ENABLEASYNCCONFLATION__HELP)
+       Boolean enableAsyncConflation,
+       @CliOption (key = CliStrings.CREATE_REGION__CLONINGENABLED,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__CLONINGENABLED__HELP)
+       Boolean cloningEnabled,
+       @CliOption (key = CliStrings.CREATE_REGION__CONCURRENCYCHECKSENABLED,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__CONCURRENCYCHECKSENABLED__HELP)
+       Boolean concurrencyChecksEnabled,
+       @CliOption (key = CliStrings.CREATE_REGION__MULTICASTENABLED,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__MULTICASTENABLED__HELP)
+       Boolean mcastEnabled,
+       @CliOption (key = CliStrings.CREATE_REGION__STATISTICSENABLED,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__STATISTICSENABLED__HELP)
+       Boolean statisticsEnabled,
+       @CliOption (key = CliStrings.CREATE_REGION__ENABLESUBSCRIPTIONCONFLATION,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__ENABLESUBSCRIPTIONCONFLATION__HELP)
+       Boolean enableSubscriptionConflation,
+       @CliOption (key = CliStrings.CREATE_REGION__DISKSYNCHRONOUS,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__DISKSYNCHRONOUS__HELP)
+       Boolean diskSynchronous,
+       @CliOption (key = CliStrings.CREATE_REGION__ENTRYEXPIRATIONIDLETIME,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__ENTRYEXPIRATIONIDLETIME__HELP)
+       Integer entryExpirationIdleTime,
+       @CliOption (key = CliStrings.CREATE_REGION__ENTRYEXPIRATIONIDLETIMEACTION,
+                   help = CliStrings.CREATE_REGION__ENTRYEXPIRATIONIDLETIMEACTION__HELP)
+       String entryExpirationIdleTimeAction,
+       @CliOption (key = CliStrings.CREATE_REGION__ENTRYEXPIRATIONTIMETOLIVE,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__ENTRYEXPIRATIONTIMETOLIVE__HELP)
+       Integer entryExpirationTTL,
+       @CliOption (key = CliStrings.CREATE_REGION__ENTRYEXPIRATIONTTLACTION,
+                   help = CliStrings.CREATE_REGION__ENTRYEXPIRATIONTTLACTION__HELP)
+       String entryExpirationTTLAction,
+       @CliOption (key = CliStrings.CREATE_REGION__GATEWAYSENDERID,
+                   help = CliStrings.CREATE_REGION__GATEWAYSENDERID__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] gatewaySenderIds,
+       @CliOption (key = CliStrings.CREATE_REGION__KEYCONSTRAINT,
+                   help = CliStrings.CREATE_REGION__KEYCONSTRAINT__HELP)
+       String keyConstraint,
+       @CliOption (key = CliStrings.CREATE_REGION__LOCALMAXMEMORY,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__LOCALMAXMEMORY__HELP)
+       Integer prLocalMaxMemory, 
+       @CliOption (key = CliStrings.CREATE_REGION__OFF_HEAP,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "true",
+                   help = CliStrings.CREATE_REGION__OFF_HEAP__HELP)
+       Boolean offHeap,
+       @CliOption (key = CliStrings.CREATE_REGION__REGIONEXPIRATIONIDLETIME,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__REGIONEXPIRATIONIDLETIME__HELP)
+       Integer regionExpirationIdleTime,
+       @CliOption (key = CliStrings.CREATE_REGION__REGIONEXPIRATIONIDLETIMEACTION,
+                   help = CliStrings.CREATE_REGION__REGIONEXPIRATIONIDLETIMEACTION__HELP)
+       String regionExpirationIdleTimeAction,
+       @CliOption (key = CliStrings.CREATE_REGION__REGIONEXPIRATIONTTL,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__REGIONEXPIRATIONTTL__HELP)
+       Integer regionExpirationTTL,
+       @CliOption (key = CliStrings.CREATE_REGION__REGIONEXPIRATIONTTLACTION,
+                   help = CliStrings.CREATE_REGION__REGIONEXPIRATIONTTLACTION__HELP)
+       String regionExpirationTTLAction,      
+       @CliOption (key = CliStrings.CREATE_REGION__RECOVERYDELAY,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__RECOVERYDELAY__HELP)
+       Long prRecoveryDelay,
+       @CliOption (key = CliStrings.CREATE_REGION__REDUNDANTCOPIES,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__REDUNDANTCOPIES__HELP)
+       Integer prRedundantCopies, 
+       @CliOption (key = CliStrings.CREATE_REGION__STARTUPRECOVERYDDELAY,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__STARTUPRECOVERYDDELAY__HELP)
+       Long prStartupRecoveryDelay,
+       @CliOption (key = CliStrings.CREATE_REGION__TOTALMAXMEMORY,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__TOTALMAXMEMORY__HELP)
+       Long prTotalMaxMemory, 
+       @CliOption (key = CliStrings.CREATE_REGION__TOTALNUMBUCKETS,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.CREATE_REGION__TOTALNUMBUCKETS__HELP)
+       Integer prTotalNumBuckets,      
+       @CliOption (key = CliStrings.CREATE_REGION__VALUECONSTRAINT,
+                   help = CliStrings.CREATE_REGION__VALUECONSTRAINT__HELP)
+       String valueConstraint
+       // NOTICE: keep the region attributes params in alphabetical order
+ ) {
+     Result result = null;
+     XmlEntity xmlEntity = null;
+ 
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+ 
+       if (regionShortcut != null && useAttributesFrom != null) {
+         throw new IllegalArgumentException(CliStrings.CREATE_REGION__MSG__ONLY_ONE_OF_REGIONSHORTCUT_AND_USEATTRIBUESFROM_CAN_BE_SPECIFIED);
+       } else if (regionShortcut == null && useAttributesFrom == null) {
+         throw new IllegalArgumentException(CliStrings.CREATE_REGION__MSG__ONE_OF_REGIONSHORTCUT_AND_USEATTRIBUESFROM_IS_REQUIRED);
+       }
+       
+       validateRegionPathAndParent(cache, regionPath);
+       validateGroups(cache, groups);
+ 
+       RegionFunctionArgs.ExpirationAttrs entryIdle = null;
+       if (entryExpirationIdleTime != null) {
+         entryIdle = new RegionFunctionArgs.ExpirationAttrs(RegionFunctionArgs.ExpirationAttrs.ExpirationFor.ENTRY_IDLE, entryExpirationIdleTime, entryExpirationIdleTimeAction);
+       }
+       RegionFunctionArgs.ExpirationAttrs entryTTL = null;
+       if (entryExpirationTTL != null) {
+         entryTTL = new RegionFunctionArgs.ExpirationAttrs(RegionFunctionArgs.ExpirationAttrs.ExpirationFor.ENTRY_TTL, entryExpirationTTL, entryExpirationTTLAction);
+       }
+       RegionFunctionArgs.ExpirationAttrs regionIdle = null;
+       if (regionExpirationIdleTime != null) {
+         regionIdle = new RegionFunctionArgs.ExpirationAttrs(RegionFunctionArgs.ExpirationAttrs.ExpirationFor.REGION_IDLE, regionExpirationIdleTime, regionExpirationIdleTimeAction);
+       }
+       RegionFunctionArgs.ExpirationAttrs regionTTL = null;
+       if (regionExpirationTTL != null) {
+         regionTTL = new RegionFunctionArgs.ExpirationAttrs(RegionFunctionArgs.ExpirationAttrs.ExpirationFor.REGION_TTL, regionExpirationTTL, regionExpirationTTLAction);
+       }
+       
+       RegionFunctionArgs regionFunctionArgs = null;
+       if (useAttributesFrom != null) {
+         if (!regionExists(cache, useAttributesFrom)) {
+           throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_REGION_PATH_FOR_0_REGIONPATH_1_NOT_FOUND, new Object[] {CliStrings.CREATE_REGION__USEATTRIBUTESFROM, useAttributesFrom}));
+         }
+         
+         
+         FetchRegionAttributesFunctionResult<Object, Object> regionAttributesResult = getRegionAttributes(cache, useAttributesFrom);
+         RegionAttributes<?, ?> regionAttributes = regionAttributesResult.getRegionAttributes();
+            
+         
+         // give preference to user specified plugins than the ones retrieved from other region
+         String[] cacheListenerClasses = cacheListener != null && cacheListener.length != 0 ? cacheListener : regionAttributesResult.getCacheListenerClasses();
+         String cacheLoaderClass = cacheLoader != null ? cacheLoader : regionAttributesResult.getCacheLoaderClass();
+         String cacheWriterClass = cacheWriter != null ? cacheWriter : regionAttributesResult.getCacheWriterClass();;
+ 
+         regionFunctionArgs = new RegionFunctionArgs(regionPath,
+             useAttributesFrom, skipIfExists, keyConstraint, valueConstraint,
+             statisticsEnabled, entryIdle, entryTTL, regionIdle,
+             regionTTL, diskStore, diskSynchronous, enableAsyncConflation,
+             enableSubscriptionConflation, cacheListenerClasses, cacheLoaderClass,
+             cacheWriterClass, asyncEventQueueIds, gatewaySenderIds,
+             concurrencyChecksEnabled, cloningEnabled, concurrencyLevel, 
+             prColocatedWith, prLocalMaxMemory, prRecoveryDelay,
+             prRedundantCopies, prStartupRecoveryDelay,
+             prTotalMaxMemory, prTotalNumBuckets,
+             offHeap, mcastEnabled, regionAttributes);
+         
+ 
+         if (regionAttributes.getPartitionAttributes() == null && regionFunctionArgs.hasPartitionAttributes()) {
+           throw new IllegalArgumentException(
+               CliStrings.format(CliStrings.CREATE_REGION__MSG__OPTION_0_CAN_BE_USED_ONLY_FOR_PARTITIONEDREGION, 
+                                 regionFunctionArgs.getPartitionArgs().getUserSpecifiedPartitionAttributes()) + " " +
+               CliStrings.format(CliStrings.CREATE_REGION__MSG__0_IS_NOT_A_PARITIONEDREGION, 
+                                     useAttributesFrom));
+         }
+       } else {
+         regionFunctionArgs = new RegionFunctionArgs(
+           regionPath, regionShortcut, useAttributesFrom, skipIfExists,
+           keyConstraint, valueConstraint, statisticsEnabled, entryIdle, entryTTL,
+           regionIdle, regionTTL, diskStore, diskSynchronous,
+           enableAsyncConflation, enableSubscriptionConflation, cacheListener,
+           cacheLoader, cacheWriter, asyncEventQueueIds, gatewaySenderIds,
+           concurrencyChecksEnabled, cloningEnabled, concurrencyLevel, 
+           prColocatedWith, prLocalMaxMemory, prRecoveryDelay,
+           prRedundantCopies, prStartupRecoveryDelay,
+           prTotalMaxMemory, prTotalNumBuckets, null,compressor, offHeap , mcastEnabled);
+         
+         if (!regionShortcut.name().startsWith("PARTITION") && regionFunctionArgs.hasPartitionAttributes()) {
+           throw new IllegalArgumentException(
+               CliStrings.format(CliStrings.CREATE_REGION__MSG__OPTION_0_CAN_BE_USED_ONLY_FOR_PARTITIONEDREGION, 
+                                 regionFunctionArgs.getPartitionArgs().getUserSpecifiedPartitionAttributes()) + " " +
+               CliStrings.format(CliStrings.CREATE_REGION__MSG__0_IS_NOT_A_PARITIONEDREGION, 
+                                     useAttributesFrom));
+         }
+       }
+ 
+       validateRegionFunctionArgs(cache, regionFunctionArgs);
+ 
+       Set<DistributedMember> membersToCreateRegionOn = null;
+       if (groups != null && groups.length != 0) {
+         membersToCreateRegionOn = CliUtil.getDistributedMembersByGroup(cache, groups);
+         // have only normal members from the group
+         for (Iterator<DistributedMember> it = membersToCreateRegionOn.iterator(); it.hasNext();) {
+           DistributedMember distributedMember = it.next();
+           if ( ((InternalDistributedMember)distributedMember).getVmKind() == DistributionManager.LOCATOR_DM_TYPE ) {
+             it.remove();
+           }
+         }
+       } else {
+         membersToCreateRegionOn = CliUtil.getAllNormalMembers(cache);
+       }
+ 
+       if (membersToCreateRegionOn.isEmpty()) {
+         return ResultBuilder.createUserErrorResult(CliStrings.NO_CACHING_MEMBERS_FOUND_MESSAGE);
+       }
+ 
+       ResultCollector<?, ?> resultCollector = CliUtil.executeFunction(RegionCreateFunction.INSTANCE, regionFunctionArgs, membersToCreateRegionOn);
+       @SuppressWarnings("unchecked")
+       List<CliFunctionResult> regionCreateResults = (List<CliFunctionResult>) resultCollector.getResult();
+ 
+       TabularResultData tabularResultData = ResultBuilder.createTabularResultData();
+       final String errorPrefix = "ERROR: ";
+       for (CliFunctionResult regionCreateResult : regionCreateResults) {
+         boolean success  = regionCreateResult.isSuccessful();
+         tabularResultData.accumulate("Member", regionCreateResult.getMemberIdOrName());
+         tabularResultData.accumulate("Status", (success ? "" : errorPrefix) + regionCreateResult.getMessage());
+         
+         if (success) {
+           xmlEntity = regionCreateResult.getXmlEntity();
+         }
+       }
+       
+       result = ResultBuilder.buildResult(tabularResultData);
+       verifyDistributedRegionMbean(cache, regionPath); 
+       
+     } catch (IllegalArgumentException e) {
+       LogWrapper.getInstance().info(e.getMessage());
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+     } catch (IllegalStateException e) {
+       LogWrapper.getInstance().info(e.getMessage());
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+     } catch (RuntimeException e) {
+       LogWrapper.getInstance().info(e.getMessage(), e);
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+       
+     }
+     if (xmlEntity != null) {
+       result.setCommandPersisted((new SharedConfigurationWriter()).addXmlEntity(xmlEntity, groups));
+     }
+     return result;
+   }
+   
+   
+   public boolean verifyDistributedRegionMbean(Cache cache, String regionName){
+     GemFireCacheImpl gemfireCache = (GemFireCacheImpl) cache;
+     int federationInterval = gemfireCache.getDistributedSystem().getConfig().getJmxManagerUpdateRate();    
+     long timeEnd = System.currentTimeMillis() + federationInterval + 50;   
+ 
+     for( ; System.currentTimeMillis() <= timeEnd ; ){
+       try{
+         DistributedRegionMXBean bean = ManagementService.getManagementService(cache).getDistributedRegionMXBean(regionName);
+         if (bean == null){
+           bean = ManagementService.getManagementService(cache).getDistributedRegionMXBean(Region.SEPARATOR + regionName);
+         }        
+         if(bean != null){
+           return true;
+         }else{
+           Thread.sleep(2);         
+         }
+       }catch(Exception ex){
+         continue;
+       }
+     }       
+     return false;
+   }  
+   
+   @CliCommand (value = CliStrings.ALTER_REGION, help = CliStrings.ALTER_REGION__HELP)
+   @CliMetaData (relatedTopic = CliStrings.TOPIC_GEMFIRE_REGION, writesToSharedConfiguration = true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.ALTER_REGION)
+   public Result alterRegion(
+       @CliOption (key = CliStrings.ALTER_REGION__REGION,
+                   mandatory = true,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.ALTER_REGION__REGION__HELP)
+       String regionPath,
+       @CliOption (key = CliStrings.ALTER_REGION__GROUP,
+                   optionContext = ConverterHint.MEMBERGROUP,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   help = CliStrings.ALTER_REGION__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",")
+       String[] groups, 
+       @CliOption (key = CliStrings.ALTER_REGION__ENTRYEXPIRATIONIDLETIME,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "-1",
+                   help = CliStrings.ALTER_REGION__ENTRYEXPIRATIONIDLETIME__HELP)
+       Integer entryExpirationIdleTime,
+       @CliOption (key = CliStrings.ALTER_REGION__ENTRYEXPIRATIONIDLETIMEACTION,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = CliMetaData.ANNOTATION_DEFAULT_VALUE,
+                   help = CliStrings.ALTER_REGION__ENTRYEXPIRATIONIDLETIMEACTION__HELP)
+       String entryExpirationIdleTimeAction,
+       @CliOption (key = CliStrings.ALTER_REGION__ENTRYEXPIRATIONTIMETOLIVE,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "-1",
+                   help = CliStrings.ALTER_REGION__ENTRYEXPIRATIONTIMETOLIVE__HELP)
+       Integer entryExpirationTTL,
+       @CliOption (key = CliStrings.ALTER_REGION__ENTRYEXPIRATIONTTLACTION,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = CliMetaData.ANNOTATION_DEFAULT_VALUE,
+                   help = CliStrings.ALTER_REGION__ENTRYEXPIRATIONTTLACTION__HELP)
+       String entryExpirationTTLAction,
+       @CliOption (key = CliStrings.ALTER_REGION__REGIONEXPIRATIONIDLETIME,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "-1",
+                   help = CliStrings.ALTER_REGION__REGIONEXPIRATIONIDLETIME__HELP)
+       Integer regionExpirationIdleTime, 
+       @CliOption (key = CliStrings.ALTER_REGION__REGIONEXPIRATIONIDLETIMEACTION,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = CliMetaData.ANNOTATION_DEFAULT_VALUE,
+                   help = CliStrings.ALTER_REGION__REGIONEXPIRATIONIDLETIMEACTION__HELP)
+       String regionExpirationIdleTimeAction,
+       @CliOption (key = CliStrings.ALTER_REGION__REGIONEXPIRATIONTTL,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "-1",
+                   help = CliStrings.ALTER_REGION__REGIONEXPIRATIONTTL__HELP)
+       Integer regionExpirationTTL, 
+       @CliOption (key = CliStrings.ALTER_REGION__REGIONEXPIRATIONTTLACTION,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = CliMetaData.ANNOTATION_DEFAULT_VALUE,
+                   help = CliStrings.ALTER_REGION__REGIONEXPIRATIONTTLACTION__HELP)
+       String regionExpirationTTLAction,          
+       @CliOption (key = CliStrings.ALTER_REGION__CACHELISTENER,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "",
+                   help = CliStrings.ALTER_REGION__CACHELISTENER__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] cacheListeners,
+       @CliOption (key = CliStrings.ALTER_REGION__CACHELOADER,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = CliMetaData.ANNOTATION_DEFAULT_VALUE,
+                   help = CliStrings.ALTER_REGION__CACHELOADER__HELP)
+       String cacheLoader,
+       @CliOption (key = CliStrings.ALTER_REGION__CACHEWRITER,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = CliMetaData.ANNOTATION_DEFAULT_VALUE,
+                   help = CliStrings.ALTER_REGION__CACHEWRITER__HELP)
+       String cacheWriter,
+       @CliOption (key = CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "",
+                   help = CliStrings.ALTER_REGION__ASYNCEVENTQUEUEID__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] asyncEventQueueIds,
+       @CliOption (key = CliStrings.ALTER_REGION__GATEWAYSENDERID,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "",
+                   help = CliStrings.ALTER_REGION__GATEWAYSENDERID__HELP)
+       @CliMetaData (valueSeparator = ",") 
+       String[] gatewaySenderIds,
+       @CliOption (key = CliStrings.ALTER_REGION__CLONINGENABLED,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "false",
+                   help = CliStrings.ALTER_REGION__CLONINGENABLED__HELP)
+       Boolean cloningEnabled,
+       @CliOption (key = CliStrings.ALTER_REGION__EVICTIONMAX,
+                   unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
+                   specifiedDefaultValue = "0",
+                   help = CliStrings.ALTER_REGION__EVICTIONMAX__HELP)
+       Integer evictionMax) {
+     Result result = null;
+     XmlEntity xmlEntity = null;
+ 
+     try {
+       Cache cache = CacheFactory.getAnyInstance();
+ 
+       if (groups != null) {
+         validateGroups(cache, groups);
+       }
+ 
+       RegionFunctionArgs.ExpirationAttrs entryIdle = null;
+       if (entryExpirationIdleTime != null || entryExpirationIdleTimeAction != null) {
+         if (entryExpirationIdleTime != null && entryExpirationIdleTime == -1) {
+           entryExpirationIdleTime = ExpirationAttributes.DEFAULT.getTimeout();
+         }
+         if (CliMetaData.ANNOTATION_DEFAULT_VALUE.equals(entryExpirationIdleTimeAction)) {
+           entryExpirationIdleTimeAction = ExpirationAttributes.DEFAULT.getAction().toString();
+         }
+         entryIdle = new RegionFunctionArgs.ExpirationAttrs(RegionFunctionArgs.ExpirationAttrs.ExpirationFor.ENTRY_IDLE,
+             entryExpirationIdleTime, entryExpirationIdleTimeAction);
+       }
+       RegionFunctionArgs.ExpirationAttrs entryTTL = null;
+       if (entryExpirationTTL != null || entryExpirationTTLAction != null) {
+         if (entryExpirationTTL != null && entryExpirationTTL == -1) {
+           entryExpirationTTL = ExpirationAttributes.DEFAULT.getTimeout();
+         }
+         if (CliMetaData.ANNOTATION_DEFAULT_VALUE.equals(entryExpirationTTLAction)) {
+           entryExpirationTTLAction = ExpirationAttributes.DEFAULT.getAction().toString();
+         }
+         entryTTL = new RegionFunctionArgs.ExpirationAttrs(RegionFunctionArgs.ExpirationAttrs.ExpirationFor.ENTRY_TTL,
+             entryExpirationTTL, entryExpirationTTLAction);
+       }
+       RegionFunctionArgs.ExpirationAttrs regionIdle = null;
+       if (regionExpirationIdleTime != null || regionExpirationIdleTimeAction != null) {
+         if (regionExpirationIdleTime != null  && regionExpirationIdleTime == -1) {
+           regionExpirationIdleTime = ExpirationAttributes.DEFAULT.getTimeout();
+         }
+         if (CliMetaData.ANNOTATION_DEFAULT_VALUE.equals(regionExpirationIdleTimeAction)) {
+           regionExpirationIdleTimeAction = ExpirationAttributes.DEFAULT.getAction().toString();
+         }
+         regionIdle = new RegionFunctionArgs.ExpirationAttrs(RegionFunctionArgs.ExpirationAttrs.ExpirationFor.REGION_IDLE,
+             regionExpirationIdleTime, regionExpirationIdleTimeAction);
+       }
+       RegionFunctionArgs.ExpirationAttrs regionTTL = null;
+       if (regionExpirationTTL != null || regionExpirationTTLAction != null) {
+         if (regionExpirationTTL != null && regionExpirationTTL == -1) {
+           regionExpirationTTL = ExpirationAttributes.DEFAULT.getTimeout();
+         }
+         if (CliMetaData.ANNOTATION_DEFAULT_VALUE.equals(regionExpirationTTLAction)) {
+           regionExpirationTTLAction = ExpirationAttributes.DEFAULT.getAction().toString();
+         }
+         regionTTL = new RegionFunctionArgs.ExpirationAttrs(RegionFunctionArgs.ExpirationAttrs.ExpirationFor.REGION_TTL,
+             regionExpirationTTL, regionExpirationTTLAction);
+       }
+ 
+       cacheLoader = convertDefaultValue(cacheLoader, StringUtils.EMPTY_STRING);
+       cacheWriter = convertDefaultValue(cacheWriter, StringUtils.EMPTY_STRING);
+ 
+       RegionFunctionArgs regionFunctionArgs = null;
+       regionFunctionArgs = new RegionFunctionArgs(regionPath, null, null, false, null, null, null, entryIdle, entryTTL,
+         regionIdle, regionTTL, null, null, null, null, cacheListeners, cacheLoader, cacheWriter, asyncEventQueueIds,
+         gatewaySenderIds, null, cloningEnabled, null, null, null, null, null, null, null, null, evictionMax, null, null, null);
+ 
+       Set<String> cacheListenersSet = regionFunctionArgs.getCacheListeners();
+       if (cacheListenersSet != null && !cacheListenersSet.isEmpty()) {
+         for (String cacheListener : cacheListenersSet) {
+           if (!isClassNameValid(cacheListener)) {
+             throw new IllegalArgumentException(CliStrings.format(
+                 CliStrings.ALTER_REGION__MSG__SPECIFY_VALID_CLASSNAME_FOR_CACHELISTENER_0_IS_INVALID,
+                 new Object[] { cacheListener }));
+           }
+         }
+       }
+ 
+       if (cacheLoader != null && !isClassNameValid(cacheLoader)) {
+         throw new IllegalArgumentException(CliStrings.format(
+             CliStrings.ALTER_REGION__MSG__SPECIFY_VALID_CLASSNAME_FOR_CACHELOADER_0_IS_INVALID, new Object[] { cacheLoader }));
+       }
+ 
+       if (cacheWriter != null && !isClassNameValid(cacheWriter)) {
+         throw new IllegalArgumentException(CliStrings.format(
+             CliStrings.ALTER_REGION__MSG__SPECIFY_VALID_CLASSNAME_FOR_CACHEWRITER_0_IS_INVALID, new Object[] { cacheWriter }));
+       }
+               
+       if (evictionMax != null && evictionMax < 0) {
+         throw new IllegalArgumentException(CliStrings.format(
+             CliStrings.ALTER_REGION__MSG__SPECIFY_POSITIVE_INT_FOR_EVICTIONMAX_0_IS_NOT_VALID, new Object[] { evictionMax }));
+       }
+ 
+       Set<DistributedMember> targetMembers;
+       try {
+         targetMembers = CliUtil.findAllMatchingMembers(groups, null);
+       } catch (CommandResultException crex) {
+         return crex.getResult();
+       }
+ 
+       ResultCollector<?, ?> resultCollector = CliUtil.executeFunction(new RegionAlterFunction(), regionFunctionArgs, targetMembers);
+       List<CliFunctionResult> regionAlterResults = (List<CliFunctionResult>) resultCollector.getResult();
+ 
+       TabularResultData tabularResultData = ResultBuilder.createTabularResultData();
+       final String errorPrefix = "ERROR: ";
+       for (CliFunctionResult regionAlterResult : regionAlterResults) {
+         boolean success  = regionAlterResult.isSuccessful();
+         tabularResultData.accumulate("Member", regionAlterResult.getMemberIdOrName());
+         if (success) {
+           tabularResultData.accumulate("Status", regionAlterResult.getMessage());
+           xmlEntity = regionAlterResult.getXmlEntity();
+         } else {
+           tabularResultData.accumulate("Status", errorPrefix + regionAlterResult.getMessage());
+           tabularResultData.setStatus(Status.ERROR);
+         }
+       }
+       result = ResultBuilder.buildResult(tabularResultData);
+     } catch (IllegalArgumentException e) {
+       LogWrapper.getInstance().info(e.getMessage());
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+     } catch (IllegalStateException e) {
+       LogWrapper.getInstance().info(e.getMessage());
+       result = ResultBuilder.createUserErrorResult(e.getMessage());
+     } catch (RuntimeException e) {
+       LogWrapper.getInstance().info(e.getMessage(), e);
+       result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+     }
+     if (xmlEntity != null) {
+       result.setCommandPersisted((new SharedConfigurationWriter()).addXmlEntity(xmlEntity, groups));
+     }
+     return result;
+   }
+   
+   private static boolean regionExists(Cache cache, String regionPath) {
+     boolean regionFound = false;
+     if (regionPath != null && !Region.SEPARATOR.equals(regionPath)) {
+       ManagementService managementService = ManagementService.getExistingManagementService(cache);
+       DistributedSystemMXBean dsMBean = managementService.getDistributedSystemMXBean();
+ 
+       String[] allRegionPaths = dsMBean.listAllRegionPaths();
+       for (int i = 0; i < allRegionPaths.length; i++) {
+         if (allRegionPaths[i].equals(regionPath)) {
+           regionFound = true;
+           break;
+         }
+       }
+     }
+     return regionFound;
+   }
+   
+   private void validateRegionPathAndParent(Cache cache, String regionPath) {
+     if (regionPath == null || "".equals(regionPath)) {
+       throw new IllegalArgumentException(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_REGION_PATH);
+     }
+     // If a region path indicates a sub-region, check whether the parent region exists
+     RegionPath regionPathData = new RegionPath(regionPath);
+     String parentRegionPath = regionPathData.getParent();
+     if (parentRegionPath != null && !Region.SEPARATOR.equals(parentRegionPath)) {
+       if (!regionExists(cache, parentRegionPath)) {
+         throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__PARENT_REGION_FOR_0_DOESNOT_EXIST, new Object[] {regionPath}));
+       }
+     }
+   }
+ 
+ 
+   private void validateGroups(Cache cache, String[] groups) {
+     if (groups != null && groups.length != 0) {
+       Set<String> existingGroups = new HashSet<String>();
+       Set<DistributedMember> members = CliUtil.getAllNormalMembers(cache);
+       for (DistributedMember distributedMember : members) {
+         List<String> memberGroups = distributedMember.getGroups();
+         existingGroups.addAll(memberGroups);
+       }
+       List<String> groupsList = new ArrayList<String>(Arrays.asList(groups));
+       groupsList.removeAll(existingGroups);
+   
+       if (!groupsList.isEmpty()) {
+         throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__GROUPS_0_ARE_INVALID, new Object[] {String.valueOf(groupsList)}));
+       }
+     }
+   }
+ 
+   private void validateRegionFunctionArgs(Cache cache, RegionFunctionArgs regionFunctionArgs) {
+     if (regionFunctionArgs.getRegionPath() == null) {
+       throw new IllegalArgumentException(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_REGION_PATH);
+     }
+ 
+     ManagementService managementService = ManagementService.getExistingManagementService(cache);
+     DistributedSystemMXBean dsMBean = managementService.getDistributedSystemMXBean();
+ 
+     String useAttributesFrom = regionFunctionArgs.getUseAttributesFrom();
+     if (useAttributesFrom != null && !useAttributesFrom.isEmpty() && regionExists(cache, useAttributesFrom)) {
+       if (!regionExists(cache, useAttributesFrom)) { // check already done in createRegion !!!
+         throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_REGION_PATH_FOR_0_REGIONPATH_1_NOT_FOUND, new Object[] {CliStrings.CREATE_REGION__USEATTRIBUTESFROM, useAttributesFrom}));
+       }
+       if (!regionFunctionArgs.isSetUseAttributesFrom() || regionFunctionArgs.getRegionAttributes() == null) {
+         throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__COULD_NOT_RETRIEVE_REGION_ATTRS_FOR_PATH_0_VERIFY_REGION_EXISTS, useAttributesFrom));
+       }
+     }
+ 
+     if (regionFunctionArgs.hasPartitionAttributes()) {
+       RegionFunctionArgs.PartitionArgs partitionArgs = regionFunctionArgs.getPartitionArgs();
+       String colocatedWith = partitionArgs.getPrColocatedWith();
+       if (colocatedWith != null && !colocatedWith.isEmpty()) {
+         String[] listAllRegionPaths = dsMBean.listAllRegionPaths();
+         String foundRegionPath = null;
+         for (String regionPath : listAllRegionPaths) {
+           if (regionPath.equals(colocatedWith)) {
+             foundRegionPath = regionPath;
+             break;
+           }
+         }
+         if (foundRegionPath == null) {
+           throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_REGION_PATH_FOR_0_REGIONPATH_1_NOT_FOUND, new Object[] {CliStrings.CREATE_REGION__COLOCATEDWITH, colocatedWith}));
+         }
+         ManagementService mgmtService = ManagementService.getExistingManagementService(cache);
+         DistributedRegionMXBean distributedRegionMXBean = mgmtService.getDistributedRegionMXBean(foundRegionPath);
+         String regionType = distributedRegionMXBean.getRegionType();
+         if ( ! ( DataPolicy.PARTITION.toString().equals(regionType) || DataPolicy.PERSISTENT_PARTITION.toString().equals(regionType) ) ) {
+           throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__COLOCATEDWITH_REGION_0_IS_NOT_PARTITIONEDREGION, new Object[] {colocatedWith}));
+         }
+       }
+       if (partitionArgs.isSetPRLocalMaxMemory()) {
+         int prLocalMaxMemory = partitionArgs.getPrLocalMaxMemory();
+         if (prLocalMaxMemory < 0) {
+           throw new IllegalArgumentException(LocalizedStrings.AttributesFactory_PARTITIONATTRIBUTES_LOCALMAXMEMORY_MUST_NOT_BE_NEGATIVE.toLocalizedString());
+         }
+       }
+       if (partitionArgs.isSetPRTotalMaxMemory()) {
+         long prTotalMaxMemory = partitionArgs.getPrTotalMaxMemory();
+         if (prTotalMaxMemory <= 0) {
+           throw new IllegalArgumentException(LocalizedStrings.AttributesFactory_TOTAL_SIZE_OF_PARTITION_REGION_MUST_BE_0.toLocalizedString());
+         }
+       }
+       if (partitionArgs.isSetPRRedundantCopies()) {
+         int prRedundantCopies = partitionArgs.getPrRedundantCopies();
+         switch (prRedundantCopies) {
+           case 0:
+           case 1:
+           case 2:
+           case 3:
+             break;
+           default:
+             throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__REDUNDANT_COPIES_SHOULD_BE_ONE_OF_0123, new Object[] {prRedundantCopies}));
+         }
+       }
+ //      Validation for the following is not known yet
+ //      if (partitionArgs.isSetPRTotalNumBuckets()) {
+ //        int prTotalNumBuckets = partitionArgs.getPrTotalNumBuckets();
+ //      }
+ //      if (partitionArgs.isSetPRStartupRecoveryDelay()) {
+ //        long prStartupRecoveryDelay = partitionArgs.getPrStartupRecoveryDelay();
+ //      }
+ //      if (partitionArgs.isSetPRRecoveryDelay()) {
+ //        long prRecoveryDelay = partitionArgs.getPrRecoveryDelay();
+ //      }
+     }
+ 
+     String keyConstraint = regionFunctionArgs.getKeyConstraint();
+     if (keyConstraint != null && !isClassNameValid(keyConstraint)) {
+       throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_CLASSNAME_FOR_KEYCONSTRAINT_0_IS_INVALID, new Object[] {keyConstraint}));
+     }
+ 
+     String valueConstraint = regionFunctionArgs.getValueConstraint();
+     if (valueConstraint != null && !isClassNameValid(valueConstraint)) {
+       throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_CLASSNAME_FOR_VALUECONSTRAINT_0_IS_INVALID, new Object[] {valueConstraint}));
+     }
+ 
+     Set<String> cacheListeners = regionFunctionArgs.getCacheListeners();
+     if (cacheListeners != null && !cacheListeners.isEmpty()) {
+       for (String cacheListener : cacheListeners) {
+         if (!isClassNameValid(cacheListener)) {
+           throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_CLASSNAME_FOR_CACHELISTENER_0_IS_INVALID, new Object[] {cacheListener}));
+         }
+       }
+     }
+ 
+     String cacheLoader = regionFunctionArgs.getCacheLoader();
+     if (cacheLoader != null && !isClassNameValid(cacheLoader)) {
+       throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_CLASSNAME_FOR_CACHELOADER_0_IS_INVALID, new Object[] {cacheLoader}));
+     }
+ 
+     String cacheWriter = regionFunctionArgs.getCacheWriter();
+     if (cacheWriter != null && !isClassNameValid(cacheWriter)) {
+       throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_CLASSNAME_FOR_CACHEWRITER_0_IS_INVALID, new Object[] {cacheWriter}));
+     }
+ 
+     Set<String> gatewaySenderIds = regionFunctionArgs.getGatewaySenderIds();
+     if (gatewaySenderIds != null && !gatewaySenderIds.isEmpty()) {
+       String[] gatewaySenders = dsMBean.listGatewaySenders();
+       if (gatewaySenders.length == 0) {
+         throw new IllegalArgumentException(CliStrings.CREATE_REGION__MSG__NO_GATEWAYSENDERS_IN_THE_SYSTEM);
+       } else {
+         List<String> gatewaySendersList = new ArrayList<String>(Arrays.asList(gatewaySenders));
+         gatewaySenderIds = new HashSet<String>(gatewaySenderIds);
+         gatewaySenderIds.removeAll(gatewaySendersList);
+         if (!gatewaySenderIds.isEmpty()) {
+           throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_GATEWAYSENDER_ID_UNKNOWN_0, new Object[] {gatewaySenderIds}));
+         }
+       }
+     }
+     
+     if (regionFunctionArgs.isSetConcurrencyLevel()) {
+       int concurrencyLevel = regionFunctionArgs.getConcurrencyLevel();
+       if (concurrencyLevel < 0) {
+         throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_POSITIVE_INT_FOR_CONCURRENCYLEVEL_0_IS_NOT_VALID, new Object[] {concurrencyLevel}));
+       }
+     }
+     
+     String diskStore = regionFunctionArgs.getDiskStore();
+     if (diskStore != null) {
+       RegionShortcut regionShortcut = regionFunctionArgs.getRegionShortcut();
+       if (regionShortcut != null && !PERSISTENT_OVERFLOW_SHORTCUTS.contains(regionShortcut)) {
+         String subMessage = LocalizedStrings.DiskStore_IS_USED_IN_NONPERSISTENT_REGION.toLocalizedString();
+         String message = subMessage + ". " +  CliStrings.format(CliStrings.CREATE_REGION__MSG__USE_ONE_OF_THESE_SHORTCUTS_0, new Object[] {String.valueOf(PERSISTENT_OVERFLOW_SHORTCUTS)});
+         
+         throw new IllegalArgumentException(message);
+       }
+ 
+       RegionAttributes<?, ?> regionAttributes = regionFunctionArgs.getRegionAttributes();
+       if (regionAttributes != null && !regionAttributes.getDataPolicy().withPersistence()) {
+         String subMessage = LocalizedStrings.DiskStore_IS_USED_IN_NONPERSISTENT_REGION.toLocalizedString();
+         String message = subMessage+ ". " + CliStrings.format(CliStrings.CREATE_REGION__MSG__USE_ATTRIBUTES_FROM_REGION_0_IS_NOT_WITH_PERSISTENCE, 
+                                                               new Object[] { String.valueOf(regionFunctionArgs.getUseAttributesFrom()) });
+ 
+         throw new IllegalArgumentException(message);
+       }
+       
+       if (!diskStoreExists(cache, diskStore)) {
+         throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_DISKSTORE_UNKNOWN_DISKSTORE_0, new Object[] {diskStore}));
+       }
+     }
+     
+     RegionFunctionArgs.ExpirationAttrs entryExpirationIdleTime = regionFunctionArgs.getEntryExpirationIdleTime();
+     RegionFunctionArgs.ExpirationAttrs entryExpirationTTL = regionFunctionArgs.getEntryExpirationTTL();
+     RegionFunctionArgs.ExpirationAttrs regionExpirationIdleTime = regionFunctionArgs.getRegionExpirationIdleTime();
+     RegionFunctionArgs.ExpirationAttrs regionExpirationTTL = regionFunctionArgs.getRegionExpirationTTL();
+     
+     if ((!regionFunctionArgs.isSetStatisticsEnabled() || !regionFunctionArgs.isStatisticsEnabled())
+         && (entryExpirationIdleTime != null || entryExpirationTTL != null
+             || regionExpirationIdleTime != null || regionExpirationTTL != null)) {
+       String message = LocalizedStrings.AttributesFactory_STATISTICS_MUST_BE_ENABLED_FOR_EXPIRATION.toLocalizedString();
+       throw new IllegalArgumentException(message + ".");
+     }
+     
+     boolean compressorFailure = false;
+     if(regionFunctionArgs.isSetCompressor()) {
+       String compressorClassName = regionFunctionArgs.getCompressor();
+       Object compressor = null;
+       try {
+         Class<?> compressorClass = (Class<?>) ClassPathLoader.getLatest().forName(compressorClassName);
+         compressor = compressorClass.newInstance();
+       } catch (InstantiationException e) {
+         compressorFailure = true;
+       } catch (IllegalAccessException e) {
+         compressorFailure = true;
+       } catch (ClassNotFoundException e) {
+         compressorFailure = true;
+       }
+       
+       if (compressorFailure || !(compressor instanceof Compressor)) {
+         throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__INVALID_COMPRESSOR,
+             new Object[] { regionFunctionArgs.getCompressor() }));
+       }
+     }
+   }
+   
+   private boolean diskStoreExists(Cache cache, String diskStoreName) {
+     ManagementService managementService = ManagementService.getExistingManagementService(cache);
+     DistributedSystemMXBean dsMXBean = managementService.getDistributedSystemMXBean();
+     Map<String, String[]> diskstore = dsMXBean.listMemberDiskstore();
+     
+     Set<Entry<String, String[]>> entrySet = diskstore.entrySet();
+     
+     for (Entry<String, String[]> entry : entrySet) {
+       String[] value = entry.getValue();
+       if (CliUtil.contains(value, diskStoreName)) {
+         return true;
+       }
+     }
+     
+     return false;
+   }
+ 
+   private static <K, V> FetchRegionAttributesFunctionResult<K, V> getRegionAttributes(Cache cache, String regionPath) {
+     if (!isClusterwideSameConfig(cache, regionPath)) {
+       throw new IllegalStateException(CliStrings.format(CliStrings.CREATE_REGION__MSG__USE_ATTRIBUTES_FORM_REGIONS_EXISTS_BUT_DIFFERENT_SCOPE_OR_DATAPOLICY_USE_DESCRIBE_REGION_FOR_0, regionPath));
+     }
+     FetchRegionAttributesFunctionResult<K, V> attributes = null;
+ 
+     // First check whether the region exists on a this manager, if yes then no
+     // need to use FetchRegionAttributesFunction to fetch RegionAttributes
+     try {
+       attributes = FetchRegionAttributesFunction.getRegionAttributes(regionPath);
+     } catch (IllegalArgumentException e) {
+       /* region doesn't exist on the manager */
+     }
+ 
+     if (attributes == null) {
+       // find first member which has the region
+       Set<DistributedMember> regionAssociatedMembers = CliUtil.getRegionAssociatedMembers(regionPath, cache, false);
+       if (regionAssociatedMembers != null && !regionAssociatedMembers.isEmpty()) {
+         DistributedMember distributedMember = regionAssociatedMembers.iterator().next();
+         ResultCollector<?, ?> resultCollector = CliUtil.executeFunction(FetchRegionAttributesFunction.INSTANCE, regionPath, distributedMember);
+         List<?> resultsList = (List<?>) resultCollector.getResult();
+         
+         if (resultsList != null && !resultsList.isEmpty()) {
+           for (int i = 0; i < resultsList.size(); i++) {
+             Object object = resultsList.get(i);
+             if (object instanceof IllegalArgumentException) {
+               throw (IllegalArgumentException) object;
+             } else if (object instanceof Throwable) {
+               Throwable th = (Throwable) object;
+               LogWrapper.getInstance().info(CliUtil.stackTraceAsString((th)));
+               throw new IllegalArgumentException(CliStrings.format(CliStrings.CREATE_REGION__MSG__COULD_NOT_RETRIEVE_REGION_ATTRS_FOR_PATH_0_REASON_1, new Object[] {regionPath, th.getMessage()}));
+             } else { // has to be RegionAttributes
+               @SuppressWarnings("unchecked") // to avoid warning :(
+               FetchRegionAttributesFunctionResult<K, V> regAttr = ((FetchRegionAttributesFunctionResult<K, V>) object);
+               if (attributes == null) {
+                 attributes = regAttr;
+                 break;
+               } //attributes null check
+             }// not IllegalArgumentException or other throwable
+           }// iterate over list - there should be only one result in the list
+         }// result list is not null or mpty
+       }// regionAssociatedMembers is not-empty
+     }// attributes are null because do not exist on local member
+     
+     
+     return attributes;
+   }
+ 
+   private static boolean isClusterwideSameConfig(Cache cache, String regionPath) {
+     ManagementService managementService = ManagementService.getExistingManagementService(cache);
+     
+     DistributedSystemMXBean dsMXBean = managementService.getDistributedSystemMXBean();
+     
+     Set<DistributedMember> allMembers = CliUtil.getAllNormalMembers(cache);
+     
+     RegionAttributesData regionAttributesToValidateAgainst = null;
+     for (DistributedMember distributedMember : allMembers) {
+       ObjectName regionObjectName;
+       try {
+         regionObjectName = dsMXBean.fetchRegionObjectName(CliUtil.getMemberNameOrId(distributedMember), regionPath);
+         RegionMXBean regionMBean = managementService.getMBeanInstance(regionObjectName, RegionMXBean.class);
+         RegionAttributesData regionAttributes = regionMBean.listRegionAttributes();
+ 
+         if (regionAttributesToValidateAgainst == null) {
+           regionAttributesToValidateAgainst = regionAttributes;
+         } else if ( !(regionAttributesToValidateAgainst.getScope().equals(regionAttributes.getScope()) ||
+             regionAttributesToValidateAgainst.getDataPolicy().equals(regionAttributes.getDataPolicy())) ) {
+           return false;
+         }
+       } catch (Exception e) {
+         //ignore
+       }
+     }
+ 
+     return true;
+   }
+ 
+   private boolean isClassNameValid(String fqcn) {
+     if (fqcn.isEmpty()) {
+       return true;
+     }
+     
+     String regex = "([\\p{L}_$][\\p{L}\\p{N}_$]*\\.)*[\\p{L}_$][\\p{L}\\p{N}_$]*";
+     return Pattern.matches(regex, fqcn);
+   }
+ 
+   @CliCommand(value = { CliStrings.DESTROY_REGION }, help = CliStrings.DESTROY_REGION__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = CliStrings.TOPIC_GEMFIRE_REGION, writesToSharedConfiguration = true)
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.DESTROY_REGION)
+   public Result destroyRegion(
+       @CliOption(key = CliStrings.DESTROY_REGION__REGION,
+           optionContext = ConverterHint.REGIONPATH,
+           mandatory = true,
+           help = CliStrings.DESTROY_REGION__REGION__HELP)
+       String regionPath) {
+     Result result = null;
+     XmlEntity xmlEntity = null;
+     try {
+       if (regionPath != null) {
+         if (regionPath.trim().isEmpty()) { // unlikely through gfsh
+           result = ResultBuilder.createInfoResult(CliStrings.format(CliStrings.DESTROY_REGION__MSG__REGIONPATH_0_NOT_VALID,
+               new Object[] { regionPath }));
+         } else if (regionPath.equals(Region.SEPARATOR)) {
+           result = ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.DESTROY_REGION__MSG__REGIONPATH_0_NOT_VALID,
+               new Object[] { regionPath }));
+         } else {
+           boolean isRegionDestroyed = false;
+           String message = "";
+           Cache cache = CacheFactory.getAnyInstance();
+           ManagementService managementService = ManagementService.getExistingManagementService(cache);
+           String regionPathToUse = regionPath;
+           String regionName = regionPath.startsWith(Region.SEPARATOR) ? regionPath.substring(1) : regionPath;
+           
+           if (!regionPathToUse.startsWith(Region.SEPARATOR)) {
+             regionPathToUse = Region.SEPARATOR + regionPathToUse;
+           }
+           Set<DistributedMember>[] regionMembersList = findMembersForRegion(cache, managementService, regionPathToUse);
+           if (regionMembersList != null) {
+             Set<DistributedMember> regionMembers      = regionMembersList[0];
+             Set<DistributedMember> localRegionMembers = regionMembersList[1];
+             
+             if (regionMembers != null && !regionMembers.isEmpty()) { // Distributed Region with this region path exists
+               Region<?, ?> regionInThisCache = cache.getRegion(regionPath);
+               if (regionInThisCache != null) {// exists in local cache?
+                 regionInThisCache.destroyRegion(); // this is for a Distributed Region & destroy event will be propagated
+                 message = CliStrings.format(CliStrings.DESTROY_REGION__MSG__REGION_0_1_DESTROYED, new Object[] { regionPath, /*subRegionMessage*/"" });
+                 xmlEntity = new XmlEntity(CacheXml.REGION, "name", regionName);
+                 isRegionDestroyed = true;
+               } else {
+                 CliFunctionResult destroyRegionResult = null;
+                 Iterator<DistributedMember> it = regionMembers.iterator();
+                 DistributedMember firstMember = it.next(); // regionMembers is not empty
+ 
+                 ResultCollector<?, ?> resultCollector = CliUtil.executeFunction(RegionDestroyFunction.INSTANCE, regionPath, firstMember);
+                 List<CliFunctionResult> destroyRegionResults = (List<CliFunctionResult>) resultCollector.getResult();
+ 
+                 destroyRegionResult = destroyRegionResults.get(0);
+ 
+                 if (destroyRegionResult.isSuccessful()) {
+                   message = CliStrings.format(CliStrings.DESTROY_REGION__MSG__REGION_0_1_DESTROYED, new Object[] { regionPath, /*subRegionMessage*/"" });
+                   xmlEntity = destroyRegionResult.getXmlEntity();
+                   isRegionDestroyed = true;
+                 } else if (destroyRegionResult.getThrowable() != null) {
+                   Throwable t = destroyRegionResult.getThrowable();
+                   LogWrapper.getInstance().info(t.getMessage(), t);
+                   message = CliStrings.format(CliStrings.DESTROY_REGION__MSG__ERROR_OCCURRED_WHILE_DESTROYING_0_REASON_1,
+                       new Object[] { regionPath, t.getMessage() });
+                   isRegionDestroyed = false;
+                 } else {
+                   message = CliStrings.format(CliStrings.DESTROY_REGION__MSG__UNKNOWN_RESULT_WHILE_DESTROYING_REGION_0_REASON_1,
+                       new Object[] { regionPath, destroyRegionResult.getMessage() });
+                   isRegionDestroyed = false;
+                 }
+               }
+             }
+ 
+             if (localRegionMembers != null && !localRegionMembers.isEmpty()) { // Local Regions with this region path also exist
+               Region<?, ?> regionInThisCache = cache.getRegion(regionPath);
+               if (regionInThisCache != null) {// exists in local cache?
+                 regionInThisCache.destroyRegion();
+                 message = CliStrings.format(CliStrings.DESTROY_REGION__MSG__REGION_0_1_DESTROYED, new Object[] { regionPath, /*subRegionMessage*/"" });
+                 xmlEntity = new XmlEntity(CacheXml.REGION, "name", regionName);
+                 isRegionDestroyed = true;
+               }
+               DistributedMember distributedMember = cache.getDistributedSystem().getDistributedMember();
+               localRegionMembers.remove(distributedMember); //remove this member from the found members
+               
+               CliFunctionResult destroyRegionResult = null;
+ 
+               ResultCollector<?, ?> resultCollector = CliUtil.executeFunction(RegionDestroyFunction.INSTANCE, regionPath, localRegionMembers);
+               List<CliFunctionResult> resultsList = (List<CliFunctionResult>) resultCollector.getResult();
+               for (int i = 0; i < resultsList.size(); i++) {
+                 destroyRegionResult = resultsList.get(i) ;
+                 if (destroyRegionResult.isSuccessful()) {
+                   message = CliStrings.format(CliStrings.DESTROY_REGION__MSG__REGION_0_1_DESTROYED, new Object[] { regionPath, /*subRegionMessage*/"" });
+                   xmlEntity = destroyRegionResult.getXmlEntity();
+                   isRegionDestroyed = true;
+                 } else if (destroyRegionResult.getThrowable() != null) {
+                   Throwable t = destroyRegionResult.getThrowable();
+                   LogWrapper.getInstance().info(t.getMessage(), t);
+                   message = CliStrings.format(CliStrings.DESTROY_REGION__MSG__ERROR_OCCURRED_WHILE_DESTROYING_0_REASON_1,
+                       new Object[] { regionPath, t.getMessage() });
+                   isRegionDestroyed = false;
+                 } else {
+                   message = CliStrings.format(CliStrings.DESTROY_REGION__MSG__UNKNOWN_RESULT_WHILE_DESTROYING_REGION_0_REASON_1,
+                       new Object[] { regionPath, destroyRegionResult.getMessage() });
+                   isRegionDestroyed = false;
+                 }
+               }
+             }
+           } else {
+             message = CliStrings.format(CliStrings.DESTROY_REGION__MSG__COULDNOT_FIND_REGIONPATH_0_IN_GEMFIRE, new Object[] { regionPath, "jmx-manager-update-rate milliseconds" });
+             isRegionDestroyed = false;
+           }
+           if (isRegionDestroyed) {
+             result = ResultBuilder.createInfoResult(message);
+           } else {
+             result = ResultBuilder.createUserErrorResult(message);
+           }
+         }
+       } else {
+         result = ResultBuilder.createInfoResult(CliStrings.DESTROY_REGION__MSG__SPECIFY_REGIONPATH_TO_DESTROY);
+       }
+     } catch (IllegalStateException e) {
+       result = ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.DESTROY_REGION__MSG__ERROR_WHILE_DESTROYING_REGION_0_REASON_1, new Object[] {regionPath, e.getMessage()}));
+     } catch (Exception e) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.DESTROY_REGION__MSG__ERROR_WHILE_DESTROYING_REGION_0_REASON_1, new Object[] {regionPath, e.getMessage()}));
+     }
+ 
+     if (xmlEntity != null) {
+       result.setCommandPersisted((new SharedConfigurationWriter()).deleteXmlEntity(xmlEntity, null));
+     }
+     return result;
+   }
+ 
+   private Set<DistributedMember>[] findMembersForRegion(Cache cache, ManagementService managementService, String regionPath) {
+     Set<DistributedMember>[] membersList = null;
+     Set<String> regionMemberIds = Collections.emptySet();
+     Set<String> localRegionMemberIds = Collections.emptySet();
+     MBeanServer mbeanServer = MBeanJMXAdapter.mbeanServer;
+     String queryExp = MessageFormat.format(MBeanJMXAdapter.OBJECTNAME__REGION_MXBEAN, new Object[] {regionPath, "*"});
+ //    String queryExp = MessageFormat.format(MBeanJMXAdapter.OBJECTNAME__REGION_MXBEAN, new Object[] {MBeanJMXAdapter.makeCompliantRegionNameAppender(regionPath), "*"});
+     try {
+       ObjectName queryExpON = new ObjectName(queryExp);
+       Set<ObjectName> queryNames = mbeanServer.queryNames(null, queryExpON);
+       if (queryNames != null && queryNames.size() != 0) {
+         regionMemberIds      = new HashSet<String>();
+         localRegionMemberIds = new HashSet<String>();
+ 
+         membersList = (Set<DistributedMember>[])Array.newInstance(HashSet.class, 2);
+       }
+       for (ObjectName regionMBeanObjectName : queryNames) {
+         try {
+           RegionMXBean regionMXBean = managementService.getMBeanInstance(regionMBeanObjectName, RegionMXBean.class);
+           if (regionMXBean != null) {
+             RegionAttributesData regionAttributes = regionMXBean.listRegionAttributes();
+             String scope = regionAttributes.getScope();
+             if (Scope.LOCAL.equals(Scope.fromString(scope))) {
+               localRegionMemberIds.add(regionMXBean.getMember());
+             } else {
+               regionMemberIds.add(regionMXBean.getMember());
+             }
+           }
+         } catch (ClassCastException e) {
+           LogWriter logger = cache.getLogger();
+           if (logger.finerEnabled()) {
+             logger.finer(regionMBeanObjectName+" is not a "+RegionMXBean.class.getSimpleName(), e);
+           }
+         }
+       }
+       if (!regionMemberIds.isEmpty()) {
+         membersList[0] = getMembersByIds(cache, regionMemberIds);
+       }
+       if (!localRegionMemberIds.isEmpty()) {
+         membersList[1] = getMembersByIds(cache, localRegionMemberIds);
+       }
+       
+     } catch (MalformedObjectNameException e) {
+       LogWrapper.getInstance().info(e.getMessage(), e);
+     } catch (NullPointerException e) {
+       LogWrapper.getInstance().info(e.getMessage(), e);
+     }
+ 
+     return membersList;
+   }
+ 
+   private Set<DistributedMember> getMembersByIds(Cache cache, Set<String> memberIds) {
+     Set<DistributedMember> foundMembers = Collections.emptySet();
+     if (memberIds != null && !memberIds.isEmpty()) {
+       foundMembers = new HashSet<DistributedMember>();
+       Set<DistributedMember> allNormalMembers = CliUtil.getAllNormalMembers(cache);
+ 
+       for (String memberId : memberIds) {
+         for (DistributedMember distributedMember : allNormalMembers) {
+           if (memberId.equals(distributedMember.getId()) || memberId.equals(distributedMember.getName())) {
+             foundMembers.add(distributedMember);
+           }
+         }
+       }
+     }
+     return foundMembers;
+   }
+ 
+   @CliAvailabilityIndicator({ CliStrings.ALTER_REGION, CliStrings.CREATE_REGION, CliStrings.DESTROY_REGION })
+   public boolean isRegionCommandAvailable() {
+     boolean isAvailable = true; // always available on server
+     if (CliUtil.isGfshVM()) { // in gfsh check if connected //TODO - Abhishek: make this better
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;
+   }
+ }


[47/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
index 0000000,3af8c15..be139b0
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
@@@ -1,0 -1,3778 +1,3807 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.distributed.internal;
+ 
+ import com.gemstone.gemfire.distributed.DistributedSystem;
+ import com.gemstone.gemfire.internal.Config;
+ import com.gemstone.gemfire.internal.ConfigSource;
+ import com.gemstone.gemfire.internal.logging.InternalLogWriter;
+ import com.gemstone.gemfire.internal.logging.LogConfig;
+ import com.gemstone.gemfire.internal.tcp.Connection;
+ import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
+ 
+ import java.io.File;
+ import java.lang.reflect.Field;
+ import java.lang.reflect.Method;
+ import java.net.InetAddress;
+ import java.util.*;
+ 
+ /**
+  * Provides accessor (and in some cases mutator) methods for the
+  * various GemFire distribution configuration properties.  The
+  * interface also provides constants for the names of properties and
+  * their default values.
+  *
+  * <P>
+  *
+  * Decriptions of these properties can be found <a
+  * href="../DistributedSystem.html#configuration">here</a>.
+  *
+  * @see com.gemstone.gemfire.internal.Config
+  *
+  * @author David Whitlock
+  * @author Darrel Schneider
+  *
+  * @since 2.1
+  */
+ public interface DistributionConfig extends Config, LogConfig {
+ 
+   ////////////////////  Instance Methods  ////////////////////
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#name">"name"</a> property
+    * Gets the member's name.
+    * A name is optional and by default empty.
+    * If set it must be unique in the ds.
+    * When set its used by tools to help identify the member.
+    * <p> The default value is: {@link #DEFAULT_NAME}.
+    * @return the system's name.
+    */
+   @ConfigAttributeGetter(name=NAME_NAME)
+   public String getName();
+ 
+   /**
+    * Sets the member's name.
+    * <p> The name can not be changed while the system is running.
+    * @throws IllegalArgumentException if the specified value is not acceptable.
+    * @throws com.gemstone.gemfire.UnmodifiableException if this attribute can not be modified.
+    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
+    *   when writing to the system's configuration file.
+    */
+   @ConfigAttributeSetter(name=NAME_NAME)
+   public void setName(String value);
+ 
+   /** The name of the "name" property */
+   @ConfigAttribute(type=String.class)
+   public static final String NAME_NAME = "name";
+ 
+ 
+ 
+   /**
+    * The default system name.
+    * <p> Actual value of this constant is <code>""</code>.
+    */
+   public static final String DEFAULT_NAME = "";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#mcast-port">"mcast-port"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=MCAST_PORT_NAME)
+   public int getMcastPort();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#mcast-port">"mcast-port"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=MCAST_PORT_NAME)
+   public void setMcastPort(int value);
+ 
+ 
+   /** The default value of the "mcastPort" property */
+   public static final int DEFAULT_MCAST_PORT = 0;
+   /**
+    * The minimum mcastPort.
+    * <p> Actual value of this constant is <code>0</code>.
+    */
+   public static final int MIN_MCAST_PORT = 0;
+   /**
+    * The maximum mcastPort.
+    * <p> Actual value of this constant is <code>65535</code>.
+    */
+   public static final int MAX_MCAST_PORT = 65535;
+ 
+   /** The name of the "mcastPort" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_MCAST_PORT, max=MAX_MCAST_PORT)
+   public static final String MCAST_PORT_NAME = "mcast-port";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#tcp-port">"tcp-port"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=TCP_PORT_NAME)
+   public int getTcpPort();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#tcp-port">"tcp-port"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=TCP_PORT_NAME)
+   public void setTcpPort(int value);
+ 
+   /** The default value of the "tcpPort" property */
+   public static final int DEFAULT_TCP_PORT = 0;
+   /**
+    * The minimum tcpPort.
+    * <p> Actual value of this constant is <code>0</code>.
+    */
+   public static final int MIN_TCP_PORT = 0;
+   /**
+    * The maximum tcpPort.
+    * <p> Actual value of this constant is <code>65535</code>.
+    */
+   public static final int MAX_TCP_PORT = 65535;
+   /** The name of the "tcpPort" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_TCP_PORT, max=MAX_TCP_PORT)
+   public static final String TCP_PORT_NAME = "tcp-port";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#mcast-address">"mcast-address"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=MCAST_ADDRESS_NAME)
+   public InetAddress getMcastAddress();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#mcast-address">"mcast-address"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=MCAST_ADDRESS_NAME)
+   public void setMcastAddress(InetAddress value);
+ 
+ 
+   /** The name of the "mcastAddress" property */
+   @ConfigAttribute(type=InetAddress.class)
+   public static final String MCAST_ADDRESS_NAME = "mcast-address";
+ 
+   /** The default value of the "mcastAddress" property.
+    * Current value is <code>239.192.81.1</code>
+    */
+   public static final InetAddress DEFAULT_MCAST_ADDRESS = AbstractDistributionConfig._getDefaultMcastAddress();
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#mcast-ttl">"mcast-ttl"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=MCAST_TTL_NAME)
+   public int getMcastTtl();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#mcast-ttl">"mcast-ttl"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=MCAST_TTL_NAME)
+   public void setMcastTtl(int value);
+ 
+   /** The default value of the "mcastTtl" property */
+   public static final int DEFAULT_MCAST_TTL = 32;
+   /**
+    * The minimum mcastTtl.
+    * <p> Actual value of this constant is <code>0</code>.
+    */
+   public static final int MIN_MCAST_TTL = 0;
+   /**
+    * The maximum mcastTtl.
+    * <p> Actual value of this constant is <code>255</code>.
+    */
+   public static final int MAX_MCAST_TTL = 255;
+ 
+   /** The name of the "mcastTtl" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_MCAST_TTL, max=MAX_MCAST_TTL)
+   public static final String MCAST_TTL_NAME = "mcast-ttl";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#bind-address">"bind-address"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=BIND_ADDRESS_NAME)
+   public String getBindAddress();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#bind-address">"bind-address"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=BIND_ADDRESS_NAME)
+   public void setBindAddress(String value);
+ 
+   /** The name of the "bindAddress" property */
+   @ConfigAttribute(type=String.class)
+   public static final String BIND_ADDRESS_NAME = "bind-address";
+ 
+   /** The default value of the "bindAddress" property.
+    * Current value is an empty string <code>""</code>
+    */
+   public static final String DEFAULT_BIND_ADDRESS = "";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#server-bind-address">"server-bind-address"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=SERVER_BIND_ADDRESS_NAME)
+   public String getServerBindAddress();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#server-bind-address">"server-bind-address"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=SERVER_BIND_ADDRESS_NAME)
+   public void setServerBindAddress(String value);
+ 
+   /** The name of the "serverBindAddress" property */
+   @ConfigAttribute(type=String.class)
+   public static final String SERVER_BIND_ADDRESS_NAME = "server-bind-address";
+ 
+   /** The default value of the "serverBindAddress" property.
+    * Current value is an empty string <code>""</code>
+    */
+   public static final String DEFAULT_SERVER_BIND_ADDRESS = "";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#locators">"locators"</a> property
+    */
+   @ConfigAttributeGetter(name=LOCATORS_NAME)
+   public String getLocators();
+   /**
+    * Sets the system's locator list.
+    * A locator list is optional and by default empty.
+    * Its used to by the system to locator other system nodes
+    * and to publish itself so it can be located by others.
+    * @param value must be of the form <code>hostName[portNum]</code>.
+    *  Multiple elements are allowed and must be seperated by a comma.
+    * @throws IllegalArgumentException if the specified value is not acceptable.
+    * @throws com.gemstone.gemfire.UnmodifiableException if this attribute can not be modified.
+    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
+    *   when writing to the system's configuration file.
+    */
+   @ConfigAttributeSetter(name=LOCATORS_NAME)
+   public void setLocators(String value);
+ 
+   /** The name of the "locators" property */
+   @ConfigAttribute(type=String.class)
+   public static final String LOCATORS_NAME = "locators";
+ 
+   /** The default value of the "locators" property */
+   public static final String DEFAULT_LOCATORS = "";
+ 
+   /**
+    * Locator wait time - how long to wait for a locator to start before giving up &
+    * throwing a GemFireConfigException
+    */
+   @ConfigAttribute(type=Integer.class)
+   public static final String LOCATOR_WAIT_TIME_NAME = "locator-wait-time";
+   public static final int DEFAULT_LOCATOR_WAIT_TIME = 0;
+   @ConfigAttributeGetter(name=LOCATOR_WAIT_TIME_NAME)
+   public int getLocatorWaitTime();
+   @ConfigAttributeSetter(name=LOCATOR_WAIT_TIME_NAME)
+   public void setLocatorWaitTime(int seconds);
+   
+   
+   /**
+    * returns the value of the <a href="../DistribytedSystem.html#start-locator">"start-locator"
+    * </a> property
+    */
+   @ConfigAttributeGetter(name=START_LOCATOR_NAME)
+   public String getStartLocator();
+   /**
+    * Sets the start-locator property.  This is a string in the form
+    * bindAddress[port] and, if set, tells the distributed system to start
+    * a locator prior to connecting
+    * @param value must be of the form <code>hostName[portNum]</code>
+    */
+   @ConfigAttributeSetter(name=START_LOCATOR_NAME)
+   public void setStartLocator(String value);
+ 
+   /**
+    * The name of the "start-locator" property
+    */
+   @ConfigAttribute(type=String.class)
+   public static final String START_LOCATOR_NAME = "start-locator";
+   /**
+    * The default value of the "start-locator" property
+    */
+   public static final String DEFAULT_START_LOCATOR = "";
+   
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#deploy-working-dir">"deploy-working-dir"</a> property
+    */
+   @ConfigAttributeGetter(name=DEPLOY_WORKING_DIR)
+   public File getDeployWorkingDir();
+   
+   /**
+    * Sets the system's deploy working directory.
+    * @throws IllegalArgumentException if the specified value is not acceptable.
+    * @throws com.gemstone.gemfire.UnmodifiableException if this attribute can not be modified.
+    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
+    *   when writing to the system's configuration file.
+    */
+   @ConfigAttributeSetter(name=DEPLOY_WORKING_DIR)
+   public void setDeployWorkingDir(File value);
+   
+   /**
+    * The name of the "deploy-working-dir" property.
+    */
+   @ConfigAttribute(type=File.class)
+   public static final String DEPLOY_WORKING_DIR = "deploy-working-dir";
+   
+   /**
+    * Default will be the current working directory as determined by 
+    * <code>System.getProperty("user.dir")</code>.
+    */
+   public static final File DEFAULT_DEPLOY_WORKING_DIR = new File(".");
+   
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#user-command-packages">"user-command-packages"</a> property
+    */
+   @ConfigAttributeGetter(name=USER_COMMAND_PACKAGES)
+   public String getUserCommandPackages();
+   
+   /**
+    * Sets the system's user command path.
+    * @throws IllegalArgumentException if the specified value is not acceptable.
+    * @throws com.gemstone.gemfire.UnmodifiableException if this attribute can not be modified.
+    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
+    *   when writing to the system's configuration file.
+    */
+   @ConfigAttributeSetter(name=USER_COMMAND_PACKAGES)
+   public void setUserCommandPackages(String value);
+   
+   /**
+    * The name of the "user-command-packages" property.
+    */
+   @ConfigAttribute(type=String.class)
+   public static final String USER_COMMAND_PACKAGES = "user-command-packages";
+   
+   /**
+    * The default value of the "user-command-packages" property
+    */
+   public static final String DEFAULT_USER_COMMAND_PACKAGES = "";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#log-file">"log-file"</a> property
+    *
+    * @return <code>null</code> if logging information goes to standard
+    *         out
+    */
+   @ConfigAttributeGetter(name=LOG_FILE_NAME)
+   public File getLogFile();
+   /**
+    * Sets the system's log file.
+    * <p> Non-absolute log files are relative to the system directory.
+    * <p> The system log file can not be changed while the system is running.
+    * @throws IllegalArgumentException if the specified value is not acceptable.
+    * @throws com.gemstone.gemfire.UnmodifiableException if this attribute can not be modified.
+    * @throws com.gemstone.gemfire.GemFireIOException if the set failure is caused by an error
+    *   when writing to the system's configuration file.
+    */
+   @ConfigAttributeSetter(name=LOG_FILE_NAME)
+   public void setLogFile(File value);
+ 
+   /** The name of the "logFile" property */
+   @ConfigAttribute(type=File.class)
+   public static final String LOG_FILE_NAME = "log-file";
+ 
+   /**
+    * The default log file.
+    * <p> Actual value of this constant is <code>""</code> which directs
+    * log message to standard output.
+    */
+   public static final File DEFAULT_LOG_FILE = new File("");
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#log-level">"log-level"</a> property
+    *
+    * @see com.gemstone.gemfire.internal.logging.LogWriterImpl
+    */
+   @ConfigAttributeGetter(name=LOG_LEVEL_NAME)
+   public int getLogLevel();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#log-level">"log-level"</a> property
+    *
+    * @see com.gemstone.gemfire.internal.logging.LogWriterImpl
+    */
+   @ConfigAttributeSetter(name=LOG_LEVEL_NAME)
+   public void setLogLevel(int value);
+ 
+   /**
+    * The default log level.
+    * <p> Actual value of this constant is {@link InternalLogWriter#CONFIG_LEVEL}.
+    */
+   public static final int DEFAULT_LOG_LEVEL = InternalLogWriter.CONFIG_LEVEL;
+   /**
+    * The minimum log level.
+    * <p> Actual value of this constant is {@link InternalLogWriter#ALL_LEVEL}.
+    */
+   public static final int MIN_LOG_LEVEL = InternalLogWriter.ALL_LEVEL;
+   /**
+    * The maximum log level.
+    * <p> Actual value of this constant is {@link InternalLogWriter#NONE_LEVEL}.
+    */
+   public static final int MAX_LOG_LEVEL = InternalLogWriter.NONE_LEVEL;
+ 
+   /** The name of the "logLevel" property */
+   // type is String because the config file contains "config", "debug", "fine" etc, not a code, but the setter/getter accepts int
+   @ConfigAttribute(type=String.class)
+   public static final String LOG_LEVEL_NAME = "log-level";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#statistic-sampling-enabled">"statistic-sampling-enabled"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=STATISTIC_SAMPLING_ENABLED_NAME)
+   public boolean getStatisticSamplingEnabled();
+   /**
+    * Sets StatisticSamplingEnabled
+    */
+   @ConfigAttributeSetter(name=STATISTIC_SAMPLING_ENABLED_NAME)
+   public void setStatisticSamplingEnabled(boolean newValue);
+ 
+   /** The name of the "statisticSamplingEnabled" property */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String STATISTIC_SAMPLING_ENABLED_NAME =
+     "statistic-sampling-enabled";
+ 
+   /** The default value of the "statisticSamplingEnabled" property */
+   public static final boolean DEFAULT_STATISTIC_SAMPLING_ENABLED = true;
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#statistic-sample-rate">"statistic-sample-rate"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=STATISTIC_SAMPLE_RATE_NAME)
+   public int getStatisticSampleRate();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#statistic-sample-rate">"statistic-sample-rate"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=STATISTIC_SAMPLE_RATE_NAME)
+   public void setStatisticSampleRate(int value);
+ 
+   /**
+    * The default statistic sample rate.
+    * <p> Actual value of this constant is <code>1000</code> milliseconds.
+    */
+   public static final int DEFAULT_STATISTIC_SAMPLE_RATE = 1000;
+   /**
+    * The minimum statistic sample rate.
+    * <p> Actual value of this constant is <code>100</code> milliseconds.
+    */
+   public static final int MIN_STATISTIC_SAMPLE_RATE = 100;
+   /**
+    * The maximum statistic sample rate.
+    * <p> Actual value of this constant is <code>60000</code> milliseconds.
+    */
+   public static final int MAX_STATISTIC_SAMPLE_RATE = 60000;
+ 
+   /** The name of the "statisticSampleRate" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_STATISTIC_SAMPLE_RATE, max=MAX_STATISTIC_SAMPLE_RATE)
+   public static final String STATISTIC_SAMPLE_RATE_NAME =
+     "statistic-sample-rate";
+ 
+   /**
+    * Returns the value of the <a href="../DistributedSystem.html#statistic-archive-file">"statistic-archive-file"</a> property.
+    *
+    * @return <code>null</code> if no file was specified
+    */
+   @ConfigAttributeGetter(name=STATISTIC_ARCHIVE_FILE_NAME)
+   public File getStatisticArchiveFile();
+   /**
+    * Sets the value of the <a href="../DistributedSystem.html#statistic-archive-file">"statistic-archive-file"</a> property.
+    */
+   @ConfigAttributeSetter(name=STATISTIC_ARCHIVE_FILE_NAME)
+   public void setStatisticArchiveFile(File value);
+ 
+   /** The name of the "statisticArchiveFile" property */
+   @ConfigAttribute(type=File.class)
+   public static final String STATISTIC_ARCHIVE_FILE_NAME =
+     "statistic-archive-file";
+ 
+   /**
+    * The default statistic archive file.
+    * <p> Actual value of this constant is <code>""</code> which
+    * causes no archive file to be created.
+    */
+   public static final File DEFAULT_STATISTIC_ARCHIVE_FILE = new File(""); // fix for bug 29786
+ 
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cache-xml-file">"cache-xml-file"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=CACHE_XML_FILE_NAME)
+   public File getCacheXmlFile();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cache-xml-file">"cache-xml-file"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=CACHE_XML_FILE_NAME)
+   public void setCacheXmlFile(File value);
+ 
+   /** The name of the "cacheXmlFile" property */
+   @ConfigAttribute(type=File.class)
+   public static final String CACHE_XML_FILE_NAME = "cache-xml-file";
+ 
+   /** The default value of the "cacheXmlFile" property */
+   public static final File DEFAULT_CACHE_XML_FILE = new File("cache.xml");
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#ack-wait-threshold">"ack-wait-threshold"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=ACK_WAIT_THRESHOLD_NAME)
+   public int getAckWaitThreshold();
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#ack-wait-threshold">"ack-wait-threshold"</a>
+    * property
+      * Setting this value too low will cause spurious alerts.
+      */
+   @ConfigAttributeSetter(name=ACK_WAIT_THRESHOLD_NAME)
+   public void setAckWaitThreshold(int newThreshold);
+ 
+   /**
+    * The default AckWaitThreshold.
+    * <p> Actual value of this constant is <code>15</code> seconds.
+    */
+   public static final int DEFAULT_ACK_WAIT_THRESHOLD = 15;
+   /**
+    * The minimum AckWaitThreshold.
+    * <p> Actual value of this constant is <code>1</code> second.
+    */
+   public static final int MIN_ACK_WAIT_THRESHOLD = 1;
+   /**
+    * The maximum AckWaitThreshold.
+    * <p> Actual value of this constant is <code>MAX_INT</code> seconds.
+    */
+   public static final int MAX_ACK_WAIT_THRESHOLD = Integer.MAX_VALUE;
+   /** The name of the "ackWaitThreshold" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_ACK_WAIT_THRESHOLD)
+   public static final String ACK_WAIT_THRESHOLD_NAME = "ack-wait-threshold";
+ 
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#ack-severe-alert-threshold">"ack-severe-alert-threshold"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=ACK_SEVERE_ALERT_THRESHOLD_NAME)
+   public int getAckSevereAlertThreshold();
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#ack-severe-alert-threshold">"ack-severe-alert-threshold"</a>
+    * property
+      * Setting this value too low will cause spurious forced disconnects.
+      */
+   @ConfigAttributeSetter(name=ACK_SEVERE_ALERT_THRESHOLD_NAME)
+   public void setAckSevereAlertThreshold(int newThreshold);
+ 
+   /**
+    * The default ackSevereAlertThreshold.
+    * <p> Actual value of this constant is <code>0</code> seconds, which
+    * turns off shunning.
+    */
+   public static final int DEFAULT_ACK_SEVERE_ALERT_THRESHOLD = 0;
+   /**
+    * The minimum ackSevereAlertThreshold.
+    * <p> Actual value of this constant is <code>0</code> second,
+    * which turns off shunning.
+    */
+   public static final int MIN_ACK_SEVERE_ALERT_THRESHOLD = 0;
+   /**
+    * The maximum ackSevereAlertThreshold.
+    * <p> Actual value of this constant is <code>MAX_INT</code> seconds.
+    */
+   public static final int MAX_ACK_SEVERE_ALERT_THRESHOLD = Integer.MAX_VALUE;
+   /** The name of the "ackSevereAlertThreshold" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_ACK_SEVERE_ALERT_THRESHOLD)
+   public static final String ACK_SEVERE_ALERT_THRESHOLD_NAME = "ack-severe-alert-threshold";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#archive-file-size-limit">"archive-file-size-limit"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=ARCHIVE_FILE_SIZE_LIMIT_NAME)
+   public int getArchiveFileSizeLimit();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#archive-file-size-limit">"archive-file-size-limit"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=ARCHIVE_FILE_SIZE_LIMIT_NAME)
+   public void setArchiveFileSizeLimit(int value);
+ 
+   /**
+    * The default statistic archive file size limit.
+    * <p> Actual value of this constant is <code>0</code> megabytes.
+    */
+   public static final int DEFAULT_ARCHIVE_FILE_SIZE_LIMIT = 0;
+   /**
+    * The minimum statistic archive file size limit.
+    * <p> Actual value of this constant is <code>0</code> megabytes.
+    */
+   public static final int MIN_ARCHIVE_FILE_SIZE_LIMIT = 0;
+   /**
+    * The maximum statistic archive file size limit.
+    * <p> Actual value of this constant is <code>1000000</code> megabytes.
+    */
+   public static final int MAX_ARCHIVE_FILE_SIZE_LIMIT = 1000000;
+ 
+   /** The name of the "ArchiveFileSizeLimit" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_ARCHIVE_FILE_SIZE_LIMIT, max=MAX_ARCHIVE_FILE_SIZE_LIMIT)
+   public static final String ARCHIVE_FILE_SIZE_LIMIT_NAME =
+     "archive-file-size-limit";
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#archive-disk-space-limit">"archive-disk-space-limit"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=ARCHIVE_DISK_SPACE_LIMIT_NAME)
+   public int getArchiveDiskSpaceLimit();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#archive-disk-space-limit">"archive-disk-space-limit"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=ARCHIVE_DISK_SPACE_LIMIT_NAME)
+   public void setArchiveDiskSpaceLimit(int value);
+ 
+   /**
+    * The default archive disk space limit.
+    * <p> Actual value of this constant is <code>0</code> megabytes.
+    */
+   public static final int DEFAULT_ARCHIVE_DISK_SPACE_LIMIT = 0;
+   /**
+    * The minimum archive disk space limit.
+    * <p> Actual value of this constant is <code>0</code> megabytes.
+    */
+   public static final int MIN_ARCHIVE_DISK_SPACE_LIMIT = 0;
+   /**
+    * The maximum archive disk space limit.
+    * <p> Actual value of this constant is <code>1000000</code> megabytes.
+    */
+   public static final int MAX_ARCHIVE_DISK_SPACE_LIMIT = 1000000;
+ 
+   /** The name of the "ArchiveDiskSpaceLimit" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_ARCHIVE_DISK_SPACE_LIMIT, max=MAX_ARCHIVE_DISK_SPACE_LIMIT)
+   public static final String ARCHIVE_DISK_SPACE_LIMIT_NAME =
+     "archive-disk-space-limit";
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#log-file-size-limit">"log-file-size-limit"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=LOG_FILE_SIZE_LIMIT_NAME)
+   public int getLogFileSizeLimit();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#log-file-size-limit">"log-file-size-limit"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=LOG_FILE_SIZE_LIMIT_NAME)
+   public void setLogFileSizeLimit(int value);
+ 
+   /**
+    * The default log file size limit.
+    * <p> Actual value of this constant is <code>0</code> megabytes.
+    */
+   public static final int DEFAULT_LOG_FILE_SIZE_LIMIT = 0;
+   /**
+    * The minimum log file size limit.
+    * <p> Actual value of this constant is <code>0</code> megabytes.
+    */
+   public static final int MIN_LOG_FILE_SIZE_LIMIT = 0;
+   /**
+    * The maximum log file size limit.
+    * <p> Actual value of this constant is <code>1000000</code> megabytes.
+    */
+   public static final int MAX_LOG_FILE_SIZE_LIMIT = 1000000;
+ 
+   /** The name of the "LogFileSizeLimit" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_LOG_FILE_SIZE_LIMIT, max=MAX_LOG_FILE_SIZE_LIMIT)
+   public static final String LOG_FILE_SIZE_LIMIT_NAME =
+     "log-file-size-limit";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#log-disk-space-limit">"log-disk-space-limit"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=LOG_DISK_SPACE_LIMIT_NAME)
+   public int getLogDiskSpaceLimit();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#log-disk-space-limit">"log-disk-space-limit"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=LOG_DISK_SPACE_LIMIT_NAME)
+   public void setLogDiskSpaceLimit(int value);
+ 
+   /**
+    * The default log disk space limit.
+    * <p> Actual value of this constant is <code>0</code> megabytes.
+    */
+   public static final int DEFAULT_LOG_DISK_SPACE_LIMIT = 0;
+   /**
+    * The minimum log disk space limit.
+    * <p> Actual value of this constant is <code>0</code> megabytes.
+    */
+   public static final int MIN_LOG_DISK_SPACE_LIMIT = 0;
+   /**
+    * The maximum log disk space limit.
+    * <p> Actual value of this constant is <code>1000000</code> megabytes.
+    */
+   public static final int MAX_LOG_DISK_SPACE_LIMIT = 1000000;
+ 
+   /** The name of the "LogDiskSpaceLimit" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_LOG_DISK_SPACE_LIMIT, max=MAX_LOG_DISK_SPACE_LIMIT)
+   public static final String LOG_DISK_SPACE_LIMIT_NAME =
+     "log-disk-space-limit";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#ssl-enabled">"ssl-enabled"</a>
+    * property.
+    * @deprecated as of 8.0 use {@link #getClusterSSLEnabled} instead.
+    */
+   @ConfigAttributeGetter(name=SSL_ENABLED_NAME)
+   public boolean getSSLEnabled();
+ 
+   /**
+    * The default ssl-enabled state.
+    * <p> Actual value of this constant is <code>false</code>.
+    * @deprecated as of 8.0 use {@link #DEFAULT_CLUSTER_SSL_ENABLED} instead.
+    */
+   public static final boolean DEFAULT_SSL_ENABLED = false;
+   
+   /** The name of the "SSLEnabled" property 
+    * @deprecated as of 8.0 use {@link #CLUSTER_SSL_ENABLED_NAME} instead.
+    */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String SSL_ENABLED_NAME =
+     "ssl-enabled";
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#ssl-enabled">"ssl-enabled"</a>
+    * property.
+    * @deprecated as of 8.0 use {@link #setClusterSSLEnabled} instead.
+    */
+   @ConfigAttributeSetter(name=SSL_ENABLED_NAME)
+   public void setSSLEnabled( boolean enabled );
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#ssl-protocols">"ssl-protocols"</a>
+    * property.
+    * @deprecated as of 8.0 use {@link #getClusterSSLProtocols} instead.
+    */
+   @ConfigAttributeGetter(name=SSL_PROTOCOLS_NAME)
+    public String getSSLProtocols( );
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#ssl-protocols">"ssl-protocols"</a>
+    * property.
+    * @deprecated as of 8.0 use {@link #setClusterSSLProtocols} instead.
+    */
+   @ConfigAttributeSetter(name=SSL_PROTOCOLS_NAME)
+    public void setSSLProtocols( String protocols );
+ 
+   /**
+    * The default ssl-protocols value.
+    * <p> Actual value of this constant is <code>any</code>.
+    * @deprecated as of 8.0 use {@link #DEFAULT_CLUSTER_SSL_PROTOCOLS} instead.
+    */
+   public static final String DEFAULT_SSL_PROTOCOLS = "any";
+   /** The name of the "SSLProtocols" property 
+    * @deprecated as of 8.0 use {@link #CLUSTER_SSL_PROTOCOLS_NAME} instead.
+    */
+   @ConfigAttribute(type=String.class)
+   public static final String SSL_PROTOCOLS_NAME =
+     "ssl-protocols";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#ssl-ciphers">"ssl-ciphers"</a>
+    * property.
+    * @deprecated as of 8.0 use {@link #getClusterSSLCiphers} instead.
+    */
+   @ConfigAttributeGetter(name=SSL_CIPHERS_NAME)
+    public String getSSLCiphers( );
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#ssl-ciphers">"ssl-ciphers"</a>
+    * property.
+    * @deprecated as of 8.0 use {@link #setClusterSSLCiphers} instead.
+    */
+   @ConfigAttributeSetter(name=SSL_CIPHERS_NAME)
+    public void setSSLCiphers( String ciphers );
+ 
+    /**
+    * The default ssl-ciphers value.
+    * <p> Actual value of this constant is <code>any</code>.
+    * @deprecated as of 8.0 use {@link #DEFAULT_CLUSTER_SSL_CIPHERS} instead.
+    */
+   public static final String DEFAULT_SSL_CIPHERS = "any";
+   /** The name of the "SSLCiphers" property 
+    * @deprecated as of 8.0 use {@link #CLUSTER_SSL_CIPHERS_NAME} instead.
+    */
+   @ConfigAttribute(type=String.class)
+   public static final String SSL_CIPHERS_NAME =
+     "ssl-ciphers";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#ssl-require-authentication">"ssl-require-authentication"</a>
+    * property.
+    * @deprecated as of 8.0 use {@link #getClusterSSLRequireAuthentication} instead.
+    */
+   @ConfigAttributeGetter(name=SSL_REQUIRE_AUTHENTICATION_NAME)
+    public boolean getSSLRequireAuthentication( );
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#ssl-require-authentication">"ssl-require-authentication"</a>
+    * property.
+    * @deprecated as of 8.0 use {@link #setClusterSSLRequireAuthentication} instead.
+    */
+   @ConfigAttributeSetter(name=SSL_REQUIRE_AUTHENTICATION_NAME)
+    public void setSSLRequireAuthentication( boolean enabled );
+ 
+    /**
+    * The default ssl-require-authentication value.
+    * <p> Actual value of this constant is <code>true</code>.
+    * @deprecated as of 8.0 use {@link #DEFAULT_CLUSTER_SSL_REQUIRE_AUTHENTICATION} instead.
+    */
+   public static final boolean DEFAULT_SSL_REQUIRE_AUTHENTICATION = true;
+   /** The name of the "SSLRequireAuthentication" property 
+    * @deprecated as of 8.0 use {@link #CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME} instead.
+    */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String SSL_REQUIRE_AUTHENTICATION_NAME =
+     "ssl-require-authentication";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-enabled">"cluster-ssl-enabled"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=CLUSTER_SSL_ENABLED_NAME)
+   public boolean getClusterSSLEnabled();
+ 
+   /**
+    * The default cluster-ssl-enabled state.
+    * <p> Actual value of this constant is <code>false</code>.
+    */
+   public static final boolean DEFAULT_CLUSTER_SSL_ENABLED = false;
+   /** The name of the "ClusterSSLEnabled" property */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String CLUSTER_SSL_ENABLED_NAME =
+     "cluster-ssl-enabled";
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-enabled">"cluster-ssl-enabled"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CLUSTER_SSL_ENABLED_NAME)
+   public void setClusterSSLEnabled( boolean enabled );
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-protocols">"cluster-ssl-protocols"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=CLUSTER_SSL_PROTOCOLS_NAME)
+    public String getClusterSSLProtocols( );
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-protocols">"cluster-ssl-protocols"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CLUSTER_SSL_PROTOCOLS_NAME)
+    public void setClusterSSLProtocols( String protocols );
+ 
+   /**
+    * The default cluster-ssl-protocols value.
+    * <p> Actual value of this constant is <code>any</code>.
+    */
+   public static final String DEFAULT_CLUSTER_SSL_PROTOCOLS = "any";
+   /** The name of the "ClusterSSLProtocols" property */
+   @ConfigAttribute(type=String.class)
+   public static final String CLUSTER_SSL_PROTOCOLS_NAME =
+     "cluster-ssl-protocols";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-ciphers">"cluster-ssl-ciphers"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=CLUSTER_SSL_CIPHERS_NAME)
+    public String getClusterSSLCiphers( );
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-ciphers">"cluster-ssl-ciphers"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CLUSTER_SSL_CIPHERS_NAME)
+    public void setClusterSSLCiphers( String ciphers );
+ 
+    /**
+    * The default cluster-ssl-ciphers value.
+    * <p> Actual value of this constant is <code>any</code>.
+    */
+   public static final String DEFAULT_CLUSTER_SSL_CIPHERS = "any";
+   /** The name of the "ClusterSSLCiphers" property */
+   @ConfigAttribute(type=String.class)
+   public static final String CLUSTER_SSL_CIPHERS_NAME =
+     "cluster-ssl-ciphers";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-require-authentication">"cluster-ssl-require-authentication"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME)
+    public boolean getClusterSSLRequireAuthentication( );
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-require-authentication">"cluster-ssl-require-authentication"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME)
+    public void setClusterSSLRequireAuthentication( boolean enabled );
+ 
+    /**
+    * The default cluster-ssl-require-authentication value.
+    * <p> Actual value of this constant is <code>true</code>.
+    */
+   public static final boolean DEFAULT_CLUSTER_SSL_REQUIRE_AUTHENTICATION = true;
+   /** The name of the "ClusterSSLRequireAuthentication" property */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String CLUSTER_SSL_REQUIRE_AUTHENTICATION_NAME =
+     "cluster-ssl-require-authentication";
+ 
+   
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-keystore">"cluster-ssl-keystore"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=CLUSTER_SSL_KEYSTORE_NAME)
+   public String getClusterSSLKeyStore( );
+   
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-keystore">"cluster-ssl-keystore"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CLUSTER_SSL_KEYSTORE_NAME)
+   public void setClusterSSLKeyStore( String keyStore);
+   
+   /**
+    * The default cluster-ssl-keystore value.
+    * <p> Actual value of this constant is "".
+    */
+   public static final String DEFAULT_CLUSTER_SSL_KEYSTORE = "";
+   
+   /** The name of the "ClusterSSLKeyStore" property */
+   @ConfigAttribute(type=String.class)
+   public static final String CLUSTER_SSL_KEYSTORE_NAME = "cluster-ssl-keystore";
+   
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-keystore-type">"cluster-ssl-keystore-type"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=CLUSTER_SSL_KEYSTORE_TYPE_NAME)
+   public String getClusterSSLKeyStoreType( );
+   
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-keystore-type">"cluster-ssl-keystore-type"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CLUSTER_SSL_KEYSTORE_TYPE_NAME)
+   public void setClusterSSLKeyStoreType( String keyStoreType);
+   
+   /**
+    * The default cluster-ssl-keystore-type value.
+    * <p> Actual value of this constant is "".
+    */
+   public static final String DEFAULT_CLUSTER_SSL_KEYSTORE_TYPE = "";
+   
+   /** The name of the "ClusterSSLKeyStoreType" property */
+   @ConfigAttribute(type=String.class)
+   public static final String CLUSTER_SSL_KEYSTORE_TYPE_NAME = "cluster-ssl-keystore-type";
+   
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-keystore-password">"cluster-ssl-keystore-password"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=CLUSTER_SSL_KEYSTORE_PASSWORD_NAME)
+   public String getClusterSSLKeyStorePassword( );
+   
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-keystore-password">"cluster-ssl-keystore-password"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CLUSTER_SSL_KEYSTORE_PASSWORD_NAME)
+   public void setClusterSSLKeyStorePassword( String keyStorePassword);
+   
+   /**
+    * The default cluster-ssl-keystore-password value.
+    * <p> Actual value of this constant is "".
+    */
+   public static final String DEFAULT_CLUSTER_SSL_KEYSTORE_PASSWORD = "";
+   
+   /** The name of the "ClusterSSLKeyStorePassword" property */
+   @ConfigAttribute(type=String.class)
+   public static final String CLUSTER_SSL_KEYSTORE_PASSWORD_NAME = "cluster-ssl-keystore-password";
+   
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-truststore">"cluster-ssl-truststore"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=CLUSTER_SSL_TRUSTSTORE_NAME)
+   public String getClusterSSLTrustStore( );
+   
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-truststore">"cluster-ssl-truststore"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CLUSTER_SSL_TRUSTSTORE_NAME)
+   public void setClusterSSLTrustStore( String trustStore);
+   
+   /**
+    * The default cluster-ssl-truststore value.
+    * <p> Actual value of this constant is "".
+    */
+   public static final String DEFAULT_CLUSTER_SSL_TRUSTSTORE = "";
+   
+   /** The name of the "ClusterSSLTrustStore" property */
+   @ConfigAttribute(type=String.class)
+   public static final String CLUSTER_SSL_TRUSTSTORE_NAME = "cluster-ssl-truststore";
+   
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-truststore-password">"cluster-ssl-truststore-password"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME)
+   public String getClusterSSLTrustStorePassword( );
+   
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#cluster-ssl-truststore-password">"cluster-ssl-truststore-password"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME)
+   public void setClusterSSLTrustStorePassword( String trusStorePassword);
+   /**
+    * The default cluster-ssl-truststore-password value.
+    * <p> Actual value of this constant is "".
+    */
+   public static final String DEFAULT_CLUSTER_SSL_TRUSTSTORE_PASSWORD = "";
+   
+   /** The name of the "ClusterSSLKeyStorePassword" property */
+   @ConfigAttribute(type=String.class)
+   public static final String CLUSTER_SSL_TRUSTSTORE_PASSWORD_NAME = "cluster-ssl-truststore-password";
+   
+   
+   /** The name of an internal property that specifies a {@link
+    * com.gemstone.gemfire.i18n.LogWriterI18n} instance to log to.
+    *  Set this property with put(), not with setProperty()
+    *
+    * @since 4.0 */
+   public static final String LOG_WRITER_NAME = "log-writer";
+ 
+   /** The name of an internal property that specifies a 
+    *  a DistributionConfigImpl that the locator is passing
+    *  in to a ds connect.
+    *  Set this property with put(), not with setProperty()
+    *
+    * @since 7.0 */
+   public static final String DS_CONFIG_NAME = "ds-config";
+   
+   /**
+    * The name of an internal property that specifies whether
+    * the distributed system is reconnecting after a forced-
+    * disconnect.
+    * @since 8.1
+    */
+   public static final String DS_RECONNECTING_NAME = "ds-reconnecting";
+   
+   /**
+    * The name of an internal property that specifies the
+    * quorum checker for the system that was forcibly disconnected.
+    * This should be used if the DS_RECONNECTING_NAME property
+    * is used.
+    */
+   public static final String DS_QUORUM_CHECKER_NAME = "ds-quorum-checker";
+   
+   /**
+    * The name of an internal property that specifies a {@link
+    * com.gemstone.gemfire.LogWriter} instance to log security messages to. Set
+    * this property with put(), not with setProperty()
+    *
+    * @since 5.5
+    */
+   public static final String SECURITY_LOG_WRITER_NAME = "security-log-writer";
+ 
+   /** The name of an internal property that specifies a
+    * FileOutputStream associated with the internal property
+    * LOG_WRITER_NAME.  If this property is set, the
+    * FileOutputStream will be closed when the distributed
+    * system disconnects.  Set this property with put(), not
+    * with setProperty()
+    * @since 5.0
+    */
+   public static final String LOG_OUTPUTSTREAM_NAME = "log-output-stream";
+ 
+   /**
+    * The name of an internal property that specifies a FileOutputStream
+    * associated with the internal property SECURITY_LOG_WRITER_NAME. If this
+    * property is set, the FileOutputStream will be closed when the distributed
+    * system disconnects. Set this property with put(), not with setProperty()
+    *
+    * @since 5.5
+    */
+   public static final String SECURITY_LOG_OUTPUTSTREAM_NAME = "security-log-output-stream";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#socket-lease-time">"socket-lease-time"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=SOCKET_LEASE_TIME_NAME)
+   public int getSocketLeaseTime();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#socket-lease-time">"socket-lease-time"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=SOCKET_LEASE_TIME_NAME)
+   public void setSocketLeaseTime(int value);
+ 
+ 
+ 
+   /** The default value of the "socketLeaseTime" property */
+   public static final int DEFAULT_SOCKET_LEASE_TIME = 60000;
+   /**
+    * The minimum socketLeaseTime.
+    * <p> Actual value of this constant is <code>0</code>.
+    */
+   public static final int MIN_SOCKET_LEASE_TIME = 0;
+   /**
+    * The maximum socketLeaseTime.
+    * <p> Actual value of this constant is <code>600000</code>.
+    */
+   public static final int MAX_SOCKET_LEASE_TIME = 600000;
+ 
+   /** The name of the "socketLeaseTime" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_SOCKET_LEASE_TIME, max=MAX_SOCKET_LEASE_TIME)
+   public static final String SOCKET_LEASE_TIME_NAME = "socket-lease-time";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#socket-buffer-size">"socket-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=SOCKET_BUFFER_SIZE_NAME)
+   public int getSocketBufferSize();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#socket-buffer-size">"socket-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=SOCKET_BUFFER_SIZE_NAME)
+   public void setSocketBufferSize(int value);
+ 
+ 
+   /** The default value of the "socketBufferSize" property */
+   public static final int DEFAULT_SOCKET_BUFFER_SIZE = 32768;
+   /**
+    * The minimum socketBufferSize.
+    * <p> Actual value of this constant is <code>1024</code>.
+    */
+   public static final int MIN_SOCKET_BUFFER_SIZE = 1024;
+   /**
+    * The maximum socketBufferSize.
+    * <p> Actual value of this constant is <code>20000000</code>.
+    */
+   public static final int MAX_SOCKET_BUFFER_SIZE = Connection.MAX_MSG_SIZE;
+ 
+   public static final boolean VALIDATE = Boolean.getBoolean("gemfire.validateMessageSize");
+   public static final int VALIDATE_CEILING = Integer.getInteger("gemfire.validateMessageSizeCeiling",  8 * 1024 * 1024).intValue();
+ 
+   /** The name of the "socketBufferSize" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_SOCKET_BUFFER_SIZE, max=MAX_SOCKET_BUFFER_SIZE)
+   public static final String SOCKET_BUFFER_SIZE_NAME = "socket-buffer-size";
+ 
+ 
+   /**
+    * Get the value of the
+    * <a href="../DistributedSystem.html#mcast-send-buffer-size">"mcast-send-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=MCAST_SEND_BUFFER_SIZE_NAME)
+   public int getMcastSendBufferSize();
+ 
+   /**
+    * Set the value of the
+    * <a href="../DistributedSystem.html#mcast-send-buffer-size">"mcast-send-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=MCAST_SEND_BUFFER_SIZE_NAME)
+   public void setMcastSendBufferSize(int value);
+ 
+ 
+   /**
+    * The default value of the corresponding property
+    */
+   public static final int DEFAULT_MCAST_SEND_BUFFER_SIZE = 65535;
+ 
+ 
+   /**
+    * The minimum size of the buffer, in bytes.
+    * <p> Actual value of this constant is <code>2048</code>.
+    */
+   public static final int MIN_MCAST_SEND_BUFFER_SIZE = 2048;
+ 
+   /**
+    * The name of the corresponding property
+    */
+   @ConfigAttribute(type=Integer.class, min=MIN_MCAST_SEND_BUFFER_SIZE)
+   public static final String MCAST_SEND_BUFFER_SIZE_NAME = "mcast-send-buffer-size";
+ 
+   /**
+    * Get the value of the
+    * <a href="../DistributedSystem.html#mcast-recv-buffer-size">"mcast-recv-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=MCAST_RECV_BUFFER_SIZE_NAME)
+   public int getMcastRecvBufferSize();
+ 
+   /**
+    * Set the value of the
+    * <a href="../DistributedSystem.html#mcast-recv-buffer-size">"mcast-recv-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=MCAST_RECV_BUFFER_SIZE_NAME)
+   public void setMcastRecvBufferSize(int value);
+ 
+ 
+   /**
+    * The default value of the corresponding property
+    */
+   public static final int DEFAULT_MCAST_RECV_BUFFER_SIZE = 1048576;
+ 
+   /**
+    * The minimum size of the buffer, in bytes.
+    * <p> Actual value of this constant is <code>2048</code>.
+    */
+   public static final int MIN_MCAST_RECV_BUFFER_SIZE = 2048;
+ 
+   /**
+    * The name of the corresponding property
+    */
+   @ConfigAttribute(type=Integer.class, min=MIN_MCAST_RECV_BUFFER_SIZE)
+   public static final String MCAST_RECV_BUFFER_SIZE_NAME = "mcast-recv-buffer-size";
+ 
+ 
+   /**
+    * Get the value of the
+    * <a href="../DistributedSystem.html#mcast-flow-control">"mcast-flow-control"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=MCAST_FLOW_CONTROL_NAME)
+   public FlowControlParams getMcastFlowControl();
+ 
+   /**
+    * Set the value of the
+    * <a href="../DistributedSystem.html#mcast-flow-control">"mcast-flow-control"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=MCAST_FLOW_CONTROL_NAME)
+   public void setMcastFlowControl(FlowControlParams values);
+ 
+   /**
+    * The name of the corresponding property
+    */
+   @ConfigAttribute(type=FlowControlParams.class)
+   public static final String MCAST_FLOW_CONTROL_NAME = "mcast-flow-control";
+ 
+   /**
+    * The default value of the corresponding property
+    */
+   public static final FlowControlParams DEFAULT_MCAST_FLOW_CONTROL
+     = new FlowControlParams(1048576, (float)0.25, 5000);
+ 
+   /**
+    * The minimum byteAllowance for the mcast-flow-control setting of
+    * <code>100000</code>.
+    */
+   public static final int MIN_FC_BYTE_ALLOWANCE = 10000;
+ 
+   /**
+    * The minimum rechargeThreshold for the mcast-flow-control setting of
+    * <code>0.1</code>
+    */
+   public static final float MIN_FC_RECHARGE_THRESHOLD = (float)0.1;
+ 
+   /**
+    * The maximum rechargeThreshold for the mcast-flow-control setting of
+    * <code>0.5</code>
+    */
+   public static final float MAX_FC_RECHARGE_THRESHOLD = (float)0.5;
+ 
+   /**
+    * The minimum rechargeBlockMs for the mcast-flow-control setting of
+    * <code>500</code>
+    */
+   public static final int MIN_FC_RECHARGE_BLOCK_MS = 500;
+ 
+   /**
+    * The maximum rechargeBlockMs for the mcast-flow-control setting of
+    * <code>60000</code>
+    */
+   public static final int MAX_FC_RECHARGE_BLOCK_MS = 60000;
+ 
+   /**
+    * Get the value of the
+    * <a href="../DistributedSystem.html#udp-fragment-size">"udp-fragment-size"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=UDP_FRAGMENT_SIZE_NAME)
+   public int getUdpFragmentSize();
+ 
+   /**
+    * Set the value of the
+    * <a href="../DistributedSystem.html#udp-fragment-size">"udp-fragment-size"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=UDP_FRAGMENT_SIZE_NAME)
+   public void setUdpFragmentSize(int value);
+ 
+   /**
+    * The default value of the corresponding property
+    */
+   public static final int DEFAULT_UDP_FRAGMENT_SIZE = 60000;
+ 
+   /** The minimum allowed udp-fragment-size setting of 1000
+   */
+   public static final int MIN_UDP_FRAGMENT_SIZE = 1000;
+ 
+   /** The maximum allowed udp-fragment-size setting of 60000
+   */
+   public static final int MAX_UDP_FRAGMENT_SIZE = 60000;
+ 
+   /**
+    * The name of the corresponding property
+    */
+   @ConfigAttribute(type=Integer.class, min=MIN_UDP_FRAGMENT_SIZE, max=MAX_UDP_FRAGMENT_SIZE)
+   public static final String UDP_FRAGMENT_SIZE_NAME = "udp-fragment-size";
+ 
+ 
+ 
+ 
+   /**
+    * Get the value of the
+    * <a href="../DistributedSystem.html#udp-send-buffer-size">"udp-send-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=UDP_SEND_BUFFER_SIZE_NAME)
+   public int getUdpSendBufferSize();
+ 
+   /**
+    * Set the value of the
+    * <a href="../DistributedSystem.html#udp-send-buffer-size">"udp-send-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=UDP_SEND_BUFFER_SIZE_NAME)
+   public void setUdpSendBufferSize(int value);
+ 
+   /**
+    * The default value of the corresponding property
+    */
+   public static final int DEFAULT_UDP_SEND_BUFFER_SIZE = 65535;
+ 
+   /**
+    * The minimum size of the buffer, in bytes.
+    * <p> Actual value of this constant is <code>2048</code>.
+    */
+   public static final int MIN_UDP_SEND_BUFFER_SIZE = 2048;
+ 
+   /**
+    * The name of the corresponding property
+    */
+   @ConfigAttribute(type=Integer.class, min=MIN_UDP_SEND_BUFFER_SIZE)
+   public static final String UDP_SEND_BUFFER_SIZE_NAME = "udp-send-buffer-size";
+ 
+   /**
+    * Get the value of the
+    * <a href="../DistributedSystem.html#udp-recv-buffer-size">"udp-recv-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=UDP_RECV_BUFFER_SIZE_NAME)
+   public int getUdpRecvBufferSize();
+ 
+   /**
+    * Set the value of the
+    * <a href="../DistributedSystem.html#udp-recv-buffer-size">"udp-recv-buffer-size"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=UDP_RECV_BUFFER_SIZE_NAME)
+   public void setUdpRecvBufferSize(int value);
+ 
+   /**
+    * The default value of the unicast receive buffer size property
+    */
+   public static final int DEFAULT_UDP_RECV_BUFFER_SIZE = 1048576;
+ 
+   /**
+    * The default size of the unicast receive buffer property if tcp/ip sockets are
+    * enabled and multicast is disabled
+    */
+   public static final int DEFAULT_UDP_RECV_BUFFER_SIZE_REDUCED = 65535;
+ 
+   /**
+    * The minimum size of the buffer, in bytes.
+    * <p> Actual value of this constant is <code>2048</code>.
+    */
+   public static final int MIN_UDP_RECV_BUFFER_SIZE = 2048;
+ 
+ 
+   /**
+    * The name of the corresponding property
+    */
+   @ConfigAttribute(type=Integer.class, min=MIN_UDP_RECV_BUFFER_SIZE)
+   public static final String UDP_RECV_BUFFER_SIZE_NAME = "udp-recv-buffer-size";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#disable-tcp">"disable-tcp"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=DISABLE_TCP_NAME)
+   public boolean getDisableTcp();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#disable-tcp">"disable-tcp"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=DISABLE_TCP_NAME)
+   public void setDisableTcp(boolean newValue);
+ 
+   /** The name of the corresponding property */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String DISABLE_TCP_NAME = "disable-tcp";
+ 
+   /** The default value of the corresponding property */
+   public static final boolean DEFAULT_DISABLE_TCP = false;
+ 
+ 
+   /**
+    * Turns on timing statistics for the distributed system
+    */
+   @ConfigAttributeSetter(name=ENABLE_TIME_STATISTICS_NAME)
+   public void setEnableTimeStatistics(boolean newValue);
+ 
+   /**
+    * Returns the value of <a
+    * href="../DistributedSystem.html#enable-time-statistics">enable-time-statistics</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=ENABLE_TIME_STATISTICS_NAME)
+   public boolean getEnableTimeStatistics();
+ 
+   /** the name of the corresponding property */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String ENABLE_TIME_STATISTICS_NAME = "enable-time-statistics";
+ 
+   /** The default value of the corresponding property */
+   public static final boolean DEFAULT_ENABLE_TIME_STATISTICS = false;
+ 
+ 
+   /**
+    * Sets the value for 
+    <a href="../DistributedSystem.html#use-cluster-configuration">use-shared-configuration</a>
+    */
+   @ConfigAttributeSetter(name=USE_CLUSTER_CONFIGURATION_NAME)
+   public void setUseSharedConfiguration(boolean newValue);
+ 
+   /**
+    * Returns the value of <a
+    * href="../DistributedSystem.html#use-cluster-configuration">use-cluster-configuration</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=USE_CLUSTER_CONFIGURATION_NAME)
+   public boolean getUseSharedConfiguration();
+ 
+   /** the name of the corresponding property */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String USE_CLUSTER_CONFIGURATION_NAME = "use-cluster-configuration";
+ 
+   /** The default value of the corresponding property */
+   public static final boolean DEFAULT_USE_CLUSTER_CONFIGURATION = true;
+   
+   /**
+    * Sets the value for 
+    <a href="../DistributedSystem.html#enable-cluster-configuration">enable-cluster-configuration</a>
+    */
+   @ConfigAttributeSetter(name=ENABLE_CLUSTER_CONFIGURATION_NAME)
+   public void setEnableClusterConfiguration(boolean newValue);
+ 
+   /**
+    * Returns the value of <a
+    * href="../DistributedSystem.html#enable-cluster-configuration">enable-cluster-configuration</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=ENABLE_CLUSTER_CONFIGURATION_NAME)
+   public boolean getEnableClusterConfiguration();
+ 
+   /** the name of the corresponding property */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String ENABLE_CLUSTER_CONFIGURATION_NAME = "enable-cluster-configuration";
+   /** The default value of the corresponding property */
+   public static final boolean DEFAULT_ENABLE_CLUSTER_CONFIGURATION = true;
+ 
+   @ConfigAttribute(type=Boolean.class)
+   public static final String LOAD_CLUSTER_CONFIG_FROM_DIR_NAME = "load-cluster-configuration-from-dir";
+   public static final boolean DEFAULT_LOAD_CLUSTER_CONFIG_FROM_DIR = false;
+   
+   /**
+    * Returns the value of 
+    * <a href="../DistributedSystem.html#cluster-configuration-dir">cluster-configuration-dir</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=LOAD_CLUSTER_CONFIG_FROM_DIR_NAME)
+   public boolean getLoadClusterConfigFromDir();
+   
+   /**
+    * Sets the value of 
+    * <a href="../DistributedSystem.html#cluster-configuration-dir">cluster-configuration-dir</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=LOAD_CLUSTER_CONFIG_FROM_DIR_NAME)
+   public void setLoadClusterConfigFromDir(boolean newValue);
+ 
+   @ConfigAttribute(type=String.class)
+   public static final String CLUSTER_CONFIGURATION_DIR = "cluster-configuration-dir";
+   public static final String DEFAULT_CLUSTER_CONFIGURATION_DIR = System.getProperty("user.dir");
+ 
+   @ConfigAttributeGetter(name=CLUSTER_CONFIGURATION_DIR)
+   public String getClusterConfigDir();
+   @ConfigAttributeSetter(name=CLUSTER_CONFIGURATION_DIR)
+   public void setClusterConfigDir(final String clusterConfigDir);
+   
+   /** Turns on network partition detection */
+   @ConfigAttributeSetter(name=ENABLE_NETWORK_PARTITION_DETECTION_NAME)
+   public void setEnableNetworkPartitionDetection(boolean newValue);
+   /**
+    * Returns the value of the enable-network-partition-detection property
+    */
+   @ConfigAttributeGetter(name=ENABLE_NETWORK_PARTITION_DETECTION_NAME)
+   public boolean getEnableNetworkPartitionDetection();
+   /** the name of the corresponding property */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String ENABLE_NETWORK_PARTITION_DETECTION_NAME =
+     "enable-network-partition-detection";
+   public static final boolean DEFAULT_ENABLE_NETWORK_PARTITION_DETECTION = false;
+ 
+   /**
+    * Get the value of the
+    * <a href="../DistributedSystem.html#member-timeout">"member-timeout"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=MEMBER_TIMEOUT_NAME)
+   public int getMemberTimeout();
+ 
+   /**
+    * Set the value of the
+    * <a href="../DistributedSystem.html#member-timeout">"member-timeout"</a>
+    * property
+    */
+   @ConfigAttributeSetter(name=MEMBER_TIMEOUT_NAME)
+   public void setMemberTimeout(int value);
+ 
+   /**
+    * The default value of the corresponding property
+    */
+   public static final int DEFAULT_MEMBER_TIMEOUT = 5000;
+ 
+   /** The minimum member-timeout setting of 1000 milliseconds */
+   public static final int MIN_MEMBER_TIMEOUT = 10;
+ 
+   /**The maximum member-timeout setting of 600000 millieseconds */
+   public static final int MAX_MEMBER_TIMEOUT = 600000;
+   /**
+    * The name of the corresponding property
+    */
+   @ConfigAttribute(type=Integer.class, min=MIN_MEMBER_TIMEOUT, max=MAX_MEMBER_TIMEOUT)
+   public static final String MEMBER_TIMEOUT_NAME = "member-timeout";
+ 
+   @ConfigAttribute(type=int[].class)
+   public static final String MEMBERSHIP_PORT_RANGE_NAME = "membership-port-range";
+   
+   public static final int[] DEFAULT_MEMBERSHIP_PORT_RANGE = new int[]{1024,65535};
+ 
+   @ConfigAttributeGetter(name=MEMBERSHIP_PORT_RANGE_NAME)
+   public int[] getMembershipPortRange();
+ 
+   @ConfigAttributeSetter(name=MEMBERSHIP_PORT_RANGE_NAME)
+   public void setMembershipPortRange(int[] range);
+   
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#conserve-sockets">"conserve-sockets"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=CONSERVE_SOCKETS_NAME)
+   public boolean getConserveSockets();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#conserve-sockets">"conserve-sockets"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=CONSERVE_SOCKETS_NAME)
+   public void setConserveSockets(boolean newValue);
+ 
+   /** The name of the "conserveSockets" property */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String CONSERVE_SOCKETS_NAME = "conserve-sockets";
+ 
+   /** The default value of the "conserveSockets" property */
+   public static final boolean DEFAULT_CONSERVE_SOCKETS = true;
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#roles">"roles"</a>
+    * property
+    */
+   @ConfigAttributeGetter(name=ROLES_NAME)
+   public String getRoles();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#roles">"roles"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=ROLES_NAME)
+   public void setRoles(String roles);
+   /** The name of the "roles" property */
+   @ConfigAttribute(type=String.class)
+   public static final String ROLES_NAME = "roles";
+   /** The default value of the "roles" property */
+   public static final String DEFAULT_ROLES = "";
+ 
+ 
+   /**
+    * The name of the "max wait time for reconnect" property */
+   @ConfigAttribute(type=Integer.class)
+   public static final String MAX_WAIT_TIME_FOR_RECONNECT_NAME = "max-wait-time-reconnect";
+ 
+   /**
+    * Default value for MAX_WAIT_TIME_FOR_RECONNECT, 60,000 milliseconds.
+    */
+   public static final int DEFAULT_MAX_WAIT_TIME_FOR_RECONNECT = 60000;
+ 
+   /**
+    * Sets the max wait timeout, in milliseconds, for reconnect.
+    * */
+   @ConfigAttributeSetter(name=MAX_WAIT_TIME_FOR_RECONNECT_NAME)
+   public void setMaxWaitTimeForReconnect( int timeOut);
+ 
+   /**
+    * Returns the max wait timeout, in milliseconds, for reconnect.
+    * */
+   @ConfigAttributeGetter(name=MAX_WAIT_TIME_FOR_RECONNECT_NAME)
+   public int getMaxWaitTimeForReconnect();
+ 
+   /**
+    * The name of the "max number of tries for reconnect" property.
+    * */
+   @ConfigAttribute(type=Integer.class)
+   public static final String MAX_NUM_RECONNECT_TRIES = "max-num-reconnect-tries";
+ 
+   /**
+    * Default value for MAX_NUM_RECONNECT_TRIES.
+    */
+   public static final int DEFAULT_MAX_NUM_RECONNECT_TRIES = 3;
+ 
+   /**
+    * Sets the max number of tries for reconnect.
+    * */
+   @ConfigAttributeSetter(name=MAX_NUM_RECONNECT_TRIES)
+   public void setMaxNumReconnectTries(int tries);
+ 
+   /**
+    * Returns the value for max number of tries for reconnect.
+    * */
+   @ConfigAttributeGetter(name=MAX_NUM_RECONNECT_TRIES)
+   public int getMaxNumReconnectTries();
+ 
+   // ------------------- Asynchronous Messaging Properties -------------------
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#async-distribution-timeout">
+    * "async-distribution-timeout"</a> property.
+    */
+   @ConfigAttributeGetter(name=ASYNC_DISTRIBUTION_TIMEOUT_NAME)
+   public int getAsyncDistributionTimeout();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#async-distribution-timeout">
+    * "async-distribution-timeout"</a> property.
+    */
+   @ConfigAttributeSetter(name=ASYNC_DISTRIBUTION_TIMEOUT_NAME)
+   public void setAsyncDistributionTimeout(int newValue);
+ 
+   /** The default value of "asyncDistributionTimeout" is <code>0</code>. */
+   public static final int DEFAULT_ASYNC_DISTRIBUTION_TIMEOUT = 0;
+   /** The minimum value of "asyncDistributionTimeout" is <code>0</code>. */
+   public static final int MIN_ASYNC_DISTRIBUTION_TIMEOUT = 0;
+   /** The maximum value of "asyncDistributionTimeout" is <code>60000</code>. */
+   public static final int MAX_ASYNC_DISTRIBUTION_TIMEOUT = 60000;
+ 
+   /** The name of the "asyncDistributionTimeout" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_ASYNC_DISTRIBUTION_TIMEOUT, max=MAX_ASYNC_DISTRIBUTION_TIMEOUT)
+   public static final String ASYNC_DISTRIBUTION_TIMEOUT_NAME = "async-distribution-timeout";
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#async-queue-timeout">
+    * "async-queue-timeout"</a> property.
+    */
+   @ConfigAttributeGetter(name=ASYNC_QUEUE_TIMEOUT_NAME)
+   public int getAsyncQueueTimeout();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#async-queue-timeout">
+    * "async-queue-timeout"</a> property.
+    */
+   @ConfigAttributeSetter(name=ASYNC_QUEUE_TIMEOUT_NAME)
+   public void setAsyncQueueTimeout(int newValue);
+ 
+   /** The default value of "asyncQueueTimeout" is <code>60000</code>. */
+   public static final int DEFAULT_ASYNC_QUEUE_TIMEOUT = 60000;
+   /** The minimum value of "asyncQueueTimeout" is <code>0</code>. */
+   public static final int MIN_ASYNC_QUEUE_TIMEOUT = 0;
+   /** The maximum value of "asyncQueueTimeout" is <code>86400000</code>. */
+   public static final int MAX_ASYNC_QUEUE_TIMEOUT = 86400000;
+   /** The name of the "asyncQueueTimeout" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_ASYNC_QUEUE_TIMEOUT, max=MAX_ASYNC_QUEUE_TIMEOUT)
+   public static final String ASYNC_QUEUE_TIMEOUT_NAME = "async-queue-timeout";
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#async-max-queue-size">
+    * "async-max-queue-size"</a> property.
+    */
+   @ConfigAttributeGetter(name=ASYNC_MAX_QUEUE_SIZE_NAME)
+   public int getAsyncMaxQueueSize();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#async-max-queue-size">
+    * "async-max-queue-size"</a> property.
+    */
+   @ConfigAttributeSetter(name=ASYNC_MAX_QUEUE_SIZE_NAME)
+   public void setAsyncMaxQueueSize(int newValue);
+ 
+   /** The default value of "asyncMaxQueueSize" is <code>8</code>. */
+   public static final int DEFAULT_ASYNC_MAX_QUEUE_SIZE = 8;
+   /** The minimum value of "asyncMaxQueueSize" is <code>0</code>. */
+   public static final int MIN_ASYNC_MAX_QUEUE_SIZE = 0;
+   /** The maximum value of "asyncMaxQueueSize" is <code>1024</code>. */
+   public static final int MAX_ASYNC_MAX_QUEUE_SIZE = 1024;
+ 
+   /** The name of the "asyncMaxQueueSize" property */
+   @ConfigAttribute(type=Integer.class, min=MIN_ASYNC_MAX_QUEUE_SIZE, max=MAX_ASYNC_MAX_QUEUE_SIZE)
+   public static final String ASYNC_MAX_QUEUE_SIZE_NAME = "async-max-queue-size";
+   /** @since 5.7 */
+   @ConfigAttribute(type=String.class)
+   public static final String CLIENT_CONFLATION_PROP_NAME = "conflate-events";
+   /** @since 5.7 */
+   public static final String CLIENT_CONFLATION_PROP_VALUE_DEFAULT = "server";
+   /** @since 5.7 */
+   public static final String CLIENT_CONFLATION_PROP_VALUE_ON = "true";
+   /** @since 5.7 */
+   public static final String CLIENT_CONFLATION_PROP_VALUE_OFF = "false";
+   
+      
+   /** @since 9.0 */
+   @ConfigAttribute(type=Boolean.class)
+   public static final String DISTRIBUTED_TRANSACTIONS_NAME = "distributed-transactions";
+   public static final boolean DEFAULT_DISTRIBUTED_TRANSACTIONS = false;
+ 
+   @ConfigAttributeGetter(name=DISTRIBUTED_TRANSACTIONS_NAME)
+   public boolean getDistributedTransactions();
+ 
+   @ConfigAttributeSetter(name=DISTRIBUTED_TRANSACTIONS_NAME)
+   public void setDistributedTransactions(boolean value);
+   
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#conflate-events">"conflate-events"</a>
+    * property.
+    * @since 5.7
+    */
+   @ConfigAttributeGetter(name=CLIENT_CONFLATION_PROP_NAME)
+   public String getClientConflation();
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#conflate-events">"conflate-events"</a>
+    * property.
+    * @since 5.7
+    */
+   @ConfigAttributeSetter(name=CLIENT_CONFLATION_PROP_NAME)
+   public void setClientConflation(String clientConflation);
+   // -------------------------------------------------------------------------
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#durable-client-id">"durable-client-id"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=DURABLE_CLIENT_ID_NAME)
+   public String getDurableClientId();
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#durable-client-id">"durable-client-id"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=DURABLE_CLIENT_ID_NAME)
+   public void setDurableClientId(String durableClientId);
+ 
+   /** The name of the "durableClientId" property */
+   @ConfigAttribute(type=String.class)
+   public static final String DURABLE_CLIENT_ID_NAME = "durable-client-id";
+ 
+   /**
+    * The default durable client id.
+    * <p> Actual value of this constant is <code>""</code>.
+    */
+   public static final String DEFAULT_DURABLE_CLIENT_ID = "";
+ 
+   /**
+    * Returns the value of the <a
+    * href="../DistributedSystem.html#durable-client-timeout">"durable-client-timeout"</a>
+    * property.
+    */
+   @ConfigAttributeGetter(name=DURABLE_CLIENT_TIMEOUT_NAME)
+   public int getDurableClientTimeout();
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#durable-client-timeout">"durable-client-timeout"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=DURABLE_CLIENT_TIMEOUT_NAME)
+   public void setDurableClientTimeout(int durableClientTimeout);
+ 
+   /** The name of the "durableClientTimeout" property */
+   @ConfigAttribute(type=Integer.class)
+   public static final String DURABLE_CLIENT_TIMEOUT_NAME = "durable-client-timeout";
+ 
+   /**
+    * The default durable client timeout in seconds.
+    * <p> Actual value of this constant is <code>"300"</code>.
+    */
+   public static final int DEFAULT_DURABLE_CLIENT_TIMEOUT = 300;
+ 
+   /**
+    * Returns user module name for client authentication initializer in <a
+    * href="../DistributedSystem.html#security-client-auth-init">"security-client-auth-init"</a>
+    */
+   @ConfigAttributeGetter(name=SECURITY_CLIENT_AUTH_INIT_NAME)
+   public String getSecurityClientAuthInit();
+ 
+   /**
+    * Sets the user module name in <a
+    * href="../DistributedSystem.html#security-client-auth-init">"security-client-auth-init"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=SECURITY_CLIENT_AUTH_INIT_NAME)
+   public void setSecurityClientAuthInit(String attValue);
+ 
+   /** The name of user defined method name for "security-client-auth-init" property*/
+   @ConfigAttribute(type=String.class)
+   public static final String SECURITY_CLIENT_AUTH_INIT_NAME = "security-client-auth-init";
+ 
+   /**
+    * The default client authentication initializer method name.
+    * <p> Actual value of this is in format <code>"jar file:module name"</code>.
+    */
+   public static final String DEFAULT_SECURITY_CLIENT_AUTH_INIT = "";
+ 
+   /**
+    * Returns user module name authenticating client credentials in <a
+    * href="../DistributedSystem.html#security-client-authenticator">"security-client-authenticator"</a>
+    */
+   @ConfigAttributeGetter(name=SECURITY_CLIENT_AUTHENTICATOR_NAME)
+   public String getSecurityClientAuthenticator();
+ 
+   /**
+    * Sets the user defined method name in <a
+    * href="../DistributedSystem.html#security-client-authenticator">"security-client-authenticator"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=SECURITY_CLIENT_AUTHENTICATOR_NAME)
+   public void setSecurityClientAuthenticator(String attValue);
+ 
+   /** The name of factory method for "security-client-authenticator" property */
+   @ConfigAttribute(type=String.class)
+   public static final String SECURITY_CLIENT_AUTHENTICATOR_NAME = "security-client-authenticator";
+ 
+   /**
+    * The default client authentication method name.
+    * <p> Actual value of this is fully qualified <code>"method name"</code>.
+    */
+   public static final String DEFAULT_SECURITY_CLIENT_AUTHENTICATOR = "";
+ 
+   /**
++   * Returns user module name generating token in <a
++   * href="../DistributedSystem.html#security-rest-token-service">"security-rest-token-service"</a>
++   */
++  public String getSecurityRestTokenService();
++
++  /**
++   * Sets the user defined method name in <a
++   * href="../DistributedSystem.html#security-rest-token-service">"security-rest-token-service"</a>
++   * property.
++   */
++  public void setSecurityRestTokenService(String attValue);
++
++  /**
++   * Returns true if the value of the token service method name can
++   * currently be modified. Some attributes can not be modified while the
++   * system is running.
++   */
++  public boolean isSecurityRestTokenServiceModifiable();
++
++  /** The name of factory method for "security-rest-token-service" property */
++  public static final String SECURITY_REST_TOKEN_SERVICE_NAME = "security-rest-token-service";
++
++  /**
++   * The default REST token service method name.
++   * <p> Actual value of this is fully qualified <code>"method name"</code>.
++   */
++  public static final String DEFAULT_SECURITY_REST_TOKEN_SERVICE = "";
++
++  /**
+    * Returns name of algorithm to use for Diffie-Hellman key exchange <a
+    * href="../DistributedSystem.html#security-client-dhalgo">"security-client-dhalgo"</a>
+    */
+   @ConfigAttributeGetter(name=SECURITY_CLIENT_DHALGO_NAME)
+   public String getSecurityClientDHAlgo();
+ 
+   /**
+    * Set the name of algorithm to use for Diffie-Hellman key exchange <a
+    * href="../DistributedSystem.html#security-client-dhalgo">"security-client-dhalgo"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=SECURITY_CLIENT_DHALGO_NAME)
+   public void setSecurityClientDHAlgo(String attValue);
+ 
+   /**
+    * The name of the Diffie-Hellman symmetric algorithm "security-client-dhalgo"
+    * property.
+    */
+   @ConfigAttribute(type=String.class)
+   public static final String SECURITY_CLIENT_DHALGO_NAME = "security-client-dhalgo";
+ 
+   /**
+    * The default Diffie-Hellman symmetric algorithm name.
+    * <p>
+    * Actual value of this is one of the available symmetric algorithm names in
+    * JDK like "DES", "DESede", "AES", "Blowfish".
+    */
+   public static final String DEFAULT_SECURITY_CLIENT_DHALGO = "";
+ 
+   /**
+    * Returns user defined method name for peer authentication initializer in <a
+    * href="../DistributedSystem.html#security-peer-auth-init">"security-peer-auth-init"</a>
+    */
+   @ConfigAttributeGetter(name=SECURITY_PEER_AUTH_INIT_NAME)
+   public String getSecurityPeerAuthInit();
+ 
+   /**
+    * Sets the user module name in <a
+    * href="../DistributedSystem.html#security-peer-auth-init">"security-peer-auth-init"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=SECURITY_PEER_AUTH_INIT_NAME)
+   public void setSecurityPeerAuthInit(String attValue);
+ 
+   /** The name of user module for "security-peer-auth-init" property*/
+   @ConfigAttribute(type=String.class)
+   public static final String SECURITY_PEER_AUTH_INIT_NAME = "security-peer-auth-init";
+ 
+   /**
+    * The default client authenticaiton method name.
+    * <p> Actual value of this is fully qualified <code>"method name"</code>.
+    */
+   public static final String DEFAULT_SECURITY_PEER_AUTH_INIT = "";
+ 
+   /**
+    * Returns user defined method name authenticating peer's credentials in <a
+    * href="../DistributedSystem.html#security-peer-authenticator">"security-peer-authenticator"</a>
+    */
+   @ConfigAttributeGetter(name=SECURITY_PEER_AUTHENTICATOR_NAME)
+   public String getSecurityPeerAuthenticator();
+ 
+   /**
+    * Sets the user module name in <a
+    * href="../DistributedSystem.html#security-peer-authenticator">"security-peer-authenticator"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=SECURITY_PEER_AUTHENTICATOR_NAME)
+   public void setSecurityPeerAuthenticator(String attValue);
+ 
+   /** The name of user defined method for "security-peer-authenticator" property*/
+   @ConfigAttribute(type=String.class)
+   public static final String SECURITY_PEER_AUTHENTICATOR_NAME = "security-peer-authenticator";
+ 
+   /**
+    * The default client authenticaiton method.
+    * <p> Actual value of this is fully qualified <code>"method name"</code>.
+    */
+   public static final String DEFAULT_SECURITY_PEER_AUTHENTICATOR = "";
+ 
+   /**
+    * Returns user module name authorizing client credentials in <a
+    * href="../DistributedSystem.html#security-client-accessor">"security-client-accessor"</a>
+    */
+   @ConfigAttributeGetter(name=SECURITY_CLIENT_ACCESSOR_NAME)
+   public String getSecurityClientAccessor();
+ 
+   /**
+    * Sets the user defined method name in <a
+    * href="../DistributedSystem.html#security-client-accessor">"security-client-accessor"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=SECURITY_CLIENT_ACCESSOR_NAME)
+   public void setSecurityClientAccessor(String attValue);
+ 
+   /** The name of the factory method for "security-client-accessor" property */
+   @ConfigAttribute(type=String.class)
+   public static final String SECURITY_CLIENT_ACCESSOR_NAME = "security-client-accessor";
+ 
+   /**
+    * The default client authorization module factory method name.
+    * <p> Actual value of this is fully qualified <code>"method name"</code>.
+    */
+   public static final String DEFAULT_SECURITY_CLIENT_ACCESSOR = "";
+ 
+   /**
+    * Returns user module name authorizing client credentials in <a
+    * href="../DistributedSystem.html#security-client-accessor-pp">"security-client-accessor-pp"</a>
+    */
+   @ConfigAttributeGetter(name=SECURITY_CLIENT_ACCESSOR_PP_NAME)
+   public String getSecurityClientAccessorPP();
+ 
+   /**
+    * Sets the user defined method name in <a
+    * href="../DistributedSystem.html#security-client-accessor-pp">"security-client-accessor-pp"</a>
+    * property.
+    */
+   @ConfigAttributeSetter(name=SECURITY_CLIENT_ACCESSOR_PP_NAME)
+   public void setSecurityClientAccessorPP(String attValue);
+ 
+   /** The name of the factory method for "security-client-accessor-pp" property */
+   @ConfigAttribute(type=String.class)
+   public static final String SECURITY_CLIENT_ACCESSOR_PP_NAME = "security-client-accessor-pp";
+ 
+   /**
+    * The default client post-operation authorization module factory method name.
+    * <p> Actual value of this is fully qualified <code>"method name"</code>.
+    */
+   public static final String DEFAULT_SECURITY_CLIENT_ACCESSOR_PP = "";
+ 
+   /**
+    * Get the current log-level for security logging.
+    *
+    * @return the current security log-level
+    */
+   @ConfigAttributeGetter(name=SECURITY_LOG_LEVEL_NAME)
+   public int getSecurityLogLevel();
+ 
+   /**
+    * Set the log-level for security logging.
+    *
+    * @param level
+    *                the new security log-level
+    */
+   @ConfigAttributeSetter(name=SECURITY_LOG_LEVEL_NAME)
+   public void setSecurityLogLevel(int level);
+ 
+   /**
+    * The name of "security-log-level" property that sets the log-level for
+    * security logger obtained using
+    * {@link DistributedSystem#getSecurityLogWriter()}
+    */
+   // type is String because the config file "config", "debug", "fine" etc, but the setter getter accepts int
+   @ConfigAttribute(type=String.class)
+   public static final String SECURITY_LOG_LEVEL_NAME = "security-log-level";
+ 
+   /**
+    * Returns the value of the "security-log-file" property
+    *
+    * @return <code>null</code> if logging information goes to standard out
+    */
+   @ConfigAttributeGetter(name=SECURITY_LOG_FILE_NAME)
+   public File getSecurityLogFile();
+ 
+   /**
+    * Sets the system's security log file containing security related messages.
+    * <p>
+    * Non-absolute log files are relative to the system directory.
+    * <p>
+    * The security log file can not be changed while the system is running.
+    *
+    * @throws IllegalArgumentException
+    *                 if the specified value is not acceptable.
+    * @throws com.gemstone.gemfire.UnmodifiableException
+    *                 if this attribute can not be modified.
+    * @throws com.gemstone.gemfire.GemFireIOException
+    *                 if the set failure is caused by an error when writing to
+    *                 the system's configuration file.
+    */
+   @ConfigAttributeSetter(name=SECURITY_LOG_FILE_NAME)
+   public void setSecurityLogFile(File value);
+ 
+   /**
+    * The name of the "security-log-file" property. This property is the path of
+    * the file where security related messages are logged.
+    */
+   @ConfigAttribute(type=File.class)
+   public static final String SECURITY_LOG_FILE_NAME = "security-log-file";
+ 
+   /**
+    * The default security log file.
+    * <p> *
+    * <p>
+    * Actual value of this constant is <code>""</code> which directs security
+    * log messages to the same place as the system log file.
+    */
+   public static final File DEFAULT_SECURITY_LOG_FILE = new File("");
+ 
+   /**
+    * Get timeout for peer membership check when security is enabled.
+    *
+    * @return Timeout in milliseconds.
+    */
+   @ConfigAttributeGetter(name=SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME)
+   public int getSecurityPeerMembershipTimeout();
+ 
+   /**
+    * Set timeout for peer membership check when security is enabled. The timeout must be less
+    * than peer handshake timeout.
+    * @param attValue
+    */
+   @ConfigAttributeSetter(name=SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME)
+   public void setSecurityPeerMembershipTimeout(int attValue);
+ 
+ 
+   /**
+    * The default peer membership check timeout is 1 second.
+    */
+   public static final int DEFAULT_SECURITY_PEER_VERIFYMEMBER_TIMEOUT = 1000;
+ 
+   /**
+    * Max membership timeout must be less than max peer handshake timeout. Currently this is set to
+    * default handshake timeout of 60 seconds.
+    */
+   public static final int MAX_SECURITY_PEER_VERIFYMEMBER_TIMEOUT = 60000;
+ 
+   /** The name of the peer membership check timeout property */
+   @ConfigAttribute(type=Integer.class, min=0, max=MAX_SECURITY_PEER_VERIFYMEMBER_TIMEOUT)
+   public static final String SECURITY_PEER_VERIFYMEMBER_TIMEOUT_NAME = "security-peer-verifymember-timeout";
+   /**
+    * Returns all properties starting with <a
+    * href="../DistributedSystem.html#security-">"security-"</a>.
+    */
+   public Properties getSecurityProps();
+ 
+   /**
+    * Returns the value of security property <a
+    * href="../DistributedSystem.html#security-">"security-"</a>
+    * for an exact attribute name match.
+    */
+   public String getSecurity(String attName);
+ 
+   /**
+    * Sets the value of the <a
+    * href="../DistributedSystem.html#security-">"security-*"</a>
+    * property.
+    */
+   public void setSecurity(String attName, String attValue);
+ 
+   /** For the "security-" prefixed properties */
+   public static final String SECURITY_PREFIX_NAME = "security-";
+ 
+   /** The prefix used for Gemfire properties set through java system properties */
+   public static final String GEMFIRE_PREFIX = "gemfire.";
+ 
+   /** For the "custom-" prefixed properties */
+   public static final String USERDEFINED_PREFIX_NAME = "custom-";
+ 
+   /** For ssl keystore and trust store properties */
+   public static final String SSL_SYSTEM_PROPS_NAME = "javax.net.ssl";
+   
+   public static final String KEY_STORE_TYPE_NAME = ".keyStoreType";
+   public static final String KEY_STORE_NAME = ".keyStore";
+   public static final String KEY_STORE_PASSWORD_NAME = ".keyStorePassword";
+   public static final String TRUST_STORE_NAME = ".trustStore";
+   public static final String TRUST_STORE_PASSWORD_NAME = ".trustStorePassword";
+ 
+ 
+   /** Suffix for ssl keystore and trust store properties for JMX*/
+   public static final String JMX_SSL_PROPS_SUFFIX = "-jmx";
+ 
+   /** For security properties starting with sysprop in gfsecurity.properties file */
+   public static final String SYS_PROP_NAME = "sysprop-";
+    /**
+     * The property decides whether to remove unresponsive client from the server.
+     */
+    @ConfigAttribute(type=Boolean.class)
+    public static final String REMOVE_UNRESPONSIVE_CLIENT_PROP_NAME = "remove-unresponsive-client";
+ 
+    /**
+     * The default value of remove unresponsive client is false.
+     */
+    public static final boolean DEFAULT_REMOVE_UNRESPONSIVE_CLIENT = false;
+    /**
+     * Returns the value of the <a
+     * href="../DistributedSystem.html#remove-unresponsive-client">"remove-unresponsive-client"</a>
+     * property.
+     * @since 6.0
+     */
+    @ConfigAttributeGetter(name=REMOVE_UNRESPONSIVE_CLIENT_PROP_NAME)
+    public boolean getRemoveUnresponsiveClient();
+    /**
+     * Sets the value of the <a
+     * href="../DistributedSystem.html#remove-unresponsive-client">"remove-unresponsive-client"</a>
+     * property.
+     * @since 6.0
+     */
+    @ConfigAttributeSetter(name=REMOVE_UNRESPONSIVE_CLIENT_PROP_NAME)
+    public void setRemoveUnresponsiveClient(boolean value);
+ 
+    /** @since 6.3 */
+    @ConfigAttribute(type=Boolean.class)
+    public static final String DELTA_PROPAGATION_PROP_NAME = "delta-propagation";
+ 
+    public static final boolean DEFAULT_DELTA_PROPAGATION = true;
+    /**
+     * Returns the value of the <a
+     * href="../DistributedSystem.html#delta-propagation">"delta-propagation"</a>
+     * property.
+     * @since 6.3
+     */
+    @ConfigAttributeGetter(name=DELTA_PROPAGATION_PROP_NAME)
+    public boolean getDeltaPropagation();
+ 
+    /**
+     * Sets the value of the <a
+     * href="../DistributedSystem.html#delta-propagation">"delta-propagation"</a>
+     * property.
+     * @since 6.3
+     */
+    @ConfigAttributeSetter(name=DELTA_PROPAGATION_PROP_NAME)
+    public void setDeltaPropagation(boolean value);
+ 
+   public static final int MIN_DISTRIBUTED_SYSTEM_ID = -1;
+   public static final int MAX_DISTRIBUTED_SYSTEM_ID = 255;
+    /**
+     * @since 6.6
+     */
+    @ConfigAttribute(type=Integer.class)
+    public static final String DISTRIBUTED_SYSTEM_ID_NAME = "distributed-system-id";
+    public static final int DEFAULT_DISTRIBUTED_SYSTEM_ID = -1;
+ 
+   @ConfigAttribute(type=String.class)
+    public static final String REDUNDANCY_ZONE_NAME = "redundancy-zone";
+    public static final String DEFAULT_REDUNDANCY_ZONE = "";
+    
+    /**
+     * @since 6.6
+     */
+    @ConfigAttributeSetter(name=DISTRIBUTED_SYSTEM_ID_NAME)
+    public void setDistributedSystemId(int distributedSystemId);
+ 
+   @ConfigAttributeSetter(name=REDUNDANCY_ZONE_NAME)
+

<TRUNCATED>


[23/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/PdxBasedCrudController.java
----------------------------------------------------------------------
diff --cc geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/PdxBasedCrudController.java
index 0000000,99e50d6..726d127
mode 000000,100644..100644
--- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/PdxBasedCrudController.java
+++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/PdxBasedCrudController.java
@@@ -1,0 -1,354 +1,444 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.rest.internal.web.controllers;
+ 
+ import java.util.ArrayList;
+ import java.util.List;
+ import java.util.Map;
++import java.util.Set;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.springframework.http.HttpHeaders;
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.MediaType;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.stereotype.Controller;
+ import org.springframework.util.StringUtils;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestBody;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ import org.springframework.web.bind.annotation.RequestParam;
+ 
++import com.gemstone.gemfire.cache.operations.PutOperationContext;
+ import com.gemstone.gemfire.internal.logging.LogService;
++import com.gemstone.gemfire.internal.security.AuthorizeRequest;
+ import com.gemstone.gemfire.internal.util.ArrayUtils;
+ import com.gemstone.gemfire.rest.internal.web.controllers.support.JSONTypes;
+ import com.gemstone.gemfire.rest.internal.web.controllers.support.RegionData;
+ import com.gemstone.gemfire.rest.internal.web.controllers.support.RegionEntryData;
+ import com.gemstone.gemfire.rest.internal.web.exception.ResourceNotFoundException;
++import com.gemstone.gemfire.rest.internal.web.security.AuthorizationProvider;
++import com.gemstone.gemfire.rest.internal.web.security.RestRequestFilter;
++import com.gemstone.gemfire.security.NotAuthorizedException;
+ import com.wordnik.swagger.annotations.Api;
+ import com.wordnik.swagger.annotations.ApiOperation;
+ import com.wordnik.swagger.annotations.ApiResponse;
+ import com.wordnik.swagger.annotations.ApiResponses;
+ 
+ /**
+  * The PdxBasedCrudController class serving REST Requests related to the REST CRUD operation on region
+  * <p/>
+  * @author Nilkanth Patel, john blum
+  * @see org.springframework.stereotype.Controller
+  * @since 8.0
+  */
+ 
+ @Controller("pdxCrudController")
+ @Api(value = "region",
+      description = "region CRUD operations")
+ @RequestMapping(PdxBasedCrudController.REST_API_VERSION)
+ @SuppressWarnings("unused")
+ public class PdxBasedCrudController extends CommonCrudController {
+ 
+   private static final Logger logger = LogService.getLogger();
+   
+   protected static final String REST_API_VERSION = "/v1";
+   
+   protected static final String DEFAULT_GETALL_RESULT_LIMIT = "50";  
+   
+   @Override
+   protected String getRestApiVersion() {
+     return REST_API_VERSION;
+   }
+ 
+   /**
+    * Creating entry into the region
+    * @param region region name where data will be created
+    * @param key gemfire region key
+    * @param json JSON document that is stored against the key
+    * @return JSON document
+    */
+   
+   @RequestMapping(method = RequestMethod.POST, value = "/{region}",
+                   consumes = MediaType.APPLICATION_JSON_VALUE,
+                   produces = { MediaType.APPLICATION_JSON_VALUE })
+   @ApiOperation(
+     value = "create entry",
+     notes = "Create (put-if-absent) data in region",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 201, message = "Created."),
+     @ApiResponse( code = 400, message = "Data specified (JSON doc) in the request body is invalid." ),
+     @ApiResponse( code = 404, message = "Region does not exist." ),
+     @ApiResponse( code = 409, message = "Key already exist in region."),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception.")   
+   } )
+   public ResponseEntity<?> create(@PathVariable("region") String region,
+       @RequestParam(value = "key", required = false) String key,
+       @RequestBody final String json) {
+     
+     key = generateKey(key);
+     
+     if(logger.isDebugEnabled()){
+       logger.debug("Posting (creating/putIfAbsent) JSON document ({}) to Region ({}) with Key ({})...",
+           json, region, key);
+     }
+     region = decode(region);
 -    Object existingPdxObj = null;
+     
++    final HttpHeaders headers = new HttpHeaders();
++    headers.setLocation(toUri(region, key));
++    
++    //Do request (Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        //TODO: add isJson type in OperationContext
++        AuthorizationProvider.putAuthorize(region, key, json, true/*isJson*/, null, PutOperationContext.CREATE);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
++    Object existingPdxObj = null;
+     //Check whether the user has supplied single JSON doc or Array of JSON docs  
+     final JSONTypes jsonType = validateJsonAndFindType(json);
+     if(JSONTypes.JSON_ARRAY.equals(jsonType)){
+       existingPdxObj = postValue(region, key, convertJsonArrayIntoPdxCollection(json));
+     }else {
+       existingPdxObj = postValue(region, key, convert(json));  
+     }
+     
 -    final HttpHeaders headers = new HttpHeaders();
 -    headers.setLocation(toUri(region, key));
 -    
+     if (existingPdxObj != null) {
+       final RegionEntryData<Object> data = new RegionEntryData<Object>(region);
+       data.add(existingPdxObj);
+       headers.setContentType(MediaType.APPLICATION_JSON);
+       return new ResponseEntity<RegionEntryData<?>>(data, headers, HttpStatus.CONFLICT);
+     } else {
+       return new ResponseEntity<String>(headers, HttpStatus.CREATED);
+     }
+   }
+   
+   /**
+    * Read all or fixed number of data in a given Region
+    * @param region gemfire region name
+    * @param limit total number of entries requested
+    * @return JSON document
+    */
+   @RequestMapping(method = RequestMethod.GET, value = "/{region}", produces = MediaType.APPLICATION_JSON_VALUE)
+   @ApiOperation(
+     value = "read all data for region",
+     notes = "Read all data for region. Use limit param to get fixed or limited number of entries.",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK."),
+     @ApiResponse( code = 400, message = "Bad request." ),
+     @ApiResponse( code = 404, message = "Region does not exist." ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception.")    
+   } )
+   public ResponseEntity<?> read(@PathVariable("region") String region,
+       @RequestParam(value = "limit", defaultValue = DEFAULT_GETALL_RESULT_LIMIT) final String limit) {
+     
+     if(logger.isDebugEnabled()){
+       logger.debug("Reading all data in Region ({})...", region);
+     }
+     region = decode(region);
+       
++    final HttpHeaders headers = new HttpHeaders();
++   
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.getAllAuthorize(region, getRegion(region).keySet(), null);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
+     Map<Object, Object> valueObjs = null;
+     final RegionData<Object> data = new RegionData<Object>(region);
 -
 -    final HttpHeaders headers = new HttpHeaders();
++    
+     String keyList = null;
+     int regionSize = getRegion(region).size();
+     List<Object> keys = new ArrayList<Object>(regionSize);
+     List<Object> values = new ArrayList<Object>(regionSize);
+     
+     for (Map.Entry<Object, Object> entry : getValues(region).entrySet() ) {
++      //Do post authorization if security is enabled.
++      if(AuthorizationProvider.isSecurityEnabled()){
++        try{
++          AuthorizationProvider.getAuthorizePP(region, entry.getKey(), entry.getValue());
++        }catch(NotAuthorizedException nae) {
++          //Sending UNAUTHORIZED response, if any one of the key has UNAUTHORIZED access configured.
++          return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++        }
++      }
++      
+       Object value = entry.getValue();
+       if (value != null) {
+         keys.add(entry.getKey());
+         values.add(value);
+       }
+     }
+     
+     if ("ALL".equalsIgnoreCase(limit) ) {  
+       data.add(values);
+       keyList = StringUtils.collectionToDelimitedString(keys, ",");
+     } else {
+       try {
+         int maxLimit = Integer.valueOf(limit);
+         if(maxLimit < 0){
+           String errorMessage = String.format("Negative limit param (%1$s) is not valid!", maxLimit);
+           return new ResponseEntity<String>(
 -              convertErrorAsJson(errorMessage), HttpStatus.BAD_REQUEST);
++              convertErrorAsJson(errorMessage), headers, HttpStatus.BAD_REQUEST);
+         }
+         
+         int mapSize = keys.size();
+         if (maxLimit > mapSize) {
+           maxLimit = mapSize;
+         }
+         data.add(values.subList(0, maxLimit));
+ 
+         keyList = StringUtils.collectionToDelimitedString(
+             keys.subList(0, maxLimit), ",");
+ 
+       } catch (NumberFormatException e) {
+         // limit param is not specified in proper format. set the HTTPHeader
+         // for BAD_REQUEST
+         String errorMessage = String.format("limit param (%1$s) is not valid!", limit);
+         return new ResponseEntity<String>(
 -            convertErrorAsJson(errorMessage), HttpStatus.BAD_REQUEST);
++            convertErrorAsJson(errorMessage), headers, HttpStatus.BAD_REQUEST);
+       }  
+     } 
+     
+     headers.set("Content-Location", toUri(region, keyList).toASCIIString() );
+     return new ResponseEntity<RegionData<?>>(data, headers, HttpStatus.OK);
+   }
+   
+   /**
+    * Reading data for set of keys
+    * @param region gemfire region name
+    * @param keys string containing comma seperated keys 
+    * @return JSON document
+    */
+   @RequestMapping(method = RequestMethod.GET, value = "/{region}/{keys}",
+                   produces = MediaType.APPLICATION_JSON_VALUE)
+   @ApiOperation(
+     value = "read data for specific keys",
+     notes = "Read data for specific set of keys in region.",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK."),
+     @ApiResponse( code = 400, message = "Bad Request."),
+     @ApiResponse( code = 404, message = "Region does not exist." ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception.")  
+   } )
+   public ResponseEntity<?> read(
+       @PathVariable("region") String region,
+       @PathVariable("keys") final String[] keys,
+       @RequestParam(value = "ignoreMissingKey", required = false ) final String ignoreMissingKey) {
+     
+     if(logger.isDebugEnabled()){
+       logger.debug("Reading data for keys ({}) in Region ({})",
+           ArrayUtils.toString(keys), region);
+     }
+     
+     final HttpHeaders headers = new HttpHeaders();
+     region = decode(region);
+     
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.getAuthorize(region, keys, null);
++      } catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
+     if (keys.length == 1) { 
+       /* GET op on single key */
+       Object value = getValue(region, keys[0]);
+       //if region.get(K) return null (i.e INVLD or TOMBSTONE case) We consider 404, NOT Found case  
+       if(value == null) {
+         throw new ResourceNotFoundException(String.format("Key (%1$s) does not exist for region (%2$s) in cache!", keys[0], region));
+       }
+       
++      //Do post authorization if security is enabled.
++      if(AuthorizationProvider.isSecurityEnabled()){
++        try{
++          AuthorizationProvider.getAuthorizePP(region, keys[0], value);
++        }catch(NotAuthorizedException nae) {
++          return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++        }
++      }
++      
+       final RegionEntryData<Object> data = new RegionEntryData<Object>(region);
+       headers.set("Content-Location", toUri(region, keys[0]).toASCIIString());
+       data.add(value);
+       return new ResponseEntity<RegionData<?>>(data, headers, HttpStatus.OK);
+ 
+     } else {
+       //fail fast for the case where ignoreMissingKey param is not specified correctly.
+       if (ignoreMissingKey != null 
+           && !(ignoreMissingKey.equalsIgnoreCase("true") || ignoreMissingKey.equalsIgnoreCase("false"))){
+         String errorMessage = String.format("ignoreMissingKey param (%1$s) is not valid. valid usage is ignoreMissingKey=true!", ignoreMissingKey);
+         return new ResponseEntity<String>(
 -            convertErrorAsJson(errorMessage), HttpStatus.BAD_REQUEST);
++            convertErrorAsJson(errorMessage), headers, HttpStatus.BAD_REQUEST);
+       }
+       
+       if(!("true".equalsIgnoreCase(ignoreMissingKey))) { 
+         List<String> unknownKeys = checkForMultipleKeysExist(region, keys);
+         if(unknownKeys.size() > 0) {
+           String unknownKeysAsStr = StringUtils.collectionToDelimitedString(unknownKeys, ",");
+           String erroString = String.format("Requested keys (%1$s) not exist in region (%2$s)", StringUtils.collectionToDelimitedString(unknownKeys, ","), region);
+           return new ResponseEntity<String>(convertErrorAsJson(erroString), headers, HttpStatus.BAD_REQUEST);
+         }
+       }  
+       
+       final Map<Object, Object> valueObjs = getValues(region, keys);
 -
++      
++      //Do post authorization if security is enabled.
++      if(AuthorizationProvider.isSecurityEnabled()){
++        for (Map.Entry<Object, Object> entry : valueObjs.entrySet() ) {
++          try{
++            AuthorizationProvider.getAuthorizePP(region, entry.getKey(), entry.getValue());
++          }catch(NotAuthorizedException nae) {
++            return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++          }
++        }
++      }
++      
+       // Do we need to remove null values from Map..?
+       // To Remove null value entries from map.
+       // valueObjs.values().removeAll(Collections.singleton(null));
+   
+       //currently we are not removing keys having value null from the result.
+       String keyList = StringUtils.collectionToDelimitedString(valueObjs.keySet(), ",");
+       headers.set("Content-Location", toUri(region, keyList).toASCIIString() );
+       final RegionData<Object> data = new RegionData<Object>(region);
+       data.add(valueObjs.values());
+       return new ResponseEntity<RegionData<?>>(data, headers, HttpStatus.OK);
+     }
+   }
+ 
+   /**
+    * Update data for a key or set of keys
+    * @param region gemfire data region
+    * @param keys keys for which update operation is requested
+    * @param opValue type of update (put, replace, cas etc)
+    * @param json new data for the key(s)
+    * @return JSON document
+    */
+   @RequestMapping(method = RequestMethod.PUT, value = "/{region}/{keys}",
+                   consumes = { MediaType.APPLICATION_JSON_VALUE },
+                   produces = { MediaType.APPLICATION_JSON_VALUE })
+   @ApiOperation(
+     value = "update data for key",
+     notes = "Update or insert (put) data for key in region." +
+             "op=REPLACE, update (replace) data with key if and only if the key exists in region" +
+             "op=CAS update (compare-and-set) value having key with a new value if and only if the \"@old\" value sent matches the current value for the key in region",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK."),
+     @ApiResponse( code = 400, message = "Bad Request."),
+     @ApiResponse( code = 404, message = "Region does not exist or if key is not mapped to some value for REPLACE or CAS."),
+     @ApiResponse( code = 409, message = "For CAS, @old value does not match to the current value in region" ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception.")
+   } )
+   public ResponseEntity<?> update(@PathVariable("region") String region,
+       @PathVariable("keys") final String[] keys,
+       @RequestParam(value = "op", defaultValue = "PUT") final String opValue,
+       @RequestBody final String json) {
+     
+     if(logger.isDebugEnabled()){
+       logger.debug("updating key(s) for region ({}) ", region);
+     }
++    
+     region = decode(region);
++    HttpHeaders headers = new HttpHeaders();
++    
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        //TODO: add isJson type in OperationContext
++        if(keys.length > 1){
++          AuthorizationProvider.putAllAuthorize(region, json, null);
++        }else {
++          //TODO: add isJson type in OperationContext
++          AuthorizationProvider.putAuthorize(region, keys[0], json, false /*isObject*/, /*isJson,*/ null, PutOperationContext.UPDATE);
++        }
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
+     
+     if(keys.length > 1){
+       //putAll case
 -      return updateMultipleKeys(region, keys, json);
++      return updateMultipleKeys(region, keys, json, headers);
+     } else {
+       //put case
 -      return updateSingleKey(region, keys[0], json, opValue);
++      return updateSingleKey(region, keys[0], json, opValue, headers);
+     }
+   }
+     
+   @RequestMapping(method = RequestMethod.HEAD, value = "/{region}", produces = MediaType.APPLICATION_JSON_VALUE)
+   @ApiOperation(
+     value = "Get total number of entries",
+     notes = "Get total number of entries into the specified region",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK."),
+     @ApiResponse( code = 400, message = "Bad request." ),
+     @ApiResponse( code = 404, message = "Region does not exist." ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception.")    
+   } )
+   public ResponseEntity<?> size(@PathVariable("region") String region) {
+     
+     if(logger.isDebugEnabled()){
+       logger.debug("Determining the number of entries in Region ({})...", region);
+     }
+     region = decode(region);
 -      
 -    final HttpHeaders headers = new HttpHeaders();
++    //Not Authorized at REST APIs level as even client-server does not provide authz  
+     
++    final HttpHeaders headers = new HttpHeaders();
+     headers.set("Resource-Count", String.valueOf(getRegion(region).size()) );
+     return new ResponseEntity<RegionData<?>>(headers, HttpStatus.OK);
+   }
+   
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/QueryAccessController.java
----------------------------------------------------------------------
diff --cc geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/QueryAccessController.java
index 0000000,ef034cb..460ed6c
mode 000000,100644..100644
--- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/QueryAccessController.java
+++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/QueryAccessController.java
@@@ -1,0 -1,354 +1,459 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.rest.internal.web.controllers;
+ 
++import java.util.Set;
+ import java.util.concurrent.ConcurrentHashMap;
+ 
+ import org.apache.logging.log4j.Logger;
+ import org.springframework.http.HttpHeaders;
+ import org.springframework.http.HttpStatus;
+ import org.springframework.http.MediaType;
+ import org.springframework.http.ResponseEntity;
+ import org.springframework.stereotype.Controller;
+ import org.springframework.web.bind.annotation.PathVariable;
+ import org.springframework.web.bind.annotation.RequestBody;
+ import org.springframework.web.bind.annotation.RequestMapping;
+ import org.springframework.web.bind.annotation.RequestMethod;
+ import org.springframework.web.bind.annotation.RequestParam;
+ import org.springframework.web.bind.annotation.ResponseBody;
+ import org.springframework.web.bind.annotation.ResponseStatus;
+ 
+ import com.gemstone.gemfire.cache.Region;
++import com.gemstone.gemfire.cache.operations.OperationContext;
++import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
++import com.gemstone.gemfire.cache.operations.PutOperationContext;
++import com.gemstone.gemfire.cache.operations.QueryOperationContext;
+ import com.gemstone.gemfire.cache.query.FunctionDomainException;
+ import com.gemstone.gemfire.cache.query.NameResolutionException;
+ import com.gemstone.gemfire.cache.query.Query;
+ import com.gemstone.gemfire.cache.query.QueryExecutionLowMemoryException;
+ import com.gemstone.gemfire.cache.query.QueryExecutionTimeoutException;
+ import com.gemstone.gemfire.cache.query.QueryInvalidException;
+ import com.gemstone.gemfire.cache.query.QueryInvocationTargetException;
+ import com.gemstone.gemfire.cache.query.TypeMismatchException;
+ import com.gemstone.gemfire.cache.query.internal.DefaultQuery;
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.rest.internal.web.exception.GemfireRestException;
+ import com.gemstone.gemfire.rest.internal.web.exception.ResourceNotFoundException;
++import com.gemstone.gemfire.rest.internal.web.security.AuthorizationProvider;
+ import com.gemstone.gemfire.rest.internal.web.util.JSONUtils;
+ import com.gemstone.gemfire.rest.internal.web.util.ValidationUtils;
++import com.gemstone.gemfire.security.NotAuthorizedException;
+ import com.wordnik.swagger.annotations.Api;
+ import com.wordnik.swagger.annotations.ApiOperation;
+ import com.wordnik.swagger.annotations.ApiResponse;
+ import com.wordnik.swagger.annotations.ApiResponses;
+ 
+ /**
+  * The QueryingController class serves all HTTP REST requests related to the gemfire querying
+  * <p/>
+  * @author Nilkanth Patel, john blum
+  * @see org.springframework.stereotype.Controller
+  * @since 8.0
+  */
+ 
+ @Controller("queryController")
+ @Api(value = "queries", description = "Rest api for gemfire query execution", produces = MediaType.APPLICATION_JSON_VALUE)
+ @RequestMapping(QueryAccessController.REST_API_VERSION + "/queries")
+ @SuppressWarnings("unused")
+ public class QueryAccessController extends AbstractBaseController {
+ 
+   private static final Logger logger = LogService.getLogger();
+   
+   protected static final String PARAMETERIZED_QUERIES_REGION = "__ParameterizedQueries__";
+   
+   private final ConcurrentHashMap<String, DefaultQuery> compiledQueries = new ConcurrentHashMap<String, DefaultQuery>();
+   
+   // Constant String value indicating the version of the REST API.
+   protected static final String REST_API_VERSION = "/v1";
+ 
+   /**
+    * Gets the version of the REST API implemented by this @Controller.
+    * <p/>
+    * @return a String indicating the REST API version.
+    */
+   @Override
+   protected String getRestApiVersion() {
+     return REST_API_VERSION;
+   }
+   
+   /**
+    * list all parameterized Queries created in a Gemfire data node
+    * @return result as a JSON document.
+    */
+   @RequestMapping(method = RequestMethod.GET,  produces = { MediaType.APPLICATION_JSON_VALUE })
+   @ApiOperation(
+     value = "list all parameterized queries",
+     notes = "List all parameterized queries by id/name",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK." ),  
+     @ApiResponse( code = 500, message = "if GemFire throws an error or exception" )   
+   } )
+   @ResponseBody
+   @ResponseStatus(HttpStatus.OK)
+   public ResponseEntity<?> list() {
+  
+     if (logger.isDebugEnabled()) {
+       logger.debug("Listing all parameterized Queries in GemFire...");
+     }
++  
++    final HttpHeaders headers = new HttpHeaders();  
++    headers.setLocation(toUri("queries"));
+     
 -    final Region<String, String> parameterizedQueryRegion = getQueryStore(PARAMETERIZED_QUERIES_REGION);
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.listQueriesAuthorize(OperationCode.LIST, true, "LIST_QUERIES");
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
+     
++    final Region<String, String> parameterizedQueryRegion = getQueryStore(PARAMETERIZED_QUERIES_REGION);    
+     String queryListAsJson =  JSONUtils.formulateJsonForListQueriesCall(parameterizedQueryRegion);
 -    final HttpHeaders headers = new HttpHeaders();  
 -    headers.setLocation(toUri("queries"));
++
+     return new ResponseEntity<String>(queryListAsJson, headers, HttpStatus.OK);
+   } 
+   
+   /**
+    * Create a named, parameterized Query
+    * @param queryId uniquely identify the query
+    * @param oqlInUrl OQL query string specified in a request URL
+    * @param oqlInBody OQL query string specified in a request body
+    * @return result as a JSON document.
+    */
+   @RequestMapping(method = RequestMethod.POST)
+   @ApiOperation(
+     value = "create a parameterized Query",
+     notes = "Prepare the specified parameterized query and assign the corresponding ID for lookup",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 201, message = "Successfully created." ),
+     @ApiResponse( code = 409, message = "QueryId already assigned to other query." ),  
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception." )
+   } )
+   public ResponseEntity<?> create(@RequestParam("id") final String queryId,
+                                   @RequestParam(value = "q", required = false) String oqlInUrl,
+                                   @RequestBody(required = false) final String oqlInBody)
+   {
+     final String oqlStatement = validateQuery(oqlInUrl, oqlInBody);
+     
+     if (logger.isDebugEnabled()) {
+       logger.debug("Creating a named, parameterized Query ({}) with ID ({})...", oqlStatement, queryId);
+     }
 -
 -    // store the compiled OQL statement with 'queryId' as the Key into the hidden, ParameterizedQueries Region...
 -    final String existingOql = createNamedQuery(PARAMETERIZED_QUERIES_REGION, queryId, oqlStatement);
 -
++    
+     final HttpHeaders headers = new HttpHeaders();
+     headers.setLocation(toUri("queries", queryId));
 -
++    
++    
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.createQueryAuthorize(OperationCode.CREATE_QUERY, true, "CREATE_QUERY", queryId, oqlStatement);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
++    // store the compiled OQL statement with 'queryId' as the Key into the hidden, ParameterizedQueries Region...
++    final String existingOql = createNamedQuery(PARAMETERIZED_QUERIES_REGION, queryId, oqlStatement);
++    
+     if (existingOql != null) {
+       headers.setContentType(MediaType.APPLICATION_JSON);
+       return new ResponseEntity<String>(JSONUtils.formulateJsonForExistingQuery(queryId, existingOql), headers, HttpStatus.CONFLICT);
+     } else {
+       return new ResponseEntity<String>(headers, HttpStatus.CREATED);
+     }
+   }
+ 
+   /**
+    * Run an adhoc Query specified in a query string
+    * @param oql OQL query string to be executed
+    * @return query result as a JSON document
+    */
+   @RequestMapping(method = RequestMethod.GET, value = "/adhoc", produces = { MediaType.APPLICATION_JSON_VALUE })
+   @ApiOperation(
+     value = "run an adhoc query",
+     notes = "Run an unnamed (unidentified), ad-hoc query passed as a URL parameter",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "OK." ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception" )   
+   } )
+   @ResponseBody
+   @ResponseStatus(HttpStatus.OK)
+   public ResponseEntity<String> runAdhocQuery(@RequestParam("q") String oql) {
+     
+     if (logger.isDebugEnabled()) {
+       logger.debug("Running an adhoc Query ({})...", oql);
+     }
++    
++    HttpHeaders headers = new HttpHeaders();
+     oql = decode(oql);
+     final Query query = getQueryService().newQuery(oql);
+     
++    Set regionNames = ((DefaultQuery)query).getRegionsInQuery(null);
++    
++    //Do request(Pre) authorization if security is enabled.
++    QueryOperationContext queryAuthzContext = null;
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        queryAuthzContext = AuthorizationProvider.queryAuthorize(oql, regionNames, null);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
+     // NOTE Query.execute throws many checked Exceptions; let the BaseControllerAdvice Exception handlers catch
+     // and handle the Exceptions appropriately (500 Server Error)!
+     try {
+       Object queryResult =  query.execute();
 -      return processQueryResponse(queryResult, "adhoc?q=" + oql);
++      
++      //Post authorization
++      if(AuthorizationProvider.isSecurityEnabled()){
++        queryAuthzContext = AuthorizationProvider.queryAuthorizePP(oql, regionNames, queryResult, queryAuthzContext, null);
++        if(queryAuthzContext != null){
++          queryResult = queryAuthzContext.getQueryResult();
++        }
++      }
++      return processQueryResponse(queryResult, "adhoc?q=" + oql, headers);
+     } catch (FunctionDomainException fde) {
+       throw new GemfireRestException("A function was applied to a parameter that is improper for that function!", fde);
+     } catch (TypeMismatchException tme) {
+       throw new GemfireRestException("Bind parameter is not of the expected type!", tme);
+     }catch (NameResolutionException nre) {
+       throw new GemfireRestException("Name in the query cannot be resolved!", nre);
+     }catch (IllegalArgumentException iae) {
+       throw new GemfireRestException(" The number of bound parameters does not match the number of placeholders!", iae);
+     }catch (IllegalStateException ise) {
+       throw new GemfireRestException("Query is not permitted on this type of region!", ise);
+     }catch (QueryExecutionTimeoutException qete) {
+       throw new GemfireRestException("Query execution time is exceeded max query execution time (gemfire.Cache.MAX_QUERY_EXECUTION_TIME) configured! ", qete);
+     }catch (QueryInvocationTargetException qite) {
+       throw new GemfireRestException("Data referenced in from clause is not available for querying!", qite);
+     }catch (QueryExecutionLowMemoryException qelme) {
+       throw new GemfireRestException("Query execution gets canceled due to low memory conditions and the resource manager critical heap percentage has been set!", qelme);
+     }
+     catch (Exception e) {
+       throw new GemfireRestException("Server has encountered while executing Adhoc query!", e);
+     }
+   }
+ 
+   /**
+    * Run named parameterized Query with ID
+    * @param queryId id of the OQL string
+    * @param arguments query bind params required while executing query
+    * @return query result as a JSON document
+    */
+   @RequestMapping(method = RequestMethod.POST, value = "/{query}", produces = {MediaType.APPLICATION_JSON_VALUE})
+   @ApiOperation(
+     value = "run parameterized query",
+     notes = "run the specified named query passing in scalar values for query parameters in the GemFire cluster",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "Query successfully executed." ),
+     @ApiResponse( code = 400, message = "Query bind params specified as JSON document in the request body is invalid" ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception" )   
+   } )
+   @ResponseBody
+   @ResponseStatus(HttpStatus.OK)
+   public ResponseEntity<String> runNamedQuery(@PathVariable("query") String queryId,
+                                               @RequestBody String arguments)
+   {
+     if (logger.isDebugEnabled()) {
+       logger.debug("Running named Query with ID ({})...", queryId);
+     }
+     queryId = decode(queryId);
++    HttpHeaders headers = new HttpHeaders();
+     
+     if (arguments != null) {
+       // Its a compiled query.
+       
+       //Convert arguments into Object[]
+       Object args[] = jsonToObjectArray(arguments);
+       
++      final String oql = getValue(PARAMETERIZED_QUERIES_REGION, queryId);
+       Query compiledQuery = compiledQueries.get(queryId);
+       if (compiledQuery == null) {
+         // This is first time the query is seen by this server.
 -        final String oql = getValue(PARAMETERIZED_QUERIES_REGION, queryId);
 -        
+         ValidationUtils.returnValueThrowOnNull(oql, new ResourceNotFoundException(
+           String.format("No Query with ID (%1$s) was found!", queryId)));
+         try {   
+           compiledQuery = getQueryService().newQuery(oql);
+         } catch (QueryInvalidException qie) {
+           throw new GemfireRestException("Syntax of the OQL queryString is invalid!", qie);
+         }
+         compiledQueries.putIfAbsent(queryId, (DefaultQuery)compiledQuery);
+       }  
 -       // NOTE Query.execute throws many checked Exceptions; let the BaseControllerAdvice Exception handlers catch
++       
++      Set regionNames = ((DefaultQuery)compiledQuery).getRegionsInQuery(args);
++      
++      //Do request(Pre) authorization if security is enabled.
++      QueryOperationContext queryAuthzContext = null;
++      if(AuthorizationProvider.isSecurityEnabled()){
++        setAuthTokenHeader(headers);
++        AuthorizationProvider.init();
++        try{
++          queryAuthzContext= AuthorizationProvider.queryAuthorize(oql, regionNames, args);
++        }catch(NotAuthorizedException nae) {
++          return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++        }
++      }
++      
++      // NOTE Query.execute throws many checked Exceptions; let the BaseControllerAdvice Exception handlers catch
+        // and handle the Exceptions appropriately (500 Server Error)!
+        try {
+          Object queryResult =  compiledQuery.execute(args);
 -         return processQueryResponse(queryResult, queryId);
++         
++         //Post authorization
++         if(AuthorizationProvider.isSecurityEnabled()){
++           queryAuthzContext = AuthorizationProvider.queryAuthorizePP(oql, regionNames, queryResult, queryAuthzContext, args);
++           if(queryAuthzContext != null){
++             queryResult = queryAuthzContext.getQueryResult();
++           }
++         }
++         
++         return processQueryResponse(queryResult, queryId, headers);
+        } catch (FunctionDomainException fde) {
+          throw new GemfireRestException("A function was applied to a parameter that is improper for that function!", fde);
+        } catch (TypeMismatchException tme) {
+          throw new GemfireRestException("Bind parameter is not of the expected type!", tme);
+        } catch (NameResolutionException nre) {
+          throw new GemfireRestException("Name in the query cannot be resolved!", nre);
+        } catch (IllegalArgumentException iae) {
+          throw new GemfireRestException(" The number of bound parameters does not match the number of placeholders!", iae);
+        } catch (IllegalStateException ise) {
+          throw new GemfireRestException("Query is not permitted on this type of region!", ise);
+        } catch (QueryExecutionTimeoutException qete) {
+          throw new GemfireRestException("Query execution time is exceeded  max query execution time (gemfire.Cache.MAX_QUERY_EXECUTION_TIME) configured!", qete);
+        } catch (QueryInvocationTargetException qite) {
+          throw new GemfireRestException("Data referenced in from clause is not available for querying!", qite);
+        } catch (QueryExecutionLowMemoryException qelme) {
+          throw new GemfireRestException("Query gets canceled due to low memory conditions and the resource manager critical heap percentage has been set!", qelme);
+        } catch (Exception e) {
+          throw new GemfireRestException("Error encountered while executing named query!", e);
+        }
+      } else {
+        throw new GemfireRestException(" Bind params either not specified or not processed properly by the server!"); 
+      }
+   }
+ 
+   /**
+    * Update named, parameterized Query
+    * @param queryId uniquely identify the query
+    * @param oqlInUrl OQL query string specified in a request URL
+    * @param oqlInBody OQL query string specified in a request body
+    */
+   @RequestMapping(method = RequestMethod.PUT, value = "/{query}")
+   @ApiOperation(
+     value = "update parameterized query",
+     notes = "Update named, parameterized query by ID",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "Updated successfully." ),
+     @ApiResponse( code = 404, message = "queryId does not exist." ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception." )   
+   } )
+   public ResponseEntity<?> update( @PathVariable("query") final String queryId,
+                                    @RequestParam(value = "q", required = false) String oqlInUrl,
+                                    @RequestBody(required = false) final String oqlInBody) {
+     
+     final String oqlStatement = validateQuery(oqlInUrl, oqlInBody);
 -
++    
+     if (logger.isDebugEnabled()) {
+       logger.debug("Updating a named, parameterized Query ({}) with ID ({})...", oqlStatement, queryId);
+     }
 -
++    
++    HttpHeaders headers = new HttpHeaders();
++    
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.updateQueryAuthorize(OperationCode.UPDATE_QUERY, true, "UPDATE_QUERY", queryId, oqlStatement);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
+     // update the OQL statement with 'queryId' as the Key into the hidden, ParameterizedQueries Region...
+     checkForQueryIdExist(PARAMETERIZED_QUERIES_REGION, queryId);
+     updateNamedQuery(PARAMETERIZED_QUERIES_REGION, queryId, oqlStatement);
+     compiledQueries.remove(queryId);
+ 
 -    return new ResponseEntity<Object>(HttpStatus.OK);
++    return new ResponseEntity<Object>(headers, HttpStatus.OK);
+   }
+ 
+   //delete named, parameterized query
+   /**
+    * Delete named, parameterized Query
+    * @param queryId uniquely identify the query to be deleted
+    */
+   @RequestMapping(method = RequestMethod.DELETE, value = "/{query}")
+   @ApiOperation(
+     value = "delete parameterized query",
+     notes = "delete named, parameterized query by ID",
+     response  = void.class
+   )
+   @ApiResponses( {
+     @ApiResponse( code = 200, message = "Deleted successfully." ),
+     @ApiResponse( code = 404, message = "queryId does not exist." ),
+     @ApiResponse( code = 500, message = "GemFire throws an error or exception" )   
+   } )
+   public ResponseEntity<?> delete(@PathVariable("query") final String queryId) {
+ 
+     if (logger.isDebugEnabled()) {
+       logger.debug("Deleting a named, parameterized Query with ID ({}).", queryId);
+     }
+     
++    HttpHeaders headers = new HttpHeaders();
++    
++    //Do request(Pre) authorization if security is enabled.
++    if(AuthorizationProvider.isSecurityEnabled()){
++      setAuthTokenHeader(headers);
++      AuthorizationProvider.init();
++      try{
++        AuthorizationProvider.deleteQueryAuthorize(OperationCode.DELETE_QUERY, true, "DELETE_QUERY", queryId);
++      }catch(NotAuthorizedException nae) {
++        return new ResponseEntity<String>(headers, HttpStatus.UNAUTHORIZED);
++      }
++    }
++    
+     //delete the OQL statement with 'queryId' as the Key into the hidden,
+     // ParameterizedQueries Region...
+     deleteNamedQuery(PARAMETERIZED_QUERIES_REGION, queryId);
+     compiledQueries.remove(queryId);
 -    return new ResponseEntity<Object>(HttpStatus.OK);
++    return new ResponseEntity<Object>(headers, HttpStatus.OK);
+   }
+   
+ }
+ 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-web-api/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --cc geode-web-api/src/main/webapp/WEB-INF/web.xml
index 0000000,ad354f1..56a1c85
mode 000000,100644..100644
--- a/geode-web-api/src/main/webapp/WEB-INF/web.xml
+++ b/geode-web-api/src/main/webapp/WEB-INF/web.xml
@@@ -1,0 -1,65 +1,75 @@@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+ 
+      http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <web-app xmlns="http://java.sun.com/xml/ns/javaee"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+          version="3.0">
+ 
+   <display-name>GemFire Developer REST API</display-name>
+ 
+   <description>
+     Web deployment descriptor declaring the developer REST API for GemFire.
+   </description>
+   
+   <!-- context-param>
+     <param-name>contextConfigLocation</param-name>
+     <param-value>/META-INF/cache-config.xml</param-value>
+   </context-param -->
+   
+   <filter>
+     <filter-name>httpPutFilter</filter-name>
+     <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
+     <async-supported>true</async-supported>
+   </filter>
+ 
+   <filter-mapping>
+     <filter-name>httpPutFilter</filter-name>
+     <url-pattern>/*</url-pattern>
+   </filter-mapping>
+ 
+   <!-- listener>
+     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+   </listener-->
+ 
+   <servlet>
+     <description>
+       The Spring DispatcherServlet (FrontController) handling all HTTP requests to the Developer REST API
+       GemFire Web Application.
+     </description>
+     <servlet-name>gemfire-api</servlet-name>
+     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+     <load-on-startup>1</load-on-startup>
+     <async-supported>true</async-supported>
+   </servlet>
+    
+   <servlet-mapping>
+     <servlet-name>gemfire-api</servlet-name>
+     <url-pattern>/*</url-pattern>
+   </servlet-mapping>
+   
++  <filter>
++    <filter-name>restRequestFilter</filter-name>
++    <filter-class>com.gemstone.gemfire.rest.internal.web.security.RestRequestFilter</filter-class>
++  </filter>
++
++  <filter-mapping>
++    <filter-name>restRequestFilter</filter-name>
++    <url-pattern>/*</url-pattern>
++  </filter-mapping>
++
+ </web-app>



[42/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
index 0000000,1ca10cc..5ff3b43
mode 000000,100755..100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
@@@ -1,0 -1,837 +1,845 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal;
+ 
+ import java.util.Collections;
+ import java.util.List;
+ import java.util.Set;
+ import java.util.concurrent.CopyOnWriteArrayList;
+ 
+ import javax.management.Notification;
+ import javax.management.ObjectName;
+ 
+ import org.apache.logging.log4j.Logger;
+ 
+ import com.gemstone.gemfire.CancelException;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.execute.FunctionService;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.distributed.DistributedSystemDisconnectedException;
+ import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
+ import com.gemstone.gemfire.distributed.internal.ResourceEvent;
+ import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.management.AlreadyRunningException;
+ import com.gemstone.gemfire.management.AsyncEventQueueMXBean;
+ import com.gemstone.gemfire.management.CacheServerMXBean;
+ import com.gemstone.gemfire.management.DiskStoreMXBean;
+ import com.gemstone.gemfire.management.DistributedLockServiceMXBean;
+ import com.gemstone.gemfire.management.DistributedRegionMXBean;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
+ import com.gemstone.gemfire.management.GatewayReceiverMXBean;
+ import com.gemstone.gemfire.management.GatewaySenderMXBean;
+ import com.gemstone.gemfire.management.LocatorMXBean;
+ import com.gemstone.gemfire.management.LockServiceMXBean;
+ import com.gemstone.gemfire.management.ManagementException;
+ import com.gemstone.gemfire.management.ManagerMXBean;
+ import com.gemstone.gemfire.management.MemberMXBean;
+ import com.gemstone.gemfire.management.RegionMXBean;
+ import com.gemstone.gemfire.management.internal.beans.ManagementAdapter;
+ import com.gemstone.gemfire.management.membership.MembershipEvent;
+ import com.gemstone.gemfire.management.membership.MembershipListener;
+ 
+ 
+ /**
+  * This is the concrete implementation of ManagementService
+  * which is the gateway to various JMX operations over a GemFire
+  * System
+  * 
+  * @author VMware, Inc.
+  * @since 7.0
+  */
+ public final class SystemManagementService extends BaseManagementService {
+   private static final Logger logger = LogService.getLogger();
+ 
+   /**
+    * The concrete implementation of DistributedSystem that provides
+    * internal-only functionality.
+    */
+ 
+   private InternalDistributedSystem system;
+ 
+   /**
+    * core component for distribution
+    */
+ 
+   private LocalManager localManager;
+ 
+   /**
+    * This is a notification hub to listen all the notifications emitted from all
+    * the MBeans in a peer cache./cache server
+    */
+   private NotificationHub notificationHub;
+ 
+   /**
+    * Local Filter chain for local MBean filters
+    */
+ 
+   private LocalFilterChain localFilterChain;
+ 
+   /**
+    * whether the service is closed or not if cache is closed automatically this
+    * service will be closed
+    */
+   private volatile boolean closed = false;
+ 
+   /**
+    * has the management service has started yet
+    */
+   private volatile boolean isStarted = false;
+ 
+   /**
+    * Adapter to interact with platform MBean server
+    */
+   private MBeanJMXAdapter jmxAdapter;
+ 
+ 
+   private Cache cache;
+ 
+   private FederatingManager federatingManager;
+ 
+   private final ManagementAgent agent;
+ 
+   private ManagementResourceRepo repo;
+   
+   /**
+    * This membership listener will listen on membership events after the node
+    * has transformed into a Managing node.
+    */
+   private ManagementMembershipListener listener;
+   
+   
+   /**
+    * Proxy aggregator to create aggregate MBeans e.g. DistributedSystem and DistributedRegion
+    * GemFire comes with a default aggregator. 
+    */
+   private List<ProxyListener> proxyListeners;
++  
++  private AuthManager authManager;
+ 
+ 
+   private UniversalListenerContainer universalListenerContainer = new UniversalListenerContainer();
+   
+   public static BaseManagementService newSystemManagementService(Cache cache) {
+     return new SystemManagementService(cache).init();
+   }
+ 
+   protected SystemManagementService(Cache cache) {
+     this.cache = cache;
+     this.system = (InternalDistributedSystem) cache.getDistributedSystem();
+     // This is a safe check to ensure Management service does not start for a
+     // system which is disconnected.
+     // Most likely scenario when this will happen is when a cache is closed and we are at this point.
+     if (!system.isConnected()) {
+       throw new DistributedSystemDisconnectedException(
+           LocalizedStrings.InternalDistributedSystem_THIS_CONNECTION_TO_A_DISTRIBUTED_SYSTEM_HAS_BEEN_DISCONNECTED
+               .toLocalizedString());
+     }
+     this.localFilterChain = new LocalFilterChain();
+     this.jmxAdapter = new MBeanJMXAdapter();      
+     this.repo = new ManagementResourceRepo();
+ 
+ 
+     this.notificationHub = new NotificationHub(repo);
+     if (system.getConfig().getJmxManager()) {
+       this.agent = new ManagementAgent(system.getConfig());
+     } else {
+       this.agent = null;
+     }
+     ManagementFunction function = new ManagementFunction(notificationHub);
+     FunctionService.registerFunction(function);
+     this.proxyListeners = new CopyOnWriteArrayList<ProxyListener>();
+   }
+ 
+   /**
+    * This method will initialize all the internal components for Management and
+    * Monitoring
+    * 
+    * It will a)start an JMX connectorServer b) create a notification hub
+    * c)register the ManagementFunction
+    */
+   private SystemManagementService init() {
+ 
+     try {
+       this.localManager = new LocalManager(repo, system, this,cache);
+       this.localManager.startManager();
+       this.listener = new ManagementMembershipListener(this);
+       system.getDistributionManager().addMembershipListener(listener);
+       isStarted = true;
++      this.authManager = new AuthManager(cache);
+       return this;
+     } catch (CancelException e) {
+       // Rethrow all CancelExceptions (fix for defect 46339)
+       throw e;      
+     } catch (Exception e) {
+       // Wrap all other exceptions as ManagementExceptions
+       logger.error(e.getMessage(), e);
+       throw new ManagementException(e);
+     }
+ 
+   }
+ 
+   /**
+    *For internal Use only
+    */
+   public LocalManager getLocalManager() {
+     return localManager;
+   }
+ 
+   public NotificationHub getNotificationHub() {
+     return notificationHub;
+   }
+   
+   public FederatingManager getFederatingManager() {
+     return federatingManager;
+   }
+   
+   public MBeanJMXAdapter getJMXAdapter() {
+     return jmxAdapter;
+   }
+   
+   public ManagementAgent getManagementAgent() {
+     return agent;
+   }
+   
+   public boolean isStartedAndOpen() {
+     if (!isStarted) {
+       return false;
+     }
+     if (closed) {
+       return false;
+     }
+     if (!system.isConnected()) {
+       return false;
+     }
+     return true;
+   }
+   
+   private void verifyManagementService() {
+     if (!isStarted) {
+       throw new ManagementException(
+           ManagementStrings.Management_Service_MANAGEMENT_SERVICE_NOT_STARTED_YET
+               .toLocalizedString());
+     }
+     if (!system.isConnected()) {
+       throw new ManagementException(
+           ManagementStrings.Management_Service_NOT_CONNECTED_TO_DISTRIBUTED_SYSTEM
+               .toLocalizedString());
+     }
+     if (closed) {
+       throw new ManagementException(
+           ManagementStrings.Management_Service_MANAGEMENT_SERVICE_IS_CLOSED
+               .toLocalizedString());
+     }
+   }
+ 
+   @Override
+   public void close() {
+     synchronized (instances) {
+       if (closed) {
+         // its a no op, hence not logging any exception
+         return;
+       }
+       if (logger.isDebugEnabled()) {
+         logger.debug("Closing Management Service");
+       }
+       if(listener != null && system.isConnected()){
+         system.getDistributionManager().removeMembershipListener(listener);  
+       }
+       // Stop the Federating Manager first . It will ensure MBeans are not getting federated.
+       // while un-registering 
+       if (federatingManager != null && federatingManager.isRunning()) {
+         federatingManager.stopManager();
+       }
+       this.notificationHub.cleanUpListeners();
+       jmxAdapter.cleanJMXResource();
+       if (localManager.isRunning()) {
+         localManager.stopManager();
+       }
+       if (this.agent != null && this.agent.isRunning()) {
+         this.agent.stopAgent();
 -      }     
++      }
++      this.authManager.expireAllAuthZ();
+       getGemFireCacheImpl().getJmxManagerAdvisor().broadcastChange();
+       instances.remove(cache);
+       localManager  = null;
+       closed = true;
+     }
+ 
+   }
+ 
+   @Override
+   public <T> void federate(ObjectName objectName, Class<T> interfaceClass,
+       boolean notificationEmitter) {
+     verifyManagementService();
+     if (!objectName.getDomain().equalsIgnoreCase(
+         ManagementConstants.OBJECTNAME__DEFAULTDOMAIN)) {
+       throw new ManagementException(
+           ManagementStrings.Management_Service_NOT_A_GEMFIRE_DOMAIN_MBEAN
+               .toLocalizedString());
+     }
+    
+     if(!jmxAdapter.isRegistered(objectName)){
+       throw new ManagementException(
+           ManagementStrings.Management_Service_MBEAN_NOT_REGISTERED_IN_GEMFIRE_DOMAIN
+               .toLocalizedString());
+     }
+     if(notificationEmitter && !jmxAdapter.hasNotificationSupport(objectName)){
+       throw new ManagementException(
+           ManagementStrings.Management_Service_MBEAN_DOES_NOT_HAVE_NOTIFICATION_SUPPORT
+               .toLocalizedString());
+     }
+     
+     //All validation Passed. Now create the federation Component
+     Object object = jmxAdapter.getMBeanObject(objectName);
+     FederationComponent fedComp = new FederationComponent(object, objectName,
+         interfaceClass, notificationEmitter);
+     if (ManagementAdapter.refreshOnInit.contains(interfaceClass)) {
+         fedComp.refreshObjectState(true);// Fixes 46387
+     }
+     localManager.markForFederation(objectName, fedComp);
+     
+     if (isManager()) {
+       afterCreateProxy(objectName, interfaceClass, object, fedComp);
+     }
+ 
+   }
+ 
+   @Override
+   public CacheServerMXBean getLocalCacheServerMXBean(int serverPort) {
+     CacheServerMXBean bean =  jmxAdapter.getClientServiceMXBean(serverPort);
+     return bean;
+   }
+ 
+   @Override
+   public long getLastUpdateTime(ObjectName objectName) {
+     if (!isStartedAndOpen()) {
+       return 0;
+     }
+     if (federatingManager == null) {
+       return 0;
+ 
+     } else if (!federatingManager.isRunning()) {
+       return 0;
+     }
+     if (jmxAdapter.isLocalMBean(objectName)) {
+       return 0;
+     }
+     return federatingManager.getLastUpdateTime(objectName);
+   }
+ 
+   @Override
+   public DiskStoreMXBean getLocalDiskStoreMBean(String diskStoreName) {
+     DiskStoreMXBean bean =  jmxAdapter.getLocalDiskStoreMXBean(diskStoreName);
+     return bean;
+   }
+ 
+   @Override
+   public LockServiceMXBean getLocalLockServiceMBean(String lockSreviceName) {
+     LockServiceMXBean bean =  jmxAdapter.getLocalLockServiceMXBean(lockSreviceName);
+     return bean;
+   }
+ 
+   @Override
+   public RegionMXBean getLocalRegionMBean(String regionPath) {
+     RegionMXBean bean = jmxAdapter.getLocalRegionMXBean(regionPath);
+     return bean;
+   }
+ 
+ 
+   public <T> T getMBeanProxy(ObjectName objectName, Class<T> interfaceClass) {
+     if (!isStartedAndOpen()) {
+       return null;
+     }
+     if (federatingManager == null) {
+       return null;
+ 
+     } else if (!federatingManager.isRunning()) {
+       return null;
+     }
+ 
+     return federatingManager.findProxy(objectName, interfaceClass);
+   }
+ 
+   @Override
+   public MemberMXBean getMemberMXBean() {
+     return jmxAdapter.getMemberMXBean();
+   }
+   
+   @Override
+   public Set<ObjectName> queryMBeanNames(DistributedMember member) {
+ 
+     if (!isStartedAndOpen()) {
+       return Collections.emptySet();
+     }
+     if (cache.getDistributedSystem().getDistributedMember().equals(member)) {
+       return jmxAdapter.getLocalGemFireMBean().keySet();
+     } else {
+       if (federatingManager == null) {
+         return Collections.emptySet();
+ 
+       } else if (!federatingManager.isRunning()) {
+         return Collections.emptySet();
+       }
+       return federatingManager.findAllProxies(member);
+     }
+ 
+   }
+ 
+   @Override
+   public ObjectName registerMBean(Object object, ObjectName objectName) {
+     verifyManagementService();
+     if (localFilterChain.isFiltered(objectName)) {
+       return null;
+     }
+     return jmxAdapter.registerMBean(object, objectName, false);
+   }
+   
+   public ObjectName registerInternalMBean(Object object, ObjectName objectName) {
+     verifyManagementService();
+     if (localFilterChain.isFiltered(objectName)) {
+       return null;
+     }
+     return jmxAdapter.registerMBean(object, objectName, true);
+   }
+ 
+   @Override
+   public void unregisterMBean(ObjectName objectName) {
+     if (!isStartedAndOpen()) {
+       return;
+     }
+     verifyManagementService();
+     
+     if (isManager()) {
+       FederationComponent removedObj = localManager.getFedComponents().get(objectName);
+       if (removedObj != null) { // only for MBeans local to Manager , not
+                                 // proxies
+         afterRemoveProxy(objectName, removedObj.getInterfaceClass(), removedObj.getMBeanObject(), removedObj);
+       }
+     }
+     
+     jmxAdapter.unregisterMBean(objectName);
+     localManager.unMarkForFederation(objectName);
+   }
+ 
+   @Override
+   public boolean isManager() {
+     return isManagerCreated() && federatingManager.isRunning();
+   }
+   
+   public boolean isManagerCreated() {
+     if(!isStartedAndOpen()){
+       return false;
+     }
+     return federatingManager != null;
+   }
+ 
+   @Override
+   public void startManager() {
+     if (!getGemFireCacheImpl().getSystem().getConfig().getJmxManager()) {
+       // fix for 45900
+       throw new ManagementException("Could not start the manager because the gemfire property \"jmx-manager\" is false.");
+     }
+     synchronized (instances) {
+       verifyManagementService();
+       if (federatingManager != null && federatingManager.isRunning()) {
+         throw new AlreadyRunningException(
+             ManagementStrings.Management_Service_MANAGER_ALREADY_RUNNING
+                 .toLocalizedString());
+       }
+ 
+       boolean needsToBeStarted = false;
+       if (!isManagerCreated()) {
+         createManager();
+         needsToBeStarted = true;
+       } else if (!federatingManager.isRunning()) {
+         needsToBeStarted = true;
+       }
+       if (needsToBeStarted) {
+         boolean started = false;
+         try {
+           system.handleResourceEvent(ResourceEvent.MANAGER_START, null);
+           federatingManager.startManager();
+           if (this.agent != null) {
+             this.agent.startAgent(getGemFireCacheImpl());
+           }
+           getGemFireCacheImpl().getJmxManagerAdvisor().broadcastChange();
+           started = true;
+         } catch (RuntimeException e) {
+           logger.error("Jmx manager could not be started because {}", e.getMessage(), e);
+           throw e;
+         } catch (Error e) {
+           logger.error("Jmx manager could not be started because {}", e.getMessage(), e);
+           throw e;
+         } finally {
+           if (!started) {
+             if (federatingManager != null) {
+               federatingManager.stopManager();
+             }
+             system.handleResourceEvent(ResourceEvent.MANAGER_STOP, null);
+           }
+         }
+       }
+     }
+   }
+   
+   private GemFireCacheImpl getGemFireCacheImpl() {
+     return (GemFireCacheImpl)this.cache;
+   }
+ 
+   /**
+    * Creates a Manager instance in stopped state.
+    * 
+    */
+   public boolean createManager() {
+     synchronized (instances) {
+       if (federatingManager != null) {
+         return false;
+       } 
+       system.handleResourceEvent(ResourceEvent.MANAGER_CREATE, null);
+       // An initialised copy of federating manager
+       federatingManager = new FederatingManager(jmxAdapter, repo, system, this, cache);
+       getGemFireCacheImpl().getJmxManagerAdvisor().broadcastChange();
+       return true;
+     }
+   }
+ 
+   /**
+    * It will stop the federating Manager and restart the Local cache operation
+    */
+   @Override
+   public void stopManager() {
+     synchronized (instances) {
+       verifyManagementService();
+       if (federatingManager != null) {
+         federatingManager.stopManager();
+         system.handleResourceEvent(ResourceEvent.MANAGER_STOP, null);
+         getGemFireCacheImpl().getJmxManagerAdvisor().broadcastChange();
+         if (this.agent != null && (this.agent.isRunning() || this.agent.isHttpServiceRunning())) {
+           this.agent.stopAgent();
+         }
+       }
+     }
+   }
+ 
+   @Override
+   public boolean isClosed() {
+     return closed;
+   }
+ 
+   @Override
+   public DistributedLockServiceMXBean getDistributedLockServiceMXBean(
+       String lockServiceName) {
+     return jmxAdapter.getDistributedLockServiceMXBean(lockServiceName);
+   }
+ 
+   @Override
+   public DistributedRegionMXBean getDistributedRegionMXBean(String regionName) {
+     return jmxAdapter.getDistributedRegionMXBean(regionName);
+   }
+ 
+   @Override
+   public DistributedSystemMXBean getDistributedSystemMXBean() {
+     return jmxAdapter.getDistributedSystemMXBean();
+   }
+   
+   public void addProxyListener(ProxyListener listener) {
+     this.proxyListeners.add(listener);
+   }
+ 
+   public void removeProxyListener(ProxyListener listener) {
+     this.proxyListeners.remove(listener);
+   }
+ 
+   public List<ProxyListener> getProxyListeners() {
+     return this.proxyListeners;
+   }
+   
+   @Override
+   public ManagerMXBean getManagerMXBean() {
+     return jmxAdapter.getManagerMXBean();
+   }
+ 
+   @Override
+   public ObjectName getCacheServerMBeanName(int serverPort,DistributedMember member) {
+     return MBeanJMXAdapter.getClientServiceMBeanName(serverPort,member);
+   }
+ 
+   @Override
+   public ObjectName getDiskStoreMBeanName(DistributedMember member, String diskName) {
+      return MBeanJMXAdapter.getDiskStoreMBeanName(member, diskName);
+   }
+ 
+   @Override
+   public ObjectName getDistributedLockServiceMBeanName(String lockService) {
+      return MBeanJMXAdapter.getDistributedLockServiceName(lockService);
+   }
+ 
+   @Override
+   public ObjectName getDistributedRegionMBeanName(String regionPath) {
+       return MBeanJMXAdapter.getDistributedRegionMbeanName(regionPath);
+   }
+ 
+   @Override
+   public ObjectName getDistributedSystemMBeanName() {
+     return MBeanJMXAdapter.getDistributedSystemName();
+   }
+ 
+   @Override
+   public ObjectName getGatewayReceiverMBeanName(DistributedMember member) {
+     return MBeanJMXAdapter.getGatewayReceiverMBeanName(member);
+   }
+ 
+   @Override
+   public ObjectName getGatewaySenderMBeanName(DistributedMember member,
+       String gatwaySenderId) {
+     return MBeanJMXAdapter.getGatewaySenderMBeanName(member, gatwaySenderId);
+   }
+   
+   @Override
+   public ObjectName getAsyncEventQueueMBeanName(DistributedMember member, String queueId) {
+     return MBeanJMXAdapter.getAsycnEventQueueMBeanName(member, queueId);
+   }
+ 
+   @Override
+   public ObjectName getLockServiceMBeanName(DistributedMember member,
+       String lockServiceName) {
+     return MBeanJMXAdapter.getLockServiceMBeanName(member, lockServiceName);
+   }
+ 
+   @Override
+   public ObjectName getManagerMBeanName() {
+     return MBeanJMXAdapter.getManagerName();
+   }
+ 
+   @Override
+   public ObjectName getMemberMBeanName(DistributedMember member) {
+     return MBeanJMXAdapter.getMemberMBeanName(member);
+   }
+   
+   @Override
+   public ObjectName getRegionMBeanName(DistributedMember member, String regionPath) {
+     return MBeanJMXAdapter.getRegionMBeanName(member, regionPath);
+   }
+ 
+   @Override
+   public GatewayReceiverMXBean getLocalGatewayReceiverMXBean() {
+     return jmxAdapter.getGatewayReceiverMXBean();
+   }
+ 
+   @Override
+   public GatewaySenderMXBean getLocalGatewaySenderMXBean(String senderId) {
+     return jmxAdapter.getGatewaySenderMXBean(senderId);
+   }
+ 
+   @Override
+   public AsyncEventQueueMXBean getLocalAsyncEventQueueMXBean(String queueId) {
+     return jmxAdapter.getAsyncEventQueueMXBean(queueId);
+   }
+ 
+   @Override
+   public ObjectName getLocatorMBeanName(DistributedMember member) {
+     return MBeanJMXAdapter.getLocatorMBeanName(member);
+   }
+ 
+   @Override
+   public LocatorMXBean getLocalLocatorMXBean() {
+     return jmxAdapter.getLocatorMXBean();
+   }
+ 
+   public boolean afterCreateProxy(ObjectName objectName, Class interfaceClass, Object proxyObject,
+       FederationComponent newVal) {
+     for (ProxyListener listener : proxyListeners) {
+       listener.afterCreateProxy(objectName, interfaceClass, proxyObject, newVal);
+     }
+     return true;
+   }
+ 
+   
+   public boolean afterPseudoCreateProxy(ObjectName objectName, Class interfaceClass, Object proxyObject,
+       FederationComponent newVal) {    
+     for (ProxyListener listener : proxyListeners) {
+       listener.afterPseudoCreateProxy(objectName, interfaceClass, proxyObject, newVal);
+     }
+     return true;
+   }
+   
+   public boolean afterRemoveProxy(ObjectName objectName, Class interfaceClass, Object proxyObject,
+       FederationComponent oldVal) {
+     for (ProxyListener listener : proxyListeners) {
+       listener.afterRemoveProxy(objectName, interfaceClass, proxyObject, oldVal);
+     }
+     return true;
+   }
+ 
+   public boolean afterUpdateProxy(ObjectName objectName, Class interfaceClass, Object proxyObject,
+       FederationComponent newVal, FederationComponent oldVal) {
+     for (ProxyListener listener : proxyListeners) {
+       listener.afterUpdateProxy(objectName, interfaceClass, proxyObject, newVal, oldVal);
+     }
+     return true;
+   }
+ 
+   public void handleNotification(Notification notification) {
+     for (ProxyListener listener : proxyListeners) {
+       listener.handleNotification(notification);
+     }
+   }
+   
+   
+ 
+   @Override
+   public <T> T getMBeanInstance(ObjectName objectName, Class<T> interfaceClass) {
+     if (jmxAdapter.isLocalMBean(objectName)) {
+       return jmxAdapter.findMBeanByName(objectName, interfaceClass);
+     } else {
+       return this.getMBeanProxy(objectName, interfaceClass);
+     }
+   }
+   
+   public void logFine(String s){
+     if (logger.isDebugEnabled()) {
+       logger.debug(s);
+     }
+   }
+   
+ 
+   public void memberJoined(InternalDistributedMember id) {
+     for (ProxyListener listener : proxyListeners) {
+       listener.memberJoined(id);
+     }
+   }
+ 
+   public void memberDeparted(InternalDistributedMember id, boolean crashed) {
+     for (ProxyListener listener : proxyListeners) {
+       listener.memberDeparted(id, crashed);
+     }
+   }
+ 
+   public void memberSuspect(InternalDistributedMember id, InternalDistributedMember whoSuspected, String reason) {
+     for (ProxyListener listener : proxyListeners) {
+       listener.memberSuspect(id, whoSuspected, reason);
+     }
+   }
+   
+ 
+   public void quorumLost(Set<InternalDistributedMember> failures, List<InternalDistributedMember> remaining) {
+     for (ProxyListener listener : proxyListeners) {
+       listener.quorumLost(failures, remaining);
+     }
+   }
+   
+   
+   
+   public class UniversalListenerContainer {
+ 
+     private List<MembershipListener> membershipListeners = new CopyOnWriteArrayList<MembershipListener>();
+ 
+     public void memberJoined(InternalDistributedMember id) {
+       MembershipEvent event = createEvent(id);
+       for (MembershipListener listener : membershipListeners) {
+         try {
+           listener.memberJoined(event);
+         } catch (Exception e) {
+           logger.error("Could not invoke listener event memberJoined for listener[{}] due to ",
+               listener.getClass(), e.getMessage(), e);
+         }
+ 
+       }
+     }
+ 
+     public void memberDeparted(InternalDistributedMember id, boolean crashed) {
+       MembershipEvent event = createEvent(id);
+       if (!crashed) {
+         for (MembershipListener listener : membershipListeners) {
+           try {
+             listener.memberLeft(event);
+           } catch (Exception e) {
+             logger.error("Could not invoke listener event memberLeft for listener[{}] due to ",
+                 listener.getClass(), e.getMessage(), e);
+           }
+         }
+       } else {
+         for (MembershipListener listener : membershipListeners) {
+           try {
+             listener.memberCrashed(event);
+           } catch (Exception e) {
+             logger.error("Could not invoke listener event memberCrashed for listener[{}] due to ",
+                 listener.getClass(), e.getMessage(), e);
+           }
+         }
+       }
+     }
+ 
+     private MembershipEvent createEvent(InternalDistributedMember id) {
+       final String memberId = id.getId();
+       final DistributedMember member = id;
+       MembershipEvent event = new MembershipEvent() {
+ 
+         @Override
+         public String getMemberId() {
+           return memberId;
+         }
+ 
+         @Override
+         public DistributedMember getDistributedMember() {
+           return member;
+         }
+       };
+ 
+       return event;
+     }
+ 
+     /**
+      * Registers a listener that receives call backs when a member joins or
+      * leaves the distributed system.
+      */
+     public void addMembershipListener(MembershipListener listener) {
+       membershipListeners.add(listener);
+     }
+ 
+     /**
+      * Unregisters a membership listener
+      *
+      * @see #addMembershipListener
+      */
+     public void removeMembershipListener(MembershipListener listener) {
+       membershipListeners.remove(listener);
+     }
+   }
+ 
+   public UniversalListenerContainer getUniversalListenerContainer() {
+     return universalListenerContainer;
+   }
+ 
+   @Override
+   public void addMembershipListener(MembershipListener listener) {
+     universalListenerContainer.addMembershipListener(listener);
+     
+   }
+ 
+   @Override
+   public void removeMembershipListener(MembershipListener listener) {
+     universalListenerContainer.removeMembershipListener(listener);    
+   }
++  
++  public AuthManager getAuthManager(){
++    return this.authManager;
++  }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommands.java
index 0000000,e02202a..b205b5c
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommands.java
@@@ -1,0 -1,328 +1,333 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.util.ArrayList;
+ 
+ import java.util.Arrays;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Map.Entry;
+ import java.util.Set;
+ 
+ import javax.management.ObjectName;
+ import org.springframework.shell.core.CommandMarker;
+ 
+ import com.gemstone.gemfire.management.CacheServerMXBean;
+ import com.gemstone.gemfire.management.ClientHealthStatus;
+ import com.gemstone.gemfire.management.ManagementService;
+ import com.gemstone.gemfire.management.internal.cli.functions.ContunuousQueryFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.ContunuousQueryFunction.ClientInfo;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.execute.FunctionService;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.LogWrapper;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData.SectionResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * 
+  * @author ajayp
+  * @since 8.0
+  */
+ 
+ public class ClientCommands implements CommandMarker {
+ 
+   private Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+ 
+   @CliCommand(value = CliStrings.LIST_CLIENTS, help = CliStrings.LIST_CLIENT__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_LIST })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result listClient() {
+     Result result = null;
+ 
+     try {      
+       CompositeResultData compositeResultData = ResultBuilder.createCompositeResultData();
+       SectionResultData section = compositeResultData.addSection("section1");
+       
+       TabularResultData resultTable = section.addTable("TableForClientList");
+       String headerText = "ClientList";
+       resultTable = resultTable.setHeader(headerText);
+       
+       Cache cache = CacheFactory.getAnyInstance();      
+       ManagementService service = ManagementService.getExistingManagementService(cache);      
+       ObjectName[] cacheServers = service.getDistributedSystemMXBean().listCacheServerObjectNames();      
+       
+       if (cacheServers.length == 0) {
+         return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.LIST_CLIENT_COULD_NOT_RETRIEVE_SERVER_LIST));
+       }
+       
+       Map<String, List<String>> clientServerMap = new HashMap<String, List<String>>();
+       
+       for (ObjectName objName : cacheServers) {
+         CacheServerMXBean serverMbean = service.getMBeanInstance(objName, CacheServerMXBean.class);
+         String[] listOfClient = serverMbean.getClientIds();        
+                 
+         if(listOfClient == null || listOfClient.length == 0 ){
+           continue;
+         }     
+         
+         
+         for (String clietName : listOfClient) {
+           String serverDetails= "member="+ objName.getKeyProperty("member")+ ",port=" + objName.getKeyProperty("port")  ;
+           if (clientServerMap.containsKey(clietName)) {
+             List<String> listServers = clientServerMap.get(clietName);
+             listServers.add(serverDetails);
+           } else {
+             List<String> listServer = new ArrayList<String>();
+             listServer.add(serverDetails);
+             clientServerMap.put(clietName, listServer);
+           }
+         }
+       }
+ 
+       if (clientServerMap.size() == 0) {
+         return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.LIST_COULD_NOT_RETRIEVE_CLIENT_LIST));
+       }
+      
+       String memberSeparator = ";  ";
+       Iterator<Entry<String, List<String>>> it = clientServerMap.entrySet().iterator();
+       
+       while (it.hasNext()) {
+         Map.Entry<String, List<String>> pairs = (Map.Entry<String, List<String>>) it
+             .next();
+         String client = (String) pairs.getKey();
+         List<String> servers = (List<String>) pairs.getValue();
+         StringBuilder serverListForClient = new StringBuilder();
+         int serversSize = servers.size();
+         int i = 0;
+         for (String server : servers) {
+           serverListForClient.append(server);          
+           if(i < serversSize -1 ){
+             serverListForClient.append(memberSeparator);
+           }
+           i++;
+         }        
+         resultTable.accumulate(CliStrings.LIST_CLIENT_COLUMN_Clients, client);
+         resultTable.accumulate(CliStrings.LIST_CLIENT_COLUMN_SERVERS, serverListForClient.toString());
+       }
+       result = ResultBuilder.buildResult(compositeResultData);
+       
+     } catch (Exception e) {      
+       LogWrapper.getInstance().warning("Error in list clients. stack trace" + CliUtil.stackTraceAsString(e));      
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format( CliStrings.LIST_CLIENT_COULD_NOT_RETRIEVE_CLIENT_LIST_0,e.getMessage()));
+     }
+     
+     LogWrapper.getInstance().info("list client result " + result);
+     
+     return result;
+   }
+   
+   
+   @CliCommand(value = CliStrings.DESCRIBE_CLIENT, help = CliStrings.DESCRIBE_CLIENT__HELP)
+   @CliMetaData(relatedTopic = { CliStrings.TOPIC_LIST })
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result describeClient(
+       @CliOption(key = CliStrings.DESCRIBE_CLIENT__ID, mandatory = true, help = CliStrings.DESCRIBE_CLIENT__ID__HELP) String clientId) {
+     Result result = null;   
+     
+     if(clientId.startsWith("\"")){      
+       clientId= clientId.substring(1);
+     }
+     
+     if(clientId.endsWith("\"")){            
+       clientId= clientId.substring(0,clientId.length() - 2);
+     }
+     
+     if(clientId.endsWith("\";")){            
+       clientId= clientId.substring(0,clientId.length() - 2);
+     }
+     
+     try {      
+       CompositeResultData compositeResultData = ResultBuilder.createCompositeResultData();
+       SectionResultData sectionResult = compositeResultData.addSection("InfoSection");      
+       Cache cache = CacheFactory.getAnyInstance();
+       
+       ManagementService service = ManagementService.getExistingManagementService(cache);      
+       ObjectName[] cacheServers = service.getDistributedSystemMXBean().listCacheServerObjectNames();      
+       if (cacheServers.length == 0) {
+         return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.DESCRIBE_CLIENT_COULD_NOT_RETRIEVE_SERVER_LIST));
+       }      
+       
+       ClientHealthStatus clientHealthStatus = null;  
+       
+       for (ObjectName objName : cacheServers) {
+         CacheServerMXBean serverMbean = service.getMBeanInstance(objName, CacheServerMXBean.class);
+         List<String> listOfClient = new ArrayList<String>(Arrays.asList((String[]) serverMbean.getClientIds() ));
+         if(listOfClient.contains(clientId)){
+           if(clientHealthStatus == null){
+             try{
+               clientHealthStatus = serverMbean.showClientStats(clientId);       
+               if(clientHealthStatus == null){
+                 return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.DESCRIBE_CLIENT_COULD_NOT_RETRIEVE_STATS_FOR_CLIENT_0, clientId));
+               }                      
+             }catch(Exception eee){
+               return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.DESCRIBE_CLIENT_COULD_NOT_RETRIEVE_STATS_FOR_CLIENT_0_REASON_1, clientId, eee.getMessage()));               
+             }           
+           }         
+         }      
+       
+       }
+       
+       if(clientHealthStatus == null){
+         return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.DESCRIBE_CLIENT__CLIENT__ID__NOT__FOUND__0, clientId));
+       }
+       
+       Set<DistributedMember> dsMembers =  CliUtil.getAllMembers(cache);     
+       String isDurable = null ;
+       List<String> primaryServers = new ArrayList<String>();
+       List<String> secondaryServers = new ArrayList<String>();
+       
+       if(dsMembers.size() > 0 ){        
+         ContunuousQueryFunction contunuousQueryFunction = new ContunuousQueryFunction();
+         FunctionService.registerFunction(contunuousQueryFunction);
+         List<?> resultList = (List<?>) CliUtil.executeFunction(contunuousQueryFunction, clientId, dsMembers).getResult();
+         for (int i = 0; i < resultList.size(); i++) {
+           try{
+             Object object = resultList.get(i);
+             if (object instanceof Exception) {
+               LogWrapper.getInstance().warning("Exception in Describe Client "+  ((Throwable) object).getMessage(),((Throwable) object));
+              continue;
+             } else if (object instanceof Throwable) {
+               LogWrapper.getInstance().warning("Exception in Describe Client "+  ((Throwable) object).getMessage(),((Throwable) object));
+               continue;
+             }
+     
+             if(object != null){              
+               ClientInfo objectResult = (ClientInfo) object;              
+               isDurable = objectResult.isDurable ;     
+               
+               if(objectResult.primaryServer != null && objectResult.primaryServer.length() > 0){
+                 if(primaryServers.size() == 0){
+                   primaryServers.add(objectResult.primaryServer);
+                 }else{
+                   primaryServers.add(" ,");
+                   primaryServers.add(objectResult.primaryServer);
+                 }
+               }
+               
+               if(objectResult.secondaryServer != null && objectResult.secondaryServer.length() > 0){
+                 if(secondaryServers.size() == 0){
+                 secondaryServers.add(objectResult.secondaryServer);
+                 }else{
+                   secondaryServers.add(" ,");
+                   secondaryServers.add(objectResult.secondaryServer);
+                 }                                
+               }
+               
+             }
+           }catch(Exception e){
+             LogWrapper.getInstance().info(CliStrings.DESCRIBE_CLIENT_ERROR_FETCHING_STATS_0 + " :: " + CliUtil.stackTraceAsString(e));
+             return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.DESCRIBE_CLIENT_ERROR_FETCHING_STATS_0, e.getMessage()));            
+           }
+         }
+         
+         buildTableResult(sectionResult, clientHealthStatus, isDurable, primaryServers, secondaryServers);       
+         result = ResultBuilder.buildResult(compositeResultData);
+       }else{
+         return ResultBuilder.createGemFireErrorResult(CliStrings.DESCRIBE_CLIENT_NO_MEMBERS);
+       }
+     } catch (Exception e) {      
+       LogWrapper.getInstance().info("Error in decribe clients. stack trace" + CliUtil.stackTraceAsString(e));      
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.DESCRIBE_CLIENT_COULD_NOT_RETRIEVE_CLIENT_0, e.getMessage()));
+     }    
+     LogWrapper.getInstance().info("decribe client result " + result);    
+     return result;
+   }
+ 
+   private void buildTableResult(SectionResultData sectionResult,  ClientHealthStatus clientHealthStatus ,  String isDurable, 
+       List<String> primaryServers, List<String> secondaryServers) {
+ 
+     StringBuilder primServers = new StringBuilder();
+     for(String primaryServer : primaryServers){
+       primServers.append(primaryServer);
+     }
+     
+     StringBuilder secondServers = new StringBuilder();
+     for(String secondServer : secondaryServers){
+       secondServers.append(secondServer);
+     }   
+     if(clientHealthStatus != null){
+       sectionResult.addSeparator('-');
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_PRIMARY_SERVERS, primServers);
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_SECONDARY_SERVERS, secondServers);
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_CPU, clientHealthStatus.getCpus());
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_LISTNER_CALLS, clientHealthStatus.getNumOfCacheListenerCalls());
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_GETS, clientHealthStatus.getNumOfGets());
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_MISSES, clientHealthStatus.getNumOfMisses());
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_PUTS, clientHealthStatus.getNumOfPuts());
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_THREADS, clientHealthStatus.getNumOfThreads());
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_PROCESS_CPU_TIME, clientHealthStatus.getProcessCpuTime());
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_QUEUE_SIZE, clientHealthStatus.getQueueSize());
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_UP_TIME, clientHealthStatus.getUpTime());      
+       sectionResult.addData(CliStrings.DESCRIBE_CLIENT_COLUMN_DURABLE, isDurable);      
+       sectionResult.addSeparator('-');
+       
+       Map<String, String > poolStats = clientHealthStatus.getPoolStats();
+             
+       if(poolStats.size() > 0){       
+         Iterator<Entry<String, String>> it = poolStats.entrySet().iterator();
+         while(it.hasNext()){
+           Entry<String, String> entry = it.next();          
+           TabularResultData poolStatsResultTable = sectionResult.addTable("Pool Stats For Pool Name = "+entry.getKey());
+           poolStatsResultTable.setHeader("Pool Stats For Pool Name = "+ entry.getKey());
+           String poolStatsStr = entry.getValue();
+           String str[] = poolStatsStr.split(";"); 
+           
+           LogWrapper.getInstance().info("decribe client clientHealthStatus min conn=" +    str[0].substring(str[0].indexOf("=")+1 ));
+           LogWrapper.getInstance().info("decribe client clientHealthStatus max conn =" +   str[1].substring(str[1].indexOf("=")+1 ));
+           LogWrapper.getInstance().info("decribe client clientHealthStatus redundancy =" + str[2].substring(str[2].indexOf("=")+1 ));
+           LogWrapper.getInstance().info("decribe client clientHealthStatus CQs =" +        str[3].substring(str[3].indexOf("=")+1 ));         
+           
+           poolStatsResultTable.accumulate(CliStrings.DESCRIBE_CLIENT_MIN_CONN, str[0].substring(str[0].indexOf("=")+1 ));
+           poolStatsResultTable.accumulate(CliStrings.DESCRIBE_CLIENT_MAX_CONN, str[1].substring(str[1].indexOf("=")+1 ));
+           poolStatsResultTable.accumulate(CliStrings.DESCRIBE_CLIENT_REDUDANCY,           str[2].substring(str[2].indexOf("=")+1 ));
+           poolStatsResultTable.accumulate(CliStrings.DESCRIBE_CLIENT_CQs,       str[3].substring(str[3].indexOf("=")+1 ));          
+         }        
+       }      
+     }
+         
+   }
+ 
+   @CliAvailabilityIndicator({ CliStrings.LIST_CLIENTS , CliStrings.DESCRIBE_CLIENT})
 -  public boolean functionCommandsAvailable() {
++  public boolean clientCommandsAvailable() {
+     boolean isAvailable = true; // always available on server
+     if (CliUtil.isGfshVM()) { // in gfsh check if connected
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommands.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommands.java
index 0000000,aa4be81..651630a
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommands.java
@@@ -1,0 -1,484 +1,490 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.cli.commands;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.Set;
+ import java.util.TreeSet;
+ 
+ import org.springframework.shell.core.CommandMarker;
+ import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+ import org.springframework.shell.core.annotation.CliCommand;
+ import org.springframework.shell.core.annotation.CliOption;
+ 
+ import com.gemstone.gemfire.SystemFailure;
+ import com.gemstone.gemfire.cache.CacheClosedException;
+ import com.gemstone.gemfire.cache.execute.FunctionInvocationTargetException;
+ import com.gemstone.gemfire.cache.execute.ResultCollector;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+ import com.gemstone.gemfire.internal.cache.xmlcache.CacheXml;
+ import com.gemstone.gemfire.management.cli.CliMetaData;
+ import com.gemstone.gemfire.management.cli.ConverterHint;
+ import com.gemstone.gemfire.management.cli.Result;
+ import com.gemstone.gemfire.management.internal.cli.AbstractCliAroundInterceptor;
+ import com.gemstone.gemfire.management.internal.cli.CliUtil;
+ import com.gemstone.gemfire.management.internal.cli.GfshParseResult;
+ import com.gemstone.gemfire.management.internal.cli.domain.MemberConfigurationInfo;
+ import com.gemstone.gemfire.management.internal.cli.functions.AlterRuntimeConfigFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.CliFunctionResult;
+ import com.gemstone.gemfire.management.internal.cli.functions.ExportConfigFunction;
+ import com.gemstone.gemfire.management.internal.cli.functions.GetMemberConfigInformationFunction;
+ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.result.CommandResultException;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.CompositeResultData.SectionResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.InfoResultData;
+ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
+ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
+ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+ import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
+ import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ /****
+  *
+  * @author David Hoots
+  *         Sourabh Bansod
+  * @since 7.0
+  *
+  */
+ public class ConfigCommands implements CommandMarker {
+   private final ExportConfigFunction exportConfigFunction = new ExportConfigFunction();
+   private final GetMemberConfigInformationFunction getMemberConfigFunction = new GetMemberConfigInformationFunction();
+   private final AlterRuntimeConfigFunction alterRunTimeConfigFunction = new AlterRuntimeConfigFunction();
+   
+   private static Gfsh getGfsh() {
+     return Gfsh.getCurrentInstance();
+   }
+ 
+   @CliCommand(value = { CliStrings.DESCRIBE_CONFIG }, help = CliStrings.DESCRIBE_CONFIG__HELP)
+   @CliMetaData(shellOnly = false, relatedTopic = {CliStrings.TOPIC_GEMFIRE_CONFIG})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.LIST_DS)
+   public Result describeConfig(
+       @CliOption (key = CliStrings.DESCRIBE_CONFIG__MEMBER,
+       optionContext = ConverterHint.ALL_MEMBER_IDNAME,
+       help = CliStrings.DESCRIBE_CONFIG__MEMBER__HELP,
+       mandatory = true)
+ 
+       String memberNameOrId,
+       @CliOption (key = CliStrings.DESCRIBE_CONFIG__HIDE__DEFAULTS,
+       help = CliStrings.DESCRIBE_CONFIG__HIDE__DEFAULTS__HELP,
+       unspecifiedDefaultValue="true",
+       specifiedDefaultValue="true")
+       boolean hideDefaults) {
+ 
+     Result result = null;
+     try {
+       DistributedMember targetMember = null;
+ 
+       if (memberNameOrId != null && !memberNameOrId.isEmpty()) {
+         targetMember = CliUtil.getDistributedMemberByNameOrId(memberNameOrId);
+       }
+       if (targetMember != null) {
+         ResultCollector<?,?> rc = CliUtil.executeFunction(getMemberConfigFunction, new Boolean(hideDefaults), targetMember);
+         ArrayList<?> output = (ArrayList<?>) rc.getResult();
+         Object obj = output.get(0);
+ 
+         if (obj != null && obj instanceof MemberConfigurationInfo) {
+           MemberConfigurationInfo memberConfigInfo = (MemberConfigurationInfo) obj;
+ 
+           CompositeResultData crd = ResultBuilder.createCompositeResultData();
+           crd.setHeader(CliStrings.format(CliStrings.DESCRIBE_CONFIG__HEADER__TEXT, memberNameOrId));
+ 
+           List<String> jvmArgsList = memberConfigInfo.getJvmInputArguments();
+           TabularResultData jvmInputArgs = crd.addSection().addSection().addTable();
+ 
+           for (String jvmArg : jvmArgsList) {
+             jvmInputArgs.accumulate("JVM command line arguments", jvmArg);
+           }
+ 
+           addSection(crd, memberConfigInfo.getGfePropsSetUsingApi(), "GemFire properties defined using the API");
+           addSection(crd, memberConfigInfo.getGfePropsRuntime(), "GemFire properties defined at the runtime");
+           addSection(crd, memberConfigInfo.getGfePropsSetFromFile(), "GemFire properties defined with the property file");
+           addSection(crd, memberConfigInfo.getGfePropsSetWithDefaults(), "GemFire properties using default values");
+           addSection(crd, memberConfigInfo.getCacheAttributes(), "Cache attributes");
+ 
+           List<Map<String, String>> cacheServerAttributesList = memberConfigInfo.getCacheServerAttributes();
+ 
+           if (cacheServerAttributesList != null && !cacheServerAttributesList.isEmpty()) {
+             SectionResultData cacheServerSection = crd.addSection();
+             cacheServerSection.setHeader("Cache-server attributes");
+ 
+             Iterator<Map<String, String>> iters = cacheServerAttributesList.iterator();
+ 
+             while (iters.hasNext()) {
+               Map<String, String> cacheServerAttributes = iters.next();
+               addSubSection(cacheServerSection, cacheServerAttributes, "");
+             }
+           }
+           result = ResultBuilder.buildResult(crd);
+         }
+ 
+       } else {
+         ErrorResultData erd = ResultBuilder.createErrorResultData();
+         erd.addLine(CliStrings.format(CliStrings.DESCRIBE_CONFIG__MEMBER__NOT__FOUND, new Object[] {memberNameOrId}));
+         result = ResultBuilder.buildResult(erd);
+       }
+     } catch (FunctionInvocationTargetException e) {
+       result = ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.COULD_NOT_EXECUTE_COMMAND_TRY_AGAIN, CliStrings.DESCRIBE_CONFIG));
+     } catch (Exception e) {
+       ErrorResultData erd = ResultBuilder.createErrorResultData();
+       erd.addLine(e.getMessage());
+       result = ResultBuilder.buildResult(erd);
+     }
+     return result;
+   }
+ 
+ 
+   private void addSection(CompositeResultData crd, Map<String, String> attrMap, String headerText) {
+     if (attrMap != null && !attrMap.isEmpty()) {
+       SectionResultData section = crd.addSection();
+       section.setHeader(headerText);
+       section.addSeparator('.');
+       Set<String> attributes = new TreeSet<String>(attrMap.keySet());
+ 
+       for (String attribute : attributes) {
+         String attributeValue = attrMap.get(attribute);
+         section.addData(attribute, attributeValue);
+       }
+     }
+   }
+ 
+   private void addSubSection (SectionResultData section, Map<String, String> attrMap, String headerText) {
+     if (!attrMap.isEmpty()) {
+       SectionResultData subSection = section.addSection();
+       Set<String> attributes = new TreeSet<String>(attrMap.keySet());
+       subSection.setHeader(headerText);
+ 
+       for (String attribute : attributes) {
+         String attributeValue = attrMap.get(attribute);
+         subSection.addData(attribute, attributeValue);
+       }
+     }
+   }
+   /**
+    * Export the cache configuration in XML format.
+    *
+    * @param member
+    *          Member for which to write the configuration
+    * @param group
+    *          Group or groups for which to write the configuration
+    * @return Results of the attempt to write the configuration
+    */
+   @CliCommand(value = { CliStrings.EXPORT_CONFIG }, help = CliStrings.EXPORT_CONFIG__HELP)
+   @CliMetaData(interceptor = "com.gemstone.gemfire.management.internal.cli.commands.ConfigCommands$Interceptor", relatedTopic = {CliStrings.TOPIC_GEMFIRE_CONFIG})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.EXPORT_CONFIG)
+   public Result exportConfig(
+       @CliOption(key = { CliStrings.EXPORT_CONFIG__MEMBER },
+                  optionContext = ConverterHint.ALL_MEMBER_IDNAME,
+                  help = CliStrings.EXPORT_CONFIG__MEMBER__HELP)
+       @CliMetaData (valueSeparator = ",")
+                   String member,
+       @CliOption(key = { CliStrings.EXPORT_CONFIG__GROUP },
+                  optionContext = ConverterHint.MEMBERGROUP,
+                  help = CliStrings.EXPORT_CONFIG__GROUP__HELP)
+       @CliMetaData (valueSeparator = ",")
+                   String group,
+       @CliOption(key = { CliStrings.EXPORT_CONFIG__DIR },
+                  help = CliStrings.EXPORT_CONFIG__DIR__HELP)
+                   String dir) {
+     InfoResultData infoData = ResultBuilder.createInfoResultData();
+ 
+     Set<DistributedMember> targetMembers;
+     try {
+       targetMembers = CliUtil.findAllMatchingMembers(group, member);
+     } catch (CommandResultException crex) {
+       return crex.getResult();
+     }
+ 
+     try {
+       ResultCollector<?, ?> rc = CliUtil.executeFunction(this.exportConfigFunction, null, targetMembers);
+       List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) rc.getResult());
+ 
+       for (CliFunctionResult result : results) {
+         if (result.getThrowable() != null) {
+           infoData.addLine(CliStrings.format(CliStrings.EXPORT_CONFIG__MSG__EXCEPTION, result.getMemberIdOrName(), result
+               .getThrowable()));
+         } else if (result.isSuccessful()) {
+           String cacheFileName = result.getMemberIdOrName() + "-cache.xml";
+           String propsFileName = result.getMemberIdOrName() + "-gf.properties";
+           String[] fileContent = (String[]) result.getSerializables();
+           infoData.addAsFile(cacheFileName, fileContent[0], "Downloading Cache XML file: {0}", false);
+           infoData.addAsFile(propsFileName, fileContent[1], "Downloading properties file: {0}", false);
+         }
+       }
+       return ResultBuilder.buildResult(infoData);
+     } catch (VirtualMachineError e) {
+       SystemFailure.initiateFailure(e);
+       throw e;
+     } catch (Throwable th) {
+       SystemFailure.checkFailure();
+       th.printStackTrace(System.err);
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.EXPORT_CONFIG__MSG__EXCEPTION, th.getClass()
+           .getName()
+           + ": " + th.getMessage()));
+     }
+   }
+ 
+ 
+   @CliCommand(value = { CliStrings.ALTER_RUNTIME_CONFIG }, help = CliStrings.ALTER_RUNTIME_CONFIG__HELP)
+   @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEMFIRE_CONFIG})
++  @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM, operation= ResourceConstants.ALTER_RUNTIME)
+   public Result alterRuntimeConfig(
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__MEMBER},
+       optionContext = ConverterHint.ALL_MEMBER_IDNAME,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__MEMBER__HELP) String memberNameOrId,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__GROUP},
+       optionContext = ConverterHint.MEMBERGROUP,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__MEMBER__HELP) String group,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__DISK__SPACE__LIMIT},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__DISK__SPACE__LIMIT__HELP) Integer archiveDiskSpaceLimit,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__FILE__SIZE__LIMIT},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__FILE__SIZE__LIMIT__HELP) Integer archiveFileSizeLimit,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__LOG__DISK__SPACE__LIMIT},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__LOG__DISK__SPACE__LIMIT__HELP) Integer logDiskSpaceLimit,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__LOG__FILE__SIZE__LIMIT},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__LOG__FILE__SIZE__LIMIT__HELP) Integer logFileSizeLimit,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__LOG__LEVEL},
+       optionContext = ConverterHint.LOG_LEVEL,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__LOG__LEVEL__HELP ) String logLevel,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__ARCHIVE__FILE},
+       help = CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__ARCHIVE__FILE__HELP) String statisticArchiveFile,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLE__RATE},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLE__RATE__HELP) Integer statisticSampleRate,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLING__ENABLED},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLING__ENABLED__HELP) Boolean statisticSamplingEnabled, 
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__COPY__ON__READ},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       specifiedDefaultValue="false",
+       help = CliStrings.ALTER_RUNTIME_CONFIG__COPY__ON__READ__HELP) Boolean setCopyOnRead,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__LOCK__LEASE},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__LOCK__LEASE__HELP) Integer lockLease,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__LOCK__TIMEOUT},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__LOCK__TIMEOUT__HELP) Integer lockTimeout,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__MESSAGE__SYNC__INTERVAL},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__MESSAGE__SYNC__INTERVAL__HELP) Integer messageSyncInterval,
+       @CliOption (key = {CliStrings.ALTER_RUNTIME_CONFIG__SEARCH__TIMEOUT},
+       unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE,
+       help = CliStrings.ALTER_RUNTIME_CONFIG__SEARCH__TIMEOUT__HELP) Integer searchTimeout
+       ) {
+ 
+     Map<String, String> runTimeDistributionConfigAttributes = new HashMap<String, String>();
+     Map<String, String> rumTimeCacheAttributes = new HashMap<String, String>();
+     Set<DistributedMember> targetMembers = new HashSet<DistributedMember>();
+     
+     try {
+       
+       targetMembers = CliUtil.findAllMatchingMembers(group, memberNameOrId);
+ 
+       if (archiveDiskSpaceLimit != null) {
+         runTimeDistributionConfigAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__DISK__SPACE__LIMIT, archiveDiskSpaceLimit.toString());
+       }
+ 
+       if (archiveFileSizeLimit != null) {
+         runTimeDistributionConfigAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__FILE__SIZE__LIMIT, archiveFileSizeLimit.toString());
+       }
+ 
+       if (logDiskSpaceLimit != null) {
+         runTimeDistributionConfigAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__LOG__DISK__SPACE__LIMIT, logDiskSpaceLimit.toString());
+       }
+ 
+       if (logFileSizeLimit != null) {
+         runTimeDistributionConfigAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__LOG__FILE__SIZE__LIMIT, logFileSizeLimit.toString());
+       }
+ 
+       if (logLevel != null && !logLevel.isEmpty()) {
+         runTimeDistributionConfigAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__LOG__LEVEL, logLevel);
+       }
+ 
+       if (statisticArchiveFile != null && !statisticArchiveFile.isEmpty()) {
+         runTimeDistributionConfigAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__ARCHIVE__FILE, statisticArchiveFile);
+       }
+ 
+       if (statisticSampleRate != null) {
+         runTimeDistributionConfigAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLE__RATE, statisticSampleRate.toString());
+       }
+ 
+       if (statisticSamplingEnabled != null) {
+         runTimeDistributionConfigAttributes.put(DistributionConfig.STATISTIC_SAMPLING_ENABLED_NAME, statisticSamplingEnabled.toString());
+       }
+       
+       
+       //Attributes that are set on the cache.
+       if (setCopyOnRead != null) {
+         rumTimeCacheAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__COPY__ON__READ, setCopyOnRead.toString());
+       }
+       
+       if (lockLease != null && lockLease > 0 && lockLease < Integer.MAX_VALUE) {
+         rumTimeCacheAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__LOCK__LEASE, lockLease.toString());
+       }
+       
+       if (lockTimeout != null && lockTimeout > 0 && lockTimeout < Integer.MAX_VALUE) {
+         rumTimeCacheAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__LOCK__TIMEOUT,  lockTimeout.toString());
+       }
+       
+       if (messageSyncInterval != null && messageSyncInterval > 0 && messageSyncInterval < Integer.MAX_VALUE) {
+         rumTimeCacheAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__MESSAGE__SYNC__INTERVAL,  messageSyncInterval.toString());
+       }
+       
+       if (searchTimeout != null && searchTimeout > 0 && searchTimeout < Integer.MAX_VALUE) {
+         rumTimeCacheAttributes.put(CliStrings.ALTER_RUNTIME_CONFIG__SEARCH__TIMEOUT,  searchTimeout.toString());
+       }
+       
+       if (!runTimeDistributionConfigAttributes.isEmpty() || !rumTimeCacheAttributes.isEmpty()) {
+         Map<String, String> allRunTimeAttributes = new HashMap<String, String>();
+         allRunTimeAttributes.putAll(runTimeDistributionConfigAttributes);
+         allRunTimeAttributes.putAll(rumTimeCacheAttributes);
+         
+         ResultCollector<?,?> rc = CliUtil.executeFunction(alterRunTimeConfigFunction, allRunTimeAttributes, targetMembers);
+         List<CliFunctionResult> results = CliFunctionResult.cleanResults((List<?>) rc.getResult());
+         CompositeResultData crd = ResultBuilder.createCompositeResultData();
+         TabularResultData tabularData = crd.addSection().addTable();
+         Set<String> successfulMembers = new TreeSet<String>();
+         Set<String> errorMessages = new TreeSet<String>();
+ 
+ 
+         for (CliFunctionResult result : results) {
+           if (result.getThrowable() != null) {
+             errorMessages.add(result.getThrowable().getMessage());
+           } else {
+             successfulMembers.add(result.getMemberIdOrName());
+           }
+         }
+         final String lineSeparator = System.getProperty("line.separator");
+         if (!successfulMembers.isEmpty()) {
+           StringBuilder successMessageBuilder = new StringBuilder();
+ 
+           successMessageBuilder.append(CliStrings.ALTER_RUNTIME_CONFIG__SUCCESS__MESSAGE);
+           successMessageBuilder.append(lineSeparator);
+ 
+           for (String member : successfulMembers) {
+             successMessageBuilder.append(member);
+             successMessageBuilder.append(lineSeparator);
+           }
+           
+           Properties properties = new Properties();
+           properties.putAll(runTimeDistributionConfigAttributes);
+           
+           Result result = ResultBuilder.createInfoResult(successMessageBuilder.toString());
+           
+           //Set the Cache attributes to be modified
+           final XmlEntity xmlEntity = XmlEntity.builder().withType(CacheXml.CACHE).withAttributes(rumTimeCacheAttributes).build();
+           result.setCommandPersisted(new SharedConfigurationWriter().modifyPropertiesAndCacheAttributes(properties, xmlEntity, group !=null ? group.split(",") : null));
+           return result;
+         } else {
+           StringBuilder errorMessageBuilder = new StringBuilder();
+           errorMessageBuilder.append("Following errors occurred while altering runtime config");
+           errorMessageBuilder.append(lineSeparator);
+ 
+           for (String errorMessage : errorMessages){
+             errorMessageBuilder.append(errorMessage);
+             errorMessageBuilder.append(lineSeparator);
+           }
+           return ResultBuilder.createUserErrorResult(errorMessageBuilder.toString());
+         }
+       } else {
+         return ResultBuilder.createUserErrorResult(CliStrings.ALTER_RUNTIME_CONFIG__RELEVANT__OPTION__MESSAGE);
+       }
+     } catch (CommandResultException crex) {
+       return crex.getResult();
+     }catch (CacheClosedException e) {
+       return ResultBuilder.createGemFireErrorResult(e.getMessage());
+     } catch (FunctionInvocationTargetException e) {
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.COULD_NOT_EXECUTE_COMMAND_TRY_AGAIN, CliStrings.ALTER_RUNTIME_CONFIG));
+     } catch (Exception e) {
+       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.EXCEPTION_CLASS_AND_MESSAGE, e.getClass(), e.getMessage()));
+     }
+   }
+   @CliAvailabilityIndicator({ CliStrings.DESCRIBE_CONFIG, CliStrings.EXPORT_CONFIG, CliStrings.ALTER_RUNTIME_CONFIG})
+   public boolean configCommandsAvailable() {
+     boolean isAvailable = true; // always available on server
+     if (CliUtil.isGfshVM()) { // in gfsh check if connected
+       isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady();
+     }
+     return isAvailable;
+   }
+ 
+   /**
+    * Interceptor used by gfsh to intercept execution of export config command at "shell".
+    */
+   public static class Interceptor extends AbstractCliAroundInterceptor {
+     private String saveDirString;
+ 
+     @Override
+     public Result preExecution(GfshParseResult parseResult) {
+       Map<String, String> paramValueMap = parseResult.getParamValueStrings();
+       String dir = paramValueMap.get("dir");
+       dir = (dir == null) ? null : dir.trim();
+ 
+       File saveDirFile = new File(".");
+       if (dir != null && !dir.isEmpty()) {
+         saveDirFile = new File(dir);
+         if (saveDirFile.exists()) {
+           if (!saveDirFile.isDirectory())
+             return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.EXPORT_CONFIG__MSG__NOT_A_DIRECTORY, dir));
+         } else if (!saveDirFile.mkdirs()) {
+           return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.EXPORT_CONFIG__MSG__CANNOT_CREATE_DIR, dir));
+         }
+       }
+       try {
+         if (!saveDirFile.canWrite()) {
+           return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.EXPORT_CONFIG__MSG__NOT_WRITEABLE, saveDirFile
+               .getCanonicalPath()));
+         }
+       } catch (IOException ioex) {
+         return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.EXPORT_CONFIG__MSG__NOT_WRITEABLE, saveDirFile
+             .getName()));
+       }
+ 
+       saveDirString = saveDirFile.getAbsolutePath();
+       return ResultBuilder.createInfoResult("OK");
+     }
+ 
+     @Override
+     public Result postExecution(GfshParseResult parseResult, Result commandResult) {
+       if (commandResult.hasIncomingFiles()) {
+         try {
+           commandResult.saveIncomingFiles(saveDirString);
+         } catch (IOException ioex) {
+           getGfsh().logSevere("Unable to export config", ioex);
+         }
+       }
+ 
+       return commandResult;
+     }
+   }
+ }


[20/50] [abbrv] incubator-geode git commit: GEODE-876: Add a README file to the binary distribution

Posted by je...@apache.org.
GEODE-876: Add a README file to the binary distribution

this closes #96


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/4951bfa9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/4951bfa9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/4951bfa9

Branch: refs/heads/feature/GEODE-17
Commit: 4951bfa92ca561bd810795860b7189f377c77eeb
Parents: 3799389
Author: Sai Boorlagadda <sb...@pivotal.io>
Authored: Wed Feb 17 11:41:45 2016 -0800
Committer: Sai Boorlagadda <sb...@pivotal.io>
Committed: Wed Feb 24 14:46:03 2016 -0800

----------------------------------------------------------------------
 README.md                   | 8 --------
 geode-assembly/build.gradle | 2 ++
 2 files changed, 2 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/4951bfa9/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 26abb7d..3cc5657 100755
--- a/README.md
+++ b/README.md
@@ -90,11 +90,3 @@ Geode applications can be written in a number of client technologies:
 * [REST](http://geode.docs.pivotal.io/docs/rest_apps/book_intro.html)
 * [memcached](https://cwiki.apache.org/confluence/display/GEODE/Moving+from+memcached+to+gemcached)
 
-
-# Build environment in Docker
-```
-dev-tools/docker/compile/start-compile-docker.sh
-
-```
-
-

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/4951bfa9/geode-assembly/build.gradle
----------------------------------------------------------------------
diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle
index 2a46147..cf75135 100755
--- a/geode-assembly/build.gradle
+++ b/geode-assembly/build.gradle
@@ -254,6 +254,8 @@ distributions {
       exclude '*-sources.jar'
       exclude '*-javadoc.jar'
 
+      from rootProject.file( 'README.md' )
+
       into ('config') {
         from defaultCacheConfig
         from defaultDistributionConfig


[30/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMXBean.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMXBean.java
index 0000000,68c3d64..144b90a
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMXBean.java
@@@ -1,0 -1,23 +1,29 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
++/**
++ * Interface for AccessControlMBean
++ * @author tushark
++ * @since 9.0
++ */
+ public interface AccessControlMXBean {
+ 
++  @ResourceOperation(resource=Resource.MEMBER, operation=ResourceConstants.LIST_DS)
+   public boolean authorize(String role);
+   
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/CLIOperationContext.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/CLIOperationContext.java
index 0000000,4007d09..8999875
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/CLIOperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/CLIOperationContext.java
@@@ -1,0 -1,138 +1,186 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
+ import java.lang.annotation.Annotation;
+ import java.lang.reflect.Method;
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ import org.springframework.shell.event.ParseResult;
+ 
 -import com.gemstone.gemfire.internal.logging.LogService;
++import com.gemstone.gemfire.GemFireConfigException;
+ import com.gemstone.gemfire.management.cli.CommandProcessingException;
+ import com.gemstone.gemfire.management.internal.cli.CommandManager;
+ import com.gemstone.gemfire.management.internal.cli.GfshParseResult;
+ import com.gemstone.gemfire.management.internal.cli.GfshParser;
++import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
+ import com.gemstone.gemfire.management.internal.cli.parser.CommandTarget;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
+ 
 -
++/**
++ * It represents command being executed and all passed options and option-values.
++ * ResourceOpCode returned by CLIOperationContext is retrieved from ResourceOperation 
++ * annotation on the target command
++ * 
++ * @author tushark
++ * @since 9.0
++ */
+ public class CLIOperationContext extends ResourceOperationContext {
 -	
 -	private OperationCode code = OperationCode.RESOURCE;
 -	private ResourceOperationCode resourceCode = null;
 -	private Map<String,String> commandOptions = null;
 -	
 -	private static Map<String,ResourceOperationCode> commandToCodeMapping = new HashMap<String,ResourceOperationCode>();
 -	private static CommandManager commandManager = null;
 -	private static GfshParser parser = null;	
 -	
 -	public CLIOperationContext(String commandString) throws CommandProcessingException, IllegalStateException{
 -		code = OperationCode.RESOURCE;
 -		GfshParseResult parseResult = (GfshParseResult) parseCommand(commandString);		
 -		this.commandOptions = parseResult.getParamValueStrings();		
 -		this.resourceCode = findResourceCode(parseResult.getCommandName()); //need to add this to ParseResult 
 -	}
 -	
 -	private static ParseResult parseCommand(String commentLessLine) throws CommandProcessingException, IllegalStateException {
++  
++  private OperationCode code = OperationCode.RESOURCE;
++  private ResourceOperationCode resourceCode = null;
++  private Map<String,String> commandOptions = null;
++  
++  private static Map<String,ResourceOperationCode> commandToCodeMapping = new HashMap<String,ResourceOperationCode>();
++  private static CommandManager commandManager = null;
++  private static GfshParser parser = null;  
++  
++  public CLIOperationContext(String commandString) throws CommandProcessingException, IllegalStateException{    
++    GfshParseResult parseResult = (GfshParseResult) parseCommand(commandString);    
++    this.commandOptions = parseResult.getParamValueStrings();   
++    this.resourceCode = findResourceCode(parseResult.getCommandName());
++    this.code = findOperationCode(parseResult.getCommandName());
++  }
++  
++  /**
++   * This method returns OperationCode for command. Some commands perform data 
++   * operations, for such commands OperationCode returned is not RESOURCE but
++   * corresponding data operation as defined in OperationCode
++   * 
++   * @param commandName
++   * @return OperationCode
++   */
++  private OperationCode findOperationCode(String commandName) {
++    
++    if(CliStrings.GET.equals(commandName) || CliStrings.LOCATE_ENTRY.equals(commandName))
++      return OperationCode.GET;
++    
++    if(CliStrings.PUT.equals(commandName))
++      return OperationCode.PUT;
++    
++    if(CliStrings.QUERY.equals(commandName))
++      return OperationCode.QUERY;
++    
++    if (CliStrings.REMOVE.equals(commandName)) {
++      if (commandOptions.containsKey(CliStrings.REMOVE__ALL)
++          && "true".equals(commandOptions.get(CliStrings.REMOVE__ALL))) {
++        return OperationCode.REMOVEALL;
++      } else
++        return OperationCode.DESTROY;
++    }
++    
++    if(CliStrings.CLOSE_DURABLE_CQS.equals(commandName)) {
++      return OperationCode.CLOSE_CQ;
++    }
++    
++    if(CliStrings.CREATE_REGION.equals(commandName)) {
++      return OperationCode.REGION_CREATE;
++    }
++    
++    if(CliStrings.DESTROY_REGION.equals(commandName)) {
++      return OperationCode.REGION_DESTROY;
++    }
++    
++    if(CliStrings.EXECUTE_FUNCTION.equals(commandName)) {
++      return OperationCode.EXECUTE_FUNCTION;
++    }
++    
++    //"stop cq"   
++    //"removeall",
++    //"get durable cqs",    
++    return OperationCode.RESOURCE;    
++  }
++
++  private static ParseResult parseCommand(String commentLessLine) throws CommandProcessingException, IllegalStateException {
+     if (commentLessLine != null) {
+       return parser.parse(commentLessLine);
+     }
+     throw new IllegalStateException("Command String should not be null.");
+   }
 -	
 -	public static void registerCommand(CommandManager cmdManager, Method method, CommandTarget commandTarget){	  
 -	  //Save command manager instance and create a local parser for parsing the commands
 -	  if(commandManager==null){
 -	    commandManager = cmdManager;
 -	    parser = new GfshParser(cmdManager);
 -	  }
 -	  
 -		boolean found=false;
 -		Annotation ans[] = method.getDeclaredAnnotations();
 -		for(Annotation an : ans){
 -			if(an instanceof ResourceOperation) {
 -				cache(commandTarget.getCommandName(),(ResourceOperation)an);
 -				found=true;
 -			}
 -		}
 -		if(!found)
 -			cache(commandTarget.getCommandName(),null);
 -	}
++  
++  public static void registerCommand(CommandManager cmdManager, Method method, CommandTarget commandTarget){    
++    if(commandManager==null){
++      commandManager = cmdManager;
++      parser = new GfshParser(cmdManager);
++    }
++    
++    boolean found=false;
++    Annotation ans[] = method.getDeclaredAnnotations();
++    for(Annotation an : ans){
++      if(an instanceof ResourceOperation) {
++        cache(commandTarget.getCommandName(),(ResourceOperation)an);
++        found=true;
++      }
++    }
++    if(!found)
++      cache(commandTarget.getCommandName(),null);
++  }
++
++  private static void cache(String commandName, ResourceOperation op) {
++    ResourceOperationCode resourceOpCode = null;
++    
++    if (op != null) {
++      String opString = op.operation();
++      if (opString != null)
++        resourceOpCode = ResourceOperationCode.parse(opString);
++    }
++    
++    if(resourceOpCode==null){
++      if (commandName.startsWith(GETTER_DESCRIBE) || commandName.startsWith(GETTER_LIST)
++          || commandName.startsWith(GETTER_STATUS)) {
++        resourceOpCode = ResourceOperationCode.LIST_DS;
++      } 
++    }
++    
++
++    if(resourceOpCode!=null) {
++      commandToCodeMapping.put(commandName, resourceOpCode);
++    } else {
++      throw new GemFireConfigException(
++          "Error while configuring authorization for gfsh commands. No opCode defined for command " + commandName);
+ 
 -	private static void cache(String commandName, ResourceOperation op) {
 -		ResourceOperationCode code = null;
 -		
 -		if (op != null) {
 -			String opString = op.operation();
 -			if (opString != null)
 -				code = ResourceOperationCode.parse(opString);
 -		}
 -		
 -		if(code==null){
 -			if(commandName.startsWith("describe") || commandName.startsWith("list") || commandName.startsWith("status")
 -					|| commandName.startsWith("show")){
 -				code = ResourceOperationCode.LIST_DS;
 -			} 
 -		}
 -		
 -		//TODO : Have map according to each resources
 -		//TODO : How to save information for retrieving command Option map or region and serverGroup
 -		
 -		Resource targetedResource = null;		
 -		if(op!=null){
 -			targetedResource = op.resource();
 -		} else {			
 -			targetedResource = Resource.DISTRIBUTED_SYSTEM;
 -			//TODO : Add other resource and mbeans
 -		}
 -		
 -		
 -		LogService.getLogger().trace("#RegisterCommandSecurity : " + commandName + " code " + code + " op="+op);
 -		
 -		if(code!=null) {
 -			commandToCodeMapping.put(commandName, code);
 -		}
 -		
 -	}
++    }
++    
++  }
+ 
 -	public Map<String, String> getCommandOptions() {
 -		return commandOptions;
 -	}
++  public Map<String, String> getCommandOptions() {
++    return commandOptions;
++  }
+ 
 -	private static ResourceOperationCode findResourceCode(String commandName) {		
 -		return commandToCodeMapping.get(commandName);
 -	}
++  private static ResourceOperationCode findResourceCode(String commandName) {   
++    return commandToCodeMapping.get(commandName);
++  }
+ 
+ 
 -	@Override
 -	public OperationCode getOperationCode() {		
 -		return code;
 -	}
++  @Override
++  public OperationCode getOperationCode() {   
++    return code;
++  }
+ 
 -	@Override
 -	public ResourceOperationCode getResourceOperationCode() {
 -		return resourceCode;
 -	}
 -	
 -	
 -	public String toString(){
 -	  String str;
 -	  str = "CLIOperationContext(resourceCode=" + resourceCode + ") options=" + commandOptions+")";
 -	  return str;
 -	}
++  @Override
++  public ResourceOperationCode getResourceOperationCode() {
++    return resourceCode;
++  }
++  
++  
++  public String toString(){
++    String str;
++    str = "CLIOperationContext(resourceCode=" + resourceCode + ") options=" + commandOptions+")";
++    return str;
++  }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/JMXOperationContext.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/JMXOperationContext.java
index 0000000,225555f..1363efc
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/JMXOperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/JMXOperationContext.java
@@@ -1,0 -1,177 +1,262 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
+ import java.io.IOException;
+ import java.lang.annotation.Annotation;
+ import java.lang.reflect.Method;
+ import java.util.HashMap;
+ import java.util.Map;
+ 
+ import javax.management.ObjectName;
+ 
+ import com.gemstone.gemfire.GemFireConfigException;
++import com.gemstone.gemfire.internal.logging.LogService;
++import com.gemstone.gemfire.management.AsyncEventQueueMXBean;
++import com.gemstone.gemfire.management.CacheServerMXBean;
++import com.gemstone.gemfire.management.DiskStoreMXBean;
++import com.gemstone.gemfire.management.DistributedLockServiceMXBean;
++import com.gemstone.gemfire.management.DistributedRegionMXBean;
+ import com.gemstone.gemfire.management.DistributedSystemMXBean;
++import com.gemstone.gemfire.management.GatewayReceiverMXBean;
++import com.gemstone.gemfire.management.GatewaySenderMXBean;
++import com.gemstone.gemfire.management.LocatorMXBean;
++import com.gemstone.gemfire.management.LockServiceMXBean;
++import com.gemstone.gemfire.management.ManagerMXBean;
++import com.gemstone.gemfire.management.MemberMXBean;
++import com.gemstone.gemfire.management.RegionMXBean;
+ import com.gemstone.gemfire.management.internal.MBeanJMXAdapter;
+ import com.gemstone.gemfire.management.internal.cli.util.ClasspathScanLoadHelper;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
+ 
 -
++/**
++ * It describes current JMX MBean Method call and its parameters.
++ * OpCode returned by JMXOperationContext is retrieved from ResourceOperation annotation
++ * on the target methodName
++ * 
++ * @author tushark
++ * @since 9.0
++ *
++ */
+ public class JMXOperationContext  extends ResourceOperationContext {
 -	
 -	private OperationCode code = OperationCode.RESOURCE;
 -	private ResourceOperationCode resourceCode = null;
 -	
 -	private static Map<String,ResourceOperationCode> cacheDSResourceOps = null;
 -	private static Map<String,ResourceOperationCode> cacheMemberResourceOps = null;
 -	private static Map<String,ResourceOperationCode> cacheRegionResourceOps = null;
 -	private static Map<String,ResourceOperationCode> cacheDiskStoreResourceOps = null;
 -	
 -	static {
 -		//cache all resource annotations
 -		readJMXAnnotations();		
 -		
 -	}	
++  
++  
++  private OperationCode code = OperationCode.RESOURCE;
++  private ResourceOperationCode resourceCode = null;
++  private ObjectName name;
++  private String methodName;
++  
++  private static Map<Class<?>,Map<String,ResourceOperationCode>> cachedResourceOpsMapping = new HashMap<Class<?>,Map<String,ResourceOperationCode>>();
++  private static Map<String,ResourceOperationCode> distributedSystemMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
++  private static Map<String,ResourceOperationCode> diskStoreMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
++  private static Map<String,ResourceOperationCode> cacheServerMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
++  private static Map<String,ResourceOperationCode> gatewayReceiverMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
++  private static Map<String,ResourceOperationCode> gatewaySenderMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
++  private static Map<String,ResourceOperationCode> lockServiceMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
++  private static Map<String,ResourceOperationCode> managerMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
++  private static Map<String,ResourceOperationCode> memberMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
++  private static Map<String,ResourceOperationCode> regionMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();  
++  private static Map<String,ResourceOperationCode> locatorMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();  
++  private static Map<String,ResourceOperationCode> distributedLockServiceMXBeanResourceOps = new HashMap<String,ResourceOperationCode>(); 
++  private static Map<String,ResourceOperationCode> distributedRegionMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();    
++  private static Map<String,ResourceOperationCode> asyncEventQueueMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
++  private static Map<String,ResourceOperationCode> accessControlMXBeanResourceOps = new HashMap<String,ResourceOperationCode>();
+ 
 -	private static void readJMXAnnotations() {
 -		try {
 -			Class[] klassList = ClasspathScanLoadHelper.getClasses("com.gemstone.gemfire.management");
 -			for(Class klass : klassList) {
 -				if(klass.getName().endsWith("MXBean")) {
 -					Method[] methods = klass.getMethods();
 -					for(Method method : methods) {
 -						String name = method.getName();
 -						//ResourceOperation op = method.getDeclaredAnnotations();(ResourceOperation.class);
 -						boolean found=false;
 -						Annotation ans[] = method.getDeclaredAnnotations();
 -						for(Annotation an : ans){
 -							if(an instanceof ResourceOperation) {
 -								cache(klass,name,(ResourceOperation)an);
 -								found=true;
 -							}
 -						}
 -						if(!found)
 -							cache(klass,name,null);
 -					}
 -					//TODO : Log all cached operations
 -				}
 -			}
 -		} catch (ClassNotFoundException e) {			
 -			throw new GemFireConfigException(
 -					"Error while configuring authorization for jmx - ", e);
 -		} catch (IOException e) {
 -			throw new GemFireConfigException(
 -					"Error while configuring authorization for jmx - ", e);
 -		}
 -		
 -	}
 -	
 -	private static void cache(Class klass, String name, ResourceOperation op) {
 -		ResourceOperationCode code = null;
 -		
 -		if (op != null) {
 -			String opString = op.operation();
 -			if (opString != null)
 -				code = ResourceOperationCode.parse(opString);
 -		}
 -		
 -		if(code==null){
 -			if(name.startsWith("list") || name.startsWith("fetch") || name.startsWith("view")
 -					|| name.startsWith("show")){
 -				code = ResourceOperationCode.LIST_DS;
 -			} else if (name.startsWith("get")){
 -				code = ResourceOperationCode.READ_DS;
 -			} else if (name.startsWith("is")){
 -				code = ResourceOperationCode.READ_DS;
 -			} else if (name.startsWith("set")){
 -				code = ResourceOperationCode.SET_DS;
 -			}
 -		}
 -		
 -		/*
 -		System.out.println("Klass " + klass + " mname : " + name);
 -		if (code != null)
 -			System.out.println("ResourceOperation code=" + code);
 -		else
 -			System.out.println("ResourceOperation is null");*/
 -		
 -		Resource targetedResource = null;
 -		
 -		if(op!=null){
 -			targetedResource = op.resource();
 -		} else {
 -			if(klass.equals(DistributedSystemMXBean.class)) {
 -				targetedResource = Resource.DISTRIBUTED_SYSTEM;
 -			}
 -			//TODO : Add other resource and mbeans
 -		}
 -		
 -		/* Comment for timebeing to avoid falling for other methods
 -		if(!isGetterSetter(name) && code==null){
 -			throw new GemFireConfigException(
 -					"Error while configuring authorization for jmx. No authorization defined for " 
 -					+ klass.getCanonicalName() + " method " + name);
 -		}*/
 -		if(targetedResource!=null) {
 -			switch (targetedResource) {
 -			case DISTRIBUTED_SYSTEM:
 -				if (code != null){
 -					if(cacheDSResourceOps==null)
 -						cacheDSResourceOps = new HashMap<String,ResourceOperationCode>();
 -					cacheDSResourceOps.put(name, code);
 -				}
 -				break;
 -			}
 -		}			
 -	}
++  
++  static {    
++    readJMXAnnotations();   
++  } 
+ 
 -	private static boolean isGetterSetter(String name) {
 -		if(name.startsWith("is") || name.startsWith("get") ||  name.startsWith("set") ||  name.startsWith("fetch")
 -			||  name.startsWith("list") ||  name.startsWith("view") ||  name.startsWith("show") ) 
 -		return true;
 -		else return false;
 -	}
++  private static void readJMXAnnotations() {
++    
++    cachedResourceOpsMapping.put(DistributedSystemMXBean.class, distributedSystemMXBeanResourceOps);
++    cachedResourceOpsMapping.put(DiskStoreMXBean.class, diskStoreMXBeanResourceOps);
++    cachedResourceOpsMapping.put(CacheServerMXBean.class, cacheServerMXBeanResourceOps);
++    cachedResourceOpsMapping.put(GatewayReceiverMXBean.class, gatewayReceiverMXBeanResourceOps);
++    cachedResourceOpsMapping.put(GatewaySenderMXBean.class, gatewaySenderMXBeanResourceOps);
++    cachedResourceOpsMapping.put(LockServiceMXBean.class, lockServiceMXBeanResourceOps);
++    cachedResourceOpsMapping.put(ManagerMXBean.class, managerMXBeanResourceOps);
++    cachedResourceOpsMapping.put(MemberMXBean.class, memberMXBeanResourceOps);
++    cachedResourceOpsMapping.put(RegionMXBean.class, regionMXBeanResourceOps);
++    cachedResourceOpsMapping.put(LocatorMXBean.class, locatorMXBeanResourceOps);
++    cachedResourceOpsMapping.put(DistributedLockServiceMXBean.class, distributedLockServiceMXBeanResourceOps);
++    cachedResourceOpsMapping.put(DistributedRegionMXBean.class, distributedRegionMXBeanResourceOps);
++    cachedResourceOpsMapping.put(AsyncEventQueueMXBean.class, asyncEventQueueMXBeanResourceOps);
++    cachedResourceOpsMapping.put(AccessControlMXBean.class, accessControlMXBeanResourceOps);
++    
++    try {
++      Class<?>[] klassList = ClasspathScanLoadHelper.getClasses(MANAGEMENT_PACKAGE);
++      for(Class<?> klass : klassList) {
++        if(klass.getName().endsWith("MXBean")) {
++          Method[] methods = klass.getMethods();
++          for(Method method : methods) {
++            String name = method.getName();
++            boolean found=false;
++            Annotation ans[] = method.getDeclaredAnnotations();
++            for(Annotation an : ans){
++              if(an instanceof ResourceOperation) {
++                cache(klass,name,(ResourceOperation)an);
++                found=true;
++              }
++            }
++            if(!found)
++              cache(klass,name,null);
++          }         
++        }
++      }
++    } catch (ClassNotFoundException e) {      
++      throw new GemFireConfigException(
++          "Error while configuring authorization for jmx - ", e);
++    } catch (IOException e) {
++      throw new GemFireConfigException(
++          "Error while configuring authorization for jmx - ", e);
++    }
++    
++  }
++  
++  private static void cache(Class<?> klass, String name, ResourceOperation op) {
++    ResourceOperationCode code = null;
++    
++    if (op != null) {
++      String opString = op.operation();
++      if (opString != null)
++        code = ResourceOperationCode.parse(opString);
++    }
++    
++    if(code==null && isGetterSetter(name)){        
++      code = ResourceOperationCode.LIST_DS;     
++    }
++    
++    
++    if (code == null && cachedResourceOpsMapping.keySet().contains(klass) && !isGetterSetter(name)) {      
++      throw new GemFireConfigException("Error while configuring authorization for jmx. No opCode defined for "
++          + klass.getCanonicalName() + " method " + name);
++    }
++    
++    final Map<String,ResourceOperationCode> resourceOpsMap = cachedResourceOpsMapping.get(klass);
++    if(resourceOpsMap==null) {
++      if (cachedResourceOpsMapping.keySet().contains(klass))
++        throw new GemFireConfigException("Unknown MBean " + klass.getCanonicalName());
++      else {
++        LogService.getLogger().warn("Unsecured mbean " + klass);
++      }
++    }
++    else {
++      resourceOpsMap.put(name, code);
++    }    
++  }
+ 
 -	public JMXOperationContext(ObjectName name , String methodName){
 -		code = OperationCode.RESOURCE;
 -		if(name.equals(MBeanJMXAdapter.getDistributedSystemName())){
 -			resourceCode = cacheDSResourceOps.get(methodName);
 -		}
 -	}
 -	
++  public static boolean isGetterSetter(String name) {
++    if(name.startsWith(GETTER_IS) || name.startsWith(GETTER_GET) ||  name.startsWith(GETTER_FETCH)
++      ||  name.startsWith(GETTER_LIST) ||  name.startsWith(GETTER_VIEW) ||  name.startsWith(GETTER_SHOW) ||  name.startsWith(GETTER_HAS)) 
++    return true;
++    else return false;
++  }
+ 
 -	@Override
 -	public OperationCode getOperationCode() {		
 -		return code;
 -	}
++  public JMXOperationContext(ObjectName name , String methodName){
++    code = OperationCode.RESOURCE;    
++    Class<?> klass = getMbeanClass(name);
++    Map<String,ResourceOperationCode> resourceOpsMap = cachedResourceOpsMapping.get(klass);   
++    resourceCode = resourceOpsMap.get(methodName);
++    this.methodName = methodName;
++    this.name = name;
++    
++    //If getAttr is not found try for isAttr ie. boolean getter
++    if(resourceCode==null) {
++      if(this.methodName.startsWith(GET_PREFIX)) {
++        String methodNameBooleanGetter = GET_IS_PREFIX + this.methodName.substring(GET_PREFIX.length());
++        if(resourceOpsMap.containsKey(methodNameBooleanGetter)){
++          resourceCode = resourceOpsMap.get(methodNameBooleanGetter);
++          this.methodName = methodNameBooleanGetter;
++        }
++      }
++    }
++    
++    //If resourceCode is still null most likely its wrong method name so just allow it pass
++    if(resourceCode==null) {
++      resourceCode = ResourceOperationCode.LIST_DS;
++    }
++  }
++  
+ 
 -	@Override
 -	public ResourceOperationCode getResourceOperationCode() {
 -		return resourceCode;
 -	}
++  
+ 
 -	public static Map<String, ResourceOperationCode> getCacheDSResourceOps() {
 -		return cacheDSResourceOps;
 -	}
++  private Class<?> getMbeanClass(ObjectName name) {
++    if (name.equals(MBeanJMXAdapter.getDistributedSystemName()))
++      return DistributedSystemMXBean.class;
++    else {
++      String service = name.getKeyProperty(MBEAN_KEY_SERVICE);
++      String mbeanType = name.getKeyProperty(MBEAN_KEY_TYPE);
+ 
 -	public static void setCacheDSResourceOps(
 -			Map<String, ResourceOperationCode> cacheDSResourceOps) {
 -		JMXOperationContext.cacheDSResourceOps = cacheDSResourceOps;
 -	}
 -	
 -	
++      if (MBEAN_TYPE_DISTRIBUTED.equals(mbeanType)) {
++        if (MBEAN_SERVICE_SYSTEM.equals(service)) {
++          return DistributedSystemMXBean.class;
++        } else if (MBEAN_SERVICE_REGION.equals(service)) {
++          return DistributedRegionMXBean.class;
++        } else if (MBEAN_SERVICE_LOCKSERVICE.equals(service)) {
++          return DistributedLockServiceMXBean.class;
++        } else {
++          throw new RuntimeException("Unknown mbean type " + name);
++        }
++      } else if (MBEAN_TYPE_MEMBER.equals(mbeanType)) {
++        if (service == null) {
++          return MemberMXBean.class;
++        } else {
++          if (MBEAN_SERVICE_MANAGER.equals(service)) {
++            return ManagerMXBean.class;
++          } else if (MBEAN_SERVICE_CACHESERVER.equals(service)) {
++            return CacheServerMXBean.class;
++          } else if (MBEAN_SERVICE_REGION.equals(service)) {
++            return RegionMXBean.class;
++          } else if (MBEAN_SERVICE_LOCKSERVICE.equals(service)) {
++            return LockServiceMXBean.class;
++          } else if (MBEAN_SERVICE_DISKSTORE.equals(service)) {
++            return DiskStoreMXBean.class;
++          } else if (MBEAN_SERVICE_GATEWAY_RECEIVER.equals(service)) {
++            return GatewayReceiverMXBean.class;
++          } else if (MBEAN_SERVICE_GATEWAY_SENDER.equals(service)) {
++            return GatewaySenderMXBean.class;
++          } else if (MBEAN_SERVICE_ASYNCEVENTQUEUE.equals(service)) {
++            return AsyncEventQueueMXBean.class;
++          } else if (MBEAN_SERVICE_LOCATOR.equals(service)) {
++            return LocatorMXBean.class;
++          } else {
++            throw new RuntimeException("Unknown mbean type " + name);
++          }
++        }
++      } else {
++        throw new RuntimeException("Unknown mbean type " + name);
++      }
++    }
++  }
++
++  @Override
++  public OperationCode getOperationCode() {   
++    return code;
++  }
++
++  @Override
++  public ResourceOperationCode getResourceOperationCode() {
++    return resourceCode;
++  }  
++  
++  public String toString(){
++    return "JMXOpCtx(on="+name+",method="+methodName+")";
++  }
+ 
+ }
++

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
index 0000000,ef98575..5455818
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
@@@ -1,0 -1,308 +1,292 @@@
 -/*
 - * Licensed to the Apache Software Foundation (ASF) under one or more
 - * contributor license agreements.  See the NOTICE file distributed with
 - * this work for additional information regarding copyright ownership.
 - * The ASF licenses this file to You under the Apache License, Version 2.0
 - * (the "License"); you may not use this file except in compliance with
 - * the License.  You may obtain a copy of the License at
 - *
 - *      http://www.apache.org/licenses/LICENSE-2.0
 - *
 - * Unless required by applicable law or agreed to in writing, software
 - * distributed under the License is distributed on an "AS IS" BASIS,
 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 - * See the License for the specific language governing permissions and
 - * limitations under the License.
 - */
+ package com.gemstone.gemfire.management.internal.security;
+ 
+ import java.io.File;
+ import java.io.FileReader;
+ import java.io.IOException;
+ import java.security.Principal;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.Set;
+ 
+ import javax.management.remote.JMXPrincipal;
+ 
+ import org.json.JSONArray;
+ import org.json.JSONException;
+ import org.json.JSONObject;
+ 
+ import com.gemstone.gemfire.GemFireConfigException;
+ import com.gemstone.gemfire.LogWriter;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.operations.OperationContext;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.internal.logging.LogService;
+ import com.gemstone.gemfire.management.internal.security.ResourceOperationContext.ResourceOperationCode;
+ import com.gemstone.gemfire.security.AccessControl;
+ import com.gemstone.gemfire.security.AuthenticationFailedException;
+ import com.gemstone.gemfire.security.Authenticator;
+ import com.gemstone.gemfire.security.NotAuthorizedException;
+ 
+ public class JSONAuthorization implements AccessControl, Authenticator {
+ 	
+ 	public static class Role{
+ 		String[] permissions;
+ 		String name;
+ 		String regionName;
+ 		String serverGroup;		
+ 	}
+ 	
+ 	public static class User{
+ 		String name;
+ 		Role[] roles;
+ 		String pwd;
+ 	}
+ 	
+ 	private static Map<String,User> acl = null;
+ 	
+ 	public static JSONAuthorization create() throws IOException, JSONException {
+ 	  if(acl==null){
+ 	    readSecurityDescriptor(readDefault());
+ 	  }
+ 	  return new JSONAuthorization();
+ 	}
+ 	
+   public JSONAuthorization() {
+     if (acl == null) {
+       try {
+         readSecurityDescriptor(readDefault());
+       } catch (IOException e) {
+         throw new GemFireConfigException("Error creating JSONAuth", e);
+       } catch (JSONException e) {
+         throw new GemFireConfigException("Error creating JSONAuth", e);
+       }
+     }
+   }
+ 	
+ 	public static Set<ResourceOperationCode> getAuthorizedOps(User user, ResourceOperationContext context) {
+     Set<ResourceOperationCode> codeList = new HashSet<ResourceOperationCode>();
+     for(Role role : user.roles) {
+       for (String perm : role.permissions) {
+         ResourceOperationCode code = ResourceOperationCode.parse(perm);
+         if (role.regionName == null && role.serverGroup == null) {
+           addPermissions(code, codeList);
+         } else if (role.regionName != null) {
+           LogService.getLogger().info("This role requires region=" + role.regionName);
+           if (context instanceof CLIOperationContext) {
+             CLIOperationContext cliContext = (CLIOperationContext) context;
+             String region = cliContext.getCommandOptions().get("region");
+             if (region != null && region.equals(role.regionName)) {
+               addPermissions(code, codeList);
+             } else {
+               LogService.getLogger().info("Not adding permission " + code + " since region=" + region + " does not match");
+             }
+           }
+         }
+         // Same to be implemented for ServerGroup
+       }
+     }
+     LogService.getLogger().info("Final set of permisions " + codeList);
+     return codeList;
+   }
+ 	
+ 	private static void addPermissions(ResourceOperationCode code, Set<ResourceOperationCode> codeList) {
+ 	  if(code!=null) {
+       if(code.getChildren()==null)
+         codeList.add(code);
+       else {
+         for(ResourceOperationCode c : code.getChildren()){
+           codeList.add(c);
+         }
+       }
+     }    
+   }
+ 
+   private static String readDefault() throws IOException, JSONException {
+ 	  String str = System.getProperty(ResourceConstants.RESORUCE_SEC_DESCRIPTOR, ResourceConstants.RESORUCE_DEFAULT_SEC_DESCRIPTOR);
+ 		File file = new File(str);
+ 		FileReader reader = new FileReader(file);
+ 		char[] buffer = new char[(int) file.length()];
+ 		reader.read(buffer);
+ 		String json = new String(buffer);
+ 		reader.close();
+ 		return json;
+ 	}
+ 
+ 	public JSONAuthorization(String json) throws IOException, JSONException{
+ 		readSecurityDescriptor(json);
+ 	}
+ 	
+ 
+ 	private static void readSecurityDescriptor(String json) throws IOException, JSONException {		
+ 		JSONObject jsonBean = new JSONObject(json);		
+ 		acl = new HashMap<String,User>();		
+ 		Map<String,Role> roleMap = readRoles(jsonBean);
+ 		readUsers(acl,jsonBean,roleMap);		
+ 	}
+ 
+ 	private static void readUsers(Map<String, User> acl, JSONObject jsonBean,
+ 			Map<String, Role> roleMap) throws JSONException {
+ 		JSONArray array = jsonBean.getJSONArray("users");
+ 		for(int i=0;i<array.length();i++){
+ 			JSONObject obj = array.getJSONObject(i);
+ 			User user = new User();
+ 			user.name = obj.getString("name");
+ 			if(obj.has("password"))
+ 			  user.pwd = obj.getString("password");
+ 			else 
+ 			  user.pwd = user.name;
+ 			
+ 			JSONArray ops = obj.getJSONArray("roles");
+ 			user.roles = new Role[ops.length()];
+ 			for(int j=0;j<ops.length();j++){
+ 				String roleName = ops.getString(j);
+ 				user.roles[j] = roleMap.get(roleName);
+ 				if(user.roles[j]==null){
+ 					throw new RuntimeException("Role not present " + roleName);
+ 				}
+ 			}
+ 			acl.put(user.name, user);
+ 		}		
+ 	}
+ 
+ 	private static Map<String, Role> readRoles(JSONObject jsonBean) throws JSONException {
+ 		Map<String,Role> roleMap = new HashMap<String,Role>();
+ 		JSONArray array = jsonBean.getJSONArray("roles");
+ 		for(int i=0;i<array.length();i++){
+ 			JSONObject obj = array.getJSONObject(i);
+ 			Role role = new Role();
+ 			role.name = obj.getString("name");
+ 			
+ 			if(obj.has("operationsAllowed")){
+ 				JSONArray ops = obj.getJSONArray("operationsAllowed");
+ 				role.permissions = new String[ops.length()];
+ 				for(int j=0;j<ops.length();j++){
+ 					role.permissions[j] = ops.getString(j);
+ 				}
+ 			}else {
+ 				if (!obj.has("inherit"))
+ 					throw new RuntimeException(
+ 							"Role "
+ 									+ role.name
+ 									+ " does not have any permission neither it inherits any parent role");
+ 			}
+ 			
+ 			roleMap.put(role.name,role);
+ 			
+ 			if(obj.has("region")){
+ 				role.regionName = obj.getString("region");
+ 			}
+ 			
+ 			if(obj.has("serverGroup")){
+ 				role.serverGroup = obj.getString("serverGroup");
+ 			}
+ 		}
+ 		
+ 		for(int i=0;i<array.length();i++){
+ 			JSONObject obj = array.getJSONObject(i);
+ 			String name = obj.getString("name");
+ 			Role role = roleMap.get(name);
+ 			if (role == null) {
+ 				throw new RuntimeException("Role not present "
+ 						+ role);
+ 			}
+ 			if(obj.has("inherit")){				
+ 				JSONArray parentRoles = obj.getJSONArray("inherit");
+ 				for (int m = 0; m < parentRoles.length(); m++) {
+ 					String parentRoleName = parentRoles.getString(m);
+ 					Role parentRole = roleMap.get(parentRoleName);
+ 					if (parentRole == null) {
+ 						throw new RuntimeException("Role not present "
+ 								+ parentRoleName);
+ 					}
+ 					int oldLenth=0;
+ 					if(role.permissions!=null)
+ 						oldLenth = role.permissions.length;
+ 					int newLength = oldLenth + parentRole.permissions.length;
+ 					String[] str = new String[newLength];
+ 					int k = 0;
+ 					if(role.permissions!=null) {
+ 						for (; k < role.permissions.length; k++) {
+ 							str[k] = role.permissions[k];
+ 						}
+ 					}
+ 
+ 					for (int l = 0; l < parentRole.permissions.length; l++) {
+ 						str[k + l] = parentRole.permissions[l];
+ 					}
+ 					role.permissions = str;
+ 				}
+ 			}
+ 			
+ 		}		
+ 		return roleMap;
+ 	}
+ 
+ 	public static Map<String, User> getAcl() {
+ 		return acl;
+ 	}
+ 	
+ 	private Principal principal=null;
+ 
+   @Override
+   public void close() {
+     
+   }
+ 
+   @Override
+   public boolean authorizeOperation(String arg0, OperationContext context) {
+     
+     if(principal!=null) {
+       User user = acl.get(principal.getName());
+       if(user!=null) {
+         LogService.getLogger().info("Context received " + context);
+         ResourceOperationContext ctx = (ResourceOperationContext)context;
+         LogService.getLogger().info("Checking for code " + ctx.getResourceOperationCode());
+         
+         //TODO : This is for un-annotated commands
+         if(ctx.getResourceOperationCode()==null)
+           return true;        
+         
+         boolean found = false;
+         for(ResourceOperationCode code : getAuthorizedOps(user, (ResourceOperationContext) context)) {
+           if(ctx.getResourceOperationCode().equals(code)){
+             found =true;
+             LogService.getLogger().info("found code " + code.toString());
+             break;
+           }             
+         }
+         if(found)
+           return true;
+         LogService.getLogger().info("Did not find code " + ctx.getResourceOperationCode());
+         return false;        
+       }
+     } 
+     return false;
+   }
+ 
+   @Override
+   public void init(Principal principal, DistributedMember arg1, Cache arg2) throws NotAuthorizedException {
+     this.principal = principal;    
+   }
+ 
+   @Override
+   public Principal authenticate(Properties props, DistributedMember arg1) throws AuthenticationFailedException {
 -    String user = props.getProperty(ManagementInterceptor.USER_NAME);
 -    String pwd = props.getProperty(ManagementInterceptor.PASSWORD);
++    String user = props.getProperty(ResourceConstants.USER_NAME);
++    String pwd = props.getProperty(ResourceConstants.PASSWORD);
+     User userObj = acl.get(user);
+     if(userObj==null)
+       throw new AuthenticationFailedException("Wrong username/password");
+     LogService.getLogger().info("User="+user + " pwd="+pwd);
+     if (user!=null && !userObj.pwd.equals(pwd) && !"".equals(user))
+       throw new AuthenticationFailedException("Wrong username/password");
+     LogService.getLogger().info("Authentication successful!! for " + user);
+     return new JMXPrincipal(user);    
+   }
+ 
+   @Override
+   public void init(Properties arg0, LogWriter arg1, LogWriter arg2) throws AuthenticationFailedException {   
+     
+   }	
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
index 0000000,d85920c..0a79634
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
@@@ -1,0 -1,286 +1,343 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
+ import java.io.ObjectInputStream;
++import java.util.HashSet;
+ import java.util.Set;
+ 
+ import javax.management.Attribute;
+ import javax.management.AttributeList;
+ import javax.management.AttributeNotFoundException;
+ import javax.management.InstanceAlreadyExistsException;
+ import javax.management.InstanceNotFoundException;
+ import javax.management.IntrospectionException;
+ import javax.management.InvalidAttributeValueException;
+ import javax.management.ListenerNotFoundException;
+ import javax.management.MBeanException;
+ import javax.management.MBeanInfo;
+ import javax.management.MBeanRegistrationException;
+ import javax.management.MBeanServer;
+ import javax.management.NotCompliantMBeanException;
+ import javax.management.NotificationFilter;
+ import javax.management.NotificationListener;
+ import javax.management.ObjectInstance;
+ import javax.management.ObjectName;
+ import javax.management.OperationsException;
+ import javax.management.QueryExp;
+ import javax.management.ReflectionException;
+ import javax.management.loading.ClassLoaderRepository;
+ import javax.management.remote.MBeanServerForwarder;
 -
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
++
++/**
++ * This class intercepts all MBean requests for GemFire MBeans and passed it to 
++ * ManagementInterceptor for authorization
++ * 
++ * 
++ * @author tushark
++ * @since 9.0
++ *
++ */
+ public class MBeanServerWrapper implements MBeanServerForwarder {
+   
+   private MBeanServer mbs;
+   private ManagementInterceptor interceptor;
+   
+   public MBeanServerWrapper(ManagementInterceptor interceptor){
+     this.interceptor = interceptor;
+   }
+   
 -  private void doAuthorization(ObjectName name, String methodName, Object[] methodParams){
 -    interceptor.authorize(name,methodName, methodParams);
++  private ResourceOperationContext doAuthorization(ObjectName name, String methodName, Object[] methodParams){
++    return interceptor.authorize(name,methodName, methodParams);
++  }
++  
++  private void doAuthorizationPost(ObjectName name, String methodName, ResourceOperationContext context, Object result){
++    interceptor.postAuthorize(name,methodName,context,result);
+   }
+ 
+   @Override
+   public ObjectInstance createMBean(String className, ObjectName name) throws ReflectionException,
+       InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException {
 -    doAuthorization(name, "createMBean", new Object[]{name});
 -    return mbs.createMBean(className, name);
++    ResourceOperationContext ctx = doAuthorization(name, CREATE_MBEAN, new Object[]{name});
++    ObjectInstance result = mbs.createMBean(className, name);
++    doAuthorizationPost(name, CREATE_MBEAN, ctx, result);
++    return result;
+   }
+ 
+   @Override
+   public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName)
+       throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException,
+       NotCompliantMBeanException, InstanceNotFoundException {
 -    doAuthorization(name, "createMBean", new Object[]{name});
 -    return mbs.createMBean(className, name, loaderName);
++    ResourceOperationContext ctx = doAuthorization(name, CREATE_MBEAN, new Object[]{name});
++    ObjectInstance result = mbs.createMBean(className, name, loaderName);
++    doAuthorizationPost(name, CREATE_MBEAN, ctx, result);
++    return result;
+   }
+ 
+   @Override
+   public ObjectInstance createMBean(String className, ObjectName name, Object[] params, String[] signature)
+       throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException,
+       NotCompliantMBeanException {
 -    doAuthorization(name, "createMBean", new Object[]{name, params});
 -    return mbs.createMBean(className,name,params,signature);
++    ResourceOperationContext ctx = doAuthorization(name, CREATE_MBEAN, new Object[]{name, params});
++    ObjectInstance result = mbs.createMBean(className,name,params,signature);
++    doAuthorizationPost(name, CREATE_MBEAN, ctx, result);
++    return result;
+   }
+ 
+   @Override
+   public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName, Object[] params,
+       String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException,
+       MBeanException, NotCompliantMBeanException, InstanceNotFoundException {
 -    doAuthorization(name, "createMBean", new Object[]{name});
 -    return mbs.createMBean(className, name, loaderName, params, signature);
++    ResourceOperationContext ctx = doAuthorization(name, CREATE_MBEAN, new Object[]{name});
++    ObjectInstance result = mbs.createMBean(className, name, loaderName, params, signature);
++    doAuthorizationPost(name, CREATE_MBEAN, ctx, result);
++    return result;
+   }
+ 
+   @Override
+   public ObjectInstance registerMBean(Object object, ObjectName name) throws InstanceAlreadyExistsException,
+       MBeanRegistrationException, NotCompliantMBeanException {
 -    doAuthorization(name, "registerMBean", new Object[]{name});
 -    return mbs.registerMBean(object, name);
++    ResourceOperationContext ctx = doAuthorization(name, REGISTER_MBEAN, new Object[]{name});
++    ObjectInstance result = mbs.registerMBean(object, name);
++    doAuthorizationPost(name, REGISTER_MBEAN, ctx, result);
++    return result;
+   }
+ 
+   @Override
+   public void unregisterMBean(ObjectName name) throws InstanceNotFoundException, MBeanRegistrationException {
 -    doAuthorization(name, "registerMBean", new Object[]{});
++    ResourceOperationContext ctx = doAuthorization(name, UNREGISTER_MBEAN, new Object[]{});
+     mbs.unregisterMBean(name);
++    doAuthorizationPost(name, UNREGISTER_MBEAN, ctx, null);    
+   }
+ 
+   @Override
+   public ObjectInstance getObjectInstance(ObjectName name) throws InstanceNotFoundException {    
+     return mbs.getObjectInstance(name);
+   }
+ 
+   @Override
+   public Set<ObjectInstance> queryMBeans(ObjectName name, QueryExp query) {
 -    return mbs.queryMBeans(name, query);
++    return filterAccessControlMBeanInstance(mbs.queryMBeans(name, query));
++  }
++
++  private Set<ObjectInstance> filterAccessControlMBeanInstance(Set<ObjectInstance> queryMBeans) {
++    Set<ObjectInstance> set = new HashSet<ObjectInstance>();
++    for(ObjectInstance oi : queryMBeans) {
++      if(!oi.getObjectName().equals(interceptor.getAccessControlMBeanON())){
++        set.add(oi);
++      }
++    }
++    return set;
+   }
+ 
+   @Override
 -  public Set<ObjectName> queryNames(ObjectName name, QueryExp query) {
 -    return mbs.queryNames(name, query);
++  public Set<ObjectName> queryNames(ObjectName name, QueryExp query) {    
++    return filterAccessControlMBean(mbs.queryNames(name, query));
++  }
++
++  private Set<ObjectName> filterAccessControlMBean(Set<ObjectName> queryNames) {
++    Set<ObjectName> set = new HashSet<ObjectName>();
++    for(ObjectName oi : queryNames) {
++      if(!oi.equals(interceptor.getAccessControlMBeanON())){
++        set.add(oi);
++      }
++    }
++    return set;
+   }
+ 
+   @Override
+   public boolean isRegistered(ObjectName name) {
+     return mbs.isRegistered(name);
+   }
+ 
+   @Override
+   public Integer getMBeanCount() {    
+     return mbs.getMBeanCount();
+   }
+ 
+   @Override
+   public Object getAttribute(ObjectName name, String attribute) throws MBeanException, AttributeNotFoundException,
+       InstanceNotFoundException, ReflectionException {
 -    doAuthorization(name, "getAttribute",  new Object[]{attribute});
 -    return mbs.getAttribute(name, attribute);
++    ResourceOperationContext ctx = doAuthorization(name, GET_ATTRIBUTE,  new Object[]{attribute});
++    Object result = mbs.getAttribute(name, attribute);
++    doAuthorizationPost(name, GET_ATTRIBUTE, ctx, result);
++    return result;
+   }
+ 
+   @Override
+   public AttributeList getAttributes(ObjectName name, String[] attributes) throws InstanceNotFoundException,
+       ReflectionException {
 -    doAuthorization(name, "getAttributes", new Object[]{attributes});
 -    return mbs.getAttributes(name, attributes);
++    ResourceOperationContext ctx = doAuthorization(name, GET_ATTRIBUTES, new Object[]{attributes});
++    AttributeList result = mbs.getAttributes(name, attributes);
++    doAuthorizationPost(name,GET_ATTRIBUTES, ctx, result);
++    return result;
+   }
+ 
+   @Override
+   public void setAttribute(ObjectName name, Attribute attribute) throws InstanceNotFoundException,
+       AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
 -    doAuthorization(name, "setAttribute", new Object[]{attribute});
++    ResourceOperationContext ctx = doAuthorization(name, SET_ATTRIBUTE, new Object[]{attribute});
+     mbs.setAttribute(name, attribute);
++    doAuthorizationPost(name, SET_ATTRIBUTE, ctx, null);
+   }
+ 
+   @Override
+   public AttributeList setAttributes(ObjectName name, AttributeList attributes) throws InstanceNotFoundException,
+       ReflectionException {
 -    doAuthorization(name, "setAttributes", new Object[]{attributes});
 -    return mbs.setAttributes(name, attributes);
++    ResourceOperationContext ctx = doAuthorization(name, SET_ATTRIBUTES, new Object[]{attributes});
++    AttributeList result = mbs.setAttributes(name, attributes);
++    doAuthorizationPost(name, SET_ATTRIBUTES, ctx, result);
++    return result;
+   }
+ 
+   @Override
+   public Object invoke(ObjectName name, String operationName, Object[] params, String[] signature)
+       throws InstanceNotFoundException, MBeanException, ReflectionException {
 -    doAuthorization(name, operationName, new Object[]{params, signature});
 -    return mbs.invoke(name, operationName, params, signature);
++    ResourceOperationContext ctx = doAuthorization(name, operationName, new Object[]{params, signature});
++    Object result = mbs.invoke(name, operationName, params, signature);
++    doAuthorizationPost(name, operationName, ctx, result);
++    return result;
+   }
+ 
+   @Override
+   public String getDefaultDomain() {
+     return mbs.getDefaultDomain();
+   }
+ 
+   @Override
+   public String[] getDomains() {    
+     return mbs.getDomains();
+   }
+ 
+   @Override
+   public void addNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter,
+       Object handback) throws InstanceNotFoundException {
+     mbs.addNotificationListener(name, listener, filter, handback);
+   }
+ 
+   @Override
+   public void addNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback)
+       throws InstanceNotFoundException {
+     mbs.addNotificationListener(name, listener, filter, handback);
+   }
+ 
+   @Override
+   public void removeNotificationListener(ObjectName name, ObjectName listener) throws InstanceNotFoundException,
+       ListenerNotFoundException {
+     mbs.removeNotificationListener(name, listener);
+   }
+ 
+   @Override
+   public void removeNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter,
+       Object handback) throws InstanceNotFoundException, ListenerNotFoundException {
+     mbs.removeNotificationListener(name, listener, filter, handback);
+ 
+   }
+ 
+   @Override
+   public void removeNotificationListener(ObjectName name, NotificationListener listener)
+       throws InstanceNotFoundException, ListenerNotFoundException {
+     mbs.removeNotificationListener(name, listener);
+   }
+ 
+   @Override
+   public void removeNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter,
+       Object handback) throws InstanceNotFoundException, ListenerNotFoundException {    
+     mbs.removeNotificationListener(name, listener, filter, handback);
+   }
+ 
+   @Override
+   public MBeanInfo getMBeanInfo(ObjectName name) throws InstanceNotFoundException, IntrospectionException,
+       ReflectionException {
+     return mbs.getMBeanInfo(name);
+   }
+ 
+   @Override
+   public boolean isInstanceOf(ObjectName name, String className) throws InstanceNotFoundException {    
+     return mbs.isInstanceOf(name, className);
+   }
+ 
+   @Override
+   public Object instantiate(String className) throws ReflectionException, MBeanException {
+     return mbs.instantiate(className);
+   }
+ 
+   @Override
+   public Object instantiate(String className, ObjectName loaderName) throws ReflectionException, MBeanException,
+       InstanceNotFoundException {
+     return mbs.instantiate(className, loaderName);
+   }
+ 
+   @Override
+   public Object instantiate(String className, Object[] params, String[] signature) throws ReflectionException,
+       MBeanException {
+     return mbs.instantiate(className, params, signature);
+   }
+ 
+   @Override
+   public Object instantiate(String className, ObjectName loaderName, Object[] params, String[] signature)
+       throws ReflectionException, MBeanException, InstanceNotFoundException {
+     return mbs.instantiate(className, params, signature);
+   }
+ 
++  @SuppressWarnings("deprecation")
+   @Override
+   public ObjectInputStream deserialize(ObjectName name, byte[] data) throws InstanceNotFoundException,
+       OperationsException {
+     return mbs.deserialize(name, data);
+   }
+ 
+   @Override
+   public ObjectInputStream deserialize(String className, byte[] data) throws OperationsException, ReflectionException {    
+     return deserialize(className, data);
+   }
+ 
+   @SuppressWarnings("deprecation")
+   @Override
+   public ObjectInputStream deserialize(String className, ObjectName loaderName, byte[] data)
+       throws InstanceNotFoundException, OperationsException, ReflectionException {    
+     return mbs.deserialize(className, loaderName, data);
+   }
+ 
+   @Override
+   public ClassLoader getClassLoaderFor(ObjectName mbeanName) throws InstanceNotFoundException {
+     return mbs.getClassLoaderFor(mbeanName);
+   }
+ 
+   @Override
+   public ClassLoader getClassLoader(ObjectName loaderName) throws InstanceNotFoundException {
+     return mbs.getClassLoader(loaderName);
+   }
+ 
+   @Override
+   public ClassLoaderRepository getClassLoaderRepository() {    
+     return mbs.getClassLoaderRepository();
+   }
+ 
+   @Override
+   public MBeanServer getMBeanServer() {    
+     return mbs;
+   }
+ 
+   @Override
+   public void setMBeanServer(MBeanServer mbs) {
+     this.mbs = mbs;
+   }
+ 
+ }
++

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ManagementInterceptor.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ManagementInterceptor.java
index 0000000,c4e7dc5..aa5d194
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ManagementInterceptor.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ManagementInterceptor.java
@@@ -1,0 -1,271 +1,385 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.ACCESS_DENIED_MESSAGE;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.GET_ATTRIBUTE;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.GET_ATTRIBUTES;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.GET_PREFIX;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.PASSWORD;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.PROCESS_COMMAND;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.SET_ATTRIBUTE;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.SET_ATTRIBUTES;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.SET_PREFIX;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.USER_NAME;
++import static com.gemstone.gemfire.management.internal.security.ResourceConstants.WRONGE_CREDENTIALS_MESSAGE;
++
+ import java.lang.management.ManagementFactory;
++import java.lang.reflect.Method;
+ import java.security.AccessControlContext;
+ import java.security.AccessController;
+ import java.security.Principal;
+ import java.util.Collections;
++import java.util.List;
++import java.util.Map.Entry;
+ import java.util.Properties;
+ import java.util.Set;
++import java.util.concurrent.ConcurrentHashMap;
++import java.util.concurrent.ConcurrentMap;
+ 
++import javax.management.Attribute;
++import javax.management.AttributeList;
+ import javax.management.InstanceAlreadyExistsException;
+ import javax.management.MBeanRegistrationException;
+ import javax.management.MBeanServer;
+ import javax.management.MalformedObjectNameException;
+ import javax.management.NotCompliantMBeanException;
+ import javax.management.ObjectName;
+ import javax.management.remote.JMXAuthenticator;
+ import javax.management.remote.JMXPrincipal;
+ import javax.management.remote.MBeanServerForwarder;
+ import javax.security.auth.Subject;
+ 
+ import org.apache.logging.log4j.Logger;
+ 
+ import com.gemstone.gemfire.GemFireConfigException;
 -import com.gemstone.gemfire.internal.logging.LogService;
++import com.gemstone.gemfire.cache.Cache;
++import com.gemstone.gemfire.distributed.DistributedSystem;
++import com.gemstone.gemfire.distributed.internal.DistributionConfig;
++import com.gemstone.gemfire.internal.ClassLoadUtil;
++import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
++import com.gemstone.gemfire.internal.lang.StringUtils;
++import com.gemstone.gemfire.internal.logging.InternalLogWriter;
++import com.gemstone.gemfire.management.internal.ManagementConstants;
+ import com.gemstone.gemfire.security.AccessControl;
++import com.gemstone.gemfire.security.AuthenticationFailedException;
+ import com.gemstone.gemfire.security.Authenticator;
+ 
 -@SuppressWarnings("rawtypes")
++/**
++ * 
++ * ManagementInterceptor is central go-to place for all M&M Clients Authentication and Authorization
++ * requests
++ * 
++ * @author tushark
++ * @since 9.0
++ * 
++ */
+ public class ManagementInterceptor implements JMXAuthenticator {
+ 
 -	public static final String USER_NAME = "security-username";
 -	public static final String PASSWORD = "security-password";
 -	public static final String OBJECT_NAME_ACCESSCONTROL = "GemFire:service=AccessControl,type=Distributed";
 -	private MBeanServerWrapper mBeanServerForwarder;
 -	private Logger logger;  
++  // FIXME: Merged from GEODE-17. Are they necessary?
++  public static final String USER_NAME = "security-username";
++  public static final String PASSWORD = "security-password";
++  public static final String OBJECT_NAME_ACCESSCONTROL = "GemFire:service=AccessControl,type=Distributed";
+ 
 -	public ManagementInterceptor(Logger logger) {
 -		this.logger = logger;		
 -		this.mBeanServerForwarder = new MBeanServerWrapper(this);
 -		registerAccessContorlMbean();
 -		LogService.getLogger().info("Starting management interceptor");
 -	}
++  private MBeanServerWrapper mBeanServerForwarder;
++  private Logger logger;
++  private ObjectName accessControlMBeanON;
++  private Cache cache;
++  private String authzFactoryName;
++  private String postAuthzFactoryName;
++  private String authenticatorFactoryName;
++  private ConcurrentMap<Principal, AccessControl> cachedAuthZCallback;
++  private ConcurrentMap<Principal, AccessControl> cachedPostAuthZCallback;
++
++  public ManagementInterceptor(Cache gemFireCacheImpl, Logger logger) {
++    this.cache = gemFireCacheImpl;
++    this.logger = logger;
++    this.mBeanServerForwarder = new MBeanServerWrapper(this);
++    DistributedSystem system = cache.getDistributedSystem();
++    Properties sysProps = system.getProperties();
++    this.authzFactoryName = sysProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME);
++    this.postAuthzFactoryName = sysProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_PP_NAME);
++    this.authenticatorFactoryName = sysProps.getProperty(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME);
++    this.cachedAuthZCallback = new ConcurrentHashMap<Principal, AccessControl>();
++    this.cachedPostAuthZCallback = new ConcurrentHashMap<Principal, AccessControl>();
++    registerAccessContorlMbean();
++    logger.info("Started Management interceptor on JMX connector");
++  }
+ 
 -	private void registerAccessContorlMbean() {    
++  /**
++   * This method registers an AccessControlMBean which allows any remote JMX Client (for example Pulse) to check for
++   * access allowed for given Operation Code.
++   */
++  private void registerAccessContorlMbean() {
+     try {
 -      com.gemstone.gemfire.management.internal.security.AccessControl acc = new com.gemstone.gemfire.management.internal.security.AccessControl(this);
 -      ObjectName name = new ObjectName(OBJECT_NAME_ACCESSCONTROL);
++      com.gemstone.gemfire.management.internal.security.AccessControl acc = new com.gemstone.gemfire.management.internal.security.AccessControl(
++          this);
++      accessControlMBeanON = new ObjectName(ResourceConstants.OBJECT_NAME_ACCESSCONTROL);
+       MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
 -      Set<ObjectName> names = platformMBeanServer.queryNames(name, null);
 -      if(names.isEmpty()) {
++      Set<ObjectName> names = platformMBeanServer.queryNames(accessControlMBeanON, null);
++      if (names.isEmpty()) {
+         try {
 -          platformMBeanServer.registerMBean(acc, name);
 -          logger.info("Registered AccessContorlMBean on " + name);
++          platformMBeanServer.registerMBean(acc, accessControlMBeanON);
++          logger.info("Registered AccessContorlMBean on " + accessControlMBeanON);
+         } catch (InstanceAlreadyExistsException e) {
 -          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource",e);
++          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
+         } catch (MBeanRegistrationException e) {
 -          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource",e);
++          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
+         } catch (NotCompliantMBeanException e) {
 -          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource",e);
++          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
+         }
+       }
 -    } catch (MalformedObjectNameException e) {      
 -      e.printStackTrace();
++    } catch (MalformedObjectNameException e) {
++      throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
+     }
+   }
+ 
++  /**
++   * Delegates authentication to GemFire Authenticator
++   * 
++   * @throws SecurityException
++   *           if authentication fails
++   */
+   @Override
 -	public Subject authenticate(Object credentials) {
 -		String username = null, password = null;
 -		if (!(credentials instanceof String[])) {
 -			// Special case for null so we get a more informative message
 -			if (credentials == null) {
 -				// throw new SecurityException("Credentials required");
 -				username = "empty";
 -				password = "emptypwd";
 -			}
 -			// throw new SecurityException("Credentials should be String[]");
 -			username = "empty";
 -			password = "emptypwd";
 -			
 -			//TODO ***** Remove empty stuff
 -			
 -		} else {
 -			final String[] aCredentials = (String[]) credentials;
 -			username = (String) aCredentials[0];
 -			password = (String) aCredentials[1];
 -		}
++  public Subject authenticate(Object credentials) {    
++    String username = null, password = null;
++    Properties pr = new Properties();
++    if (credentials instanceof String[]) {
++      final String[] aCredentials = (String[]) credentials;
++      username = (String) aCredentials[0];
++      password = (String) aCredentials[1];
++      pr.put(USER_NAME, username);
++      pr.put(PASSWORD, password);
++    } else if (credentials instanceof Properties) {
++      pr = (Properties) credentials;
++    } else {
++      throw new SecurityException(WRONGE_CREDENTIALS_MESSAGE);
++    }
++    
++    try {
++      Principal principal = getAuthenticator(cache.getDistributedSystem().getSecurityProperties()).authenticate(pr,
++          cache.getDistributedSystem().getDistributedMember());
++      return new Subject(true, Collections.singleton(new JMXPrincipal(principal.getName())), Collections.EMPTY_SET,
++          Collections.EMPTY_SET);
++    } catch (AuthenticationFailedException e) {
++      //wrap inside Security exception. AuthenticationFailedException is gemfire class
++      //which generic JMX client can't serialize
++      throw new SecurityException("Authentication Failed " + e.getMessage());
++    }
++    
++  }
+ 
 -		Properties pr = new Properties();
 -		pr.put(USER_NAME, username);
 -		pr.put(PASSWORD, password);
 -		getAuthenticator(pr).authenticate(pr, null);
 -		return new Subject(true, Collections.singleton(new JMXPrincipal(username)), Collections.EMPTY_SET,
 -			    Collections.EMPTY_SET);
 -	}
++  /**
++   * Builds ResourceOperationContext for the given JMX MBean Request for delegates Authorization to
++   * gemfire AccessControl plugin with context as parameter
++   * 
++   * 
++   * @param name
++   * @param methodName
++   * @param params
++   * 
++   * @throws SecurityException
++   *           if access is not granted
++   */
++  public ResourceOperationContext authorize(ObjectName name, final String methodName, Object[] params) {
++    
++    if (StringUtils.isBlank(authzFactoryName)){
++      return com.gemstone.gemfire.management.internal.security.AccessControlContext.ACCESS_GRANTED_CONTEXT;
++    }
+ 
 -	@SuppressWarnings("unchecked")
 -	public void authorize(ObjectName name, final String methodName, Object[] params) {
 -	  
 -    try {
 -      ObjectName accessControlMBean = new ObjectName(OBJECT_NAME_ACCESSCONTROL);
 -      if (name.equals(accessControlMBean)) {
 -        logger.info("Granting access to accessContorlMXBean.. name="+name);
 -        return;
 -      }
 -    } catch (MalformedObjectNameException e) {
 -      // TODO Auto-generated catch block
 -      // e.printStackTrace();
++    if (name.equals(accessControlMBeanON)) {
++      return com.gemstone.gemfire.management.internal.security.AccessControlContext.ACCESS_GRANTED_CONTEXT;
+     }
 -	  
 -	  
 -	  //Only apply for gemfire domain
 -	  String domain = name.getDomain();
 -	  if(!"GemFire".equals(domain))
 -	    return;
 -	  
 -		// Retrieve Subject from current AccessControlContext
 -		AccessControlContext acc = AccessController.getContext();		
 -		Subject subject = Subject.getSubject(acc);
 -		// Allow operations performed locally on behalf of the connector server
 -		// itself
 -		if (subject == null) {
 -			return;
 -		}
+ 
 -		// Restrict access to "createMBean" and "unregisterMBean" to any user
 -		if (methodName.equals("createMBean")
 -				|| methodName.equals("unregisterMBean")) {
 -			throw new SecurityException("Access denied");
 -		}
++    if (!ManagementConstants.OBJECTNAME__DEFAULTDOMAIN.equals(name.getDomain()))
++      return com.gemstone.gemfire.management.internal.security.AccessControlContext.ACCESS_GRANTED_CONTEXT;
+ 
 -		// Retrieve JMXPrincipal from Subject
 -		Set<JMXPrincipal> principals = subject
 -				.getPrincipals(JMXPrincipal.class);
 -		Set<Object> pubCredentials = subject.getPublicCredentials();
 -		
 -		/*System.out.println("JMXPrincipal " + principals);
 -		System.out.println("Principals " + subject.getPrincipals());
 -		System.out.println("PubCredentials " + subject.getPublicCredentials());*/
 -		//add condition -> check if accessor is configured
 -		if (principals == null || principals.isEmpty()
 -				/*|| pubCredentials.size() < 1 */) {
 -			throw new SecurityException("Access denied");
 -		}		
 -	
 -		Principal principal = principals.iterator().next();
 -		
 -		//Give read access globally : TODO : Need to change this to map to proper getter
 -		LogService.getLogger().info("Name=" + name + " methodName=" +  methodName + " principal="+ principal.getName());
 -		if("getAttribute".equals(methodName) || "getAttributes".equals(methodName))
 -			return;	
 -		
 -		//TODO : if method=getAttributes params is directly availalbe
 -		//TODO : if method is operation then params is array array[0] = actual params, array[1]= signature
 -		
 -		ResourceOperationContext resourceContext = buildContext(name,methodName, params);		
 -		boolean authorized = getAccessControl(principal).authorizeOperation(null, resourceContext);
 -		LogService.getLogger().info("Name=" + name + " methodName=" +  methodName 
 -		    + " result="+authorized + " principal="+ principal.getName());
 -		if(!authorized)
 -			throw new SecurityException("Access denied");
 -	}
++    AccessControlContext acc = AccessController.getContext();
++    Subject subject = Subject.getSubject(acc);
++    
++    // Allow operations performed locally on behalf of the connector server itself
++    if (subject == null) {
++      return com.gemstone.gemfire.management.internal.security.AccessControlContext.ACCESS_GRANTED_CONTEXT;
++    }
+ 
 -	public MBeanServerForwarder getMBeanServerForwarder() {
 -		return mBeanServerForwarder;
 -	}
++    if (methodName.equals(ResourceConstants.CREATE_MBEAN) || methodName.equals(ResourceConstants.UNREGISTER_MBEAN)) {
++      throw new SecurityException(ACCESS_DENIED_MESSAGE);
++    }
+ 
 -	private static Class accessControlKlass = null;
 -	
 -	public AccessControl getAccessControl(Principal principal) {
 -		if(accessControlKlass==null) {
 -			String authorizeKlass = System.getProperty(ResourceConstants.RESORUCE_AUTH_ACCESSOR);
 -			try {
 -				accessControlKlass = Class.forName(authorizeKlass);
 -			} catch (ClassNotFoundException e) {
 -			  logger.error(e);
 -				throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource",e);
 -			}
 -		}
 -		
 -		try {
 -			AccessControl accessControl = (AccessControl) accessControlKlass.newInstance();
 -			accessControl.init(principal, null, null); //TODO pass proper params
 -			LogService.getLogger().info("Returning resource accessControl");
 -			return accessControl;
 -		} catch (InstantiationException e) {
 -		  logger.error(e);
 -			throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource",e);
 -		} catch (IllegalAccessException e) {
 -		  logger.error(e);
 -			throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource",e);
 -		}
 -	}
++    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
+ 
 -	private static Class authenticatorClass = null;
 -	private Authenticator getAuthenticator(Properties pr) {
 -		if(authenticatorClass==null) {
 -			String authenticatorKlass = System.getProperty(ResourceConstants.RESORUCE_AUTHENTICATOR);
 -			try {
 -				authenticatorClass = Class.forName(authenticatorKlass);
 -			} catch (ClassNotFoundException e) {	
 -			  logger.error(e);
 -				throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource",e);
 -			}
 -		}
 -		
 -		try {
 -			Authenticator authenticator = (Authenticator) authenticatorClass.newInstance();
 -			authenticator.init(pr, null, null); //TODO pass proper params
 -			LogService.getLogger().info("Returning resource authenticator " + authenticator);
 -			return authenticator;
 -		} catch (InstantiationException e) {
 -		  logger.error(e);
 -			throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource",e);
 -		} catch (IllegalAccessException e) {
 -		  logger.error(e);
 -			throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource",e);
 -		}
 -	}
++    if (principals == null || principals.isEmpty()) {
++      throw new SecurityException(ACCESS_DENIED_MESSAGE);
++    }
+ 
 -  private ResourceOperationContext buildContext(ObjectName name, String methodName, Object[] params) {
 -    if (params != null) {
 -      LogService.getLogger().info("Params length=" + params.length);
 -      for (int i = 0; i < params.length; i++) {
 -        LogService.getLogger().info("Params[" + i + "] is " + arrayString(params[i]));
++    Principal principal = principals.iterator().next();
++
++    
++    if (logger.isDebugEnabled()) {
++      logger.debug("Name=" + name + " methodName=" + methodName + " principal=" + principal.getName());
++    }
++
++    AccessControl accessControl = getAccessControl(principal, false);
++    String method = methodName;
++    if (methodName.equals(GET_ATTRIBUTE)) {
++      method = GET_PREFIX + (String) params[0];
++    } else if(methodName.equals(GET_ATTRIBUTES)) {
++      //Pass to first attribute getter
++      String[] attrs = (String[]) params[0];
++      method = GET_PREFIX + attrs[0];
++    } else if(methodName.equals(SET_ATTRIBUTE)) {
++      Attribute attribute = (Attribute) params[0];
++      method = SET_PREFIX + attribute.getName();
++    }    
++    
++    if (methodName.equals(SET_ATTRIBUTES)) {
++      AttributeList attrList = (AttributeList) params[0];
++      List<Attribute> list = attrList.asList();
++      ResourceOperationContext setterContext = null;
++      SetAttributesOperationContext resourceContext = new SetAttributesOperationContext();      
++      for(int i=0;i<list.size();i++) {
++        Attribute attribute = list.get(i);
++        String setter = SET_PREFIX + attribute.getName();
++        setterContext = buildContext(name,setter,null);
++        boolean authorized = accessControl.authorizeOperation(null, setterContext);
++        if (logger.isDebugEnabled()) {
++          logger.debug("Name=" + name + " methodName=" + methodName + " result=" + authorized + " principal="
++              + principal.getName());
++        }
++        if (!authorized)
++          throw new SecurityException(ACCESS_DENIED_MESSAGE);
++        else
++          resourceContext.addAttribute(attribute.getName(), setterContext);
++      }
++      return resourceContext;
++    } else {
++      ResourceOperationContext resourceContext = buildContext(name, method, params);
++      boolean authorized = accessControl.authorizeOperation(null, resourceContext);
++      if (logger.isDebugEnabled()) {
++        logger.debug("Name=" + name + " methodName=" + methodName + " result=" + authorized + " principal="
++            + principal.getName());
++      }
++
++      if (!authorized)
++        throw new SecurityException(ACCESS_DENIED_MESSAGE);
++      return resourceContext;
++    }
++  }
++
++  public MBeanServerForwarder getMBeanServerForwarder() {
++    return mBeanServerForwarder;
++  }
++
++  public AccessControl getAccessControl(Principal principal, boolean isPost) {
++    if (!isPost) {
++      if (cachedAuthZCallback.containsKey(principal)) {
++        return cachedAuthZCallback.get(principal);
++      } else if (!StringUtils.isBlank(authzFactoryName)) {
++        try {
++          Method authzMethod = ClassLoadUtil.methodFromName(authzFactoryName);
++          AccessControl authzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
++          authzCallback.init(principal, null, cache);          
++          cachedAuthZCallback.put(principal, authzCallback);
++          return authzCallback;
++        } catch (Exception ex) {
++          throw new AuthenticationFailedException(
++              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
++        }
++      }
++    } else {
++      if (cachedPostAuthZCallback.containsKey(principal)) {
++        return cachedPostAuthZCallback.get(principal);
++      } else if (!StringUtils.isBlank(postAuthzFactoryName)) {
++        try {
++          Method authzMethod = ClassLoadUtil.methodFromName(postAuthzFactoryName);
++          AccessControl postAuthzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
++          postAuthzCallback.init(principal, null, cache);
++          cachedPostAuthZCallback.put(principal, postAuthzCallback);
++          return postAuthzCallback;
++        } catch (Exception ex) {
++          throw new AuthenticationFailedException(
++              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
++        }
+       }
+     }
++    return null;
++  }
+ 
++  private Authenticator getAuthenticator(Properties gfSecurityProperties) throws AuthenticationFailedException {
++    Authenticator auth;
++    try {
++      Method instanceGetter = ClassLoadUtil.methodFromName(this.authenticatorFactoryName);
++      auth = (Authenticator) instanceGetter.invoke(null, (Object[]) null);
++    } catch (Exception ex) {
++      throw new AuthenticationFailedException(
++          LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
++    }
++    if (auth == null) {
++      throw new AuthenticationFailedException(
++          LocalizedStrings.HandShake_AUTHENTICATOR_INSTANCE_COULD_NOT_BE_OBTAINED.toLocalizedString());
++    }
++    auth.init(gfSecurityProperties,(InternalLogWriter) this.cache.getLogger(), (InternalLogWriter) this.cache.getSecurityLogger());
++    return auth;
++  }
++
++  private ResourceOperationContext buildContext(ObjectName name, String methodName, Object[] params) {
+     String service = name.getKeyProperty("service");
 -    // only member mbean does not have service KeyProperty
 -    if (service == null && "processCommand".equals(methodName)) {
++    if (service == null && PROCESS_COMMAND.equals(methodName)) {
+       Object[] array = (Object[]) params[0];
+       String command = (String) array[0];
 -      CLIOperationContext context = new CLIOperationContext(command);      
 -      LogService.getLogger().info("Returning CLIContext for " + methodName);
++      CLIOperationContext context = new CLIOperationContext(command);
+       return context;
 -    } else {
++    } else {      
+       ResourceOperationContext context = new JMXOperationContext(name, methodName);
 -      LogService.getLogger().info("Returning JMXOperationContext for " + methodName);
+       return context;
+     }
+   }
+ 
 -  private String arrayString(Object object) {
 -    StringBuilder sb = new StringBuilder();
 -    if (object instanceof Object[]) {
 -      Object[] array = (Object[]) object;
 -      for (Object a : array)
 -        sb.append(a).append(" ");
++  public ObjectName getAccessControlMBeanON() {
++    return accessControlMBeanON;
++  }
++
++  public void postAuthorize(ObjectName name, final String methodName, ResourceOperationContext context, Object result) {
++    
++    if (StringUtils.isBlank(postAuthzFactoryName)){
++      return ;
++    }
++    
++    context.setPostOperationResult(result);
++
++    if (context.equals(com.gemstone.gemfire.management.internal.security.AccessControlContext.ACCESS_GRANTED_CONTEXT))
++      return;
++
++    AccessControlContext acc = AccessController.getContext();
++    Subject subject = Subject.getSubject(acc);
++    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
++    if (principals == null || principals.isEmpty()) {
++      throw new SecurityException(ACCESS_DENIED_MESSAGE);
++    }
++    Principal principal = principals.iterator().next();
++    AccessControl accessControl = getAccessControl(principal, true);
++    if (context instanceof SetAttributesOperationContext) {
++      SetAttributesOperationContext setterContext = (SetAttributesOperationContext) context;
++      for (Entry<String, ResourceOperationContext> e : setterContext.getAttributesContextMap().entrySet()) {
++        //TODO : Retrieve proper values from AttributeList and set to its jmxContext
++        e.getValue().setPostOperationResult(result);
++        boolean authorized = accessControl.authorizeOperation(null, e.getValue());
++        if (!authorized)
++          throw new SecurityException(ACCESS_DENIED_MESSAGE);
++      }
++    } else {
++      boolean authorized = accessControl.authorizeOperation(null, context);
++      if (logger.isDebugEnabled()) {
++        logger.debug("postAuthorize: Name=" + name + " methodName=" + methodName + " result=" + authorized
++            + " principal=" + principal.getName());
++      }
++      if (!authorized)
++        throw new SecurityException(ACCESS_DENIED_MESSAGE);
+     }
 -    return sb.toString();
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/Resource.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/Resource.java
index 0000000,5a47c07..d6252d5
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/Resource.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/Resource.java
@@@ -1,0 -1,26 +1,33 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management.internal.security;
+ 
++/**
++ * 
++ * @author tushark
++ *
++ * @since 9.0
++ */
+ public enum Resource {
+   DISTRIBUTED_SYSTEM,
+   MEMBER,
+   REGION,
+   DISKSTORE,
+   GATEWAY_SENDER,
 -  GATEWAT_LISTENER,  
++  GATEWAY_RECEIVER,  
+ }
++


[44/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

Posted by je...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java
index 0000000,312472b..9ea8459
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java
@@@ -1,0 -1,757 +1,769 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.internal.security;
+ 
+ import java.io.Serializable;
+ import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ import java.security.Principal;
+ import java.util.Collection;
+ import java.util.HashSet;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.InterestResultPolicy;
+ import com.gemstone.gemfire.cache.operations.*;
+ import com.gemstone.gemfire.cache.operations.internal.GetOperationContextImpl;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.i18n.LogWriterI18n;
+ import com.gemstone.gemfire.internal.ClassLoadUtil;
+ import com.gemstone.gemfire.internal.cache.operations.ContainsKeyOperationContext;
+ import com.gemstone.gemfire.internal.cache.tier.sockets.ClientProxyMembershipID;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.security.AccessControl;
+ import com.gemstone.gemfire.security.NotAuthorizedException;
+ 
+ /**
+  * This class implements authorization calls for various operations. It provides
+  * methods to invoke authorization callback ({@link AccessControl#authorizeOperation})
+  * before the actual operation to check for authorization (pre-processing) that
+  * may modify the arguments to the operations. The data being passed for the
+  * operation is encapsulated in a {@link OperationContext} object that can be
+  * modified by the pre-processing authorization callbacks.
+  * 
+  * @author Sumedh Wale
+  * @since 5.5
+  */
+ public class AuthorizeRequest {
+ 
+   private AccessControl authzCallback;
+ 
+   private final Principal principal;
+ 
+   private boolean isPrincipalSerializable;
+ 
+   private ClientProxyMembershipID id; 
+ 
+   private final LogWriterI18n logger;
+ 
+   public AuthorizeRequest(String authzFactoryName, DistributedMember dm,
+       Principal principal, Cache cache) throws ClassNotFoundException,
+       NoSuchMethodException, IllegalAccessException, InvocationTargetException,
+       NotAuthorizedException {
+ 
+     this.principal = principal;
+     if (this.principal instanceof Serializable) {
+       this.isPrincipalSerializable = true;
+     }
+     else {
+       this.isPrincipalSerializable = false;
+     }
+ 
+     this.logger = cache.getSecurityLoggerI18n();
+     Method authzMethod = ClassLoadUtil.methodFromName(authzFactoryName);
+     this.authzCallback = (AccessControl)authzMethod
+         .invoke(null, (Object[])null);
+     this.authzCallback.init(principal, dm, cache);  
+     this.id = null;
+   }
+   
+   public AuthorizeRequest(String authzFactoryName, ClientProxyMembershipID id,
+       Principal principal, Cache cache) throws ClassNotFoundException,
+       NoSuchMethodException, IllegalAccessException, InvocationTargetException,
+       NotAuthorizedException {
+     this(authzFactoryName, id.getDistributedMember(), principal, cache);
+     this.id = id; 
+     if (this.logger.infoEnabled()) {
+       this.logger.info(
+         LocalizedStrings.AuthorizeRequest_AUTHORIZEREQUEST_CLIENT_0_IS_SETTING_AUTHORIZATION_CALLBACK_TO_1,
+         new Object[] {id, authzFactoryName});
+     }
+   }
+  
+   public AccessControl getAuthzCallback() {
+ 
+     return this.authzCallback;
+   }
+ 
++  public Principal getPrincipal() {
++    return principal;
++  }
++
++  public boolean isPrincipalSerializable() {
++    return isPrincipalSerializable;
++  }
++
++  public LogWriterI18n getLogger() {
++    return logger;
++  }
++  
+   public GetOperationContext getAuthorize(String regionName, Object key,
+       Object callbackArg) throws NotAuthorizedException {
+ 
+     GetOperationContext getContext = new GetOperationContextImpl(key, false);
+     getContext.setCallbackArg(callbackArg);
+     if (!this.authzCallback.authorizeOperation(regionName, getContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_GET_OPERATION_ON_REGION_0.toLocalizedString(regionName);
+       if (this.logger.fineEnabled()) {
+         this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr}); 
+       }
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform GET operation on region [" + regionName
+             + ']');
+       }
+     }
+     return getContext;
+   }
+ 
+   public PutOperationContext putAuthorize(String regionName, Object key,
+       Object value, boolean isObject, Object callbackArg)
+       throws NotAuthorizedException {
+ 
+     return putAuthorize(regionName, key, value, isObject,
+         callbackArg, PutOperationContext.UNKNOWN);
+   }
+ 
+   public PutOperationContext putAuthorize(String regionName, Object key,
+       Object value, boolean isObject, Object callbackArg, byte opType)
+       throws NotAuthorizedException {
+     
+     PutOperationContext putContext = new PutOperationContext(key,
+         value, isObject, opType, false);    
+     putContext.setCallbackArg(callbackArg);
+     if (!this.authzCallback.authorizeOperation(regionName, putContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_PUT_OPERATION_ON_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform PUT operation on region [" + regionName
+             + ']');
+       }
+     }
+     return putContext;
+   }
+ 
+   public PutAllOperationContext putAllAuthorize(String regionName, Map map, Object callbackArg)
+   throws NotAuthorizedException {
+     PutAllOperationContext putAllContext = new PutAllOperationContext(map);
+     putAllContext.setCallbackArg(callbackArg);
+     if (!this.authzCallback.authorizeOperation(regionName, putAllContext)) {
+       final String errStr = 
+         LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_PUTALL_OPERATION_ON_REGION_0.toLocalizedString(regionName);
+       if (this.logger.warningEnabled()) {
+         this.logger.warning(LocalizedStrings.TWO_ARG_COLON, new Object[] {this, errStr});
+       }
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       } else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform PUTALL operation on region [" + regionName
+             + ']');
+       }
+       
+       // now since we've authorized to run PUTALL, we also need to verify all the 
+       // <key,value> are authorized to run PUT
+       /* According to Jags and Suds, we will not auth PUT for PUTALL for now
+        * We will only do auth once for each operation, i.e. PUTALL only
+       Collection entries = map.entrySet();
+       Iterator iterator = entries.iterator();
+       Map.Entry mapEntry = null;
+       while (iterator.hasNext()) {
+         mapEntry = (Map.Entry)iterator.next();
+         String currkey = (String)mapEntry.getKey();
+         Object value = mapEntry.getValue();
+         boolean isObject = true;
+         if (value instanceof byte[]) {
+           isObject = false;
+         }
+         byte[] serializedValue = ((CachedDeserializable)value).getSerializedValue();
+ 
+         PutOperationContext putContext = new PutOperationContext(currkey,
+             serializedValue, isObject, PutOperationContext.UNKNOWN, false);
+         putContext.setCallbackArg(null);
+         if (!this.authzCallback.authorizeOperation(regionName, putContext)) {
+           String errStr = "Not authorized to perform PUT operation on region ["
+               + regionName + ']' + " for key "+currkey +". PUTALL is not authorized either.";
+           if (this.logger.warningEnabled()) {
+             this.logger.warning(toString() + ": " + errStr);
+           }
+           if (this.isPrincipalSerializable) {
+             throw new NotAuthorizedException(errStr, this.principal);
+           }
+           else {
+             throw new NotAuthorizedException(errStr);
+           }
+         } else {
+           if (this.logger.finestEnabled()) {
+             this.logger.finest(toString()
+                 + ": PUT is authorized in PUTALL for "+currkey+" isObject("+isObject+") on region ["
+                 + regionName + ']');
+           }
+         }
+       } // while iterating map
+       */
+     }
+     return putAllContext;
+   }
+   
+   public RemoveAllOperationContext removeAllAuthorize(String regionName, Collection<?> keys, Object callbackArg)
+   throws NotAuthorizedException {
+     RemoveAllOperationContext removeAllContext = new RemoveAllOperationContext(keys);
+     removeAllContext.setCallbackArg(callbackArg);
+     if (!this.authzCallback.authorizeOperation(regionName, removeAllContext)) {
+       final String errStr = 
+         LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_REMOVEALL_OPERATION_ON_REGION_0.toLocalizedString(regionName);
+       if (this.logger.warningEnabled()) {
+         this.logger.warning(LocalizedStrings.TWO_ARG_COLON, new Object[] {this, errStr});
+       }
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       } else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform removeAll operation on region [" + regionName
+             + ']');
+       }
+     }
+     return removeAllContext;
+   }
+   public DestroyOperationContext destroyAuthorize(String regionName,
+       Object key, Object callbackArg) throws NotAuthorizedException {
+ 
+     DestroyOperationContext destroyEntryContext = new DestroyOperationContext(
+         key);
+     destroyEntryContext.setCallbackArg(callbackArg);
+     if (!this.authzCallback.authorizeOperation(regionName, destroyEntryContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_DESTROY_OPERATION_ON_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform DESTROY operation on region ["
+             + regionName + ']');
+       }
+     }
+     return destroyEntryContext;
+   }
+ 
+   public QueryOperationContext queryAuthorize(String queryString,
+       Set regionNames) throws NotAuthorizedException {
+     return queryAuthorize(queryString, regionNames, null);
+   }
+   
+   public QueryOperationContext queryAuthorize(String queryString,
+       Set regionNames, Object[] queryParams) throws NotAuthorizedException {
+ 
+     if (regionNames == null) {
+       regionNames = new HashSet();
+     }
+     QueryOperationContext queryContext = new QueryOperationContext(queryString,
+         regionNames, false, queryParams);
+     if (!this.authzCallback.authorizeOperation(null, queryContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFOM_QUERY_OPERATION_0_ON_THE_CACHE.toLocalizedString(queryString);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform QUERY operation [" + queryString
+             + "] on cache");
+       }
+     }
+     return queryContext;
+   }
+ 
+   public ExecuteCQOperationContext executeCQAuthorize(String cqName,
+       String queryString, Set regionNames) throws NotAuthorizedException {
+ 
+     if (regionNames == null) {
+       regionNames = new HashSet();
+     }
+     ExecuteCQOperationContext executeCQContext = new ExecuteCQOperationContext(
+         cqName, queryString, regionNames, false);
+     if (!this.authzCallback.authorizeOperation(null, executeCQContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFOM_EXECUTE_CQ_OPERATION_0_ON_THE_CACHE.toLocalizedString(queryString);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform EXECUTE_CQ operation [" + queryString
+             + "] on cache");
+       }
+     }
+     return executeCQContext;
+   }
+ 
+   public void stopCQAuthorize(String cqName, String queryString, Set regionNames)
+       throws NotAuthorizedException {
+ 
+     StopCQOperationContext stopCQContext = new StopCQOperationContext(cqName,
+         queryString, regionNames);
+     if (!this.authzCallback.authorizeOperation(null, stopCQContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFOM_STOP_CQ_OPERATION_0_ON_THE_CACHE.toLocalizedString(cqName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform STOP_CQ operation [" + cqName + ','
+             + queryString + "] on cache");
+       }
+     }
+   }
+ 
+   public void closeCQAuthorize(String cqName, String queryString,
+       Set regionNames) throws NotAuthorizedException {
+ 
+     CloseCQOperationContext closeCQContext = new CloseCQOperationContext(
+         cqName, queryString, regionNames);
+     if (!this.authzCallback.authorizeOperation(null, closeCQContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFOM_CLOSE_CQ_OPERATION_0_ON_THE_CACHE.toLocalizedString(cqName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform CLOSE_CQ operation [" + cqName + ','
+             + queryString + "] on cache");
+       }
+     }
+   }
+ 
+   public void getDurableCQsAuthorize()
+       throws NotAuthorizedException {
+ 
+     GetDurableCQsOperationContext getDurableCQsContext = new GetDurableCQsOperationContext();
+     if (!this.authzCallback.authorizeOperation(null, getDurableCQsContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_GET_DURABLE_CQS_OPERATION_0_ON_THE_CACHE.toLocalizedString();
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform GET_DURABLE_CQS operation on cache");
+       }
+     }
+   }
+   
+   public RegionClearOperationContext clearAuthorize(String regionName,
+       Object callbackArg) throws NotAuthorizedException {
+ 
+     RegionClearOperationContext regionClearContext = new RegionClearOperationContext(
+         false);
+     regionClearContext.setCallbackArg(callbackArg);
+     if (!this.authzCallback.authorizeOperation(regionName, regionClearContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_REGION_CLEAR_OPERATION_ON_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform REGION_CLEAR operation on region ["
+             + regionName + ']');
+       }
+     }
+     return regionClearContext;
+   }
+ 
+   public RegisterInterestOperationContext registerInterestAuthorize(
+       String regionName, Object key, int interestType,
+       InterestResultPolicy policy) throws NotAuthorizedException {
+ 
+     RegisterInterestOperationContext registerInterestContext = new RegisterInterestOperationContext(
+         key, InterestType.fromOrdinal((byte)interestType), policy);
+     if (!this.authzCallback.authorizeOperation(regionName,
+         registerInterestContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_REGISTER_INTEREST_OPERATION_FOR_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger
+             .finest(toString()
+                 + ": Authorized to perform REGISTER_INTEREST operation for region ["
+                 + regionName + ']');
+       }
+     }
+     return registerInterestContext;
+   }
+ 
+   public RegisterInterestOperationContext registerInterestListAuthorize(
+       String regionName, List keys, InterestResultPolicy policy)
+       throws NotAuthorizedException {
+ 
+     RegisterInterestOperationContext registerInterestListContext;
+     registerInterestListContext = new RegisterInterestOperationContext(keys,
+         InterestType.LIST, policy);
+     if (!this.authzCallback.authorizeOperation(regionName,
+         registerInterestListContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_REGISTER_INTEREST_LIST_OPERATION_FOR_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger
+             .finest(toString()
+                 + ": Authorized to perform REGISTER_INTEREST_LIST operation for region ["
+                 + regionName + ']');
+       }
+     }
+     return registerInterestListContext;
+   }
+ 
+   public UnregisterInterestOperationContext unregisterInterestAuthorize(
+       String regionName, Object key, int interestType)
+       throws NotAuthorizedException {
+ 
+     UnregisterInterestOperationContext unregisterInterestContext;
+     unregisterInterestContext = new UnregisterInterestOperationContext(key,
+         InterestType.fromOrdinal((byte)interestType));
+     if (!this.authzCallback.authorizeOperation(regionName,
+         unregisterInterestContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_UNREGISTER_INTEREST_OPERATION_FOR_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform DESTROY operation on region ["
+             + regionName + ']');
+       }
+     }
+     return unregisterInterestContext;
+   }
+ 
+   public UnregisterInterestOperationContext unregisterInterestListAuthorize(
+       String regionName, List keys) throws NotAuthorizedException {
+ 
+     UnregisterInterestOperationContext unregisterInterestListContext;
+     unregisterInterestListContext = new UnregisterInterestOperationContext(
+         keys, InterestType.LIST);
+     if (!this.authzCallback.authorizeOperation(regionName,
+         unregisterInterestListContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_UNREGISTER_INTEREST_LIST_OPERATION_FOR_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger
+             .finest(toString()
+                 + ": Authorized to perform UNREGISTER_INTEREST_LIST operation for region ["
+                 + regionName + ']');
+       }
+     }
+     return unregisterInterestListContext;
+   }
+ 
+   public KeySetOperationContext keySetAuthorize(String regionName)
+       throws NotAuthorizedException {
+ 
+     KeySetOperationContext keySetContext = new KeySetOperationContext(false);
+     if (!this.authzCallback.authorizeOperation(regionName, keySetContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_KEY_SET_OPERATION_ON_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform KEY_SET operation on region ["
+             + regionName + ']');
+       }
+     }
+     return keySetContext;
+   }
+ 
+   public void containsKeyAuthorize(String regionName, Object key)
+       throws NotAuthorizedException {
+ 
+     ContainsKeyOperationContext containsKeyContext = new ContainsKeyOperationContext(
+         key);
+     if (!this.authzCallback.authorizeOperation(regionName, containsKeyContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_CONTAINS_KEY_OPERATION_ON_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform CONTAINS_KEY operation on region ["
+             + regionName + ']');
+       }
+     }
+   }
+ 
+   public void createRegionAuthorize(String regionName)
+       throws NotAuthorizedException {
+ 
+     RegionCreateOperationContext regionCreateContext = new RegionCreateOperationContext(
+         false);
+     if (!this.authzCallback.authorizeOperation(regionName, regionCreateContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_CREATE_REGION_OPERATION_FOR_THE_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform REGION_CREATE operation of region ["
+             + regionName + ']');
+       }
+     }
+   }
+ 
+   public RegionDestroyOperationContext destroyRegionAuthorize(
+       String regionName, Object callbackArg) throws NotAuthorizedException {
+ 
+     RegionDestroyOperationContext regionDestroyContext = new RegionDestroyOperationContext(
+         false);
+     regionDestroyContext.setCallbackArg(callbackArg);
+     if (!this.authzCallback
+         .authorizeOperation(regionName, regionDestroyContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_REGION_DESTROY_OPERATION_FOR_THE_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform REGION_DESTROY operation for region ["
+             + regionName + ']');
+       }
+     }
+     return regionDestroyContext;
+   }
+   
+   public ExecuteFunctionOperationContext executeFunctionAuthorize(
+       String functionName, String region, Set keySet, Object arguments, boolean optimizeForWrite)
+       throws NotAuthorizedException {
+     ExecuteFunctionOperationContext executeContext = new ExecuteFunctionOperationContext(
+         functionName, region, keySet, arguments, optimizeForWrite, false);
+     if (!this.authzCallback.authorizeOperation(region, executeContext)) {
+       final String errStr = LocalizedStrings.
+         AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_EXECUTE_REGION_FUNCTION_OPERATION
+           .toLocalizedString();
+       if (this.logger.warningEnabled()) {
+         this.logger.warning(LocalizedStrings.TWO_ARG_COLON,
+             new Object[] {this, errStr});
+       }
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform EXECUTE_REGION_FUNCTION operation ");
+       }
+     }
+     return executeContext;
+   }
+ 
+   public InvalidateOperationContext invalidateAuthorize(String regionName,
+       Object key, Object callbackArg) throws NotAuthorizedException {
+ 
+     InvalidateOperationContext invalidateEntryContext = new InvalidateOperationContext(
+         key);
+     invalidateEntryContext.setCallbackArg(callbackArg);
+     if (!this.authzCallback.authorizeOperation(regionName, invalidateEntryContext)) {
+       String errStr = LocalizedStrings.AuthorizeRequest_NOT_AUTHORIZED_TO_PERFORM_INVALIDATE_OPERATION_ON_REGION_0.toLocalizedString(regionName);
+       this.logger.warning(
+           LocalizedStrings.TWO_ARG_COLON,
+           new Object[] {this, errStr});
+       if (this.isPrincipalSerializable) {
+         throw new NotAuthorizedException(errStr, this.principal);
+       }
+       else {
+         throw new NotAuthorizedException(errStr);
+       }
+     }
+     else {
+       if (this.logger.finestEnabled()) {
+         this.logger.finest(toString()
+             + ": Authorized to perform INVALIDATE operation on region ["
+             + regionName + ']');
+       }
+     }
+     return invalidateEntryContext;
+   }
+ 
+   public void close() {
+ 
+     this.authzCallback.close();
+   }
+ 
+   @Override
+   public String toString() {
+     return (this.id == null ? "ClientProxyMembershipID not available" : id.toString()) + ",Principal:"
+     + (this.principal == null ? "" : this.principal.getName());
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/CacheServerMXBean.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/CacheServerMXBean.java
index 0000000,62aedbd..7ab5072
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/CacheServerMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/CacheServerMXBean.java
@@@ -1,0 -1,397 +1,405 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management;
+ 
+ import com.gemstone.gemfire.cache.server.CacheServer;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * MBean that provides access to information and management functionality for a
+  * {@link CacheServer}.
+  * 
+  * <p>The will be one CacheServermBean per {@link CacheServer} started in GemFire node.
+  * 
+  * <p> ObjectName for this MBean is GemFire:service=CacheServer,port={0},type=Member,member={1}
+  * <p>
+  * <table border="1">
+  * <tr>
+  * <th>Notification Type</th>
+  * <th>Notification Source</th>
+  * <th>Message</th>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cacheserver.client.joined</td>
+  * <td>CacheServer MBean Name</td>
+  * <td>Client joined with Id &ltClient ID&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cacheserver.client.left</td>
+  * <td>CacheServer MBean Name</td>
+  * <td>Client crashed with Id &ltClient ID&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cacheserver.client.crashed</td>
+  * <td>CacheServer MBean Name</td>
+  * <td>Client left with Id &ltClient ID&gt</td>
+  * </tr>
+  * </table>
+  * 
+  * @author rishim
+  * @since 7.0
+  * 
+  */
+ public interface CacheServerMXBean {
+ 
+   /**
+    * Returns the port on which this CacheServer listens for clients.
+    */
+   public int getPort();
+ 
+   /**
+    * Returns a string representing the IP address or host name that this
+    * CacheServer will listen on.
+    */
+   public String getBindAddress();
+   
+   /**
+    * Returns the configured buffer size of the socket connection for this CacheServer.
+    */
+   public int getSocketBufferSize();
+ 
+   /**
+    * Returns the maximum amount of time between client pings. This value is used to determine the 
+    * health of client's attached to the server.
+    */
+   public int getMaximumTimeBetweenPings();
+   
+   /**
+    * Returns the maximum allowed client connections.
+    */
+   public int getMaxConnections();
+ 
+   /**
+    * Returns the maxium number of threads allowed in this CacheServer to service client requests.
+    */
+   public int getMaxThreads();
+   
+   /**
+    * Returns the maximum number of messages that can be enqueued in a client-queue.
+    */
+   public int getMaximumMessageCount();
+ 
+   /**
+    * Returns the time (in seconds) after which a message in the client queue will expire.
+    */
+   public int getMessageTimeToLive();
+   
+   /**
+    * Returns the frequency (in milliseconds) to poll the load probe on this CacheServer.
+    */
+   public long getLoadPollInterval();
+   
+   /**
+    * Returns the name or IP address to pass to the client as the location
+    * where the server is listening. When the server connects to the locator it tells
+    * the locator the host and port where it is listening for client connections. If
+    * the host the server uses by default is one that the client can’t translate into
+    * an IP address, the client will have no route to the server’s host and won’t be
+    * able to find the server. For this situation, you must supply the server’s
+    * alternate hostname for the locator to pass to the client.
+    */
+   public String getHostNameForClients();
+   
+   /**
+    * Returns the load probe for this CacheServer.
+    */
+   public ServerLoadData fetchLoadProbe();
+ 
+   /**
+    * Returns whether or not this CacheServer is running.
+    * 
+    * @return True of the server is running, false otherwise.
+    */
+   public boolean isRunning();
+ 
+   /**
+    * Returns the capacity (in megabytes) of the client queue.
+    */
+   public int getCapacity();
+ 
+   /**
+    * Returns the eviction policy that is executed when the capacity of the client
+    * queue is reached.
+    */
+   public String getEvictionPolicy();
+ 
+   /**
+    * Returns the name of the disk store that is used for persistence.
+    */
+   public String getDiskStoreName();
+ 
+   /**
+    * Returns the number of sockets accepted and used for client to server messaging.
+    */
+   public int getClientConnectionCount();
+   
+   /**
+    * Returns the number of client virtual machines connected.
+    */
+   public int getCurrentClients();
+ 
+   /**
+    * Returns the average get request latency.
+    */
+   public long getGetRequestAvgLatency();
+ 
+   /**
+    * Returns the average put request latency.
+    */
+   public long getPutRequestAvgLatency();
+ 
+   /**
+    * Returns the total number of client connections that timed out and were
+    * closed.
+    */
+   public int getTotalConnectionsTimedOut();
+ 
+   /**
+    * Returns the total number of client connection requests that failed.
+    */
+   public int getTotalFailedConnectionAttempts();
+ 
+   /**
+    * Returns the current number of connections waiting for a thread to start
+    * processing their message.
+    */
+   public int getThreadQueueSize();
+ 
+   /**
+    * Returns the current number of threads handling a client connection.
+    */
+   public int getConnectionThreads();
+ 
+   /**
+    * Returns the load from client to server connections as reported by the load
+    * probe installed in this server.
+    */
+   public double getConnectionLoad();
+ 
+   /**
+    * Returns the estimate of how much load is added for each new connection as
+    * reported by the load probe installed in this server.
+    */
+   public double getLoadPerConnection();
+ 
+   /**
+    * Returns the load from queues as reported by the load probe installed in
+    * this server.
+    */
+   public double getQueueLoad();
+ 
+   /**
+    * Returns the estimate of how much load is added for each new queue as
+    * reported by the load probe installed in this server.
+    */
+   public double getLoadPerQueue();
+ 
+ 
+   /**
+    * Returns the rate of get requests.
+    */
+   public float getGetRequestRate();
+ 
+   /**
+    * Returns the rate of put requests.
+    */
+   public float getPutRequestRate();
+   
+   /**
+    * Returns the total number of bytes sent to clients.
+    */
+   public long getTotalSentBytes();
+ 
+   /**
+    * Returns the total number of bytes received from clients.
+    */
+   public long getTotalReceivedBytes();
+   
+   /**
+    * Returns the number of cache client notification requests.
+    */
+   public int getNumClientNotificationRequests();
+ 
+   /**
+    * Returns the average latency for processing client notifications.
+    */
+   public long getClientNotificationAvgLatency();
+ 
+   /**
+    * Returns the rate of client notifications.
+    */
+   public float getClientNotificationRate();
+ 
+   /**
+    * Returns the number of registered CQs.
+    */
+   public long getRegisteredCQCount();
+ 
+   /**
+    * Returns the number of active (currently executing) CQs.
+    */
+   public long getActiveCQCount();
+ 
+   /**
+    * Returns the rate of queries.
+    */
+   public float getQueryRequestRate();
+ 
+   /**
+    * Returns the total number of indexes in use by the member.
+    */
+   public int getIndexCount();
+ 
+   /**
+    * Returns a list of names for all indexes.
+    */
+   public String[] getIndexList();
+ 
+   /**
+    * Returns the total time spent updating indexes due to changes in the data.
+    */
+   public long getTotalIndexMaintenanceTime();
+ 
+   /**
+    * Remove an index.
+    * 
+    * @param indexName
+    *          Name of the index to be removed.
+    */
++  @ResourceOperation(resource=Resource.REGION, operation=ResourceConstants.DESTROY_INDEX)
+   public void removeIndex(String indexName) throws Exception;
+ 
+   /**
+    * Returns a list of names for all registered CQs.
+    */
+   public String[] getContinuousQueryList();
+ 
+   /**
+    * Execute an ad-hoc CQ on the server
+    * 
+    * @param queryName
+    *          Name of the CQ to execute.
+    * @deprecated This method is dangerous because it only modifies the
+    * target cache server - other copies of the CQ on other servers are
+    * not affected. Using the client side CQ methods to modify a CQ.
+    */
 -  @Deprecated 
++  @Deprecated
++  @ResourceOperation(resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.QUERY)
+   public void executeContinuousQuery(String queryName) throws Exception;
+ 
+   /**
+    * Stop (pause) a CQ from executing
+    * 
+    * @param queryName
+    *          Name of the CQ to stop.
+    *          
+    * @deprecated This method is dangerous because it only modifies the
+    * target cache server - other copies of the CQ on other servers are
+    * not affected. Using the client side CQ methods to modify a CQ.         
+    */
+   @Deprecated
++  @ResourceOperation(resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.STOP_CONTINUOUS_QUERY)
+   public void stopContinuousQuery(String queryName) throws Exception;
+ 
+   /**
+    * Unregister all CQs from a region
+    * 
+    * @param regionName
+    *          Name of the region from which to remove CQs.
+    * @deprecated This method is dangerous because it only modifies the
+    * target cache server - other copies of the CQ on other servers are
+    * not affected. Using the client side CQ methods to modify a CQ.         
+    */
+   @Deprecated
++  @ResourceOperation(resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.STOP_CONTINUOUS_QUERY)
+   public void closeAllContinuousQuery(String regionName) throws Exception;
+   
+   
+   /**
+    * Unregister a CQ
+    * 
+    * @param queryName
+    *          Name of the CQ to unregister.
+    * @deprecated This method is dangerous because it only modifies the
+    * target cache server - other copies of the CQ on other servers are
+    * not affected. Using the client side CQ methods to modify a CQ.         
+    */
+   @Deprecated
++  @ResourceOperation(resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.STOP_CONTINUOUS_QUERY)
+   public void closeContinuousQuery(String queryName) throws Exception;
+ 
+ 
+   /**
+    * Returns a list of IDs for all connected clients.
+    * 
+    * @return A list of IDs or a length 0 array if no clients are registered.
+    */
+   public String[] getClientIds() throws Exception;
+ 
+   /**
+    * Returns health and statistic information for the give client id. Some of the
+    * information (CPUs, NumOfCacheListenerCalls, NumOfGets,NumOfMisses,
+    * NumOfPuts,NumOfThreads, ProcessCpuTime) only available for clients which
+    * have set a "StatisticsInterval".
+    * 
+    * @param clientId
+    *          ID of the client for which to retrieve information.
+    */
+   public ClientHealthStatus showClientStats(String clientId) throws Exception;
+   
+   /**
+    * Returns the number of clients who have existing subscriptions.
+    */
+   public int getNumSubscriptions();
+ 
+   /**
+    * Returns health and statistic information for all clients. Some of the
+    * information (CPUs, NumOfCacheListenerCalls, NumOfGets,NumOfMisses,
+    * NumOfPuts,NumOfThreads, ProcessCpuTime) only available for clients which
+    * have set a "StatisticsInterval".
+    */
+   public ClientHealthStatus[] showAllClientStats() throws Exception;
+   
+   /**
+    * Shows a list of client with their queue statistics. Client queue statistics
+    * shown in this method are the following
+    * 
+    * eventsEnqued,eventsRemoved , eventsConflated ,markerEventsConflated ,
+    * eventsExpired, eventsRemovedByQrm , eventsTaken , numVoidRemovals
+    * 
+    * @return an array of ClientQueueDetail
+    * @throws Exception
+    */
+   public ClientQueueDetail[] showClientQueueDetails() throws Exception;
+   
+   /**
+    * 
+    * Shows queue statistics of the given client. Client queue statistics
+    * shown in this method are the following
+    * 
+    * eventsEnqued,eventsRemoved , eventsConflated ,markerEventsConflated ,
+    * eventsExpired, eventsRemovedByQrm , eventsTaken , numVoidRemovals
+    * 
+    * @param clientId the ID of client which is returned by the attribute ClientIds 
+    * @return ClientQueueDetail
+    * @throws Exception
+    */
+   public ClientQueueDetail showClientQueueDetails(String clientId) throws Exception;
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/DiskStoreMXBean.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/DiskStoreMXBean.java
index 0000000,110a791..8ac9c2c
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/DiskStoreMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DiskStoreMXBean.java
@@@ -1,0 -1,212 +1,221 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management;
+ 
+ import com.gemstone.gemfire.cache.DiskStore;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ 
+ /**
+  * MBean that provides access to information and management functionality for a
+  * {@link DiskStore}.
+  * 
+  * @author rishim
+  * @since 7.0
+  * 
+  */
+ public interface DiskStoreMXBean {
+   
+   /**
+    * Returns the name of the DiskStore.
+    */
+   public String getName();
+ 
+   /**
+    * Returns whether disk files are to be automatically compacted.
+    * 
+    * @return True if disk files are automatically compacted, false otherwise
+    */
+   public boolean isAutoCompact();
+   
+   /**
+    * Returns the threshold at which an op-log may be compacted. Until it
+    * reaches this threshold the op-log will not be compacted. The threshold is
+    * a percentage in the range 0..100.
+    */
+   public int getCompactionThreshold();
+ 
+   /**
+    * Returns whether manual compaction of disk files is allowed.
+    * 
+    * @return True if manual compaction is allowed, false otherwise.
+    */
+   public boolean isForceCompactionAllowed();
+ 
+   /**
+    * Returns the maximum size (in megabytes) that a single op-log can grow to.
+    */
+   public long getMaxOpLogSize();
+ 
+   /**
+    * Returns the time (in milliseconds) that can elapse before unwritten
+    * data is saved to disk.
+    */
+   public long getTimeInterval();
+   
+   /**
+    * Returns the size of the write buffer that this DiskStore will use when
+    * writing data to disk.
+    */
+   public int getWriteBufferSize();
+ 
+   /**
+    * Returns the path of the directories to which the region's data will be
+    * written.
+    */
+   public String[] getDiskDirectories();
+ 
+   /**
+    * Returns the maximum number of operations that can be asynchronously
+    * queued for saving to disk. When this limit is reached operations
+    * will block until they can be put in the queue.
+    */
+   public int getQueueSize();
+ 
+   /**
+    * Returns the total number of bytes of space this DiskStore has used.
+    */
+   public long getTotalBytesOnDisk();
+ 
+   /**
+    * Returns the average latency of disk reads in nanoseconds Its the average
+    * latency required to read a byte from disk.
+    * 
+    * Each entry in region has some overhead in terms of number of extra bytes
+    * while persisting data. So this rate won't match the number of bytes put in
+    * all regions.This is rate of actual bytes system is persisting.
+    */
+   public float getDiskReadsRate();
+ 
+   /**
+    * Returns the average latency of disk writes in nanoseconds. Its the average
+    * latency required to write a byte to disk.
+    * 
+    * Each entry in region has some overhead in terms of number of extra bytes
+    * while persisting data. So this rate won't match the number of bytes put in
+    * all regions. This is rate of actual bytes system is persisting.
+    */
+   public float getDiskWritesRate();
+ 
+   /**
+    * Returns the disk reads average latency in nanoseconds. It depicts average
+    * time needed to read one byte of data from disk.
+    */
+   public long getDiskReadsAvgLatency();
+ 
+   /**
+    * Returns the disk writes average latency in nanoseconds. It depicts average
+    * time needed to write one byte of data to disk.
+    */
+   public long getDiskWritesAvgLatency();
+ 
+   /**
+    * Returns the flush time average latency.
+    */
+   public long getFlushTimeAvgLatency();
+ 
+   /**
+    * Returns the number of entries in the asynchronous queue waiting to be written
+    * to disk.
+    */
+   public int getTotalQueueSize();
+ 
+   /**
+    * Returns the number of backups currently in progress on this DiskStore.
+    */
+   public int getTotalBackupInProgress();
+   
+   /**
+    * Returns the number of backups of this DiskStore that have been completed.
+    */
+   public int getTotalBackupCompleted();
+ 
+   /**
+    * Returns the number of persistent regions currently being recovered from disk.
+    */
+   public int getTotalRecoveriesInProgress();
+ 
+   /**
+    * Requests the DiskStore to start writing to a new op-log. The old oplog will
+    * be asynchronously compressed if compaction is set to true. The new op-log will
+    * be created in the next available directory with free space. If there is no
+    * directory with free space available and compaction is set to false, then a
+    * DiskAccessException saying that the disk is full will be thrown. If
+    * compaction is true then the application will wait for the other op-logs to
+    * be compacted and additional space is available.
+    */
++  @ResourceOperation(resource=Resource.DISKSTORE, operation=ResourceConstants.FORCE_ROLL)
+   public void forceRoll();
+ 
+   /**
+    * Requests the DiskStore to start compacting. The compaction is done even if
+    * automatic compaction is not configured. If the current, active op-log has
+    * had data written to it, and may be compacted, then an implicit  call to
+    * forceRoll will be made so that the active op-log can be compacted. This
+    * method will block until compaction finishes.
+    * 
+    * @return True if one or more op-logs were compacted or false to indicate
+    *         that no op-logs were ready to be compacted or that a compaction was
+    *         already in progress.
+    */
++  @ResourceOperation(resource=Resource.DISKSTORE, operation=ResourceConstants.FORCE_COMPACTION)
+   public boolean forceCompaction();
+   
+   /**
+    * Causes any data that is currently in the asynchronous queue to be written
+    * to disk. Does not return until the flush is complete.
+    */
++  @ResourceOperation(resource=Resource.DISKSTORE, operation=ResourceConstants.FLUSH_DISKSTORE)
+   public void flush();
+ 
+   /**
+    * Returns the warning threshold for disk usage as a percentage of the total 
+    * disk volume.
+    * 
+    * @return the warning percent
+    * @since 8.0
+    */
+   public float getDiskUsageWarningPercentage();
+ 
+   /**
+    * Returns the critical threshold for disk usage as a percentage of the total 
+    * disk volume.
+    * 
+    * @return the critical percent
+    * @since 8.0
+    */
+   public float getDiskUsageCriticalPercentage();
+   
+   /**
+    * Sets the value of the disk usage warning percentage.
+    * 
+    * @param warningPercent the warning percent
+    */
++  @ResourceOperation(resource=Resource.DISKSTORE, operation=ResourceConstants.SET_DISK_USAGE)
+   public void setDiskUsageWarningPercentage(float warningPercent);
+   
+   /**
+    * Sets the value of the disk usage critical percentage.
+    * 
+    * @param criticalPercent the critical percent
+    */
++  @ResourceOperation(resource=Resource.DISKSTORE, operation=ResourceConstants.SET_DISK_USAGE)
+   public void setDiskUsageCriticalPercentage(float criticalPercent);
++  
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
index 0000000,3ce1730..2a41f30
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
@@@ -1,0 -1,696 +1,696 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management;
+ 
+ import java.util.Map;
+ 
+ import javax.management.ObjectName;
+ 
+ import com.gemstone.gemfire.cache.DiskStore;
+ import com.gemstone.gemfire.cache.Region;
+ import com.gemstone.gemfire.distributed.DistributedMember;
+ import com.gemstone.gemfire.distributed.DistributedSystem;
+ import com.gemstone.gemfire.management.internal.security.Resource;
+ import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+ import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ import com.gemstone.gemfire.management.internal.security.ResourceOperationContext.ResourceOperationCode;
+ 
+ /**
+  * MBean that provides access to information and management operations for a
+  * {@link DistributedSystem}.
+  *
+  * It also provides an API for navigating the other MBeans exposed by the
+  * GemFire distributed system.
+  * 
+  * There will be one DistributedSystemMBean per GemFire cluster.
+  * 
+  * <p> ObjectName : GemFire:service=System,type=Distributed
+  * 
+  * <p> List of notifications emitted by this MBean.
+  * 
+  * <p>
+  * <table border="1">
+  * <tr>
+  * <th>Notification Type</th>
+  * <th>Notification Source</th>
+  * <th>Message</th>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.member.joined</td>
+  * <td>Name or ID of member who joined</td>
+  * <td>Member Joined &ltMember Name or ID&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.member.departed</td>
+  * <td>Name or ID of member who departed</td>
+  * <td>Member Departed &ltMember Name or ID&gt has crashed = &lttrue/false&gt</td>
+  * </tr>
+  * <tr>
+  * <td>gemfire.distributedsystem.cache.member.suspect</td>
+  * <td>Name or ID of member who is suspected</td>
+  * <td>Member Suspected &ltMember Name or ID&gt By &ltWho Suspected&gt</td>
+  * </tr>
+  * <tr>
+  * <td>system.alert</td>
+  * <td>DistributedSystem("&ltDistributedSystem ID"&gt)</td>
+  * <td>Alert Message</td>
+  * </tr>
+  * </table>
+  *
+  * @author rishim
+  * @since 7.0
+  *
+  */
+ public interface DistributedSystemMXBean {
+ 
+   /**
+    * Returns the ID of thie DistributedSystem.
+    *
+    * @return The DistributedSystem ID or -1 if not set.
+    */
+   public int getDistributedSystemId();
+ 
+   /**
+    * Returns the number of members in the distributed system.
+    */
+   public int getMemberCount();
+ 
+   /**
+    * Returns a list of names for all members.
+    */
+   @ResourceOperation(resource = Resource.DISTRIBUTED_SYSTEM)
+   public String[] listMembers();
+ 
+   /**
+    * Returns a list of names for locator members.
+    *
+    * @param onlyStandAloneLocators
+    *          if set to <code>true</code>, includes only stand alone locator
+    *          members.
+    * @return a list of names for locator members.
+    */
+   
+   public String[] listLocatorMembers(boolean onlyStandAloneLocators);
+ 
+   /**
+    * Returns a list of names for all groups.
+    */
+   public String[] listGroups();
+ 
+   /**
+    * Returns the number of locators in the distributed system.
+    */
+   public int getLocatorCount();
+ 
+   /**
+    * Returns a list of IDs for all locators.
+    */
+   public String[] listLocators(); //TODO - Abhishek Should be renamed to listLocatorDiscoveryConfigurations? Do we need something for mcast too?
+ 
+   /**
+    * Returns the number of disks stores in the distributed system.
+    */
+   public int getSystemDiskStoreCount();
+ 
+   /**
+    * Returns a map of all {@link DistributedMember}s and their {@link DiskStore}s.
+    */
+   public Map<String, String[]> listMemberDiskstore();
+ 
+   
+   /**
+    *  @return A map of all {@link DistributedMember}s and their HDFSStore's.
+    */
+   
+   public Map<String, String[]> listMemberHDFSStore();
+   
+   
+   /**
+    * Returns a list of IDs for all gateway senders.
+    */
+   public String[] listGatewaySenders();
+ 
+   /**
+    * Returns a list of IDs for all gateway receivers.
+    */
+   public String[] listGatewayReceivers();
+ 
+   /**
+    * Returns the minimum level set for alerts to be delivered to listeners.
+    */
+   public String getAlertLevel();
+ 
+   /**
+    * Sets the minimum level for alerts to be delivered to listeners.
+    *
+    * @param alertLevel
+    *          Minimum level for alerts to be delivered.
+    *          Must be one of: WARNING, ERROR, SEVERE or NONE.
+    */
 -  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.CHANGE_ALERT_LEVEL_DS) 
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.CHANGE_ALERT_LEVEL) 
+   public void changeAlertLevel(String alertLevel) throws Exception;
+ 
+   /**
+    * Returns the total available heap (in megabytes) across all distributed
+    * members.
+    */
+   public long getTotalHeapSize();
+ 
+   /**
+    * Returns the total number of entries in all regions.
+    */
+   public long getTotalRegionEntryCount();
+ 
+   /**
+    * Returns the number of {@link Region}s.
+    */
+ 
+   public int getTotalRegionCount();
+ 
+   /**
+    * Returns the number of times that a cache miss occurred for all regions.
+    */
+   public int getTotalMissCount();
+ 
+   /**
+    * Returns the number of times that a hit occurred for all regions.
+    */
+   public int getTotalHitCount();
+ 
+   /**
+    * Returns the number of connected clients.
+    */
+   public int getNumClients();
+ 
+ 
+   /**
+    * Returns the average number of disk reads per second across all distributed
+    * members.
+    */
+   public float getDiskReadsRate();
+ 
+   /**
+    * Returns the average number of disk writes per second across all
+    * distributed members.
+    */
+   public float getDiskWritesRate();
+ 
+   /**
+    * Returns the average disk flush latency time.
+    */
+   public long getDiskFlushAvgLatency();
+ 
+   /**
+    * Returns the number of backups currently in progress for all disk stores.
+    */
+   public int getTotalBackupInProgress();
+ 
+   /**
+    * Returns the number of initial images in progress.
+    */
+   public int getNumInitialImagesInProgress();
+ 
+   /**
+    * Returns the number of active (currently executing) CQs for all cache servers.
+    */
+   public long getActiveCQCount();
+ 
+   /**
+    * Returns the average number of queries per second across all
+    * distributed members.
+    */
+   public float getQueryRequestRate();
+ 
+   /**
+    * Performs a backup on all members.
+    *
+    * @param targetDirPath
+    *          Directory to which backup files will be written
+    * @param baselineDirPath
+    *          path of the directory for baseline backup.
+    * @return The results of the backup request.
+    */
 -  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.BACKUP_DS)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.BACKUP_MEMBERS)
+   public DiskBackupStatus backupAllMembers(String targetDirPath, String baselineDirPath)
+       throws Exception;
+ 
+   /**
+    * Returns the configuration information for a distributed member.
+    *
+    * @param member
+    *          Name or ID of the member.
+    * @return The configuration information for a member.
+    * @throws Exception
+    *           for an invalid member ID.
+    */
+   public GemFireProperties fetchMemberConfiguration(String member)
+       throws Exception;
+ 
+   /**
+    * Returns the total time (in seconds) since a distributed member was started.
+    *
+    * @param member
+    *          Name or ID of the member.
+    * @return The total time (in seconds) since a member was started.
+    * @throws Exception
+    *           for an invalid member ID.
+    */
+   public long fetchMemberUpTime(String member) throws Exception;
+ 
+   /**
+    * Returns a list of names for all cache servers which are able to serve requests from GemFire clients.
+    * 
+    */
+   public String[] listCacheServers();
+   
+   
+   /**
+    * Returns a list of names for all servers where server means
+    * any long-running GemFire process that was started with "start server" command from GFSH.
+    */
+   public String[] listServers();
+ 
+   /**
+    * Returns JVM metrics for a distributed member.
+    *
+    * @param member
+    *          Name or ID of the member.
+    * @throws Exception
+    *           for an invalid member ID.
+    */
+   public JVMMetrics showJVMMetrics(String member) throws Exception;
+ 
+   /**
+    * Returns operating system metrics for a distributed member.
+    *
+    * @param member
+    *          Name or ID of the member.
+    * @throws Exception
+    *           for an invalid member ID.
+    */
+   public OSMetrics showOSMetrics(String member) throws Exception;
+ 
+   /**
+    * Returns network metrics for a distributed member.
+    *
+    * @param member
+    *          Name or ID of the member.
+    * @throws Exception
+    *           for an invalid member ID.
+    */
+   public NetworkMetrics showNetworkMetric(String member) throws Exception;
+ 
+   /**
+    * Returns disk metrics for a distributed member.
+    *
+    * @param member
+    *          Name or ID of the member.
+    * @throws Exception
+    *           for an invalid member ID.
+    */
+   public DiskMetrics showDiskMetrics(String member) throws Exception;
+ 
+   /**
+    * Shuts down all members of a distributed system except for the managing member.
+    *
+    * @return List of names of all distributed members that were shutdown.
+    */
 -  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.SHUTDOWN_DS)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.SHUTDOWN)
+   public String[] shutDownAllMembers() throws Exception;
+ 
+   /**
+    * Returns a list of names for all regions.
+    */
+   public String[] listRegions();
+ 
+   /**
+    * Returns a list of full paths for all regions.
+    */
+   public String[] listAllRegionPaths();
+ 
+   /**
+    * Removes a disk store from the distributed system.
+    *
+    * @param diskStoreId
+    *          UUID of the disk store to remove
+    * @return True if the request is successful, false otherwise.
+    */
 -  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.REMOVE_DISKSTORE_DS)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.REVOKE_MISSING_DISKSTORE)
+   public boolean revokeMissingDiskStores(String diskStoreId)
+       throws Exception;
+ 
+   /**
+    * Returns a list of details for disk stores which have been determined to be
+    * unavailable during the recovery of region.
+    */
+   public PersistentMemberDetails[] listMissingDiskStores();
+ 
+   /**
+    * Returns the object name for a {@link MemberMXBean} used to access
+    * this distributed member.
+    */
+   public ObjectName getMemberObjectName();
+ 
+   /**
+    * Returns the object name for a {@link ManagerMXBean} used to access the
+    * management service running on this distributed member.
+    */
+   public ObjectName getManagerObjectName();
+ 
+   /**
+    * Returns a list of object names for the {@link MemberMXBean}s used to
+    * access all distributed members.
+    */
+   public ObjectName[] listMemberObjectNames();
+ 
+   /**
+    * Returns the object name for a {@link MemberMXBean} used to access
+    * a distributed member..
+    *
+    * @param member
+    *          Name or ID of the member.
+    */
+   public ObjectName fetchMemberObjectName(String member) throws Exception;
+ 
+   /**
+    * Returns a list of object names for the {@link RegionMXBean}s used to
+    * access all regions on a distributed member.
+    *
+    * @param memberMBeanName
+    *          ObjectName of the member.
+    */
+   public ObjectName[] fetchRegionObjectNames(ObjectName memberMBeanName)
+       throws Exception;
+ 
+   /**
+    * Returns a list of object names for the {@link DistributedRegionMXBean}s
+    * used to access all distributed regions.
+    *
+    * @return An array of object names or an empty array if no distributed regions
+    *         are found.
+    */
+   public ObjectName[] listDistributedRegionObjectNames();
+ 
+   /**
+    * Returns the object name for a {@link DistributedRegionMXBean} used to
+    * access a distributed region.
+    *
+    * @param regionPath
+    *          Full path of the region.
+    */
+   public ObjectName fetchDistributedRegionObjectName(String regionPath)
+       throws Exception;
+ 
+   /**
+    * Returns the object name for a {@link RegionMXBean} used to access
+    * a region.
+    *
+    * @param member
+    *          Name or ID of the member.
+    * @param regionPath
+    *          Full path of the region.
+    */
+   public ObjectName fetchRegionObjectName(String member, String regionPath)
+       throws Exception;
+ 
+   /**
+    * Returns the object name for a {@link GatewaySenderMXBean} used to access
+    * a gateway sender.
+    *
+    * @param member
+    *          Name or ID of the member.
+    * @param senderId
+    *          ID of a gateway sender.
+    */
+   public ObjectName fetchGatewaySenderObjectName(String member,
+       String senderId) throws Exception;
+ 
+   /**
+    * Returns the object name for a {@link GatewayReceiverMXBean} used to access
+    * a gateway receiver.
+    *
+    * @param member
+    *          Name or ID of the member.
+    */
+   public ObjectName fetchGatewayReceiverObjectName(String member)
+       throws Exception;
+ 
+   /**
+    * Returns a list of object names for the {@link GatewaySenderMXBean}s
+    * used to access all gateway senders.
+    *
+    * @return An array of object names or an empty array if no gateway senders
+    *         are found.
+    */
+   public ObjectName[] listGatewaySenderObjectNames();
+ 
+   /**
+    * Returns a list of object names for the {@link GatewaySenderMXBean}s
+    * used to access all gateway senders on a member.
+    *
+    * @param member
+    *          Name or ID of the member.
+    */
+   public ObjectName[] listGatewaySenderObjectNames(String member)
+       throws Exception;
+ 
+   /**
+    * Returns a list of object names for the {@link GatewayReceiverMXBean}s
+    * used to access all gateway senders.
+    *
+    * @return An array of object names or an empty array if no gateway receivers
+    *         are found.
+    */
+   public ObjectName[] listGatewayReceiverObjectNames();
+ 
+   /**
+    * Returns the object name for a {@link DistributedLockServiceMXBean} used to
+    * access a distributed lock service.
+    *
+    * @param lockServiceName
+    *          Name of the lock service.
+    */
+   public ObjectName fetchDistributedLockServiceObjectName(String lockServiceName)
+       throws Exception;
+ 
+   /**
+    * Returns the object name for a {@link LockServiceMXBean} used to
+    * access a lock service.
+    *
+    * @param member
+    *          Name or Id of the member.
+    * @param lockService
+    *          Name of the lock service.
+    */
+   public ObjectName fetchLockServiceObjectName(String member,
+       String lockService) throws Exception;
+ 
+   /**
+    * Returns object name of a {@link DiskStoreMXBean} for a given name and member
+    *
+    * @param member
+    *          name or id of the member
+    * @param diskStoreName
+    *          name of the disk store
+    * @return a ObjectName
+    * @throws Exception
+    */
+   public ObjectName fetchDiskStoreObjectName(String member,
+       String diskStoreName) throws Exception;
+ 
+   /**
+    * Returns the object name for a {@link CacheServerMXBean} used to access
+    * a cache server.
+    *
+    * @param member
+    *          Name or ID of the member.
+    * @param port
+    *          Port of the server.
+    */
+   public ObjectName fetchCacheServerObjectName(String member, int port)
+       throws Exception;
+ 
+   /**
+    * Returns a list of object names for the {@link CacheServerMXBean}s
+    * used to access all cache servers.
+    */
+   public ObjectName[] listCacheServerObjectNames();
+ 
+   /**
+    * Returns the number of map-reduce jobs currently running on all members
+    * in the distributed system.
+    */
+   public int getNumRunningFunctions();
+ 
+   /**
+    * Returns the number of CQs registers on all members.
+    */
+   public long getRegisteredCQCount();
+ 
+   /**
+    * Returns the number of bytes used on all disks.
+    */
+   public long getTotalDiskUsage();
+ 
+   /**
+    * Returns the total heap used on all members.
+    */
+   public long getUsedHeapSize();
+ 
+   /**
+    * Returns the average number of reads per second for all members.
+    */
+   public float getAverageReads();
+ 
+   /**
+    * Returns the average writes per second, including both put and putAll operations,
+    * for all members.
+    */
+   public float getAverageWrites();
+ 
+   /**
+    * Returns the number of subscriptions for all members.
+    */
+   public int getNumSubscriptions();
+ 
+ 
+   /**
+    * Returns the number of garbage collection operations for all members.
+    */
+   public long getGarbageCollectionCount();
+ 
+   /**
+    * Returns a map of remote distributed system IDs and the current connection
+    * status for each.
+    */
+   public Map<String, Boolean> viewRemoteClusterStatus();
+ 
+   /**
+    * Returns the number JVM pauses (which may or may not include full garbage
+    * collection pauses) detected by GemFire.
+    */
+   public long getJVMPauses();
+ 
+   /**
+    * This API is used to query data from GemFire system. This returns a JSON
+    * formated String having data and it's type. Type and value of data makes an
+    * array , type preceding the value.
+    * 
+    * e.g. {"result":[["java.lang.String","v"],["java.lang.String","b"]]}
+    * 
+    * GemFire PDXInstances are also supported. The type of PDXInstance is
+    * PDXInstance and value will be key value pair. There is no marker to know
+    * the "IdentityField" of the PDXInstance.
+    * 
+    * If the query is executed on the cluster and no member list is given in
+    * input first key of the JSON string will be "result" followed by the result
+    * set in JSON format.
+    * 
+    * If the query is executed on one or more specific members then returned
+    * string will have an array of "member" and "result" keys.
+    * 
+    * For query on replicated region data from a random node which have the
+    * region is shown, if no member input is given. For PR regions data from all
+    * the nodes are collected and shown. User must be careful to query on a PR if
+    * the region is big and hosted on a lot of nodes
+    * 
+    * Join queries on PR mandates that user provide one member as input. If the
+    * member does not host the regions or the regions are not co-located error
+    * string will be returned.
+    * 
+    * 
+    * @param queryString
+    *          GemFire supported OQL query
+    * @param members
+    *          comma separated list of members on which the query is to be
+    *          executed. It is not mandatory to give this input barring join
+    *          queries on PR. If member list is not provided query will be for
+    *          the whole cluster.
+    * @param limit
+    *          result set limit. If not set or 0 is passed default limit of 1000
+    *          will be set.
+    * @return a JSON formated string containing data and its type
+    */
 -  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.QUERYDATA_DS)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.QUERY)
+   public String queryData(String queryString, String members, int limit) throws Exception;
+   
+   /**
+    * 
+    * Functionality is same as queryData() method. Only difference being the
+    * resultant JSON string is compressed with Java GZIP with UTF-8 encoding. Any
+    * client application can de compress the byte[] using GZIP.
+    * 
+    * e.g.
+    * 
+    * GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(bytes));
+    * 
+    * BufferedReader bf = new BufferedReader(new InputStreamReader(gis,"UTF-8"));
+    * 
+    * String outStr = ""; String line; while ((line = bf.readLine()) != null) {
+    * outStr += line; }
+    * 
+    * @param queryString
+    *          GemFire supported OQL query
+    * @param members
+    *          comma separated list of members on which the query is to be
+    *          executed. It is not mandatory to give this input barring join
+    *          queries on PR. If member list is not provided query will be for
+    *          the whole cluster.
+    * @param limit
+    *          result set limit. If not set or 0 is passed default limit of 1000
+    *          will be set.
+    * @return a byte[] which is a compressed JSON string.
+    */
 -  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.QUERYDATA_DS)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.QUERY)
+   public byte[] queryDataForCompressedResult(String queryString, String members, int limit) throws Exception;
+   
+   
+   /**
+    * Returns the number of committed transactions across all members. It gives
+    * point in time value i.e. Number of tx committed at the time of reading this
+    * value
+    */
+   public int getTransactionCommitted();
+ 
+   /**
+    * Returns the number of transactions that were rolled back across all
+    * members. It gives point in time value i.e. Number of tx rolled back at the
+    * time of reading this value
+    */
+   public int getTransactionRolledBack();
+   
+   /**
+    * Number of rows DistributedSystemMXBean.queryData() operation will return.
+    * By default it will be 1000. User can modify this to control number of rows
+    * to be shown on Pulse, as Pulse DataBrowser internally uses
+    * DistributedSystemMXBean.queryData()
+    */
+   public int getQueryResultSetLimit();
+ 
 -  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.QUERYDATA_DS)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.QUERY)
+   public void setQueryResultSetLimit(int queryResultSetLimit);
+ 
+   /**
+    * Number of elements in a collection to be shown in queryData operation if
+    * query results contain collections like Map, List etc.
+    * 
+    */
+   public int getQueryCollectionsDepth();
+ 
 -  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.QUERYDATA_DS)
++  @ResourceOperation( resource=Resource.DISTRIBUTED_SYSTEM, operation=ResourceConstants.QUERY)
+   public void setQueryCollectionsDepth(int queryCollectionsDepth);
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/management/GatewayReceiverMXBean.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/management/GatewayReceiverMXBean.java
index 0000000,e3c483f..359e92e
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/GatewayReceiverMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/GatewayReceiverMXBean.java
@@@ -1,0 -1,211 +1,216 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package com.gemstone.gemfire.management;
+ 
+ import com.gemstone.gemfire.cache.wan.GatewayReceiver;
++import com.gemstone.gemfire.management.internal.security.Resource;
++import com.gemstone.gemfire.management.internal.security.ResourceConstants;
++import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+ 
+ /**
+  * MBean that provides access to information and management functionality for a
+  * {@link GatewayReceiver}.
+  * 
+  * @author rishim
+  * @since 7.0
+  * 
+  */
+ 
+ public interface GatewayReceiverMXBean {
+ 
+   /**
+    * Returns the port the receiver is listening on.
+    */
+   public int getPort();
+ 
+   /**
+    * Returns the configured buffer size of the socket connection.
+    */
+   public int getSocketBufferSize();
+ 
+   /**
+    * Returns the bind address on the host.
+    */
+   public String getBindAddress();
+ 
+   /**
+    * Returns the maximum amount of time between client pings.
+    */
+   public int getMaximumTimeBetweenPings();
+ 
+   /**
+    * Returns whether the receiver is in running state.
+    * 
+    * @return True if the receiver is in a running state, false otherwise.
+    */
+   public boolean isRunning();
+ 
+   /**
+    * Returns the instantaneous rate of events received.
+    */
+   public float getEventsReceivedRate();
+ 
+   /**
+    * Returns the rate of create requests received.
+    */
+   public float getCreateRequestsRate();
+ 
+   /**
+    * Returns the rate of update requests received.
+    */
+   public float getUpdateRequestsRate();
+ 
+   /**
+    * Returns the rate of destroy requests received.
+    */
+   public float getDestroyRequestsRate();
+ 
+   /**
+    * Returns the number of duplicate batches which have been received.
+    */
+   public int getDuplicateBatchesReceived();
+ 
+   /**
+    * Returns the number of batches which have been received out of order.
+    */
+   public int getOutoforderBatchesReceived();
+ 
+   /**
+    * Starts the gateway receiver.
+    */
++  @ResourceOperation(resource=Resource.GATEWAY_RECEIVER, operation=ResourceConstants.START_GW_RECEIVER)
+   public void start() throws Exception;
+ 
+   /**
+    * Stops the gateway receiver.
+    */
++  @ResourceOperation(resource=Resource.GATEWAY_RECEIVER, operation=ResourceConstants.STOP_GW_RECEIVER)
+   public void stop() throws Exception;
+ 
+   /**
+    * Returns the configured start port.
+    */
+   public int getStartPort();
+ 
+   /**
+    * Returns the configured end port.
+    */
+   public int getEndPort();
+   
+   /**
+    * Returns a list of names for the transport filters in use.
+    */
+   public String[] getGatewayTransportFilters();
+   
+   /**
+    * Returns the number of sockets accepted and used for client to server messaging.
+    */
+   public int getClientConnectionCount();
+   
+   /**
+    * Returns the number of client virtual machines connected and acting as a gateway.
+    */
+   public int getNumGateways();
+ 
+   /**
+    * Returns the average get request latency.
+    */
+   public long getGetRequestAvgLatency();
+ 
+   /**
+    * Returns the average put request latency.
+    */
+   public long getPutRequestAvgLatency();
+ 
+   /**
+    * Returns the total number of client connections that timed out and were
+    * closed.
+    */
+   public int getTotalConnectionsTimedOut();
+ 
+   /**
+    * Returns the total number of client connection requests that failed.
+    */
+   public int getTotalFailedConnectionAttempts();
+ 
+   /**
+    * Returns the current number of connections waiting for a thread to start
+    * processing their message.
+    */
+   public int getThreadQueueSize();
+ 
+   /**
+    * Returns the current number of threads handling a client connection.
+    */
+   public int getConnectionThreads();
+ 
+   /**
+    * Returns the load from client to server connections as reported by the load
+    * probe installed in this server.
+    */
+   public double getConnectionLoad();
+ 
+   /**
+    * Returns the estimate of how much load is added for each new connection as
+    * reported by the load probe installed in this server.
+    */
+   public double getLoadPerConnection();
+ 
+   /**
+    * Returns the load from queues as reported by the load probe installed in
+    * this server.
+    */
+   public double getQueueLoad();
+ 
+   /**
+    * Returns the estimate of how much load is added for each new queue as
+    * reported by the load probe installed in this server.
+    */
+   public double getLoadPerQueue();
+ 
+   /**
+    * Returns the rate of get requests.
+    */
+   public float getGetRequestRate();
+ 
+   /**
+    * Returns the rate of put requests.
+    */
+   public float getPutRequestRate();
+   
+   /**
+    * Returns the total number of bytes sent to clients.
+    */
+   public long getTotalSentBytes();
+ 
+   /**
+    * Returns the total number of bytes received from clients.
+    */
+   public long getTotalReceivedBytes();
+ 
+   /**
+    * Returns a list of the host and port information for gateway senders connected to
+    * this gateway receiver.
+    */
+   public String[] getConnectedGatewaySenders();  
+   
+   /**
+    * Returns the average batch processing time (in milliseconds).
+    */
+   public long getAverageBatchProcessingTime();
+ 
+ }