GEODE-2927: fix pulse logging and useLocator, SSL flags

* using local mbs server connection will bypass all the mbean security checks
* do not update the mbean attribute since pulse user has no cluster:write 
privilege at all
* Created EmbeddedPulseRule for tests
* simplify PulseAppListener
* use log4j2 logging configurations


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

Branch: refs/heads/feature/GEODE-2580
Commit: 0f978a6df711d04e0c7c1926fb1e297d07c21aa3
Parents: b3fc0c8
Author: Jinmei Liao <jil...@pivotal.io>
Authored: Wed Mar 22 19:45:19 2017 -0700
Committer: Jinmei Liao <jil...@pivotal.io>
Committed: Thu May 18 07:46:54 2017 -0700

----------------------------------------------------------------------
 .../test/dunit/rules/EmbeddedPulseRule.java     |  39 +-
 .../geode/tools/pulse/PulseSecurityTest.java    |  34 +-
 .../tools/pulse/PulseSecurityWithSSLTest.java   |   1 -
 .../tools/pulse/PulseVerificationTest.java      |  70 +++
 .../management/internal/ManagementAgent.java    |   8 +-
 .../cli/commands/LauncherLifecycleCommands.java |   1 -
 .../tools/pulse/internal/PulseAppListener.java  | 583 ++-----------------
 .../internal/controllers/PulseController.java   |   8 -
 .../tools/pulse/internal/data/Cluster.java      |  43 +-
 .../pulse/internal/data/IClusterUpdater.java    |   6 +
 .../pulse/internal/data/JMXDataUpdater.java     | 157 +----
 .../tools/pulse/internal/data/Repository.java   | 127 +---
 .../security/GemFireAuthenticationProvider.java |  33 +-
 .../pulse/internal/security/LogoutHandler.java  |  22 +-
 .../internal/service/ClusterMemberService.java  |   2 -
 .../service/ClusterMembersRGraphService.java    |  20 +-
 geode-pulse/src/main/resources/log4j2.xml       |  31 +
 geode-pulse/src/main/resources/pulse.properties |  23 +-
 .../controllers/PulseControllerJUnitTest.java   |   6 -
 19 files changed, 325 insertions(+), 889 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
----------------------------------------------------------------------
diff --git 
a/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
 
b/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
index 0ed5403..f81d7f4 100644
--- 
a/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
+++ 
b/geode-assembly/src/test/java/org/apache/geode/test/dunit/rules/EmbeddedPulseRule.java
@@ -18,37 +18,58 @@ package org.apache.geode.test.dunit.rules;
 import org.apache.geode.tools.pulse.internal.data.Repository;
 import org.junit.rules.ExternalResource;
 
