This is an automated email from the ASF dual-hosted git repository.

jinmeiliao pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new a0e1aee  GEODE-5971: Have all offline commands extends 
OfflineGfshCommand inst… (#2967)
a0e1aee is described below

commit a0e1aee58ac8c10fc1c73fc804af20efecc70802
Author: jinmeiliao <[email protected]>
AuthorDate: Fri Dec 7 12:15:14 2018 -0800

    GEODE-5971: Have all offline commands extends OfflineGfshCommand inst… 
(#2967)
    
    * GEODE-5971: Have all offline commands extends OfflineGfshCommand instead 
of InternalGfshCommand
    * eventually InternalGfshCommand should be deleted and replaced with 
GfshCommand
    
    Co-authored-by: Peter Tran <[email protected]>
---
 .../apache/geode/management/cli/GfshCommand.java   |  8 +---
 .../geode/management/internal/cli/LogWrapper.java  | 10 ++++
 .../internal/cli/commands/AlterRegionCommand.java  |  3 +-
 .../internal/cli/commands/ConnectCommand.java      | 10 ++--
 .../cli/commands/DescribeConnectionCommand.java    |  2 +-
 .../internal/cli/commands/DisconnectCommand.java   |  4 +-
 .../internal/cli/commands/EchoCommand.java         |  2 +-
 .../internal/cli/commands/ExitCommand.java         |  2 +-
 .../internal/cli/commands/InternalGfshCommand.java | 25 ----------
 .../internal/cli/commands/OfflineGfshCommand.java  | 53 ++++++++++++++++++++++
 .../internal/cli/commands/SetVariableCommand.java  |  2 +-
 .../internal/cli/commands/StartLocatorCommand.java |  2 +-
 .../internal/cli/commands/StartMemberUtils.java    |  4 +-
 .../internal/cli/commands/StartServerCommand.java  |  2 +-
 .../commands/lifecycle/StartJConsoleCommand.java   | 30 ++++--------
 .../commands/lifecycle/StartJVisualVMCommand.java  |  4 +-
 .../cli/commands/lifecycle/StartPulseCommand.java  |  4 +-
 .../cli/commands/lifecycle/StartVsdCommand.java    |  4 +-
 .../commands/lifecycle/StatusLocatorCommand.java   |  6 +--
 .../commands/lifecycle/StatusServerCommand.java    |  6 +--
 .../cli/commands/lifecycle/StopLocatorCommand.java |  4 +-
 .../cli/commands/lifecycle/StopServerCommand.java  |  4 +-
 .../lifecycle/StartJConsoleCommandTest.java        |  8 +++-
 23 files changed, 113 insertions(+), 86 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java 
b/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
index bc5103b..52b9b3f 100644
--- a/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
@@ -45,10 +45,6 @@ public abstract class GfshCommand implements CommandMarker {
   public static final String EXPERIMENTAL = "(Experimental) ";
   private InternalCache cache;
 
-  public boolean isConnectedAndReady() {
-    Gfsh gfsh = Gfsh.getCurrentInstance();
-    return gfsh != null && gfsh.isConnectedAndReady();
-  }
 
   public boolean isOnlineCommandAvailable() {
     Gfsh gfsh = Gfsh.getCurrentInstance();
@@ -86,9 +82,9 @@ public abstract class GfshCommand implements CommandMarker {
     return (T) ManagementService.getExistingManagementService(cache);
   }
 
-  public ConfigurationPersistenceService getConfigurationPersistenceService() {
+  public <T extends ConfigurationPersistenceService> T 
getConfigurationPersistenceService() {
     InternalLocator locator = InternalLocator.getLocator();
-    return locator == null ? null : 
locator.getConfigurationPersistenceService();
+    return locator == null ? null : (T) 
locator.getConfigurationPersistenceService();
   }
 
 
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/LogWrapper.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/LogWrapper.java
index 1dc721c..14965cc 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/LogWrapper.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/LogWrapper.java
@@ -57,6 +57,9 @@ public class LogWrapper {
     logger.setUseParentHandlers(false);
   }
 
+  /**
+   * Used in the manager when logging is required to be sent back to gfsh
+   */
   public static LogWrapper getInstance(Cache cache) {
     if (INSTANCE == null) {
       synchronized (INSTANCE_LOCK) {
@@ -69,6 +72,13 @@ public class LogWrapper {
     return INSTANCE;
   }
 
+  /**
+   * used in the gfsh process
+   */
+  public static LogWrapper getInstance() {
+    return getInstance(null);
+  }
+
   public void configure(GfshConfig config) {
     if (config.isLoggingEnabled()) {
       try {
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/AlterRegionCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/AlterRegionCommand.java
index 6d8175d..9c24efe 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/AlterRegionCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/AlterRegionCommand.java
@@ -26,6 +26,7 @@ import org.apache.geode.cache.CacheWriter;
 import org.apache.geode.cache.CustomExpiry;
 import org.apache.geode.cache.ExpirationAction;
 import org.apache.geode.distributed.DistributedMember;
+import 
org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.ConverterHint;
@@ -138,7 +139,7 @@ public class AlterRegionCommand extends InternalGfshCommand 
{
     XmlEntity xmlEntity = findXmlEntity(regionAlterResults);
     if (xmlEntity != null) {
       persistClusterConfiguration(result,
-          () -> getConfigurationPersistenceService()
+          () -> ((InternalConfigurationPersistenceService) 
getConfigurationPersistenceService())
               .addXmlEntity(xmlEntity, groups));
     }
     return result;
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
index 6e603e9..d30b719 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
@@ -70,7 +70,7 @@ import 
org.apache.geode.management.internal.security.ResourceConstants;
 import org.apache.geode.management.internal.web.shell.HttpOperationInvoker;
 import org.apache.geode.security.AuthenticationFailedException;
 
-public class ConnectCommand extends InternalGfshCommand {
+public class ConnectCommand extends OfflineGfshCommand {
   // millis that connect --locator will wait for a response from the locator.
   static final int CONNECT_LOCATOR_TIMEOUT_MS = 60000; // see bug 45971
 
@@ -293,8 +293,8 @@ public class ConnectCommand extends InternalGfshCommand {
 
       gfsh.setOperationInvoker(operationInvoker);
 
-      LogWrapper.getInstance(getCache())
-          .info(CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS, 
operationInvoker.toString()));
+      LogWrapper.getInstance().info(
+          CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS, 
operationInvoker.toString()));
       return ResultBuilder.createInfoResult(
           CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS, 
operationInvoker.toString()));
 
@@ -369,7 +369,7 @@ public class ConnectCommand extends InternalGfshCommand {
       gfsh.setOperationInvoker(operationInvoker);
       
infoResultData.addLine(CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS,
           jmxHostPortToConnect.toString(false)));
-      
LogWrapper.getInstance(getCache()).info(CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS,
+      
LogWrapper.getInstance().info(CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS,
           jmxHostPortToConnect.toString(false)));
       return ResultBuilder.buildResult(infoResultData);
     } catch (SecurityException | AuthenticationFailedException e) {
@@ -508,7 +508,7 @@ public class ConnectCommand extends InternalGfshCommand {
   }
 
   private Result handleException(Exception e, String errorMessage) {
-    LogWrapper.getInstance(getCache()).severe(errorMessage, e);
+    LogWrapper.getInstance().severe(errorMessage, e);
     return ResultBuilder.createConnectionErrorResult(errorMessage);
   }
 
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DescribeConnectionCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DescribeConnectionCommand.java
index 32bfc94..a73b3d7 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DescribeConnectionCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DescribeConnectionCommand.java
@@ -26,7 +26,7 @@ import 
org.apache.geode.management.internal.cli.result.TabularResultData;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 import org.apache.geode.management.internal.cli.shell.OperationInvoker;
 
-public class DescribeConnectionCommand extends InternalGfshCommand {
+public class DescribeConnectionCommand extends OfflineGfshCommand {
   @CliCommand(value = {CliStrings.DESCRIBE_CONNECTION}, help = 
CliStrings.DESCRIBE_CONNECTION__HELP)
   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH, 
CliStrings.TOPIC_GEODE_JMX})
   public Result describeConnection() {
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DisconnectCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DisconnectCommand.java
index ea02992..eb33973 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DisconnectCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DisconnectCommand.java
@@ -26,7 +26,7 @@ import 
org.apache.geode.management.internal.cli.result.ResultBuilder;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 import org.apache.geode.management.internal.cli.shell.OperationInvoker;
 
-public class DisconnectCommand extends InternalGfshCommand {
+public class DisconnectCommand extends OfflineGfshCommand {
   @CliCommand(value = {CliStrings.DISCONNECT}, help = 
CliStrings.DISCONNECT__HELP)
   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH, 
CliStrings.TOPIC_GEODE_JMX,
       CliStrings.TOPIC_GEODE_MANAGER})
@@ -45,7 +45,7 @@ public class DisconnectCommand extends InternalGfshCommand {
           operationInvoker.stop();
           
infoResultData.addLine(CliStrings.format(CliStrings.DISCONNECT__MSG__DISCONNECTED,
               operationInvoker.toString()));
-          LogWrapper.getInstance(getCache()).info(CliStrings
+          LogWrapper.getInstance().info(CliStrings
               .format(CliStrings.DISCONNECT__MSG__DISCONNECTED, 
operationInvoker.toString()));
           if (!gfshInstance.isHeadlessMode()) {
             gfshInstance.setPromptPath(gfshInstance.getEnvAppContextPath());
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/EchoCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/EchoCommand.java
index a53abf1..79c9fa9 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/EchoCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/EchoCommand.java
@@ -28,7 +28,7 @@ import 
org.apache.geode.management.internal.cli.result.ResultBuilder;
 import org.apache.geode.management.internal.cli.result.TabularResultData;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 
-public class EchoCommand extends InternalGfshCommand {
+public class EchoCommand extends OfflineGfshCommand {
   @CliCommand(value = {CliStrings.ECHO}, help = CliStrings.ECHO__HELP)
   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH})
   public Result echo(@CliOption(key = {CliStrings.ECHO__STR, ""}, 
specifiedDefaultValue = "",
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExitCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExitCommand.java
index 785554d..d050559 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExitCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExitCommand.java
@@ -22,7 +22,7 @@ import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 
-public class ExitCommand extends InternalGfshCommand {
+public class ExitCommand extends OfflineGfshCommand {
   @CliCommand(value = {CliStrings.EXIT, "quit"}, help = CliStrings.EXIT__HELP)
   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH})
   public ExitShellRequest exit() {
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/InternalGfshCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/InternalGfshCommand.java
index 080b148..9f065ae 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/InternalGfshCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/InternalGfshCommand.java
@@ -17,12 +17,9 @@ package org.apache.geode.management.internal.cli.commands;
 import java.util.List;
 import java.util.Objects;
 
-import 
org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
-import org.apache.geode.management.ManagementService;
 import org.apache.geode.management.cli.GfshCommand;
 import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
-import org.apache.geode.management.internal.cli.shell.Gfsh;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 
 /**
@@ -51,26 +48,4 @@ public abstract class InternalGfshCommand extends 
GfshCommand {
     return functionResults.stream().filter(CliFunctionResult::isSuccessful)
         
.map(CliFunctionResult::getXmlEntity).filter(Objects::nonNull).findFirst().orElse(null);
   }
-
-  public boolean isDebugging() {
-    return getGfsh() != null && getGfsh().getDebug();
-  }
-
-  public boolean isLogging() {
-    return getGfsh() != null;
-  }
-
-  public Gfsh getGfsh() {
-    return Gfsh.getCurrentInstance();
-  }
-
-  public ManagementService getManagementService() {
-    return ManagementService.getExistingManagementService(getCache());
-  }
-
-  @Override
-  public InternalConfigurationPersistenceService 
getConfigurationPersistenceService() {
-    return (InternalConfigurationPersistenceService) 
super.getConfigurationPersistenceService();
-  }
-
 }
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/OfflineGfshCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/OfflineGfshCommand.java
new file mode 100644
index 0000000..001cc1e
--- /dev/null
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/OfflineGfshCommand.java
@@ -0,0 +1,53 @@
+/*
+ * 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.management.internal.cli.commands;
+
+
+import javax.management.remote.JMXServiceURL;
+
+import org.springframework.shell.core.CommandMarker;
+
+import org.apache.geode.management.internal.cli.shell.Gfsh;
+import org.apache.geode.management.internal.cli.shell.JmxOperationInvoker;
+import org.apache.geode.management.internal.cli.shell.OperationInvoker;
+
+public abstract class OfflineGfshCommand implements CommandMarker {
+
+  public boolean isDebugging() {
+    return getGfsh() != null && getGfsh().getDebug();
+  }
+
+  public boolean isLogging() {
+    return getGfsh() != null;
+  }
+
+  public Gfsh getGfsh() {
+    return Gfsh.getCurrentInstance();
+  }
+
+  public JMXServiceURL getJmxServiceUrl() {
+    OperationInvoker operationInvoker = getGfsh().getOperationInvoker();
+    if (operationInvoker instanceof JmxOperationInvoker) {
+      return ((JmxOperationInvoker) operationInvoker).getJmxServiceUrl();
+    }
+
+    return null;
+  }
+
+  public boolean isConnectedAndReady() {
+    Gfsh gfsh = Gfsh.getCurrentInstance();
+    return gfsh != null && gfsh.isConnectedAndReady();
+  }
+}
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/SetVariableCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/SetVariableCommand.java
index f26a7c2..cb022a8 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/SetVariableCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/SetVariableCommand.java
@@ -24,7 +24,7 @@ import 
org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.ErrorResultData;
 import org.apache.geode.management.internal.cli.result.ResultBuilder;
 
-public class SetVariableCommand extends InternalGfshCommand {
+public class SetVariableCommand extends OfflineGfshCommand {
   @CliCommand(value = {CliStrings.SET_VARIABLE}, help = 
CliStrings.SET_VARIABLE__HELP)
   @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GFSH})
   public Result setVariable(
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartLocatorCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartLocatorCommand.java
index 0874a04..e3bb519 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartLocatorCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartLocatorCommand.java
@@ -56,7 +56,7 @@ import 
org.apache.geode.management.internal.cli.util.HostUtils;
 import 
org.apache.geode.management.internal.configuration.utils.ClusterConfigurationStatusRetriever;
 import org.apache.geode.security.AuthenticationFailedException;
 
-public class StartLocatorCommand extends InternalGfshCommand {
+public class StartLocatorCommand extends OfflineGfshCommand {
   @CliCommand(value = CliStrings.START_LOCATOR, help = 
CliStrings.START_LOCATOR__HELP)
   @CliMetaData(shellOnly = true,
       relatedTopic = {CliStrings.TOPIC_GEODE_LOCATOR, 
CliStrings.TOPIC_GEODE_LIFECYCLE})
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartMemberUtils.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartMemberUtils.java
index f68b6ac..ee5ff1c 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartMemberUtils.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartMemberUtils.java
@@ -141,7 +141,7 @@ public class StartMemberUtils {
     }
   }
 
-  static void addCurrentLocators(InternalGfshCommand gfshCommand, final 
List<String> commandLine,
+  static void addCurrentLocators(OfflineGfshCommand gfshCommand, final 
List<String> commandLine,
       final Properties gemfireProperties) throws MalformedObjectNameException {
     if (StringUtils.isBlank(gemfireProperties.getProperty(LOCATORS))) {
       String currentLocators = getCurrentLocators(gfshCommand);
@@ -152,7 +152,7 @@ public class StartMemberUtils {
     }
   }
 
-  private static String getCurrentLocators(InternalGfshCommand gfshCommand)
+  private static String getCurrentLocators(OfflineGfshCommand gfshCommand)
       throws MalformedObjectNameException {
     String delimitedLocators = "";
     try {
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartServerCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartServerCommand.java
index 8d37214..5f7ce8d 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartServerCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StartServerCommand.java
@@ -48,7 +48,7 @@ import 
org.apache.geode.management.internal.cli.result.model.ResultModel;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 import org.apache.geode.management.internal.security.ResourceConstants;
 
-public class StartServerCommand extends InternalGfshCommand {
+public class StartServerCommand extends OfflineGfshCommand {
   private static final String SERVER_TERM_NAME = "Server";
 
   @CliCommand(value = CliStrings.START_SERVER, help = 
CliStrings.START_SERVER__HELP)
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJConsoleCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJConsoleCommand.java
index 0aa4b7c..bc1d4b9 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJConsoleCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJConsoleCommand.java
@@ -23,22 +23,22 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import javax.management.remote.JMXServiceURL;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
-import org.apache.geode.internal.lang.ObjectUtils;
 import org.apache.geode.internal.util.IOUtils;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.internal.cli.GfshParser;
-import org.apache.geode.management.internal.cli.commands.InternalGfshCommand;
+import org.apache.geode.management.internal.cli.commands.OfflineGfshCommand;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.model.InfoResultModel;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
-import org.apache.geode.management.internal.cli.shell.JmxOperationInvoker;
 import org.apache.geode.management.internal.cli.util.JdkTool;
 
-public class StartJConsoleCommand extends InternalGfshCommand {
+public class StartJConsoleCommand extends OfflineGfshCommand {
 
   @CliCommand(value = CliStrings.START_JCONSOLE, help = 
CliStrings.START_JCONSOLE__HELP)
   @CliMetaData(shellOnly = true, relatedTopic = 
{CliStrings.TOPIC_GEODE_MANAGER,
@@ -63,7 +63,7 @@ public class StartJConsoleCommand extends InternalGfshCommand 
{
     ResultModel resultModel = new ResultModel();
     InfoResultModel infoResult = resultModel.addInfo();
     if (isDebugging()) {
-      infoResult.addLine(
+      getGfsh().printAsInfo(
           String.format("JConsole command-line ($1%s)", 
Arrays.toString(jconsoleCommandLine)));
     }
 
@@ -76,7 +76,7 @@ public class StartJConsoleCommand extends InternalGfshCommand 
{
       message = getErrorStringBuilder(jconsoleProcess);
     } else {
       message = new StringBuilder();
-      message.append(CliStrings.START_JCONSOLE__RUN);
+      getGfsh().printAsInfo(CliStrings.START_JCONSOLE__RUN);
 
       String jconsoleProcessOutput = getProcessOutput(jconsoleProcess);
 
@@ -141,24 +141,12 @@ public class StartJConsoleCommand extends 
InternalGfshCommand {
         }
       }
 
-      String jmxServiceUrl = getJmxServiceUrlAsString();
-
-      if (StringUtils.isNotBlank(jmxServiceUrl)) {
-        commandLine.add(jmxServiceUrl);
+      JMXServiceURL jmxServiceUrl = getJmxServiceUrl();
+      if (isConnectedAndReady() && jmxServiceUrl != null) {
+        commandLine.add(jmxServiceUrl.toString());
       }
     }
 
     return commandLine.toArray(new String[commandLine.size()]);
   }
-
-  String getJmxServiceUrlAsString() {
-    if (isConnectedAndReady()
-        && (getGfsh().getOperationInvoker() instanceof JmxOperationInvoker)) {
-      JmxOperationInvoker jmxOperationInvoker =
-          (JmxOperationInvoker) getGfsh().getOperationInvoker();
-
-      return ObjectUtils.toString(jmxOperationInvoker.getJmxServiceUrl());
-    }
-    return null;
-  }
 }
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJVisualVMCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJVisualVMCommand.java
index 8bc523f..ed4759a 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJVisualVMCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJVisualVMCommand.java
@@ -29,13 +29,13 @@ import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.cli.GfshParser;
-import org.apache.geode.management.internal.cli.commands.InternalGfshCommand;
+import org.apache.geode.management.internal.cli.commands.OfflineGfshCommand;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.InfoResultData;
 import org.apache.geode.management.internal.cli.result.ResultBuilder;
 import org.apache.geode.management.internal.cli.util.JdkTool;
 
-public class StartJVisualVMCommand extends InternalGfshCommand {
+public class StartJVisualVMCommand extends OfflineGfshCommand {
   @CliCommand(value = CliStrings.START_JVISUALVM, help = 
CliStrings.START_JVISUALVM__HELP)
   @CliMetaData(shellOnly = true, relatedTopic = 
{CliStrings.TOPIC_GEODE_MANAGER,
       CliStrings.TOPIC_GEODE_JMX, CliStrings.TOPIC_GEODE_M_AND_M})
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartPulseCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartPulseCommand.java
index 6b499da..ad21e98 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartPulseCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartPulseCommand.java
@@ -30,12 +30,12 @@ import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.ManagementConstants;
-import org.apache.geode.management.internal.cli.commands.InternalGfshCommand;
+import org.apache.geode.management.internal.cli.commands.OfflineGfshCommand;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.ResultBuilder;
 import org.apache.geode.management.internal.cli.shell.OperationInvoker;
 
-public class StartPulseCommand extends InternalGfshCommand {
+public class StartPulseCommand extends OfflineGfshCommand {
 
   @CliCommand(value = CliStrings.START_PULSE, help = 
CliStrings.START_PULSE__HELP)
   @CliMetaData(shellOnly = true, relatedTopic = 
{CliStrings.TOPIC_GEODE_MANAGER,
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartVsdCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartVsdCommand.java
index e531821..b95a917 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartVsdCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartVsdCommand.java
@@ -36,12 +36,12 @@ import org.apache.geode.internal.lang.SystemUtils;
 import org.apache.geode.internal.util.IOUtils;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.Result;
-import org.apache.geode.management.internal.cli.commands.InternalGfshCommand;
+import org.apache.geode.management.internal.cli.commands.OfflineGfshCommand;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.InfoResultData;
 import org.apache.geode.management.internal.cli.result.ResultBuilder;
 
-public class StartVsdCommand extends InternalGfshCommand {
+public class StartVsdCommand extends OfflineGfshCommand {
   @CliCommand(value = CliStrings.START_VSD, help = CliStrings.START_VSD__HELP)
   @CliMetaData(shellOnly = true,
       relatedTopic = {CliStrings.TOPIC_GEODE_M_AND_M, 
CliStrings.TOPIC_GEODE_STATISTICS})
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StatusLocatorCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StatusLocatorCommand.java
index 5fc6c07..05693ce 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StatusLocatorCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StatusLocatorCommand.java
@@ -19,22 +19,22 @@ import static 
org.apache.geode.management.internal.cli.shell.MXBeanProvider.getM
 
 import java.io.IOException;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
 import org.apache.geode.distributed.AbstractLauncher;
 import org.apache.geode.distributed.LocatorLauncher;
-import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.management.MemberMXBean;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.ConverterHint;
-import org.apache.geode.management.internal.cli.commands.InternalGfshCommand;
+import org.apache.geode.management.internal.cli.commands.OfflineGfshCommand;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.model.InfoResultModel;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
 import 
org.apache.geode.management.internal.configuration.utils.ClusterConfigurationStatusRetriever;
 
-public class StatusLocatorCommand extends InternalGfshCommand {
+public class StatusLocatorCommand extends OfflineGfshCommand {
   @CliCommand(value = CliStrings.STATUS_LOCATOR, help = 
CliStrings.STATUS_LOCATOR__HELP)
   @CliMetaData(shellOnly = true,
       relatedTopic = {CliStrings.TOPIC_GEODE_LOCATOR, 
CliStrings.TOPIC_GEODE_LIFECYCLE})
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StatusServerCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StatusServerCommand.java
index 725cb21..cd401f5 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StatusServerCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StatusServerCommand.java
@@ -18,20 +18,20 @@ import static 
org.apache.geode.management.internal.cli.shell.MXBeanProvider.getM
 
 import java.io.IOException;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
 import org.apache.geode.distributed.AbstractLauncher;
 import org.apache.geode.distributed.ServerLauncher;
-import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.management.MemberMXBean;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.ConverterHint;
-import org.apache.geode.management.cli.GfshCommand;
+import org.apache.geode.management.internal.cli.commands.OfflineGfshCommand;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
 
-public class StatusServerCommand extends GfshCommand {
+public class StatusServerCommand extends OfflineGfshCommand {
 
   @CliCommand(value = CliStrings.STATUS_SERVER, help = 
CliStrings.STATUS_SERVER__HELP)
   @CliMetaData(shellOnly = true,
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StopLocatorCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StopLocatorCommand.java
index 6690ab2..2cd1dc9 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StopLocatorCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StopLocatorCommand.java
@@ -29,12 +29,12 @@ import org.apache.geode.internal.util.StopWatch;
 import org.apache.geode.management.MemberMXBean;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.ConverterHint;
-import org.apache.geode.management.internal.cli.commands.InternalGfshCommand;
+import org.apache.geode.management.internal.cli.commands.OfflineGfshCommand;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 
-public class StopLocatorCommand extends InternalGfshCommand {
+public class StopLocatorCommand extends OfflineGfshCommand {
   private static final long 
WAITING_FOR_STOP_TO_MAKE_PID_GO_AWAY_TIMEOUT_MILLIS = 30 * 1000;
 
   @CliCommand(value = CliStrings.STOP_LOCATOR, help = 
CliStrings.STOP_LOCATOR__HELP)
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StopServerCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StopServerCommand.java
index bea88d1..a8807e2 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StopServerCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/lifecycle/StopServerCommand.java
@@ -28,12 +28,12 @@ import org.apache.geode.internal.util.StopWatch;
 import org.apache.geode.management.MemberMXBean;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.ConverterHint;
-import org.apache.geode.management.internal.cli.commands.InternalGfshCommand;
+import org.apache.geode.management.internal.cli.commands.OfflineGfshCommand;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 
-public class StopServerCommand extends InternalGfshCommand {
+public class StopServerCommand extends OfflineGfshCommand {
   private static final long 
WAITING_FOR_STOP_TO_MAKE_PID_GO_AWAY_TIMEOUT_MILLIS = 30 * 1000;
 
   @CliCommand(value = CliStrings.STOP_SERVER, help = 
CliStrings.STOP_SERVER__HELP)
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJConsoleCommandTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJConsoleCommandTest.java
index c018b13..619f992 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJConsoleCommandTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/lifecycle/StartJConsoleCommandTest.java
@@ -23,6 +23,8 @@ import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
+import javax.management.remote.JMXServiceURL;
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -45,6 +47,7 @@ public class StartJConsoleCommandTest {
     command = spy(StartJConsoleCommand.class);
     gfsh = mock(Gfsh.class);
     doReturn(gfsh).when(command).getGfsh();
+    doReturn(null).when(command).getJmxServiceUrl();
 
     Process process = mock(Process.class);
     doReturn(process).when(command).getProcess(any(String[].class));
@@ -86,7 +89,8 @@ public class StartJConsoleCommandTest {
 
   @Test
   public void successWithServiceUrl() throws Exception {
-    doReturn("someUrl.com").when(command).getJmxServiceUrlAsString();
+    doReturn(new 
JMXServiceURL("service:jmx:rmi://localhost")).when(command).getJmxServiceUrl();
+    doReturn(true).when(command).isConnectedAndReady();
     gfshParser.executeAndAssertThat(command, "start jconsole")
         .containsOutput("some output");
 
@@ -95,6 +99,6 @@ public class StartJConsoleCommandTest {
     assertThat(commandString).hasSize(3);
     assertThat(commandString[0]).contains("jconsole");
     assertThat(commandString[1]).isEqualTo("-interval=4");
-    assertThat(commandString[2]).isEqualTo("someUrl.com");
+    assertThat(commandString[2]).isEqualTo("service:jmx:rmi://localhost");
   }
 }

Reply via email to