-import java.util.function.Supplier;
-
 /**
  * This is used to test embedded pulse. If your test needs to check pulse's 
repository object for
  * assertions, use this rules to properly initialize and cleanup the repository
  *
+ *
+ *
  */
 public class EmbeddedPulseRule extends ExternalResource {
-  private Supplier<Integer> portSupplier;
   private Repository repository;
 
-  public EmbeddedPulseRule(Supplier<Integer> portSupplier) {
-    this.portSupplier = portSupplier;
-  }
-
   public Repository getRepository() {
     return repository;
   }
 
   protected void before() throws Throwable {
     repository = Repository.get();
-    repository.setJmxHost("localhost");
-    repository.setJmxPort(portSupplier.get() + "");
+    cleanup();
+    repository.setHost("localhost");
+  }
+
+  public void useJmxPort(int jmxPort) {
     repository.setJmxUseLocator(false);
+    repository.setPort(jmxPort + "");
+  }
+
+  public void useLocatorPort(int locatorPort) {
+    repository.setJmxUseLocator(true);
+    repository.setPort(locatorPort + "");
+  }
+
+  public void setLocatorSSL(boolean locatorSSL) {
+    repository.setUseSSLLocator(locatorSSL);
+  }
+
+  public void setJmxSSL(boolean jmxSSL) {
+    repository.setUseSSLManager(jmxSSL);
   }
 
   /**
    * Override to tear down your specific external resource.
    */
   protected void after() {
+    cleanup();
+  }
+
+  private void cleanup() {
     if (repository != null) {
+      repository.setPort("-1");
+      repository.setHost("");
+      repository.setJmxUseLocator(false);
+      repository.setUseSSLManager(false);
+      repository.setUseSSLManager(false);
       repository.removeAllClusters();
     }
   }

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java
----------------------------------------------------------------------
diff --git 
a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java
 
b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java
index 7278c84..832564f 100644
--- 
a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java
+++ 
b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityTest.java
@@ -17,28 +17,34 @@ package org.apache.geode.tools.pulse;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.security.SimpleTestSecurityManager;
+import org.apache.geode.test.dunit.rules.EmbeddedPulseRule;
 import org.apache.geode.test.dunit.rules.HttpClientRule;
-import org.apache.geode.test.dunit.rules.LocatorStarterRule;
+import org.apache.geode.test.dunit.rules.ServerStarterRule;
 import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.apache.geode.tools.pulse.internal.data.Cluster;
 import org.apache.http.HttpResponse;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
-import org.junit.rules.RuleChain;
 
 
 @Category(IntegrationTest.class)
 public class PulseSecurityTest {
 
-  private LocatorStarterRule locator =
-      new 
LocatorStarterRule().withSecurityManager(SimpleTestSecurityManager.class).withAutoStart();
-
-  private HttpClientRule client = new HttpClientRule(locator::getHttpPort);
+  @ClassRule
+  public static ServerStarterRule server =
+      new 
ServerStarterRule().withSecurityManager(SimpleTestSecurityManager.class).withJMXManager()
+          .withRegion(RegionShortcut.REPLICATE, "regionA");
 
   @Rule
-  public RuleChain ruleChain = RuleChain.outerRule(locator).around(client);
+  public EmbeddedPulseRule pulse = new EmbeddedPulseRule();
 
+  @Rule
+  public HttpClientRule client = new HttpClientRule(server::getHttpPort);
 
 
   @Test
@@ -88,4 +94,18 @@ public class PulseSecurityTest {
     assertThat(response.getStatusLine().getStatusCode()).isEqualTo(403);
   }
 
+  @Test
+  public void queryUsingEmbededPulseWillHaveAuthorizationEnabled() throws 
Exception {
+    pulse.useJmxPort(server.getJmxPort());
+    // using "cluster" to connect to jmx manager will not get authorized to 
execute query
+    Cluster cluster = pulse.getRepository().getCluster("cluster", "cluster");
+    ObjectNode result = cluster.executeQuery("select * from /regionA a order 
by a", null, 0);
+    assertThat(result.toString()).contains("cluster not authorized for 
DATA:READ");
+
+    // using "data" to connect to jmx manager will succeeed
+    cluster = pulse.getRepository().getCluster("data", "data");
+    result = cluster.executeQuery("select * from /regionA a order by a", null, 
0);
+    assertThat(result.toString()).contains("No Data Found");
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java
----------------------------------------------------------------------
diff --git 
a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java
 
b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java
index 3b9cd72..0bacd99 100644
--- 
a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java
+++ 
b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseSecurityWithSSLTest.java
@@ -56,7 +56,6 @@ public class PulseSecurityWithSSLTest {
     securityProps.setProperty(SSL_ENABLED_COMPONENTS, 
SecurableCommunicationChannels.JMX);
     securityProps.setProperty(SSL_KEYSTORE, jks.getCanonicalPath());
     securityProps.setProperty(SSL_KEYSTORE_PASSWORD, "password");
-    // securityProps.setProperty(SSL_KEYSTORE_TYPE, "JKS");
     securityProps.setProperty(SSL_TRUSTSTORE, jks.getCanonicalPath());
     securityProps.setProperty(SSL_TRUSTSTORE_PASSWORD, "password");
     securityProps.setProperty(SSL_PROTOCOLS, "TLSv1.2");

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
----------------------------------------------------------------------
diff --git 
a/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
 
b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
new file mode 100644
index 0000000..44fadb6
--- /dev/null
+++ 
b/geode-assembly/src/test/java/org/apache/geode/tools/pulse/PulseVerificationTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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 org.apache.geode.tools.pulse;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.geode.test.dunit.rules.EmbeddedPulseRule;
+import org.apache.geode.test.dunit.rules.HttpClientRule;
+import org.apache.geode.test.dunit.rules.LocatorStarterRule;
+import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.apache.geode.tools.pulse.internal.data.Cluster;
+import org.apache.http.HttpResponse;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+
+@Category(IntegrationTest.class)
+public class PulseVerificationTest {
+
+  @ClassRule
+  public static LocatorStarterRule locator =
+      new LocatorStarterRule().withJMXManager().withAutoStart();
+
+  @Rule
+  public EmbeddedPulseRule pulse = new EmbeddedPulseRule();
+
+  @Rule
+  public HttpClientRule client = new HttpClientRule(locator::getHttpPort);
+
+  @Test
+  public void loginWithIncorrectPassword() throws Exception {
+    HttpResponse response = client.loginToPulse("admin", "wrongPassword");
+    assertThat(response.getStatusLine().getStatusCode()).isEqualTo(302);
+    assertThat(response.getFirstHeader("Location").getValue())
+        .contains("/pulse/login.html?error=BAD_CREDS");
+
+    client.loginToPulseAndVerify("admin", "admin");
+  }
+
+  @Test
+  public void testConnectToJmx() throws Exception {
+    pulse.useJmxPort(locator.getJmxPort());
+    Cluster cluster = pulse.getRepository().getCluster("admin", null);
+    assertThat(cluster.isConnectedFlag()).isTrue();
+    assertThat(cluster.getServerCount()).isEqualTo(0);
+  }
+
+  @Test
+  public void testConnectToLocator() throws Exception {
+    pulse.useLocatorPort(locator.getPort());
+    Cluster cluster = pulse.getRepository().getCluster("admin", null);
+    assertThat(cluster.isConnectedFlag()).isTrue();
+    assertThat(cluster.getServerCount()).isEqualTo(0);
+  }
+}

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
index 62310e8..bf0b99c 100755
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
@@ -103,6 +103,7 @@ public class ManagementAgent {
   private static final String PULSE_EMBEDDED_PROP = "pulse.embedded";
   private static final String PULSE_PORT_PROP = "pulse.port";
   private static final String PULSE_USESSL_MANAGER = "pulse.useSSL.manager";
+  private static final String PULSE_USESSL_LOCATOR = "pulse.useSSL.locator";
 
   public ManagementAgent(DistributionConfig config) {
     this.config = config;
@@ -272,9 +273,12 @@ public class ManagementAgent {
           System.setProperty(PULSE_EMBEDDED_PROP, "true");
           System.setProperty(PULSE_PORT_PROP, "" + config.getJmxManagerPort());
 
-          final SocketCreator socketCreator =
+          final SocketCreator jmxSocketCreator =
               
SocketCreatorFactory.getSocketCreatorForComponent(SecurableCommunicationChannel.JMX);
-          System.setProperty(PULSE_USESSL_MANAGER, socketCreator.useSSL() + 
"");
+          final SocketCreator locatorSocketCreator = SocketCreatorFactory
+              
.getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR);
+          System.setProperty(PULSE_USESSL_MANAGER, jmxSocketCreator.useSSL() + 
"");
+          System.setProperty(PULSE_USESSL_LOCATOR, 
locatorSocketCreator.useSSL() + "");
 
           this.httpServer = JettyHelper.startJetty(this.httpServer);
 

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
index 101bae4..0de41c0 100755
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
@@ -2281,7 +2281,6 @@ public class LauncherLifecycleCommands extends 
AbstractCommandsSupport {
   @CliCommand(value = CliStrings.START_PULSE, help = 
CliStrings.START_PULSE__HELP)
   @CliMetaData(shellOnly = true, relatedTopic = 
{CliStrings.TOPIC_GEODE_MANAGER,
       CliStrings.TOPIC_GEODE_JMX, CliStrings.TOPIC_GEODE_M_AND_M})
-  // TODO change url parameter type to URL when I figure out the Converter 
logic in Gfsh
   public Result startPulse(@CliOption(key = CliStrings.START_PULSE__URL,
       unspecifiedDefaultValue = "http://localhost:7070/pulse";,
       help = CliStrings.START_PULSE__URL__HELP) final String url) {

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
index 35f494b..34dbf2e 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/PulseAppListener.java
@@ -18,25 +18,13 @@
 package org.apache.geode.tools.pulse.internal;
 
 import org.apache.geode.tools.pulse.internal.controllers.PulseController;
-import org.apache.geode.tools.pulse.internal.data.PulseConfig;
 import org.apache.geode.tools.pulse.internal.data.PulseConstants;
 import org.apache.geode.tools.pulse.internal.data.Repository;
-import org.apache.commons.lang.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.Level;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.InetAddress;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map.Entry;
 import java.util.Properties;
@@ -56,25 +44,8 @@ public class PulseAppListener implements 
ServletContextListener {
   private static final Logger logger = LogManager.getLogger();
   private final ResourceBundle resourceBundle = 
Repository.get().getResourceBundle();
 
-  // String object to store all messages which needs to be logged into the log
-  // file before logger gets initialized
-  private String messagesToBeLogged = "";
-
   private Properties pulseProperties;
   private Properties pulseSecurityProperties;
-  private Boolean sysPulseUseLocator;
-  private String sysPulseHost;
-  private String sysPulsePort;
-  private String jmxUserName;
-  private String jmxUserPassword;
-
-  private boolean sysPulseUseSSLLocator;
-  private boolean sysPulseUseSSLManager;
-
-  // This property determines if pulse webApp login is authenticated against
-  // GemFire integrated security or custom spring-security config provided
-  // in pulse-authentication-custom.xml
-  private boolean useGemFireCredentials;
 
   @Override
   public void contextDestroyed(ServletContextEvent event) {
@@ -89,36 +60,16 @@ public class PulseAppListener implements 
ServletContextListener {
 
   @Override
   public void contextInitialized(ServletContextEvent event) {
-
-    messagesToBeLogged = messagesToBeLogged
-        
.concat(formatLogString(resourceBundle.getString("LOG_MSG_CONTEXT_INITIALIZED")));
-
-    // Load Pulse version details
-    loadPulseVersionDetails();
-
+    logger.info(resourceBundle.getString("LOG_MSG_CONTEXT_INITIALIZED"));
     // Load Pulse Properties
     pulseProperties = loadProperties(PulseConstants.PULSE_PROPERTIES_FILE);
 
-    if (pulseProperties.isEmpty()) {
-      messagesToBeLogged = messagesToBeLogged
-          
.concat(formatLogString(resourceBundle.getString("LOG_MSG_PROPERTIES_NOT_FOUND")));
-    } else {
-      messagesToBeLogged = messagesToBeLogged
-          
.concat(formatLogString(resourceBundle.getString("LOG_MSG_PROPERTIES_FOUND")));
-
-      // set Pulse product support into the Pulse controller for access from
-      // client side
-      // to display the appropriate ui depending on which product is supported
-      // in present deployment
-      String pulseProduct =
-          
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_PRODUCTSUPPORT);
-    }
+    // Load Pulse version details
+    loadPulseVersionDetails();
 
+    // load pulse security properties
     pulseSecurityProperties = 
loadProperties(PulseConstants.PULSE_SECURITY_PROPERTIES_FILE);
 
-    // Initialize logger
-    initializeLogger();
-
     // Reference to repository
     Repository repository = Repository.get();
 
@@ -127,499 +78,79 @@ public class PulseAppListener implements 
ServletContextListener {
     boolean sysIsEmbedded = 
Boolean.getBoolean(PulseConstants.SYSTEM_PROPERTY_PULSE_EMBEDDED);
 
     if (sysIsEmbedded) {
-      // Application Pulse is running in Embedded Mode
+      // jmx connection parameters
       
logger.info(resourceBundle.getString("LOG_MSG_APP_RUNNING_EMBEDDED_MODE"));
-      repository.setIsEmbeddedMode(true);
-
-      sysPulseUseLocator = Boolean.FALSE;
-      try {
-        // Get host name of machine running pulse in embedded mode
-        sysPulseHost = InetAddress.getLocalHost().getCanonicalHostName();
-      } catch (Exception e) {
-        
logger.debug(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_UNKNOWN_HOST"), 
e);
-        // Set default host name
-        sysPulseHost = PulseConstants.GEMFIRE_DEFAULT_HOST;
-      }
-      sysPulsePort = 
System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_PORT);
-      if (StringUtils.isBlank(sysPulsePort)) {
-        sysPulsePort = PulseConstants.GEMFIRE_DEFAULT_PORT;
-      }
-
+      repository.setJmxUseLocator(false);
+      repository.setHost(PulseConstants.GEMFIRE_DEFAULT_HOST);
+      
repository.setPort(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_PORT,
+          PulseConstants.GEMFIRE_DEFAULT_PORT));
+
+      // SSL, all the other system properties are already set in the embedded 
VM
+      repository.setUseSSLManager(
+          
Boolean.valueOf(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_MANAGER)));
+      repository.setUseSSLLocator(
+          
Boolean.valueOf(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_LOCATOR)));
     } else {
-      // Application Pulse is running in Non-Embedded Mode
+      // jmx connection parameters
       
logger.info(resourceBundle.getString("LOG_MSG_APP_RUNNING_NONEMBEDDED_MODE"));
-      repository.setIsEmbeddedMode(false);
-
-      // Load JMX User Details
-      loadJMXUserDetails();
-      // Load locator and/or manager details
-      loadLocatorManagerDetails();
-
-      useGemFireCredentials = areWeUsingGemFireSecurityProfile(event);
-    }
-
-    // Set user details in repository
-    repository.setJmxUserName(jmxUserName);
-    repository.setJmxUserPassword(jmxUserPassword);
-
-    // Set locator/Manager details in repository
-    repository.setJmxUseLocator(sysPulseUseLocator);
-    repository.setJmxHost(sysPulseHost);
-    repository.setJmxPort(sysPulsePort);
-
-    // set SSL info
-    initializeSSL();
-    if (sysIsEmbedded) {
-      sysPulseUseSSLManager = Boolean
-          
.parseBoolean(System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_MANAGER));
-    }
-    repository.setUseSSLLocator(sysPulseUseSSLLocator);
-    repository.setUseSSLManager(sysPulseUseSSLManager);
-
-    repository.setUseGemFireCredentials(useGemFireCredentials);
-
-  }
-
-  /**
-   * Return true if pulse is configure to authenticate using gemfire 
integrated security
-   * 
-   * @param event
-   * @return
-   */
-  private boolean areWeUsingGemFireSecurityProfile(ServletContextEvent event) {
-    String profile = null;
-    WebApplicationContext ctx =
-        
WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
-    if (ctx.getEnvironment() != null) {
-      String[] profiles = ctx.getEnvironment().getActiveProfiles();
-      if (profiles != null && profiles.length > 0) {
-        StringBuilder sb = new StringBuilder();
-        for (String p : profiles)
-          sb.append(p).append(",");
-        logger.info("#SpringProfilesConfigured : {}", sb);
-        profile = ctx.getEnvironment().getActiveProfiles()[0];
-        logger.info("#First Profile : {}", profile);
-      } else {
-        logger.info("No SpringProfileConfigured using default spring profile");
-        return false;
-      }
-    }
-    if 
(PulseConstants.APPLICATION_PROPERTY_PULSE_SEC_PROFILE_GEMFIRE.equals(profile)) 
{
-      logger.info("Using gemfire integrated security profile");
-      return true;
-    }
-    return false;
-  }
-
-  // Function to load pulse version details from properties file
-  private void loadPulseVersionDetails() {
-
-    // Read version details from version property file
-    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-    InputStream inputStream =
-        
classLoader.getResourceAsStream(PulseConstants.PULSE_VERSION_PROPERTIES_FILE);
-
-    if (inputStream != null) {
-      Properties properties = new Properties();
-      try {
-        properties.load(inputStream);
-      } catch (IOException e) {
-        messagesToBeLogged = messagesToBeLogged.concat(
-            
formatLogString(resourceBundle.getString("LOG_MSG_EXCEPTION_LOADING_PROPERTIES_FILE")));
-      } finally {
-        try {
-          inputStream.close();
-        } catch (IOException e) {
-          messagesToBeLogged = messagesToBeLogged.concat(
-              
formatLogString(resourceBundle.getString("LOG_MSG_EXCEPTION_CLOSING_INPUT_STREAM")));
-        }
-      }
-      // Set pulse version details in common object
-      PulseController.pulseVersion
-          
.setPulseVersion(properties.getProperty(PulseConstants.PROPERTY_PULSE_VERSION, 
""));
-      PulseController.pulseVersion
-          
.setPulseBuildId(properties.getProperty(PulseConstants.PROPERTY_BUILD_ID, ""));
-      PulseController.pulseVersion
-          
.setPulseBuildDate(properties.getProperty(PulseConstants.PROPERTY_BUILD_DATE, 
""));
-      PulseController.pulseVersion
-          
.setPulseSourceDate(properties.getProperty(PulseConstants.PROPERTY_SOURCE_DATE, 
""));
-      PulseController.pulseVersion.setPulseSourceRevision(
-          properties.getProperty(PulseConstants.PROPERTY_SOURCE_REVISION, ""));
-      PulseController.pulseVersion.setPulseSourceRepository(
-          properties.getProperty(PulseConstants.PROPERTY_SOURCE_REPOSITORY, 
""));
-    }
-
-    // Log Pulse Version details into log file
-    messagesToBeLogged = messagesToBeLogged
-        
.concat(formatLogString(PulseController.pulseVersion.getPulseVersionLogMessage()));
-  }
-
-  private void initializeLogger() {
-
-    // Override default log configuration by properties which are provided in
-    // properties file.
-    loadLogDetailsFromPropertyFile();
-
-    // Override log configuration by properties which are provided in
-    // through system properties.
-    loadLogDetailsFromSystemProperties();
-
-    // Log messages stored in messagesToBeLogged
-    logger.info(messagesToBeLogged);
-    messagesToBeLogged = "";
-  }
-
-  // Function to load pulse properties from pulse.properties file
-  private Properties loadProperties(String propertyFile) {
-
-    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-    InputStream inputStream = classLoader.getResourceAsStream(propertyFile);
-    Properties properties = new Properties();
-
-    if (inputStream != null) {
-      messagesToBeLogged = messagesToBeLogged.concat(
-          formatLogString(propertyFile + " " + 
resourceBundle.getString("LOG_MSG_FILE_FOUND")));
-
-      try {
-        // Load properties from input stream
-        properties.load(inputStream);
-      } catch (IOException e1) {
-        messagesToBeLogged = messagesToBeLogged.concat(
-            
formatLogString(resourceBundle.getString("LOG_MSG_EXCEPTION_LOADING_PROPERTIES_FILE")
-                + " " + propertyFile));
-      } finally {
-        // Close input stream
-        try {
-          inputStream.close();
-        } catch (IOException e) {
-          messagesToBeLogged = messagesToBeLogged.concat(
-              
formatLogString(resourceBundle.getString("LOG_MSG_EXCEPTION_CLOSING_INPUT_STREAM")
-                  + " " + propertyFile));
-        }
-      }
-
-    } else {
-      messagesToBeLogged = messagesToBeLogged.concat(formatLogString(
-          resourceBundle.getString("LOG_MSG_COULD_NOT_READ_FILE") + " " + 
propertyFile));
-    }
-    return properties;
-  }
-
-  // Function to load Logging details from properties file
-  private void loadLogDetailsFromPropertyFile() {
-
-    // return, if Pulse Properties are not provided
-    if (pulseProperties.size() == 0) {
-      return;
-    }
-
-    messagesToBeLogged = messagesToBeLogged
-        
.concat(formatLogString(resourceBundle.getString("LOG_MSG_CHECK_LOG_PROPERTIES_IN_FILE")));
-
-    HashMap<String, String> logPropertiesHM = new HashMap<String, String>();
-
-    logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME,
-        
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME,
 ""));
-
-    
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION,
-        
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION,
 ""));
-
-    logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE,
-        
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE,
 ""));
-
-    logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT,
-        
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT,
 ""));
-
-    
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN,
-        
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN,
 ""));
-
-    logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL,
-        
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL, 
""));
-
-    logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND,
-        
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND,
 ""));
-
-    if (logPropertiesHM.size() == 0) {
-      messagesToBeLogged = messagesToBeLogged.concat(
-          
formatLogString(resourceBundle.getString("LOG_MSG_LOG_PROPERTIES_NOT_FOUND_IN_FILE")));
-    } else {
-      messagesToBeLogged = messagesToBeLogged.concat(
-          
formatLogString(resourceBundle.getString("LOG_MSG_LOG_PROPERTIES_FOUND_IN_FILE")));
-    }
-
-    setLogConfigurations(logPropertiesHM);
-  }
-
-  // Function to load Logging details from system properties
-  private void loadLogDetailsFromSystemProperties() {
-
-    messagesToBeLogged = messagesToBeLogged.concat(formatLogString(
-        
resourceBundle.getString("LOG_MSG_CHECK_LOG_PROPERTIES_IN_SYSTEM_PROPERTIES")));
-
-    HashMap<String, String> logPropertiesHM = new HashMap<String, String>();
-
-    String sysLogFileName =
-        
System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME);
-    String sysLogFileLocation =
-        
System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION);
-    String sysLogFileSize =
-        
System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE);
-    String sysLogFileCount =
-        
System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT);
-    String sysLogDatePattern =
-        
System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN);
-    String sysLogLevel = 
System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL);
-    String sysLogAppend = 
System.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND);
-
-    if (sysLogFileName == null || sysLogFileName.isEmpty()) {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME, "");
-    } else {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME, 
sysLogFileName);
-    }
-
-    if (sysLogFileLocation == null || sysLogFileLocation.isEmpty()) {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION, 
"");
-    } else {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION,
-          sysLogFileLocation);
-    }
-
-    if (sysLogFileSize == null || sysLogFileSize.isEmpty()) {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE, "");
-    } else {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE, 
sysLogFileSize);
-    }
-
-    if (sysLogFileCount == null || sysLogFileCount.isEmpty()) {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT, "");
-    } else {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT, 
sysLogFileCount);
-    }
-
-    if (sysLogDatePattern == null || sysLogDatePattern.isEmpty()) {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN, 
"");
-    } else {
-      
logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN,
-          sysLogDatePattern);
-    }
-
-    if (sysLogLevel == null || sysLogLevel.isEmpty()) {
-      logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL, 
"");
-    } else {
-      logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL, 
sysLogLevel);
-    }
-
-    if (sysLogAppend == null || sysLogAppend.isEmpty()) {
-      logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND, 
"");
-    } else {
-      logPropertiesHM.put(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND, 
sysLogAppend);
-    }
-
-    if (logPropertiesHM.size() == 0) {
-      messagesToBeLogged = messagesToBeLogged.concat(formatLogString(
-          
resourceBundle.getString("LOG_MSG_LOG_PROPERTIES_NOT_FOUND_IN_SYSTEM_PROPERTIES")));
-    } else {
-      messagesToBeLogged = messagesToBeLogged.concat(formatLogString(
-          
resourceBundle.getString("LOG_MSG_LOG_PROPERTIES_FOUND_IN_SYSTEM_PROPERTIES")));
-    }
-
-    setLogConfigurations(logPropertiesHM);
-  }
-
-  private void setLogConfigurations(HashMap<String, String> logPropertiesHM) {
-
-    PulseConfig pulseConfig = Repository.get().getPulseConfig();
-
-    // log file name
-    if (StringUtils
-        
.isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME)))
 {
-      pulseConfig.setLogFileName(
-          
logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILENAME));
-    }
-
-    // log file location
-    if (StringUtils.isNotBlank(
-        
logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION)))
 {
-      pulseConfig.setLogFileLocation(
-          
logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILELOCATION));
-    }
-
-    // log file size
-    if (StringUtils
-        
.isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE)))
 {
-      pulseConfig.setLogFileSize(Integer
-          
.parseInt(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILESIZE)));
-    }
-
-    // log file count
-    if (StringUtils
-        
.isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT)))
 {
-      pulseConfig.setLogFileCount(Integer
-          
.parseInt(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGFILECOUNT)));
-    }
-
-    // log message date pattern
-    if (StringUtils.isNotBlank(
-        
logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN))) 
{
-      pulseConfig.setLogDatePattern(
-          
logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGDATEPATTERN));
-    }
-
-    // log level
-    if (StringUtils
-        
.isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL)))
 {
-      pulseConfig.setLogLevel(Level.getLevel(
-          
logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGLEVEL).toUpperCase()));
-    }
-
-    // log append
-    if (StringUtils
-        
.isNotBlank(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND)))
 {
-      pulseConfig.setLogAppend(Boolean
-          
.valueOf(logPropertiesHM.get(PulseConstants.APPLICATION_PROPERTY_PULSE_LOGAPPEND)));
-    }
-
-  }
-
-  // Function to load JMX User details from properties
-  private void loadJMXUserDetails() {
-    logger.info(resourceBundle.getString("LOG_MSG_GET_JMX_USER_DETAILS"));
-
-    if (pulseProperties.isEmpty()) {
-      logger.info("{}{}", 
resourceBundle.getString("LOG_MSG_JMX_USER_DETAILS_NOT_FOUND"),
-          resourceBundle.getString("LOG_MSG_REASON_USER_DETAILS_NOT_FOUND"));
-    } else {
-      jmxUserName =
-          
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_JMXUSERNAME,
 "");
-      jmxUserPassword =
-          
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_JMXPASSWORD,
 "");
-
-      if (jmxUserName.isEmpty() || jmxUserPassword.isEmpty()) {
-        logger.info("{}{}", 
resourceBundle.getString("LOG_MSG_JMX_USER_DETAILS_NOT_FOUND"),
-            resourceBundle.getString("LOG_MSG_REASON_USER_DETAILS_NOT_FOUND"));
-      } else {
-        
logger.info(resourceBundle.getString("LOG_MSG_JMX_USER_DETAILS_FOUND"));
-      }
-    }
-  }
-
-  // Function to set SSL VM arguments
-  private void initializeSSL() {
-    logger.info(resourceBundle.getString("LOG_MSG_GET_SSL_DETAILS"));
-
-
-    this.sysPulseUseSSLLocator = Boolean.valueOf(
-        
pulseProperties.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_LOCATOR,
 "false"));
-
-    this.sysPulseUseSSLManager = Boolean.valueOf(
-        
pulseProperties.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_MANAGER,
 "false"));
-
-
-    if ((sysPulseUseSSLLocator || sysPulseUseSSLManager)) {
-      Properties sslProperties = new Properties();
+      repository.setJmxUseLocator(Boolean.valueOf(
+          
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_USELOCATOR)));
+      
repository.setHost(pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_HOST,
+          PulseConstants.GEMFIRE_DEFAULT_HOST));
+      
repository.setPort(pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_PORT,
+          PulseConstants.GEMFIRE_DEFAULT_PORT));
+
+      // SSL
+      repository.setUseSSLManager(Boolean.valueOf(pulseProperties
+          .getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_MANAGER, 
"false")));
+      repository.setUseSSLLocator(Boolean.valueOf(pulseProperties
+          .getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_USESSL_LOCATOR, 
"false")));
+
+      // set the ssl related properties found in pulsesecurity.properties
       if (!pulseSecurityProperties.isEmpty()) {
         Set entrySet = pulseSecurityProperties.entrySet();
         for (Iterator it = entrySet.iterator(); it.hasNext();) {
           Entry<String, String> entry = (Entry<String, String>) it.next();
           String key = entry.getKey();
           if (key.startsWith("javax.net.ssl.")) {
-
             String val = entry.getValue();
             System.setProperty(key, val);
-            sslProperties.setProperty(key, val);
           }
         }
       }
-      if (sslProperties.isEmpty()) {
-        logger.warn(resourceBundle.getString("LOG_MSG_SSL_NOT_SET"));
-      }
     }
-
   }
 
-  // Function to load locator and/or manager details
-  private void loadLocatorManagerDetails() {
-
-    // Get locator details through System Properties
-    logger.info(resourceBundle.getString("LOG_MSG_GET_LOCATOR_DETAILS_1"));
-
-    // Required System properties are
-    // -Dpulse.embedded="false" -Dpulse.useLocator="false"
-    // -Dpulse.host="192.168.2.11" -Dpulse.port="2099"
-    sysPulseUseLocator = 
Boolean.getBoolean(PulseConstants.SYSTEM_PROPERTY_PULSE_USELOCATOR);
-    sysPulseHost = 
System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_HOST);
-    sysPulsePort = 
System.getProperty(PulseConstants.SYSTEM_PROPERTY_PULSE_PORT);
-
-    if (sysPulseHost == null || sysPulseHost.isEmpty() || sysPulsePort == null
-        || sysPulsePort.isEmpty()) {
-      logger.info("{}{}", 
resourceBundle.getString("LOG_MSG_LOCATOR_DETAILS_NOT_FOUND"),
-          
resourceBundle.getString("LOG_MSG_REASON_LOCATOR_DETAILS_NOT_FOUND_1"));
-      logger.info(resourceBundle.getString("LOG_MSG_GET_LOCATOR_DETAILS_2"));
-
-      if (pulseProperties.isEmpty()) {
-        logger.info("{}{}", 
resourceBundle.getString("LOG_MSG_LOCATOR_DETAILS_NOT_FOUND"),
-            
resourceBundle.getString("LOG_MSG_REASON_LOCATOR_DETAILS_NOT_FOUND_2"));
-
-        sysPulseHost = "";
-        sysPulsePort = "";
-      } else {
-        logger.info(resourceBundle.getString("LOG_MSG_LOCATOR_DETAILS_FOUND"));
-
-        sysPulseUseLocator = Boolean.valueOf(
-            
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_USELOCATOR,
 ""));
-        sysPulseHost =
-            
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_HOST, "");
-        sysPulsePort =
-            
pulseProperties.getProperty(PulseConstants.APPLICATION_PROPERTY_PULSE_PORT, "");
-      }
-    } else {
-      logger.info(resourceBundle.getString("LOG_MSG_LOCATOR_DETAILS_FOUND"));
-    }
+  // Function to load pulse version details from properties file
+  private void loadPulseVersionDetails() {
+    Properties properties = 
loadProperties(PulseConstants.PULSE_VERSION_PROPERTIES_FILE);
+    // Set pulse version details in common object
+    PulseController.pulseVersion
+        
.setPulseVersion(properties.getProperty(PulseConstants.PROPERTY_PULSE_VERSION, 
""));
+    PulseController.pulseVersion
+        
.setPulseBuildId(properties.getProperty(PulseConstants.PROPERTY_BUILD_ID, ""));
+    PulseController.pulseVersion
+        
.setPulseBuildDate(properties.getProperty(PulseConstants.PROPERTY_BUILD_DATE, 
""));
+    PulseController.pulseVersion
+        
.setPulseSourceDate(properties.getProperty(PulseConstants.PROPERTY_SOURCE_DATE, 
""));
+    PulseController.pulseVersion.setPulseSourceRevision(
+        properties.getProperty(PulseConstants.PROPERTY_SOURCE_REVISION, ""));
+    PulseController.pulseVersion.setPulseSourceRepository(
+        properties.getProperty(PulseConstants.PROPERTY_SOURCE_REPOSITORY, ""));
+    logger.info(PulseController.pulseVersion.getPulseVersionLogMessage());
   }
 
-  private String formatLogString(String logMessage) {
-
-    DateFormat df = new 
SimpleDateFormat(PulseConstants.LOG_MESSAGE_DATE_PATTERN);
-    // DateFormat df = new
-    // SimpleDateFormat(Repository.get().getPulseConfig().getLogDatePattern());
-    StringWriter sw = new StringWriter();
-    PrintWriter pw = new PrintWriter(sw);
-
-    pw.println();
-    pw.print("[");
-    pw.print("INFO");
-    pw.print(" ");
-    pw.print(df.format(new Date(System.currentTimeMillis())));
-    String threadName = Thread.currentThread().getName();
-    if (threadName != null) {
-      pw.print(" ");
-      pw.print(threadName);
-    }
-    pw.print(" tid=0x");
-    pw.print(Long.toHexString(Thread.currentThread().getId()));
-    pw.print("] ");
-    pw.print("(msgTID=");
-    pw.print("");
-
-    pw.print(" msgSN=");
-    pw.print("");
-
-    pw.print(") ");
-
-    pw.println("[" + PulseConstants.APP_NAME + "]");
-
-    pw.println(Logger.class.getName());
-
-    pw.println(logMessage);
-
-    pw.close();
-    try {
-      sw.close();
-    } catch (IOException ignore) {
+  // Function to load pulse properties from pulse.properties file
+  private Properties loadProperties(String propertyFile) {
+    final Properties properties = new Properties();
+    try (final InputStream stream =
+        
Thread.currentThread().getContextClassLoader().getResourceAsStream(propertyFile))
 {
+      logger.info(propertyFile + " " + 
resourceBundle.getString("LOG_MSG_FILE_FOUND"));
+      properties.load(stream);
+    } catch (IOException e) {
+      
logger.error(resourceBundle.getString("LOG_MSG_EXCEPTION_LOADING_PROPERTIES_FILE"),
 e);
     }
-    String result = sw.toString();
-    return result;
 
+    return properties;
   }
-
 }

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
index c878879..e609477 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
@@ -149,14 +149,6 @@ public class PulseController {
     ObjectNode responseJSON = mapper.createObjectNode();
 
     try {
-      // Reference to repository
-      Repository repository = Repository.get();
-      // set pulse web app url
-      String pulseWebAppUrl = request.getScheme() + "://" + 
request.getServerName() + ":"
-          + request.getServerPort() + request.getContextPath();
-
-      repository.setPulseWebAppUrl(pulseWebAppUrl);
-
       // Response
       responseJSON.put("pulseVersion", 
PulseController.pulseVersion.getPulseVersion());
       responseJSON.put("buildId", 
PulseController.pulseVersion.getPulseBuildId());

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java
index 78e92d4..5b552a1 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Cluster.java
@@ -34,7 +34,6 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
-import java.net.ConnectException;
 import java.net.URL;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
@@ -71,9 +70,9 @@ public class Cluster extends Thread {
   private final ResourceBundle resourceBundle = 
Repository.get().getResourceBundle();
 
   private String jmxUserName;
-  private String jmxUserPassword;
   private String serverName;
   private String port;
+  private JMXConnector jmxConnector;
   private int stale = 0;
   private double loadPerSec;
   private CountDownLatch clusterHasBeenInitialized;
@@ -2276,19 +2275,14 @@ public class Cluster extends Thread {
    * @param host host name
    * @param port port
    * @param userName pulse user name
-   * @param userPassword pulse user password
-   * @throws ConnectException
    */
-  public Cluster(String host, String port, String userName, String 
userPassword)
-      throws ConnectException {
+  public Cluster(String host, String port, String userName) {
     this.serverName = host;
     this.port = port;
     this.jmxUserName = userName;
-    this.jmxUserPassword = userPassword;
 
     this.updater = ClusterDataFactory.getUpdater(this, host, port);
     this.clusterHasBeenInitialized = new CountDownLatch(1);
-    // start();
   }
 
   public void waitForInitialization(long timeout, TimeUnit unit) throws 
InterruptedException {
@@ -2385,18 +2379,6 @@ public class Cluster extends Thread {
     return this.jmxUserName;
   }
 
-  public void setJmxUserName(String jmxUserName) {
-    this.jmxUserName = jmxUserName;
-  }
-
-  public String getJmxUserPassword() {
-    return this.jmxUserPassword;
-  }
-
-  public void setJmxUserPassword(String jmxUserPassword) {
-    this.jmxUserPassword = jmxUserPassword;
-  }
-
   public String getConnectionErrorMsg() {
     return this.connectionErrorMsg;
   }
@@ -2818,14 +2800,25 @@ public class Cluster extends Thread {
     return this.getDataBrowser().deleteQueryById(userId, queryId);
   }
 
-  public JMXConnector connectToGemFire() {
-    if (this.updater instanceof JMXDataUpdater) {
-      return ((JMXDataUpdater) this.updater).getJMXConnection(false);
-    } else {
-      return null;
+  public void connectToGemFire(String password) {
+    jmxConnector = this.updater.connect(this.getJmxUserName(), password);
+
+    // if connected
+    if (jmxConnector != null) {
+      // Start Thread
+      this.start();
+      try {
+        this.waitForInitialization(15, TimeUnit.SECONDS);
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
     }
   }
 
+  public JMXConnector getJMXConnector() {
+    return this.jmxConnector;
+  }
+
   /**
    * inner class for creating Mock Data
    *

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
index 3ec8207..fb837ea 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/IClusterUpdater.java
@@ -19,6 +19,8 @@ package org.apache.geode.tools.pulse.internal.data;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
+import javax.management.remote.JMXConnector;
+
 /**
  * Interface having updateData() function which is getting Override by both 
MockDataUpdater and
  * JMXDataUpdater
@@ -30,4 +32,8 @@ public interface IClusterUpdater {
   boolean updateData();
 
   ObjectNode executeQuery(String queryText, String members, int limit);
+
+  default JMXConnector connect(String username, String password) {
+    return null;
+  }
 }

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java
index c74e3cd..2da74f1 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/JMXDataUpdater.java
@@ -27,7 +27,6 @@ import org.apache.logging.log4j.Logger;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.lang.management.ManagementFactory;
 import java.math.BigDecimal;
 import java.net.Inet4Address;
 import java.net.Inet6Address;
@@ -49,7 +48,6 @@ import javax.management.AttributeList;
 import javax.management.AttributeNotFoundException;
 import javax.management.InstanceNotFoundException;
 import javax.management.IntrospectionException;
-import javax.management.InvalidAttributeValueException;
 import javax.management.MBeanException;
 import javax.management.MBeanServerConnection;
 import javax.management.MalformedObjectNameException;
@@ -75,7 +73,7 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
   private final ResourceBundle resourceBundle = 
Repository.get().getResourceBundle();
 
   private JMXConnector conn = null;
-  private MBeanServerConnection mbs;
+  private MBeanServerConnection mbs = null;
   private final String serverName;
   private final String port;
   private Boolean isAddedNotiListner = false;
@@ -87,7 +85,6 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
   private ObjectName MBEAN_OBJECT_NAME_MEMBER;
   private ObjectName MBEAN_OBJECT_NAME_MEMBER_MANAGER;
   private ObjectName MBEAN_OBJECT_NAME_STATEMENT_DISTRIBUTED;
-  private ObjectName MBEAN_OBJECT_NAME_TABLE_AGGREGATE;
 
   private Set<ObjectName> systemMBeans = null;
 
@@ -124,10 +121,10 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
   private JmxManagerInfo getManagerInfoFromLocator(Repository repository) {
 
     try {
-      String locatorHost = repository.getJmxHost();
-      int locatorPort = Integer.parseInt(repository.getJmxPort());
+      String locatorHost = repository.getHost();
+      int locatorPort = Integer.parseInt(repository.getPort());
 
-      logger.info("{} : {} & {} : {}", 
resourceBundle.getString("LOG_MSG_HOST"), locatorHost,
+      logger.info("{}={} & {}={}", resourceBundle.getString("LOG_MSG_HOST"), 
locatorHost,
           resourceBundle.getString("LOG_MSG_PORT"), locatorPort);
 
       InetAddress inetAddr = InetAddress.getByName(locatorHost);
@@ -135,11 +132,9 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
       if ((inetAddr instanceof Inet4Address) || (inetAddr instanceof 
Inet6Address)) {
 
         if (inetAddr instanceof Inet4Address) {
-          logger.info("{} - {}", 
resourceBundle.getString("LOG_MSG_LOCATOR_IPV4_ADDRESS"),
-              inetAddr);
+          logger.info("{}: {}", 
resourceBundle.getString("LOG_MSG_LOCATOR_IPV4_ADDRESS"), inetAddr);
         } else {
-          logger.info("{} - {}", 
resourceBundle.getString("LOG_MSG_LOCATOR_IPV6_ADDRESS"),
-              inetAddr);
+          logger.info("{}: {}", 
resourceBundle.getString("LOG_MSG_LOCATOR_IPV6_ADDRESS"), inetAddr);
         }
 
         JmxManagerInfo jmxManagerInfo = 
JmxManagerFinder.askLocatorForJmxManager(inetAddr,
@@ -168,19 +163,11 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
     return null;
   }
 
-  /**
-   * Default connection is Pulse which uses configured userName and password
-   */
-  public JMXConnector getJMXConnection() {
-    return getJMXConnection(true);
-  }
 
   /**
-   * Get connection for given userName and password. This is used for 
DataBrowser queries which has
-   * to be fired using credentials provided at pulse login page
+   * Get the jmx connection
    */
-  public JMXConnector getJMXConnection(final boolean registerURL) {
-    JMXConnector connection = null;
+  public JMXConnector connect(String username, String password) {
     // Reference to repository
     Repository repository = Repository.get();
     try {
@@ -196,7 +183,7 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
         if (jmxManagerInfo.port == 0) {
           
logger.info(resourceBundle.getString("LOG_MSG_LOCATOR_COULD_NOT_FIND_MANAGER"));
         } else {
-          logger.info("{} : {} : {} & {} : {}{}",
+          logger.info("{}: {}={} & {}={}, {}",
               resourceBundle.getString("LOG_MSG_LOCATOR_FOUND_MANAGER"),
               resourceBundle.getString("LOG_MSG_HOST"), jmxManagerInfo.host,
               resourceBundle.getString("LOG_MSG_PORT"), jmxManagerInfo.port,
@@ -207,14 +194,14 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
               formJMXServiceURLString(jmxManagerInfo.host, 
String.valueOf(jmxManagerInfo.port));
         }
       } else {
-        logger.info("{} : {} & {} : {}", 
resourceBundle.getString("LOG_MSG_HOST"), this.serverName,
+        logger.info("{}={} & {}={}", resourceBundle.getString("LOG_MSG_HOST"), 
this.serverName,
             resourceBundle.getString("LOG_MSG_PORT"), this.port);
         jmxSerURL = formJMXServiceURLString(this.serverName, this.port);
       }
 
       if (StringUtils.isNotBlank(jmxSerURL)) {
         JMXServiceURL url = new JMXServiceURL(jmxSerURL);
-        String[] creds = {this.cluster.getJmxUserName(), 
this.cluster.getJmxUserPassword()};
+        String[] creds = {username, password};
         Map<String, Object> env = new HashMap<String, Object>();
         env.put(JMXConnector.CREDENTIALS, creds);
 
@@ -223,33 +210,24 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
           env.put("com.sun.jndi.rmi.factory.socket", new 
SslRMIClientSocketFactory());
         }
         logger.info("Connecting to jmxURL : {}", jmxSerURL);
-        connection = JMXConnectorFactory.connect(url, env);
-
-        // Register Pulse URL if not already present in the JMX Manager
-        if (registerURL) {
-          registerPulseUrlToManager(connection);
-        }
+        this.conn = JMXConnectorFactory.connect(url, env);
+        this.mbs = this.conn.getMBeanServerConnection();
+        cluster.setConnectedFlag(true);
       }
     } catch (Exception e) {
-      if (e instanceof UnknownHostException) {
-        cluster
-            
.setConnectionErrorMsg(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_UNKNOWN_HOST"));
-      }
-
-      StringWriter swBuffer = new StringWriter();
-      PrintWriter prtWriter = new PrintWriter(swBuffer);
-      e.printStackTrace(prtWriter);
-      logger.fatal("Exception Details : {}\n", swBuffer);
+      cluster.setConnectedFlag(false);
+      cluster.setConnectionErrorMsg(e.getMessage());
+      logger.fatal(e.getMessage(), e);
       if (this.conn != null) {
         try {
           this.conn.close();
         } catch (Exception e1) {
-          logger.fatal("Error closing JMX connection {}\n", swBuffer);
+          logger.fatal(e1.getMessage(), e1);
         }
         this.conn = null;
       }
     }
-    return connection;
+    return this.conn;
   }
 
   private String formJMXServiceURLString(String host, String port) throws 
UnknownHostException {
@@ -276,92 +254,13 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
     return jmxSerURL;
   }
 
-  // Method registers Pulse URL if not already present in the JMX Manager
-  private void registerPulseUrlToManager(JMXConnector connection)
-      throws IOException, AttributeNotFoundException, 
InstanceNotFoundException, MBeanException,
-      ReflectionException, MalformedObjectNameException, 
InvalidAttributeValueException {
-    
logger.info(resourceBundle.getString("LOG_MSG_REGISTERING_APP_URL_TO_MANAGER"));
-
-    // Reference to repository
-    Repository repository = Repository.get();
-
-    // Register Pulse URL if not already present in the JMX Manager
-    if (connection != null) {
-      MBeanServerConnection mbsc = connection.getMBeanServerConnection();
-
-      Set<ObjectName> mbeans = 
mbsc.queryNames(this.MBEAN_OBJECT_NAME_MEMBER_MANAGER, null);
-
-      for (ObjectName mbeanName : mbeans) {
-        String presentUrl =
-            (String) mbsc.getAttribute(mbeanName, 
PulseConstants.MBEAN_MANAGER_ATTRIBUTE_PULSEURL);
-        String pulseWebAppUrl = repository.getPulseWebAppUrl();
-        if (pulseWebAppUrl != null && (presentUrl == null || 
!pulseWebAppUrl.equals(presentUrl))) {
-          
logger.debug(resourceBundle.getString("LOG_MSG_SETTING_APP_URL_TO_MANAGER"));
-          Attribute pulseUrlAttr =
-              new Attribute(PulseConstants.MBEAN_MANAGER_ATTRIBUTE_PULSEURL, 
pulseWebAppUrl);
-          mbsc.setAttribute(mbeanName, pulseUrlAttr);
-        } else {
-          
logger.debug(resourceBundle.getString("LOG_MSG_APP_URL_ALREADY_PRESENT_IN_MANAGER"));
-        }
-      }
-    }
-  }
-
-  private boolean isConnected() {
-    // Reference to repository
-    Repository repository = Repository.get();
-    if (repository.getIsEmbeddedMode()) {
-      if (this.mbs == null) {
-        this.mbs = ManagementFactory.getPlatformMBeanServer();
-        cluster.setConnectedFlag(true);
-      }
-    } else {
-      try {
-        if (this.conn == null) {
-          cluster.setConnectedFlag(false);
-          
cluster.setConnectionErrorMsg(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_NOT_FOUND")
-              + " " + 
resourceBundle.getString("LOG_MSG_JMX_GETTING_NEW_CONNECTION"));
-          logger.debug("{} {}", 
resourceBundle.getString("LOG_MSG_JMX_CONNECTION_NOT_FOUND"),
-              resourceBundle.getString("LOG_MSG_JMX_GET_NEW_CONNECTION"));
-          this.conn = getJMXConnection();
-          if (this.conn != null) {
-            this.mbs = this.conn.getMBeanServerConnection();
-            cluster.setConnectedFlag(true);
-          } else {
-            
logger.info(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_NOT_FOUND"));
-            return false;
-          }
-        } else {
-          
logger.debug(resourceBundle.getString("LOG_MSG_JMX_CONNECTION_IS_AVAILABLE"));
-          cluster.setConnectedFlag(true);
-          if (this.mbs == null) {
-            this.mbs = this.conn.getMBeanServerConnection();
-          }
-        }
-      } catch (Exception e) {
-        this.mbs = null;
-        if (this.conn != null) {
-          try {
-            this.conn.close();
-          } catch (Exception e1) {
-            logger.fatal(e);
-          }
-        }
-        this.conn = null;
-        return false;
-      }
-    }
-
-    return true;
-  }
-
   /**
    * function used for updating Cluster Data.
    */
   @Override
   public boolean updateData() {
     try {
-      if (!this.isConnected()) {
+      if (this.conn == null) {
         return false;
       }
 
@@ -377,9 +276,6 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
         cluster.getDeletedRegions().add(region.getFullPath());
       }
 
-      // try {
-
-      // Cluster
       this.systemMBeans = 
this.mbs.queryNames(this.MBEAN_OBJECT_NAME_SYSTEM_DISTRIBUTED, null);
       for (ObjectName sysMBean : this.systemMBeans) {
         updateClusterSystem(sysMBean);
@@ -389,9 +285,6 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
       Set<ObjectName> regionMBeans =
           this.mbs.queryNames(this.MBEAN_OBJECT_NAME_REGION_DISTRIBUTED, null);
 
-      Set<ObjectName> tableMBeans =
-          this.mbs.queryNames(this.MBEAN_OBJECT_NAME_TABLE_AGGREGATE, null);
-
       // For Gemfire
       for (ObjectName regMBean : regionMBeans) {
         updateClusterRegion(regMBean);
@@ -440,19 +333,15 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
         updateClusterStatement(stmtObjectName);
       }
     } catch (IOException ioe) {
-
-      // write errors
-      StringWriter swBuffer = new StringWriter();
-      PrintWriter prtWriter = new PrintWriter(swBuffer);
-      ioe.printStackTrace(prtWriter);
-      logger.fatal("IOException Details : {}\n", swBuffer);
+      logger.fatal(ioe.getMessage(), ioe);
       this.mbs = null;
       if (this.conn != null) {
         try {
           this.conn.close();
         } catch (IOException e1) {
-          logger.fatal("Error closing JMX connection {}\n", swBuffer);
+          logger.fatal(e1.getMessage(), e1);
         }
+        this.conn = null;
       }
 
       return false;

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java
index 52e13a7..c3a33fd 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/data/Repository.java
@@ -22,13 +22,11 @@ import org.apache.logging.log4j.Logger;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 
-import java.net.ConnectException;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.Map;
 import java.util.ResourceBundle;
-import java.util.concurrent.TimeUnit;
 
 /**
  * A Singleton instance of the memory cache for clusters.
@@ -41,17 +39,10 @@ public class Repository {
   private static Repository instance = new Repository();
   private HashMap<String, Cluster> clusterMap = new HashMap<String, Cluster>();
   private Boolean jmxUseLocator;
-  private String jmxHost;
-  private String jmxPort;
-  private String jmxUserName;
-  private String jmxUserPassword;
-  private Boolean isEmbeddedMode;
+  private String host;
+  private String port;
   private boolean useSSLLocator = false;
   private boolean useSSLManager = false;
-  private boolean useGemFireCredentials = false;
-
-
-  private String pulseWebAppUrl;
 
   Locale locale =
       new Locale(PulseConstants.APPLICATION_LANGUAGE, 
PulseConstants.APPLICATION_COUNTRY);
@@ -77,44 +68,20 @@ public class Repository {
     this.jmxUseLocator = jmxUseLocator;
   }
 
-  public String getJmxHost() {
-    return this.jmxHost;
-  }
-
-  public void setJmxHost(String jmxHost) {
-    this.jmxHost = jmxHost;
-  }
-
-  public String getJmxPort() {
-    return this.jmxPort;
-  }
-
-  public void setJmxPort(String jmxPort) {
-    this.jmxPort = jmxPort;
+  public String getHost() {
+    return this.host;
   }
 
-  public String getJmxUserName() {
-    return this.jmxUserName;
+  public void setHost(String jmxHost) {
+    this.host = jmxHost;
   }
 
-  public void setJmxUserName(String jmxUserName) {
-    this.jmxUserName = jmxUserName;
+  public String getPort() {
+    return this.port;
   }
 
-  public String getJmxUserPassword() {
-    return this.jmxUserPassword;
-  }
-
-  public void setJmxUserPassword(String jmxUserPassword) {
-    this.jmxUserPassword = jmxUserPassword;
-  }
-
-  public Boolean getIsEmbeddedMode() {
-    return this.isEmbeddedMode;
-  }
-
-  public void setIsEmbeddedMode(Boolean isEmbeddedMode) {
-    this.isEmbeddedMode = isEmbeddedMode;
+  public void setPort(String jmxPort) {
+    this.port = jmxPort;
   }
 
   public boolean isUseSSLLocator() {
@@ -133,79 +100,42 @@ public class Repository {
     this.useSSLManager = useSSLManager;
   }
 
-  public String getPulseWebAppUrl() {
-    return this.pulseWebAppUrl;
-  }
-
-  public void setPulseWebAppUrl(String pulseWebAppUrl) {
-    this.pulseWebAppUrl = pulseWebAppUrl;
-  }
-
   public PulseConfig getPulseConfig() {
     return this.pulseConfig;
   }
 
-  public void setPulseConfig(PulseConfig pulseConfig) {
-    this.pulseConfig = pulseConfig;
-  }
 
   /**
-   * we're maintaining a 1:1 mapping between webapp and cluster, there is no 
need for a map of
-   * clusters based on the host and port We are using this clusterMap to 
maintain cluster for
-   * different users now. For a single-user connection to gemfire JMX, we will 
use the default
-   * username/password in the pulse.properties (# JMX User Properties ) 
pulse.jmxUserName=admin
-   * pulse.jmxUserPassword=admin
+   * this will return a cluster already connected to the geode jmx manager for 
the user in the
+   * request
    *
    * But for multi-user connections to gemfireJMX, i.e pulse that uses gemfire 
integrated security,
    * we will need to get the username form the context
    */
   public Cluster getCluster() {
-    String username = null;
-    String password = null;
-    if (useGemFireCredentials) {
-      Authentication auth = 
SecurityContextHolder.getContext().getAuthentication();
-      if (auth != null) {
-        username = auth.getName();
-        password = (String) auth.getCredentials();
-      }
-    } else {
-      username = this.jmxUserName;
-      password = this.jmxUserPassword;
-    }
-    return this.getCluster(username, password);
+    Authentication auth = 
SecurityContextHolder.getContext().getAuthentication();
+    if (auth == null)
+      return null;
+    return getCluster(auth.getName(), null);
   }
 
   public Cluster getCluster(String username, String password) {
     synchronized (this.clusterMap) {
-      String key = username;
-      Cluster data = this.clusterMap.get(key);
-
+      Cluster data = clusterMap.get(username);
       if (data == null) {
-        try {
-          logger.info("{} : {}", 
resourceBundle.getString("LOG_MSG_CREATE_NEW_THREAD"), key);
-          data = new Cluster(this.jmxHost, this.jmxPort, username, password);
-          // Assign name to thread created
-          data.setName(
-              PulseConstants.APP_NAME + "-" + this.jmxHost + ":" + 
this.jmxPort + ":" + username);
-          // Start Thread
-          data.start();
-          data.waitForInitialization(15, TimeUnit.SECONDS);
-          this.clusterMap.put(key, data);
-        } catch (ConnectException | InterruptedException e) {
-          data = null;
-          logger.debug(e);
+        logger.info(resourceBundle.getString("LOG_MSG_CREATE_NEW_THREAD") + " 
: " + username);
+        data = new Cluster(this.host, this.port, username);
+        // Assign name to thread created
+        data.setName(PulseConstants.APP_NAME + "-" + this.host + ":" + 
this.port + ":" + username);
+        data.connectToGemFire(password);
+        if (data.isConnectedFlag()) {
+          this.clusterMap.put(username, data);
         }
-      } else {
-        data.setJmxUserPassword(password);
-
       }
       return data;
     }
   }
 
-  private String getClusterKey(String host, String port) {
-    return host + ":" + port;
-  }
 
   // This method is used to remove all cluster threads
   public void removeAllClusters() {
@@ -226,14 +156,5 @@ public class Repository {
     return this.resourceBundle;
   }
 
-  public boolean isUseGemFireCredentials() {
-    return useGemFireCredentials;
-  }
-
-  public void setUseGemFireCredentials(boolean useGemFireCredentials) {
-    this.useGemFireCredentials = useGemFireCredentials;
-  }
-
-
 
 }

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java
index 096bf6f..2b110bc 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/GemFireAuthenticationProvider.java
@@ -14,21 +14,19 @@
  */
 package org.apache.geode.tools.pulse.internal.security;
 
-import java.util.Collection;
-import javax.management.remote.JMXConnector;
-
 import org.apache.geode.tools.pulse.internal.data.Repository;
-
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.AuthenticationProvider;
-import 
org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.authentication.BadCredentialsException;
 import 
org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.core.GrantedAuthority;
 
+import java.util.Collection;
+import javax.management.remote.JMXConnector;
+
 /**
  * Spring security AuthenticationProvider for GemFire. It connects to gemfire 
manager using given
  * credentials. Successful connect is treated as successful authentication and 
web user is
@@ -44,7 +42,6 @@ public class GemFireAuthenticationProvider implements 
AuthenticationProvider {
 
   @Override
   public Authentication authenticate(Authentication authentication) throws 
AuthenticationException {
-
     if (authentication instanceof GemFireAuthentication) {
       GemFireAuthentication gemAuth = (GemFireAuthentication) authentication;
       logger.debug("GemAuthentication is connected? = {}", gemAuth.getJmxc());
@@ -55,21 +52,17 @@ public class GemFireAuthenticationProvider implements 
AuthenticationProvider {
     String name = authentication.getName();
     String password = authentication.getCredentials().toString();
 
-    try {
-      logger.debug("Connecting to GemFire with user={}", name);
-      JMXConnector jmxc = Repository.get().getCluster(name, 
password).connectToGemFire();
-      if (jmxc != null) {
-        Collection<GrantedAuthority> list = 
GemFireAuthentication.populateAuthorities(jmxc);
-        GemFireAuthentication auth = new 
GemFireAuthentication(authentication.getPrincipal(),
-            authentication.getCredentials(), list, jmxc);
-        logger.debug("For user " + name + " authList={}", list);
-        return auth;
-      } else {
-        throw new AuthenticationServiceException("JMX Connection unavailable");
-      }
-    } catch (Exception e) {
-      throw new BadCredentialsException("Error connecting to GemFire JMX 
Server", e);
+    logger.debug("Connecting to GemFire with user=" + name);
+    JMXConnector jmxc = Repository.get().getCluster(name, 
password).getJMXConnector();
+    if (jmxc == null) {
+      throw new BadCredentialsException("Error connecting to GemFire JMX 
Server");
     }
+
+    Collection<GrantedAuthority> list = 
GemFireAuthentication.populateAuthorities(jmxc);
+    GemFireAuthentication auth = new 
GemFireAuthentication(authentication.getPrincipal(),
+        authentication.getCredentials(), list, jmxc);
+    logger.debug("For user " + name + " authList=" + list);
+    return auth;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java
index b169d4f..d685964 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/security/LogoutHandler.java
@@ -14,19 +14,17 @@
  */
 package org.apache.geode.tools.pulse.internal.security;
 
-import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.geode.tools.pulse.internal.data.Repository;
-
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.springframework.security.core.Authentication;
 import 
org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
 import 
org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
 
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * Handler is used to close jmx connection maintained at user-level
  *
@@ -41,12 +39,10 @@ public class LogoutHandler extends 
SimpleUrlLogoutSuccessHandler implements Logo
   public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse 
response,
       Authentication authentication) throws IOException, ServletException {
     logger.debug("Invoked #LogoutHandler ...");
-    if (Repository.get().isUseGemFireCredentials()) {
-      GemFireAuthentication gemauthentication = (GemFireAuthentication) 
authentication;
-      if (gemauthentication != null) {
-        gemauthentication.getJmxc().close();
-        logger.info("#LogoutHandler : Closing GemFireAuthentication JMX 
Connection...");
-      }
+    GemFireAuthentication gemauthentication = (GemFireAuthentication) 
authentication;
+    if (gemauthentication != null) {
+      gemauthentication.getJmxc().close();
+      logger.info("#LogoutHandler : Closing GemFireAuthentication JMX 
Connection...");
     }
     super.onLogoutSuccess(request, response, authentication);
   }

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java
index b6a129d..34a7734 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMemberService.java
@@ -20,7 +20,6 @@ package org.apache.geode.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 org.apache.geode.tools.pulse.internal.controllers.PulseController;
 import org.apache.geode.tools.pulse.internal.data.Cluster;
 import org.apache.geode.tools.pulse.internal.data.PulseConstants;
 import org.apache.geode.tools.pulse.internal.data.Repository;
@@ -32,7 +31,6 @@ 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;
 

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java
 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java
index 90d4ecd..7a1013a 100644
--- 
a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java
+++ 
b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/service/ClusterMembersRGraphService.java
@@ -17,23 +17,21 @@
 
 package org.apache.geode.tools.pulse.internal.service;
 
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.List;
-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.apache.geode.tools.pulse.internal.data.Cluster;
+import org.apache.geode.tools.pulse.internal.data.PulseConstants;
+import org.apache.geode.tools.pulse.internal.data.Repository;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
-import org.apache.geode.tools.pulse.internal.data.Cluster;
-import org.apache.geode.tools.pulse.internal.data.PulseConstants;
-import org.apache.geode.tools.pulse.internal.data.Repository;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Class ClusterMembersRGraphService
@@ -95,7 +93,7 @@ public class ClusterMembersRGraphService implements 
PulseService {
 
     // cluster's Members
     responseJSON.put(this.CLUSTER,
-        getPhysicalServerJson(cluster, repository.getJmxHost(), 
repository.getJmxPort()));
+        getPhysicalServerJson(cluster, repository.getHost(), 
repository.getPort()));
     responseJSON.put(this.MEMBER_COUNT, cluster.getMemberCount());
 
     // Send json response

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/resources/log4j2.xml 
b/geode-pulse/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..536a045
--- /dev/null
+++ b/geode-pulse/src/main/resources/log4j2.xml
@@ -0,0 +1,31 @@
+<?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.
+  -->
+<Configuration status="INFO" name="Pulse" packages="org.apache.geode">
+    <Appenders>
+        <File name="File" fileName="pulse.log">
+            <PatternLayout>
+                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
+            </PatternLayout>
+        </File>
+    </Appenders>
+    <Loggers>
+        <Root level="INFO">
+            <AppenderRef ref="File"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/main/resources/pulse.properties
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/resources/pulse.properties 
b/geode-pulse/src/main/resources/pulse.properties
index d47d469..6eb4730 100644
--- a/geode-pulse/src/main/resources/pulse.properties
+++ b/geode-pulse/src/main/resources/pulse.properties
@@ -21,28 +21,9 @@
 #Tue, 09 Oct 2012 16:39:00
 
 # JMX Locator/Manager Properties
-pulse.useLocator=false
+pulse.useLocator=true
 pulse.host=localhost
-pulse.port=1099
+pulse.port=10334
 
 #pulse.useSSL.locator=true
 #pulse.useSSL.manager=true
-
-# JMX User Properties
-pulse.jmxUserName=admin
-pulse.jmxUserPassword=admin
-
-# Logging Configurations Properties
-pulse.Log-File-Name=PULSELOG
-#pulse.Log-File-Location=F:\\PulseLogs
-pulse.Log-File-Size=1048576
-pulse.Log-File-Count=3
-pulse.Log-Date-Pattern=yyyy/MM/dd HH:mm:ss.SSS z
-pulse.Log-Level=info
-pulse.Log-Append=true
-
-# For supporting gemfire and sqlfire both in pulse
-# valid values are as follows 
-# for GemFire "gemfire" 
-# for GemFireXD "gemfirexd" 
-pulse.product=gemfire

http://git-wip-us.apache.org/repos/asf/geode/blob/0f978a6d/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
 
b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
index ddd799f..58bdbcb 100644
--- 
a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
+++ 
b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
@@ -16,7 +16,6 @@ package org.apache.geode.tools.pulse.controllers;
 
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doReturn;
@@ -29,14 +28,9 @@ import java.io.File;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.UUID;
-import javax.servlet.ServletContextListener;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.geode.tools.pulse.internal.PulseAppListener;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.geode.test.junit.categories.UnitTest;
 import org.apache.geode.tools.pulse.internal.controllers.PulseController;
 import org.apache.geode.tools.pulse.internal.data.Cluster;
 import org.apache.geode.tools.pulse.internal.data.PulseConfig;

Reply via email to