You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ud...@apache.org on 2020/07/02 18:11:01 UTC

[geode] 25/29: GEODE-8294 - Integrate ModuleService into CacheXml.

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

udo pushed a commit to branch feature/GEODE-8294
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 1f00f98bb905ff4a2580e99b4173de2798633e40
Author: Patrick Johnson <pj...@pivotal.io>
AuthorDate: Mon Jun 29 17:13:11 2020 -0700

    GEODE-8294 - Integrate ModuleService into CacheXml.
---
 geode-assembly/build.gradle                        |  1 +
 .../jdbc/internal/TestConfigService.java           |  3 +-
 .../cli/DestroyDataSourceCommandDUnitTest.java     |  7 ++-
 ...apache.geode.management.cli.GeodeCommandMarker} |  0
 .../jdbc/internal/JdbcConnectorServiceTest.java    |  3 +-
 .../cli/ConnectionsCommandManagerTest.java         | 15 ++---
 .../mock/AlterMockCacheExtensionFunction.java      | 10 +++-
 .../mock/AlterMockRegionExtensionFunction.java     | 10 +++-
 .../mock/CreateMockCacheExtensionFunction.java     | 10 +++-
 .../mock/CreateMockRegionExtensionFunction.java    | 10 +++-
 .../mock/DestroyMockCacheExtensionFunction.java    | 10 +++-
 .../mock/DestroyMockRegionExtensionFunction.java   | 11 +++-
 .../extension/mock/MockExtensionCommands.java      | 23 +++++---
 ...apache.geode.management.cli.GeodeCommandMarker} |  0
 .../cache/execute/CoreFunctionSecurityTest.java    | 13 +++--
 .../utils/XmlUtilsAddNewNodeJUnitTest.java         | 54 +++++++++++-------
 .../internal/QueryConfigurationServiceImpl.java    |  3 +-
 .../InternalConfigurationPersistenceService.java   | 10 ++--
 .../apache/geode/internal/cache/CacheService.java  |  3 +-
 .../geode/internal/cache/GemFireCacheImpl.java     |  4 +-
 .../client/protocol/ClientProtocolService.java     |  3 +
 .../protocol/ClientProtocolServiceLoader.java      |  5 +-
 .../geode/internal/cache/xmlcache/CacheXml.java    | 40 ++++++++------
 .../configuration/domain/CacheElement.java         |  6 +-
 .../configuration/domain/Configuration.java        |  5 +-
 .../internal/configuration/domain/XmlEntity.java   | 36 ++++++------
 .../messages/ConfigurationResponse.java            |  5 +-
 .../internal/configuration/utils/XmlUtils.java     | 39 +++++++------
 .../QueryConfigurationServiceImplTest.java         | 25 +++++----
 ...nternalConfigurationPersistenceServiceTest.java | 18 ++++--
 .../domain/CacheElementJUnitTest.java              |  5 +-
 .../configuration/domain/ConfigurationTest.java    |  4 +-
 .../configuration/utils/XmlUtilsJUnitTest.java     | 62 +++++++++++++--------
 .../cli/commands/AlterCompressorDUnitTest.java     |  3 +-
 .../CreateJndiBindingCommandDUnitTest.java         |  3 +-
 .../commands/CreatePooledJndiBindingDUnitTest.java |  3 +-
 .../DestroyJndiBindingCommandDUnitTest.java        |  4 +-
 .../DestroySecondJndiBindingCommandDUnitTest.java  |  4 +-
 .../geode/management/cli/CommandService.java       |  5 +-
 .../geode/management/cli/GeodeCommandMarker.java   | 25 +++++++++
 .../apache/geode/management/cli/GfshCommand.java   | 13 ++++-
 .../management/internal/cli/CommandManager.java    | 59 ++++++++++++--------
 .../geode/management/internal/cli/GfshParser.java  |  4 +-
 .../cli/commands/AlterRuntimeConfigCommand.java    |  2 +-
 .../internal/cli/commands/CreateRegionCommand.java |  5 +-
 .../commands/DestroyAsyncEventQueueCommand.java    |  3 +-
 .../cli/commands/DestroyDiskStoreCommand.java      |  3 +-
 .../cli/commands/DestroyGatewaySenderCommand.java  |  3 +-
 .../cli/commands/DestroyRegionCommand.java         |  3 +-
 .../ImportClusterConfigurationCommand.java         |  2 +-
 .../internal/cli/commands/OfflineGfshCommand.java  | 17 +++++-
 .../functions/DestroyAsyncEventQueueFunction.java  | 13 ++++-
 .../cli/functions/DestroyDiskStoreFunction.java    | 10 +++-
 .../functions/FetchRegionAttributesFunction.java   | 12 ++--
 .../functions/GatewaySenderDestroyFunction.java    | 13 +++--
 .../cli/functions/RegionCreateFunction.java        | 14 +++--
 .../cli/functions/RegionDestroyFunction.java       | 14 +++--
 .../internal/cli/remote/MemberCommandService.java  |  6 +-
 .../cli/remote/OnlineCommandProcessor.java         | 14 +++--
 .../geode/management/internal/cli/shell/Gfsh.java  |  2 +-
 .../internal/cli/CommandManagerJUnitTest.java      | 64 +++++++++++++++++-----
 .../commands/CommandAvailabilityIndicatorTest.java |  4 +-
 .../DestroyAsyncEventQueueFunctionTest.java        |  6 +-
 .../GatewaySenderDestroyFunctionTest.java          |  3 +-
 .../functions/RegionCreateFunctionJUnitTest.java   |  3 +-
 .../cli/functions/RegionDestroyFunctionTest.java   |  3 +-
 .../internal/cli/help/HelperUnitTest.java          |  4 +-
 .../cli/remote/MemberCommandServiceTest.java       |  8 ++-
 .../cli/remote/OnlineCommandProcessorTest.java     |  4 +-
 .../cli/shell/GfshExecutionStrategyTest.java       | 10 +++-
 ...apache.geode.management.cli.GeodeCommandMarker} |  0
 geode-http-service/build.gradle                    |  2 +
 .../geode/internal/cache/InternalHttpService.java  |  3 +-
 .../internal/InternalHttpServiceJunitTest.java     |  5 +-
 geode-junit/build.gradle                           |  1 +
 .../CommandAvailabilityIndicatorTestHelper.java    |  6 +-
 .../geode/test/junit/rules/GfshParserRule.java     |  3 +-
 geode-lucene/build.gradle                          |  1 +
 .../internal/LuceneServiceImplIntegrationTest.java |  5 +-
 .../lucene/test/LuceneFunctionSecurityTest.java    |  3 +-
 .../cache/lucene/internal/LuceneServiceImpl.java   |  4 +-
 .../internal/cli/LuceneCreateIndexCommand.java     |  6 +-
 .../cli/functions/LuceneCreateIndexFunction.java   | 13 ++++-
 ...apache.geode.management.cli.GeodeCommandMarker} |  0
 .../LuceneCreateIndexFunctionJUnitTest.java        |  7 ++-
 geode-memcached/build.gradle                       |  1 +
 .../internal/memcached/GeodeMemcachedService.java  |  3 +-
 .../impl/BootstrappingServiceImpl.java             | 18 +++---
 geode-old-client-support/build.gradle              |  2 +
 .../gemstone/gemfire/OldClientSupportProvider.java |  3 +-
 .../protobuf/v1/ProtobufProtocolService.java       | 11 ++--
 .../v1/ProtobufProtocolServiceJUnitTest.java       |  3 +-
 geode-redis/build.gradle                           |  2 +
 .../geode/redis/internal/GeodeRedisService.java    |  3 +-
 ...apache.geode.management.cli.GeodeCommandMarker} |  0
 geode-wan/build.gradle                             |  2 +-
 ...ipleReceiversDefinedInClusterConfiguration.java |  6 +-
 97 files changed, 621 insertions(+), 313 deletions(-)

diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle
index b10d5a1..dd4b6a8 100755
--- a/geode-assembly/build.gradle
+++ b/geode-assembly/build.gradle
@@ -186,6 +186,7 @@ dependencies {
     javadocOnly project(':extensions:geode-modules-tomcat8')
     javadocOnly project(':geode-experimental-driver')
 
+    testImplementation(project(':geode-common-services'))
     testImplementation(project(':geode-core'))
     testImplementation(project(':geode-gfsh'))
     testImplementation(project(':geode-junit')) {
diff --git a/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/internal/TestConfigService.java b/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/internal/TestConfigService.java
index 2f7162f..9649cb5 100644
--- a/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/internal/TestConfigService.java
+++ b/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/internal/TestConfigService.java
@@ -24,6 +24,7 @@ import org.apache.geode.connectors.jdbc.internal.configuration.FieldMapping;
 import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.extension.ExtensionPoint;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Generates fake JdbcConnectorService for tests.
@@ -45,7 +46,7 @@ public class TestConfigService {
       throws RegionMappingExistsException {
 
     JdbcConnectorServiceImpl service = new JdbcConnectorServiceImpl();
-    service.init(cache);
+    service.init(cache, ModuleService.DEFAULT);
     service.createRegionMapping(
         createRegionMapping(pdxClassName, ids, catalog, schema, fieldMappings));
     return service;
diff --git a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyDataSourceCommandDUnitTest.java b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyDataSourceCommandDUnitTest.java
index f1e3855..0801da7 100644
--- a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyDataSourceCommandDUnitTest.java
+++ b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyDataSourceCommandDUnitTest.java
@@ -39,6 +39,7 @@ import org.apache.geode.management.internal.configuration.utils.XmlUtils;
 import org.apache.geode.pdx.PdxReader;
 import org.apache.geode.pdx.PdxSerializable;
 import org.apache.geode.pdx.PdxWriter;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
 import org.apache.geode.test.junit.rules.GfshCommandRule;
@@ -89,7 +90,8 @@ public class DestroyDataSourceCommandDUnitTest {
       InternalConfigurationPersistenceService ccService =
           internalLocator.getConfigurationPersistenceService();
       Configuration configuration = ccService.getConfiguration("cluster");
-      Document document = XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent());
+      Document document =
+          XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent(), ModuleService.DEFAULT);
       NodeList jndiBindings = document.getElementsByTagName("jndi-binding");
 
       AssertionsForClassTypes.assertThat(jndiBindings.getLength()).isEqualTo(0);
@@ -153,7 +155,8 @@ public class DestroyDataSourceCommandDUnitTest {
       InternalConfigurationPersistenceService ccService =
           internalLocator.getConfigurationPersistenceService();
       Configuration configuration = ccService.getConfiguration("cluster");
-      Document document = XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent());
+      Document document =
+          XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent(), ModuleService.DEFAULT);
       NodeList jndiBindings = document.getElementsByTagName("jndi-binding");
 
       AssertionsForClassTypes.assertThat(jndiBindings.getLength()).isEqualTo(0);
diff --git a/geode-connectors/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker b/geode-connectors/src/main/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
similarity index 100%
rename from geode-connectors/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker
rename to geode-connectors/src/main/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceTest.java
index baf4b58..5c81c29 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceTest.java
@@ -42,6 +42,7 @@ import org.apache.geode.connectors.jdbc.internal.configuration.FieldMapping;
 import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.extension.ExtensionPoint;
+import org.apache.geode.services.module.ModuleService;
 
 public class JdbcConnectorServiceTest {
 
@@ -89,7 +90,7 @@ public class JdbcConnectorServiceTest {
     when(view.isColumnNullable(VALUE_COLUMN_NAME)).thenReturn(true);
 
     service = spy(JdbcConnectorServiceImpl.class);
-    service.init(cache);
+    service.init(cache, ModuleService.DEFAULT);
 
     keyColumns.add(KEY_COLUMN_NAME);
     allColumns.add(KEY_COLUMN_NAME);
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/ConnectionsCommandManagerTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/ConnectionsCommandManagerTest.java
index af64f55..04a6882 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/ConnectionsCommandManagerTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/ConnectionsCommandManagerTest.java
@@ -23,13 +23,14 @@ import java.util.Set;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.springframework.shell.core.CommandMarker;
 
 import org.apache.geode.internal.ClassPathLoader;
+import org.apache.geode.management.cli.GeodeCommandMarker;
 import org.apache.geode.management.cli.GfshCommand;
 import org.apache.geode.management.internal.cli.CommandManager;
 import org.apache.geode.management.internal.cli.commands.VersionCommand;
 import org.apache.geode.management.internal.util.ClasspathScanLoadHelper;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * CommandManagerTest - Includes tests to check the CommandManager functions
@@ -40,7 +41,7 @@ public class ConnectionsCommandManagerTest {
 
   @Before
   public void before() {
-    commandManager = new CommandManager();
+    commandManager = new CommandManager(ModuleService.DEFAULT);
   }
 
   /**
@@ -53,15 +54,15 @@ public class ConnectionsCommandManagerTest {
     packagesToScan.add(VersionCommand.class.getPackage().getName());
 
     ClasspathScanLoadHelper scanner = new ClasspathScanLoadHelper(packagesToScan);
-    ServiceLoader<CommandMarker> loader =
-        ServiceLoader.load(CommandMarker.class, ClassPathLoader.getLatest().asClassLoader());
+    ServiceLoader<GeodeCommandMarker> loader =
+        ServiceLoader.load(GeodeCommandMarker.class, ClassPathLoader.getLatest().asClassLoader());
     loader.reload();
-    Iterator<CommandMarker> iterator = loader.iterator();
+    Iterator<GeodeCommandMarker> iterator = loader.iterator();
 
     Set<Class<?>> foundClasses;
 
     // geode's commands
-    foundClasses = scanner.scanPackagesForClassesImplementing(CommandMarker.class,
+    foundClasses = scanner.scanPackagesForClassesImplementing(GeodeCommandMarker.class,
         GfshCommand.class.getPackage().getName(),
         VersionCommand.class.getPackage().getName());
 
@@ -71,7 +72,7 @@ public class ConnectionsCommandManagerTest {
 
     Set<Class<?>> expectedClasses = new HashSet<>();
 
-    for (CommandMarker commandMarker : commandManager.getCommandMarkers()) {
+    for (GeodeCommandMarker commandMarker : commandManager.getCommandMarkers()) {
       expectedClasses.add(commandMarker.getClass());
     }
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/AlterMockCacheExtensionFunction.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/AlterMockCacheExtensionFunction.java
index 275e07d..6f2cb61 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/AlterMockCacheExtensionFunction.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/AlterMockCacheExtensionFunction.java
@@ -37,6 +37,7 @@ import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Function to create {@link MockCacheExtension} on a {@link Region}.
@@ -48,7 +49,11 @@ public class AlterMockCacheExtensionFunction implements Function, DataSerializab
 
   private static final long serialVersionUID = 1L;
 
-  public static final Function INSTANCE = new AlterMockCacheExtensionFunction();
+  private final ModuleService moduleService;
+
+  public AlterMockCacheExtensionFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   @Override
   public void execute(FunctionContext context) {
@@ -69,7 +74,8 @@ public class AlterMockCacheExtensionFunction implements Function, DataSerializab
     }
 
     final XmlEntity xmlEntity =
-        XmlEntity.builder().withType(ELEMENT_CACHE).withNamespace(PREFIX, NAMESPACE).build();
+        XmlEntity.builder().withType(ELEMENT_CACHE).withNamespace(PREFIX, NAMESPACE)
+            .build(moduleService);
 
     final ResultSender<Object> resultSender = context.getResultSender();
     final String memberNameOrId =
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/AlterMockRegionExtensionFunction.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/AlterMockRegionExtensionFunction.java
index 74b9edf..ecdfd2f 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/AlterMockRegionExtensionFunction.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/AlterMockRegionExtensionFunction.java
@@ -34,6 +34,7 @@ import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Function to alter {@link MockRegionExtension} on a {@link Region}.
@@ -57,7 +58,11 @@ public class AlterMockRegionExtensionFunction implements Function, DataSerializa
 
   private static final long serialVersionUID = 1L;
 
-  public static final Function INSTANCE = new AlterMockRegionExtensionFunction();
+  private final ModuleService moduleService;
+
+  public AlterMockRegionExtensionFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   @Override
   public void execute(FunctionContext context) {
@@ -78,7 +83,8 @@ public class AlterMockRegionExtensionFunction implements Function, DataSerializa
       }
     }
 
-    XmlEntity xmlEntity = new XmlEntity(CacheXml.REGION, "name", region.getName());
+    XmlEntity xmlEntity =
+        new XmlEntity(CacheXml.REGION, "name", region.getName(), moduleService);
 
     final ResultSender<Object> resultSender = context.getResultSender();
     final String memberNameOrId =
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/CreateMockCacheExtensionFunction.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/CreateMockCacheExtensionFunction.java
index 48149d0..78ef687 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/CreateMockCacheExtensionFunction.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/CreateMockCacheExtensionFunction.java
@@ -36,6 +36,7 @@ import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Function to create {@link MockCacheExtension} on a {@link Region}.
@@ -47,7 +48,11 @@ public class CreateMockCacheExtensionFunction implements Function, DataSerializa
 
   private static final long serialVersionUID = 1L;
 
-  public static final Function INSTANCE = new CreateMockCacheExtensionFunction();
+  private final ModuleService moduleService;
+
+  public CreateMockCacheExtensionFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   @Override
   public void execute(FunctionContext context) {
@@ -66,7 +71,8 @@ public class CreateMockCacheExtensionFunction implements Function, DataSerializa
     extension.onCreate(extensible, extensible);
 
     final XmlEntity xmlEntity =
-        XmlEntity.builder().withType(ELEMENT_CACHE).withNamespace(PREFIX, NAMESPACE).build();
+        XmlEntity.builder().withType(ELEMENT_CACHE).withNamespace(PREFIX, NAMESPACE)
+            .build(moduleService);
 
     final ResultSender<Object> resultSender = context.getResultSender();
     final String memberNameOrId =
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/CreateMockRegionExtensionFunction.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/CreateMockRegionExtensionFunction.java
index 8fe2622..adb31b3 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/CreateMockRegionExtensionFunction.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/CreateMockRegionExtensionFunction.java
@@ -33,6 +33,7 @@ import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Function to create {@link MockRegionExtension} on a {@link Region}.
@@ -56,7 +57,11 @@ public class CreateMockRegionExtensionFunction implements Function, DataSerializ
 
   private static final long serialVersionUID = 1L;
 
-  public static final Function INSTANCE = new CreateMockRegionExtensionFunction();
+  private final ModuleService moduleService;
+
+  public CreateMockRegionExtensionFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   @Override
   public void execute(FunctionContext context) {
@@ -75,7 +80,8 @@ public class CreateMockRegionExtensionFunction implements Function, DataSerializ
     extension.beforeCreate(extensible, cache);
     extension.onCreate(extensible, extensible);
 
-    XmlEntity xmlEntity = new XmlEntity(CacheXml.REGION, "name", region.getName());
+    XmlEntity xmlEntity =
+        new XmlEntity(CacheXml.REGION, "name", region.getName(), moduleService);
 
     final ResultSender<Object> resultSender = context.getResultSender();
     final String memberNameOrId =
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/DestroyMockCacheExtensionFunction.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/DestroyMockCacheExtensionFunction.java
index 2cd12d6..f7acd88 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/DestroyMockCacheExtensionFunction.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/DestroyMockCacheExtensionFunction.java
@@ -37,6 +37,7 @@ import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Function to create {@link MockCacheExtension} on a {@link Region}.
@@ -48,7 +49,11 @@ public class DestroyMockCacheExtensionFunction implements Function, DataSerializ
 
   private static final long serialVersionUID = 1L;
 
-  public static final Function INSTANCE = new DestroyMockCacheExtensionFunction();
+  private final ModuleService moduleService;
+
+  public DestroyMockCacheExtensionFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   @Override
   public void execute(FunctionContext context) {
@@ -68,7 +73,8 @@ public class DestroyMockCacheExtensionFunction implements Function, DataSerializ
     }
 
     final XmlEntity xmlEntity =
-        XmlEntity.builder().withType(ELEMENT_CACHE).withNamespace(PREFIX, NAMESPACE).build();
+        XmlEntity.builder().withType(ELEMENT_CACHE).withNamespace(PREFIX, NAMESPACE)
+            .build(moduleService);
 
     final ResultSender<Object> resultSender = context.getResultSender();
     final String memberNameOrId =
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/DestroyMockRegionExtensionFunction.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/DestroyMockRegionExtensionFunction.java
index 9b25fca..67e2fa2 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/DestroyMockRegionExtensionFunction.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/DestroyMockRegionExtensionFunction.java
@@ -34,6 +34,7 @@ import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Function to destroy {@link MockRegionExtension} on a {@link Region}.
@@ -54,7 +55,12 @@ import org.apache.geode.management.internal.i18n.CliStrings;
 public class DestroyMockRegionExtensionFunction implements Function, DataSerializable {
 
   private static final long serialVersionUID = 1L;
-  public static final Function INSTANCE = new DestroyMockRegionExtensionFunction();
+
+  private final ModuleService moduleService;
+
+  public DestroyMockRegionExtensionFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   @Override
   public void execute(FunctionContext context) {
@@ -74,7 +80,8 @@ public class DestroyMockRegionExtensionFunction implements Function, DataSeriali
       }
     }
 
-    XmlEntity xmlEntity = new XmlEntity(CacheXml.REGION, "name", region.getName());
+    XmlEntity xmlEntity =
+        new XmlEntity(CacheXml.REGION, "name", region.getName(), moduleService);
 
     final ResultSender<Object> resultSender = context.getResultSender();
     final String memberNameOrId =
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/MockExtensionCommands.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/MockExtensionCommands.java
index 1a32484..8414eb5 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/MockExtensionCommands.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/extension/mock/MockExtensionCommands.java
@@ -18,7 +18,6 @@ package org.apache.geode.internal.cache.extension.mock;
 import java.util.List;
 import java.util.Set;
 
-import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
@@ -30,6 +29,7 @@ import org.apache.geode.distributed.internal.InternalConfigurationPersistenceSer
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.management.cli.GeodeCommandMarker;
 import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.cli.result.CommandResult;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
@@ -39,13 +39,14 @@ import org.apache.geode.management.internal.security.ResourceOperation;
 import org.apache.geode.management.internal.util.ManagementUtils;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Mock Extension gfsh commands.
  *
  * @since GemFire 8.1
  */
-public class MockExtensionCommands implements CommandMarker {
+public class MockExtensionCommands implements GeodeCommandMarker {
 
   public static final String OPTION_VALUE = "value";
 
@@ -63,6 +64,8 @@ public class MockExtensionCommands implements CommandMarker {
 
   public static final String DESTROY_MOCK_CACHE_EXTENSION = "destroy mock cache extension";
 
+  private ModuleService moduleService;
+
   /**
    * Creates a {@link MockRegionExtension} on the given <code>regionName</code>.
    *
@@ -77,7 +80,7 @@ public class MockExtensionCommands implements CommandMarker {
       @CliOption(key = OPTION_REGION_NAME, mandatory = true) final String regionName,
       @CliOption(key = OPTION_VALUE, mandatory = true) final String value) {
     return executeFunctionOnAllMembersTabulateResultPersist(
-        CreateMockRegionExtensionFunction.INSTANCE, true,
+        new CreateMockRegionExtensionFunction(moduleService), true,
         CreateMockRegionExtensionFunction.toArgs(regionName, value));
   }
 
@@ -95,7 +98,7 @@ public class MockExtensionCommands implements CommandMarker {
       @CliOption(key = OPTION_REGION_NAME, mandatory = true) final String regionName,
       @CliOption(key = OPTION_VALUE, mandatory = true) final String value) {
     return executeFunctionOnAllMembersTabulateResultPersist(
-        AlterMockRegionExtensionFunction.INSTANCE, true,
+        new AlterMockRegionExtensionFunction(moduleService), true,
         AlterMockRegionExtensionFunction.toArgs(regionName, value));
   }
 
@@ -111,7 +114,7 @@ public class MockExtensionCommands implements CommandMarker {
   public Result destroyMockRegionExtension(
       @CliOption(key = OPTION_REGION_NAME, mandatory = true) final String regionName) {
     return executeFunctionOnAllMembersTabulateResultPersist(
-        DestroyMockRegionExtensionFunction.INSTANCE, true,
+        new DestroyMockRegionExtensionFunction(moduleService), true,
         DestroyMockRegionExtensionFunction.toArgs(regionName));
   }
 
@@ -127,7 +130,7 @@ public class MockExtensionCommands implements CommandMarker {
   public Result createMockCacheExtension(
       @CliOption(key = OPTION_VALUE, mandatory = true) final String value) {
     return executeFunctionOnAllMembersTabulateResultPersist(
-        CreateMockCacheExtensionFunction.INSTANCE, true,
+        new CreateMockCacheExtensionFunction(moduleService), true,
         CreateMockCacheExtensionFunction.toArgs(value));
   }
 
@@ -143,7 +146,7 @@ public class MockExtensionCommands implements CommandMarker {
   public Result alterMockCacheExtension(
       @CliOption(key = OPTION_VALUE, mandatory = true) final String value) {
     return executeFunctionOnAllMembersTabulateResultPersist(
-        AlterMockCacheExtensionFunction.INSTANCE, true,
+        new AlterMockCacheExtensionFunction(moduleService), true,
         AlterMockCacheExtensionFunction.toArgs(value));
   }
 
@@ -157,7 +160,7 @@ public class MockExtensionCommands implements CommandMarker {
   @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ)
   public Result destroyMockCacheExtension() {
     return executeFunctionOnAllMembersTabulateResultPersist(
-        DestroyMockCacheExtensionFunction.INSTANCE, false);
+        new DestroyMockCacheExtensionFunction(moduleService), false);
   }
 
   /**
@@ -201,4 +204,8 @@ public class MockExtensionCommands implements CommandMarker {
     return new CommandResult(resultModel);
   }
 
+  @Override
+  public void init(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 }
diff --git a/geode-core/src/distributedTest/resources/META-INF/services/org.springframework.shell.core.CommandMarker b/geode-core/src/distributedTest/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
similarity index 100%
rename from geode-core/src/distributedTest/resources/META-INF/services/org.springframework.shell.core.CommandMarker
rename to geode-core/src/distributedTest/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/execute/CoreFunctionSecurityTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/execute/CoreFunctionSecurityTest.java
index 3b02ee4..20ec143 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/execute/CoreFunctionSecurityTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/execute/CoreFunctionSecurityTest.java
@@ -80,6 +80,7 @@ import org.apache.geode.management.internal.configuration.functions.RecreateCach
 import org.apache.geode.management.internal.functions.GetMemberInformationFunction;
 import org.apache.geode.management.internal.functions.RebalanceFunction;
 import org.apache.geode.management.internal.functions.RestoreRedundancyFunction;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.junit.rules.ConnectionConfiguration;
 import org.apache.geode.test.junit.rules.GfshCommandRule;
 import org.apache.geode.test.junit.rules.ServerStarterRule;
@@ -113,18 +114,18 @@ public class CoreFunctionSecurityTest {
     functionStringMap.put(new DataCommandFunction(), "*");
     functionStringMap.put(new DeployFunction(), "*");
     functionStringMap.put(new DescribeDiskStoreFunction(), "*");
-    functionStringMap.put(new DestroyAsyncEventQueueFunction(), "*");
-    functionStringMap.put(new DestroyDiskStoreFunction(), "*");
+    functionStringMap.put(new DestroyAsyncEventQueueFunction(ModuleService.DEFAULT), "*");
+    functionStringMap.put(new DestroyDiskStoreFunction(ModuleService.DEFAULT), "*");
     functionStringMap.put(new DestroyIndexFunction(), "*");
     functionStringMap.put(new ExportConfigFunction(), "*");
     functionStringMap.put(new ExportDataFunction(), "*");
     functionStringMap.put(new ExportLogsFunction(), "*");
-    functionStringMap.put(new FetchRegionAttributesFunction(), "*");
+    functionStringMap.put(new FetchRegionAttributesFunction(ModuleService.DEFAULT), "*");
     functionStringMap.put(new FetchSharedConfigurationStatusFunction(), "*");
     functionStringMap.put(new GarbageCollectionFunction(), "*");
     functionStringMap.put(new GatewayReceiverCreateFunction(), "*");
     functionStringMap.put(new GatewaySenderCreateFunction(), "*");
-    functionStringMap.put(new GatewaySenderDestroyFunction(), "*");
+    functionStringMap.put(new GatewaySenderDestroyFunction(ModuleService.DEFAULT), "*");
     functionStringMap.put(new GetClusterConfigurationFunction(), "*");
     functionStringMap.put(new GetMemberConfigInformationFunction(), "*");
     functionStringMap.put(new GetMemberInformationFunction(), "*");
@@ -143,8 +144,8 @@ public class CoreFunctionSecurityTest {
     functionStringMap.put(new RebalanceFunction(), "*");
     functionStringMap.put(new RestoreRedundancyFunction(), "*");
     functionStringMap.put(new RegionAlterFunction(), "*");
-    functionStringMap.put(new RegionCreateFunction(), "*");
-    functionStringMap.put(new RegionDestroyFunction(), "*");
+    functionStringMap.put(new RegionCreateFunction(ModuleService.DEFAULT), "*");
+    functionStringMap.put(new RegionDestroyFunction(ModuleService.DEFAULT), "*");
     functionStringMap.put(new ShowMissingDiskStoresFunction(), "*");
     functionStringMap.put(new ShutDownFunction(), "*");
     functionStringMap.put(new SizeExportLogsFunction(), "*");
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/internal/configuration/utils/XmlUtilsAddNewNodeJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/internal/configuration/utils/XmlUtilsAddNewNodeJUnitTest.java
index f9eb651..7f3655c 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/internal/configuration/utils/XmlUtilsAddNewNodeJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/internal/configuration/utils/XmlUtilsAddNewNodeJUnitTest.java
@@ -75,7 +75,8 @@ public class XmlUtilsAddNewNodeJUnitTest {
   @Before
   public void before() throws SAXException, ParserConfigurationException, IOException {
     config = XmlUtils.createDocumentFromReader(new InputStreamReader(
-        this.getClass().getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.xml")));
+        this.getClass().getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.xml")),
+        ModuleService.DEFAULT);
   }
 
   @AfterClass
@@ -99,14 +100,15 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(0, nodes.getLength());
 
     final Document changes = XmlUtils.createDocumentFromReader(new InputStreamReader(this.getClass()
-        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeNewNamed.xml")));
+        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeNewNamed.xml")),
+        ModuleService.DEFAULT);
     nodes = XmlUtils.query(changes, xPath, xPathContext);
     assertEquals(1, nodes.getLength());
     Element element = (Element) nodes.item(0);
     assertEquals(CacheXml.GEODE_NAMESPACE, element.getNamespaceURI());
 
     final XmlEntity xmlEntity = XmlEntity.builder().withType("region").withAttribute("name", "r3")
-        .withConfig(changes).build();
+        .withConfig(changes).build(ModuleService.DEFAULT);
     XmlUtils.addNewNode(config, xmlEntity, ModuleService.DEFAULT);
 
     nodes = XmlUtils.query(config, xPath, xPathContext);
@@ -151,14 +153,16 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(0, nodes.getLength());
 
     final Document changes = XmlUtils.createDocumentFromReader(new InputStreamReader(this.getClass()
-        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeNewUnnamed.xml")));
+        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeNewUnnamed.xml")),
+        ModuleService.DEFAULT);
     nodes = XmlUtils.query(changes, xPath, xPathContext);
     assertEquals(1, nodes.getLength());
     Element element = (Element) nodes.item(0);
     assertEquals(CacheXml.GEODE_NAMESPACE, element.getNamespaceURI());
 
     final XmlEntity xmlEntity =
-        XmlEntity.builder().withType("jndi-bindings").withConfig(changes).build();
+        XmlEntity.builder().withType("jndi-bindings").withConfig(changes)
+            .build(ModuleService.DEFAULT);
     XmlUtils.addNewNode(config, xmlEntity, ModuleService.DEFAULT);
 
     nodes = XmlUtils.query(config, xPath, xPathContext);
@@ -188,7 +192,8 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(0, nodes.getLength());
 
     final Document changes = XmlUtils.createDocumentFromReader(new InputStreamReader(this.getClass()
-        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeNewUnnamedExtension.xml")));
+        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeNewUnnamedExtension.xml")),
+        ModuleService.DEFAULT);
     nodes = XmlUtils.query(changes, xPath, xPathContext);
     assertEquals(1, nodes.getLength());
     Element element = (Element) nodes.item(0);
@@ -196,7 +201,8 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals("test:region", element.getNodeName());
 
     final XmlEntity xmlEntity = XmlEntity.builder().withType("region")
-        .withNamespace(TEST_PREFIX, TEST_NAMESPACE).withConfig(changes).build();
+        .withNamespace(TEST_PREFIX, TEST_NAMESPACE).withConfig(changes)
+        .build(ModuleService.DEFAULT);
     XmlUtils.addNewNode(config, xmlEntity, ModuleService.DEFAULT);
 
     nodes = XmlUtils.query(config, xPath, xPathContext);
@@ -231,7 +237,8 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(CacheXml.GEODE_NAMESPACE, element.getNamespaceURI());
 
     final Document changes = XmlUtils.createDocumentFromReader(new InputStreamReader(this.getClass()
-        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeReplaceNamed.xml")));
+        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeReplaceNamed.xml")),
+        ModuleService.DEFAULT);
     nodes = XmlUtils.query(changes, xPath, xPathContext);
     assertEquals(1, nodes.getLength());
     element = (Element) nodes.item(0);
@@ -239,7 +246,7 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(CacheXml.GEODE_NAMESPACE, element.getNamespaceURI());
 
     final XmlEntity xmlEntity = XmlEntity.builder().withType("region").withAttribute("name", "r1")
-        .withConfig(changes).build();
+        .withConfig(changes).build(ModuleService.DEFAULT);
     XmlUtils.addNewNode(config, xmlEntity, ModuleService.DEFAULT);
 
     nodes = XmlUtils.query(config, xPath, xPathContext);
@@ -266,14 +273,16 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(CacheXml.GEODE_NAMESPACE, element.getNamespaceURI());
 
     final Document changes = XmlUtils.createDocumentFromReader(new InputStreamReader(this.getClass()
-        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeReplaceUnnamed.xml")));
+        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testAddNewNodeReplaceUnnamed.xml")),
+        ModuleService.DEFAULT);
     nodes = XmlUtils.query(changes, xPath, xPathContext);
     assertEquals(1, nodes.getLength());
     element = (Element) nodes.item(0);
     assertEquals("bar", XmlUtils.getAttribute(element, "disk-store-name"));
     assertEquals(CacheXml.GEODE_NAMESPACE, element.getNamespaceURI());
 
-    final XmlEntity xmlEntity = XmlEntity.builder().withType("pdx").withConfig(changes).build();
+    final XmlEntity xmlEntity =
+        XmlEntity.builder().withType("pdx").withConfig(changes).build(ModuleService.DEFAULT);
     XmlUtils.addNewNode(config, xmlEntity, ModuleService.DEFAULT);
 
     nodes = XmlUtils.query(config, xPath, xPathContext);
@@ -302,7 +311,8 @@ public class XmlUtilsAddNewNodeJUnitTest {
 
     final org.w3c.dom.Document changes =
         XmlUtils.createDocumentFromReader(new InputStreamReader(this.getClass().getResourceAsStream(
-            "XmlUtilsAddNewNodeJUnitTest.testAddNewNodeReplaceUnnamedExtension.xml")));
+            "XmlUtilsAddNewNodeJUnitTest.testAddNewNodeReplaceUnnamedExtension.xml")),
+            ModuleService.DEFAULT);
     nodes = XmlUtils.query(changes, xPath, xPathContext);
     assertEquals(1, nodes.getLength());
     element = (Element) nodes.item(0);
@@ -310,7 +320,8 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(TEST_NAMESPACE, element.getNamespaceURI());
 
     final XmlEntity xmlEntity = XmlEntity.builder().withType("cache")
-        .withNamespace(TEST_PREFIX, TEST_NAMESPACE).withConfig(changes).build();
+        .withNamespace(TEST_PREFIX, TEST_NAMESPACE).withConfig(changes)
+        .build(ModuleService.DEFAULT);
     XmlUtils.addNewNode(config, xmlEntity, ModuleService.DEFAULT);
 
     nodes = XmlUtils.query(config, xPath, xPathContext);
@@ -337,12 +348,13 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(CacheXml.GEODE_NAMESPACE, element.getNamespaceURI());
 
     final Document changes = XmlUtils.createDocumentFromReader(new InputStreamReader(this.getClass()
-        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testDeleteNodeNamed.xml")));
+        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testDeleteNodeNamed.xml")),
+        ModuleService.DEFAULT);
     nodes = XmlUtils.query(changes, xPath, xPathContext);
     assertEquals(0, nodes.getLength());
 
     final XmlEntity xmlEntity = XmlEntity.builder().withType("region").withAttribute("name", "r1")
-        .withConfig(changes).build();
+        .withConfig(changes).build(ModuleService.DEFAULT);
     XmlUtils.deleteNode(config, xmlEntity);
 
     nodes = XmlUtils.query(config, xPath, xPathContext);
@@ -367,11 +379,13 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(CacheXml.GEODE_NAMESPACE, element.getNamespaceURI());
 
     final Document changes = XmlUtils.createDocumentFromReader(new InputStreamReader(this.getClass()
-        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testDeleteNodeUnnamed.xml")));
+        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testDeleteNodeUnnamed.xml")),
+        ModuleService.DEFAULT);
     nodes = XmlUtils.query(changes, xPath, xPathContext);
     assertEquals(0, nodes.getLength());
 
-    final XmlEntity xmlEntity = XmlEntity.builder().withType("pdx").withConfig(changes).build();
+    final XmlEntity xmlEntity =
+        XmlEntity.builder().withType("pdx").withConfig(changes).build(ModuleService.DEFAULT);
     XmlUtils.deleteNode(config, xmlEntity);
 
     nodes = XmlUtils.query(config, xPath, xPathContext);
@@ -396,12 +410,14 @@ public class XmlUtilsAddNewNodeJUnitTest {
     assertEquals(TEST_NAMESPACE, element.getNamespaceURI());
 
     final Document changes = XmlUtils.createDocumentFromReader(new InputStreamReader(this.getClass()
-        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testDeleteNodeUnnamedExtension.xml")));
+        .getResourceAsStream("XmlUtilsAddNewNodeJUnitTest.testDeleteNodeUnnamedExtension.xml")),
+        ModuleService.DEFAULT);
     nodes = XmlUtils.query(changes, xPath, xPathContext);
     assertEquals(0, nodes.getLength());
 
     final XmlEntity xmlEntity = XmlEntity.builder().withType("cache")
-        .withNamespace(TEST_PREFIX, TEST_NAMESPACE).withConfig(changes).build();
+        .withNamespace(TEST_PREFIX, TEST_NAMESPACE).withConfig(changes)
+        .build(ModuleService.DEFAULT);
     XmlUtils.deleteNode(config, xmlEntity);
 
     nodes = XmlUtils.query(config, xPath, xPathContext);
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/QueryConfigurationServiceImpl.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/QueryConfigurationServiceImpl.java
index 6e769f8..f4d2ec9 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/QueryConfigurationServiceImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/QueryConfigurationServiceImpl.java
@@ -38,6 +38,7 @@ import org.apache.geode.internal.cache.CacheService;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
+import org.apache.geode.services.module.ModuleService;
 
 public class QueryConfigurationServiceImpl implements QueryConfigurationService {
   private static final Logger logger = LogService.getLogger();
@@ -84,7 +85,7 @@ public class QueryConfigurationServiceImpl implements QueryConfigurationService
   }
 
   @Override
-  public boolean init(Cache cache) {
+  public boolean init(Cache cache, ModuleService moduleService) {
     if (cache == null) {
       throw new IllegalArgumentException(NULL_CACHE_ERROR_MESSAGE);
     }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
index 8bf1e73..405fb1c 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
@@ -180,7 +180,7 @@ public class InternalConfigurationPersistenceService implements ConfigurationPer
           xmlContent = generateInitialXmlContent();
         }
         try {
-          final Document doc = XmlUtils.createAndUpgradeDocumentFromXml(xmlContent);
+          final Document doc = XmlUtils.createAndUpgradeDocumentFromXml(xmlContent, moduleService);
           XmlUtils.addNewNode(doc, xmlEntity, moduleService);
           configuration.setCacheXmlContent(XmlUtils.prettyXml(doc));
           configRegion.put(group, configuration);
@@ -211,7 +211,7 @@ public class InternalConfigurationPersistenceService implements ConfigurationPer
           String xmlContent = configuration.getCacheXmlContent();
           try {
             if (xmlContent != null && !xmlContent.isEmpty()) {
-              Document doc = XmlUtils.createAndUpgradeDocumentFromXml(xmlContent);
+              Document doc = XmlUtils.createAndUpgradeDocumentFromXml(xmlContent, moduleService);
               XmlUtils.deleteNode(doc, xmlEntity);
               configuration.setCacheXmlContent(XmlUtils.prettyXml(doc));
               configRegion.put(group, configuration);
@@ -249,7 +249,7 @@ public class InternalConfigurationPersistenceService implements ConfigurationPer
             xmlContent = sw.toString();
           }
           try {
-            Document doc = XmlUtils.createAndUpgradeDocumentFromXml(xmlContent);
+            Document doc = XmlUtils.createAndUpgradeDocumentFromXml(xmlContent, moduleService);
             // Modify the cache attributes
             XmlUtils.modifyRootAttributes(doc, xmlEntity);
             // Change the xml content of the configuration and put it the config region
@@ -496,7 +496,7 @@ public class InternalConfigurationPersistenceService implements ConfigurationPer
       String configurationXml = configuration.getCacheXmlContent();
       if (configurationXml != null && !configurationXml.isEmpty()) {
         try {
-          Document document = XmlUtils.createDocumentFromXml(configurationXml);
+          Document document = XmlUtils.createDocumentFromXml(configurationXml, moduleService);
           boolean removedInvalidReceivers = removeInvalidGatewayReceivers(document);
           boolean removedDuplicateReceivers = removeDuplicateGatewayReceivers(document);
           if (removedInvalidReceivers || removedDuplicateReceivers) {
@@ -820,7 +820,7 @@ public class InternalConfigurationPersistenceService implements ConfigurationPer
     File cacheXmlFull = new File(groupConfigDir, configuration.getCacheXmlFileName());
     File propertiesFull = new File(groupConfigDir, configuration.getPropertiesFileName());
 
-    configuration.setCacheXmlFile(cacheXmlFull);
+    configuration.setCacheXmlFile(cacheXmlFull, moduleService);
     configuration.setPropertiesFile(propertiesFull);
 
     String deployedBy = getDeployedBy();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheService.java b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheService.java
index aaea92d..1051722 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheService.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheService.java
@@ -16,6 +16,7 @@ package org.apache.geode.internal.cache;
 
 import org.apache.geode.cache.Cache;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Interface for a service that is linked to a cache.
@@ -33,7 +34,7 @@ public interface CacheService {
    * @return a boolean indicating whether the service was successfully initialized. If false, then
    *         the service will not subsequently be available.
    */
-  default boolean init(Cache cache) {
+  default boolean init(Cache cache, ModuleService moduleService) {
     return true;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index a2e390a..3cd270c 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -1697,7 +1697,7 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
 
       // log the configuration received from the locator
       logger.info("Received cluster configuration from the locator");
-      logger.info(response.describeConfig());
+      logger.info(response.describeConfig(moduleService));
 
       Configuration clusterConfig = response.getRequestedConfiguration().get(CLUSTER_CONFIG);
       Properties clusterSecProperties =
@@ -1855,7 +1855,7 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
     if (loadedServices.isSuccessful()) {
       for (CacheService service : loadedServices.getMessage()) {
         try {
-          if (service.init(this)) {
+          if (service.init(this, moduleService)) {
             this.services.put(service.getInterface(), service);
             logger.info("Initialized cache service {}", service.getClass().getName());
           }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolService.java b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolService.java
index 855cb09..58bf235 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolService.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolService.java
@@ -19,6 +19,7 @@ import org.apache.geode.StatisticsFactory;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.security.SecurityService;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Provides a convenient location for a client protocol service to be loaded into the system.
@@ -42,4 +43,6 @@ public interface ClientProtocolService {
       SecurityService securityService);
 
   int getServiceProtocolVersion();
+
+  void init(ModuleService moduleService);
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolServiceLoader.java b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolServiceLoader.java
index fdaf69c..c5e7beb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolServiceLoader.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/client/protocol/ClientProtocolServiceLoader.java
@@ -31,7 +31,10 @@ public class ClientProtocolServiceLoader {
   private List<ClientProtocolService> initializeProtocolServices(ModuleService moduleService) {
     List<ClientProtocolService> resultList = new LinkedList<>();
     moduleService.loadService(ClientProtocolService.class)
-        .ifSuccessful(clientProtocolServices -> resultList.addAll(clientProtocolServices));
+        .ifSuccessful(clientProtocolServices -> clientProtocolServices.forEach((service -> {
+          service.init(moduleService);
+          resultList.add(service);
+        })));
     return resultList;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXml.java b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXml.java
index 15cf8b3..5ea0931 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXml.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXml.java
@@ -16,7 +16,8 @@ package org.apache.geode.internal.cache.xmlcache;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ServiceLoader;
+import java.util.List;
+import java.util.Set;
 
 import org.xml.sax.Attributes;
 import org.xml.sax.ErrorHandler;
@@ -27,8 +28,8 @@ import org.xml.sax.SAXParseException;
 
 import org.apache.geode.cache.CacheXmlException;
 import org.apache.geode.distributed.ConfigurationProperties;
-import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.services.module.ModuleService;
+import org.apache.geode.services.result.ModuleServiceResult;
 
 /**
  * The abstract superclass of classes that convert XML into a {@link org.apache.geode.cache.Cache}
@@ -839,15 +840,16 @@ public abstract class CacheXml implements GeodeEntityResolver2, ErrorHandler {
                                                                  // assume the latest
       return resolveEntityByEntityResolvers(name, publicId, baseURI, systemId);
     }
-    InputSource result;
-    InputStream stream = ClassPathLoader.getLatest().getResourceAsStream(getClass(), location);
-    if (stream != null) {
-      result = new InputSource(stream);
-    } else {
-      throw new SAXNotRecognizedException(
-          String.format("DTD not found: %s", location));
+
+    ModuleServiceResult<List<InputStream>> resourceResult =
+        moduleService.findResourceAsStream(location);
+    if (resourceResult.isSuccessful()) {
+      for (InputStream stream : resourceResult.getMessage()) {
+        return new InputSource(stream);
+      }
     }
-    return result;
+    throw new SAXNotRecognizedException(
+        String.format("DTD not found: %s", location));
   }
 
   /*
@@ -886,14 +888,16 @@ public abstract class CacheXml implements GeodeEntityResolver2, ErrorHandler {
    */
   private InputSource resolveEntityByEntityResolvers(String name, String publicId, String baseURI,
       String systemId) throws SAXException, IOException {
-    final ServiceLoader<GeodeEntityResolver2> entityResolvers =
-        ServiceLoader.load(GeodeEntityResolver2.class, ClassPathLoader.getLatest().asClassLoader());
-    for (final GeodeEntityResolver2 entityResolver : entityResolvers) {
-      entityResolver.init(moduleService);
-      final InputSource inputSource =
-          entityResolver.resolveEntity(name, publicId, baseURI, systemId);
-      if (null != inputSource) {
-        return inputSource;
+    ModuleServiceResult<Set<GeodeEntityResolver2>> serviceLoadResult =
+        moduleService.loadService(GeodeEntityResolver2.class);
+    if (serviceLoadResult.isSuccessful()) {
+      for (GeodeEntityResolver2 entityResolver : serviceLoadResult.getMessage()) {
+        entityResolver.init(moduleService);
+        final InputSource inputSource =
+            entityResolver.resolveEntity(name, publicId, baseURI, systemId);
+        if (null != inputSource) {
+          return inputSource;
+        }
       }
     }
     return null;
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/CacheElement.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/CacheElement.java
index e10815a..906d53b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/CacheElement.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/CacheElement.java
@@ -115,7 +115,7 @@ public class CacheElement {
     final LinkedHashMap<String, CacheElement> elementMap = new LinkedHashMap<>();
 
     buildElementMapCacheType(elementMap,
-        resolveSchema(schemaLocationMap, CacheXml.GEODE_NAMESPACE, moduleService));
+        resolveSchema(schemaLocationMap, CacheXml.GEODE_NAMESPACE, moduleService), moduleService);
 
     // if we are ever concerned with the order of extensions or children process them here.
 
@@ -163,9 +163,9 @@ public class CacheElement {
    * @since GemFire 8.1
    */
   private static void buildElementMapCacheType(final LinkedHashMap<String, CacheElement> elementMap,
-      final InputSource inputSource)
+      final InputSource inputSource, ModuleService moduleService)
       throws SAXException, IOException, ParserConfigurationException, XPathExpressionException {
-    final Document doc = XmlUtils.getDocumentBuilder().parse(inputSource);
+    final Document doc = XmlUtils.getDocumentBuilder(moduleService).parse(inputSource);
 
     int rank = 0;
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
index 616915b..822f590 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
@@ -41,6 +41,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.configuration.Deployment;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Domain object for all the configuration related data.
@@ -85,12 +86,12 @@ public class Configuration implements DataSerializable {
     this.cacheXmlContent = cacheXmlContent;
   }
 
-  public void setCacheXmlFile(File cacheXmlFile) throws IOException {
+  public void setCacheXmlFile(File cacheXmlFile, ModuleService moduleService) throws IOException {
     if (cacheXmlFile.length() == 0) {
       cacheXmlContent = "";
     } else {
       try {
-        Document doc = XmlUtils.getDocumentBuilder().parse(cacheXmlFile);
+        Document doc = XmlUtils.getDocumentBuilder(moduleService).parse(cacheXmlFile);
         cacheXmlContent = XmlUtils.elementToString(doc);
       } catch (SAXException | TransformerException | ParserConfigurationException e) {
         throw new IOException("Unable to parse existing cluster configuration from file: "
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
index 427aaf6..efd085b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
@@ -51,6 +51,7 @@ import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils.XPathContext;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Domain class for defining a GemFire entity in XML.
@@ -114,12 +115,13 @@ public class XmlEntity implements VersionedDataSerializable {
    * @param key Key of the attribute to match, for example, "name" or "id".
    * @param value Value of the attribute to match.
    */
-  public XmlEntity(final String type, final String key, final String value) {
+  public XmlEntity(final String type, final String key, final String value,
+      ModuleService moduleService) {
     cacheProvider = createDefaultCacheProvider();
     this.type = type;
     attributes.put(key, value);
 
-    init();
+    init(moduleService);
   }
 
   /**
@@ -175,7 +177,7 @@ public class XmlEntity implements VersionedDataSerializable {
 
   public XmlEntity(final CacheProvider cacheProvider, final String parentType,
       final String childPrefix, final String childNamespace, final String childType,
-      final String key, final String value) {
+      final String key, final String value, ModuleService moduleService) {
     this.cacheProvider = cacheProvider;
     this.parentType = parentType;
     type = childType;
@@ -186,10 +188,10 @@ public class XmlEntity implements VersionedDataSerializable {
     attributes.put(key, value);
 
     searchString = "//" + this.parentType + '/' + childPrefix + ':' + type;
-    xmlDefinition = parseXmlForDefinition();
+    xmlDefinition = parseXmlForDefinition(moduleService);
   }
 
-  private String parseXmlForDefinition() {
+  private String parseXmlForDefinition(ModuleService moduleService) {
     final Cache cache = cacheProvider.getCache();
 
     final StringWriter stringWriter = new StringWriter();
@@ -199,7 +201,7 @@ public class XmlEntity implements VersionedDataSerializable {
     InputSource inputSource = new InputSource(new StringReader(stringWriter.toString()));
 
     try {
-      Document document = XmlUtils.getDocumentBuilder().parse(inputSource);
+      Document document = XmlUtils.getDocumentBuilder(moduleService).parse(inputSource);
       Node element = document.getElementsByTagNameNS(childNamespace, type).item(0);
       if (null != element) {
         return XmlUtils.elementToString(element);
@@ -232,19 +234,20 @@ public class XmlEntity implements VersionedDataSerializable {
   }
 
   /**
-   * Initialize new instances. Called from {@link #XmlEntity(String, String, String)} and
-   * {@link XmlEntityBuilder#build()}.
+   * Initialize new instances. Called from {@link #XmlEntity(String, String, String, ModuleService)}
+   * and
+   * {@link XmlEntityBuilder#build(ModuleService)}.
    *
    * @since GemFire 8.1
    */
-  private void init() {
+  private void init(ModuleService moduleService) {
     Assert.assertTrue(StringUtils.isNotBlank(type));
     Assert.assertTrue(StringUtils.isNotBlank(prefix));
     Assert.assertTrue(StringUtils.isNotBlank(namespace));
     Assert.assertTrue(attributes != null);
 
     if (null == xmlDefinition) {
-      xmlDefinition = loadXmlDefinition();
+      xmlDefinition = loadXmlDefinition(moduleService);
     }
   }
 
@@ -253,7 +256,7 @@ public class XmlEntity implements VersionedDataSerializable {
    *
    * @return XML string representation of the entity.
    */
-  private String loadXmlDefinition() {
+  private String loadXmlDefinition(ModuleService moduleService) {
     final Cache cache = cacheProvider.getCache();
 
     final StringWriter stringWriter = new StringWriter();
@@ -261,7 +264,7 @@ public class XmlEntity implements VersionedDataSerializable {
     CacheXmlGenerator.generate(cache, printWriter, false, false);
     printWriter.close();
 
-    return loadXmlDefinition(stringWriter.toString());
+    return loadXmlDefinition(stringWriter.toString(), moduleService);
   }
 
   /**
@@ -271,10 +274,11 @@ public class XmlEntity implements VersionedDataSerializable {
    * @return XML for XmlEntity if found, otherwise {@code null}.
    * @since GemFire 8.1
    */
-  private String loadXmlDefinition(final String xmlDocument) {
+  private String loadXmlDefinition(final String xmlDocument, ModuleService moduleService) {
     try {
       InputSource inputSource = new InputSource(new StringReader(xmlDocument));
-      return loadXmlDefinition(XmlUtils.getDocumentBuilder().parse(inputSource));
+      return loadXmlDefinition(XmlUtils
+          .getDocumentBuilder(moduleService).parse(inputSource));
     } catch (IOException | SAXException | ParserConfigurationException | XPathExpressionException
         | TransformerFactoryConfigurationError | TransformerException e) {
       throw new InternalGemFireError("Could not parse XML when creating XMLEntity", e);
@@ -538,8 +542,8 @@ public class XmlEntity implements VersionedDataSerializable {
      * @since GemFire 8.1
      */
     @SuppressWarnings("deprecation")
-    public XmlEntity build() {
-      xmlEntity.init();
+    public XmlEntity build(ModuleService moduleService) {
+      xmlEntity.init(moduleService);
 
       final XmlEntity built = xmlEntity;
       xmlEntity = new XmlEntity();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
index a7dd234..b7179bb 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
@@ -40,6 +40,7 @@ import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
+import org.apache.geode.services.module.ModuleService;
 
 public class ConfigurationResponse implements DataSerializableFixedID {
 
@@ -90,7 +91,7 @@ public class ConfigurationResponse implements DataSerializableFixedID {
     return sb.toString();
   }
 
-  public String describeConfig() {
+  public String describeConfig(ModuleService moduleService) {
     StringBuffer sb = new StringBuffer();
     if (requestedConfiguration.isEmpty()) {
       sb.append("Received an empty shared configuration");
@@ -118,7 +119,7 @@ public class ConfigurationResponse implements DataSerializableFixedID {
           try {
             String cacheXmlContent = config.getCacheXmlContent();
             if (StringUtils.isNotBlank(cacheXmlContent)) {
-              sb.append("\n" + XmlUtils.prettyXml(cacheXmlContent));
+              sb.append("\n" + XmlUtils.prettyXml(cacheXmlContent, moduleService));
             }
           } catch (IOException | TransformerFactoryConfigurationError | TransformerException
               | SAXException | ParserConfigurationException e) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/utils/XmlUtils.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/utils/XmlUtils.java
index e734c9e..f074f0c 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/utils/XmlUtils.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/utils/XmlUtils.java
@@ -70,12 +70,12 @@ public class XmlUtils {
    * @return {@link Document} if successful, otherwise false.
    * @since GemFire 8.1
    */
-  public static Document createDocumentFromReader(final Reader reader)
+  public static Document createDocumentFromReader(final Reader reader, ModuleService moduleService)
       throws SAXException, ParserConfigurationException, IOException {
     Document doc;
     InputSource inputSource = new InputSource(reader);
 
-    doc = getDocumentBuilder().parse(inputSource);
+    doc = getDocumentBuilder(moduleService).parse(inputSource);
 
     return doc;
   }
@@ -104,12 +104,15 @@ public class XmlUtils {
     }
   }
 
-  public static DocumentBuilder getDocumentBuilder() throws ParserConfigurationException {
+  public static DocumentBuilder getDocumentBuilder(ModuleService moduleService)
+      throws ParserConfigurationException {
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     factory.setNamespaceAware(true);
     // the actual builder or parser
     DocumentBuilder builder = factory.newDocumentBuilder();
-    builder.setEntityResolver(new CacheXmlParser());
+    CacheXmlParser cacheXmlParser = new CacheXmlParser();
+    cacheXmlParser.init(moduleService);
+    builder.setEntityResolver(cacheXmlParser);
     return builder;
   }
 
@@ -126,7 +129,7 @@ public class XmlUtils {
     final LinkedHashMap<String, CacheElement> elementOrderMap =
         CacheElement.buildElementMap(doc, moduleService);
 
-    final Node newNode = createNode(doc, xmlEntity.getXmlDefinition());
+    final Node newNode = createNode(doc, xmlEntity.getXmlDefinition(), moduleService);
     final Node root = doc.getDocumentElement();
     final int incomingElementOrder =
         getElementOrder(elementOrderMap, xmlEntity.getNamespace(), xmlEntity.getType());
@@ -222,10 +225,10 @@ public class XmlUtils {
    *
    * @return Node representing the xml definition
    */
-  private static Node createNode(Document owner, String xmlDefinition)
+  private static Node createNode(Document owner, String xmlDefinition, ModuleService moduleService)
       throws SAXException, IOException, ParserConfigurationException {
     InputSource inputSource = new InputSource(new StringReader(xmlDefinition));
-    Document document = getDocumentBuilder().parse(inputSource);
+    Document document = getDocumentBuilder(moduleService).parse(inputSource);
     Node newNode = document.getDocumentElement();
     return owner.importNode(newNode, true);
   }
@@ -380,10 +383,10 @@ public class XmlUtils {
    *
    * @return pretty xml string
    */
-  public static String prettyXml(String xmlContent)
+  public static String prettyXml(String xmlContent, ModuleService moduleService)
       throws IOException, TransformerFactoryConfigurationError, TransformerException, SAXException,
       ParserConfigurationException {
-    Document doc = createDocumentFromXml(xmlContent);
+    Document doc = createDocumentFromXml(xmlContent, moduleService);
     return prettyXml(doc);
   }
 
@@ -391,13 +394,14 @@ public class XmlUtils {
    * Create a document from the xml
    *
    */
-  public static Document createDocumentFromXml(String xmlContent)
+  public static Document createDocumentFromXml(String xmlContent, ModuleService moduleService)
       throws SAXException, ParserConfigurationException, IOException {
-    return createDocumentFromReader(new StringReader(xmlContent));
+    return createDocumentFromReader(new StringReader(xmlContent), moduleService);
   }
 
   /**
-   * Create a {@link Document} using {@link XmlUtils#createDocumentFromXml(String)} and if the
+   * Create a {@link Document} using {@link XmlUtils#createDocumentFromXml(String, ModuleService)}
+   * and if the
    * version attribute is not equal to the current version then update the XML to the current schema
    * and return the document.
    *
@@ -405,13 +409,14 @@ public class XmlUtils {
    * @return {@link Document} from xmlContent.
    * @since GemFire 8.1
    */
-  public static Document createAndUpgradeDocumentFromXml(String xmlContent)
+  public static Document createAndUpgradeDocumentFromXml(String xmlContent,
+      ModuleService moduleService)
       throws SAXException, ParserConfigurationException, IOException, XPathExpressionException {
-    Document doc = XmlUtils.createDocumentFromXml(xmlContent);
+    Document doc = XmlUtils.createDocumentFromXml(xmlContent, moduleService);
     if (!CacheXml.VERSION_LATEST.equals(XmlUtils.getAttribute(doc.getDocumentElement(),
         CacheXml.VERSION, CacheXml.GEODE_NAMESPACE))) {
       doc = upgradeSchema(doc, CacheXml.GEODE_NAMESPACE, CacheXml.LATEST_SCHEMA_LOCATION,
-          CacheXml.VERSION_LATEST);
+          CacheXml.VERSION_LATEST, moduleService);
     }
     return doc;
   }
@@ -426,7 +431,7 @@ public class XmlUtils {
    * @since GemFire 8.1
    */
   public static Document upgradeSchema(Document document, final String namespaceUri,
-      final String schemaLocation, String schemaVersion)
+      final String schemaLocation, String schemaVersion, ModuleService moduleService)
       throws XPathExpressionException, ParserConfigurationException {
     if (StringUtils.isBlank(namespaceUri)) {
       throw new IllegalArgumentException("namespaceUri");
@@ -440,7 +445,7 @@ public class XmlUtils {
 
     if (null != document.getDoctype()) {
       Node root = document.getDocumentElement();
-      Document copiedDocument = getDocumentBuilder().newDocument();
+      Document copiedDocument = getDocumentBuilder(moduleService).newDocument();
       Node copiedRoot = copiedDocument.importNode(root, true);
       copiedDocument.appendChild(copiedRoot);
       document = copiedDocument;
diff --git a/geode-core/src/test/java/org/apache/geode/cache/query/internal/QueryConfigurationServiceImplTest.java b/geode-core/src/test/java/org/apache/geode/cache/query/internal/QueryConfigurationServiceImplTest.java
index bcb80b9..e109bbf 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/query/internal/QueryConfigurationServiceImplTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/query/internal/QueryConfigurationServiceImplTest.java
@@ -52,6 +52,7 @@ import org.apache.geode.cache.query.security.UnrestrictedMethodAuthorizer;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.management.internal.cli.util.TestMethodAuthorizer;
+import org.apache.geode.services.module.ModuleService;
 
 @RunWith(JUnitParamsRunner.class)
 public class QueryConfigurationServiceImplTest {
@@ -94,7 +95,7 @@ public class QueryConfigurationServiceImplTest {
 
   @Test
   public void initThrowsExceptionWhenCacheIsNull() {
-    assertThatThrownBy(() -> configService.init(null))
+    assertThatThrownBy(() -> configService.init(null, ModuleService.DEFAULT))
         .isInstanceOf(IllegalArgumentException.class)
         .hasMessage(NULL_CACHE_ERROR_MESSAGE);
   }
@@ -102,7 +103,7 @@ public class QueryConfigurationServiceImplTest {
   @Test
   public void initSetsNoOpAuthorizerWhenSecurityDisabled() {
     when(mockSecurity.isIntegratedSecurity()).thenReturn(false);
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     assertThat(configService.getMethodAuthorizer())
         .isSameAs(QueryConfigurationServiceImpl.getNoOpAuthorizer());
   }
@@ -112,7 +113,7 @@ public class QueryConfigurationServiceImplTest {
     setAllowUntrustedMethodInvocationSystemProperty();
     configService = new QueryConfigurationServiceImpl();
     when(mockSecurity.isIntegratedSecurity()).thenReturn(true);
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     assertThat(configService.getMethodAuthorizer())
         .isSameAs(QueryConfigurationServiceImpl.getNoOpAuthorizer());
   }
@@ -120,14 +121,14 @@ public class QueryConfigurationServiceImplTest {
   @Test
   public void initSetsRestrictedMethodAuthorizerWhenSecurityIsEnabledAndSystemPropertyIsNotSet() {
     when(mockSecurity.isIntegratedSecurity()).thenReturn(true);
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     assertThat(configService.getMethodAuthorizer()).isInstanceOf(RestrictedMethodAuthorizer.class);
   }
 
   @Test
   public void updateMethodAuthorizerDoesNothingWhenSecurityIsDisabled() {
     when(mockSecurity.isIntegratedSecurity()).thenReturn(false);
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     MethodInvocationAuthorizer authorizer = configService.getMethodAuthorizer();
     assertThat(authorizer).isSameAs(QueryConfigurationServiceImpl.getNoOpAuthorizer());
 
@@ -141,7 +142,7 @@ public class QueryConfigurationServiceImplTest {
     setAllowUntrustedMethodInvocationSystemProperty();
     configService = new QueryConfigurationServiceImpl();
     when(mockSecurity.isIntegratedSecurity()).thenReturn(true);
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
 
     MethodInvocationAuthorizer authorizer = configService.getMethodAuthorizer();
     assertThat(authorizer).isSameAs(QueryConfigurationServiceImpl.getNoOpAuthorizer());
@@ -183,7 +184,7 @@ public class QueryConfigurationServiceImplTest {
   public void updateMethodAuthorizerDoesNotChangeMethodAuthorizerWhenSecurityIsEnabledAndClassNameIsNull() {
     when(mockSecurity.isIntegratedSecurity()).thenReturn(true);
 
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     assertThat(configService.getMethodAuthorizer()).isInstanceOf(RestrictedMethodAuthorizer.class);
     assertThatThrownBy(
         () -> configService.updateMethodAuthorizer(mockCache, false, null, EMPTY_SET))
@@ -195,7 +196,7 @@ public class QueryConfigurationServiceImplTest {
   public void updateMethodAuthorizerDoesNotChangeMethodAuthorizerWhenSecurityIsEnabledAndClassNameIsNotFound() {
     when(mockSecurity.isIntegratedSecurity()).thenReturn(true);
 
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     assertThat(configService.getMethodAuthorizer()).isInstanceOf(RestrictedMethodAuthorizer.class);
     String className = "FakeClassName";
     assertThatThrownBy(
@@ -208,7 +209,7 @@ public class QueryConfigurationServiceImplTest {
   public void updateMethodAuthorizerDoesNotChangeMethodAuthorizerWhenSecurityIsEnabledAndSpecifiedClassDoesNotImplementMethodInvocationAuthorizer() {
     when(mockSecurity.isIntegratedSecurity()).thenReturn(true);
 
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     assertThat(configService.getMethodAuthorizer()).isInstanceOf(RestrictedMethodAuthorizer.class);
     String className = this.getClass().getName();
     assertThatThrownBy(
@@ -224,7 +225,7 @@ public class QueryConfigurationServiceImplTest {
     when(mockSecurity.isIntegratedSecurity()).thenReturn(true);
     when(mockCache.isClosed()).thenThrow(new RuntimeException("Test exception"));
 
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     assertThat(configService.getMethodAuthorizer()).isInstanceOf(RestrictedMethodAuthorizer.class);
     assertThatThrownBy(() -> configService.updateMethodAuthorizer(mockCache, false,
         TestMethodAuthorizer.class.getName(), EMPTY_SET))
@@ -239,7 +240,7 @@ public class QueryConfigurationServiceImplTest {
       Class methodAuthorizerClass) {
     when(mockSecurity.isIntegratedSecurity()).thenReturn(true);
     doReturn(Collections.singletonList(mock(ServerCQ.class))).when(mockCqService).getAllCqs();
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     assertThat(configService.getMethodAuthorizer()).isInstanceOf(RestrictedMethodAuthorizer.class);
 
     assertThatThrownBy(() -> configService.updateMethodAuthorizer(mockCache, false,
@@ -258,7 +259,7 @@ public class QueryConfigurationServiceImplTest {
     ServerCQ serverCQ2 = mock(ServerCQ.class);
     when(mockSecurity.isIntegratedSecurity()).thenReturn(true);
     doReturn(Arrays.asList(serverCQ1, serverCQ2)).when(mockCqService).getAllCqs();
-    configService.init(mockCache);
+    configService.init(mockCache, ModuleService.DEFAULT);
     assertThat(configService.getMethodAuthorizer()).isInstanceOf(RestrictedMethodAuthorizer.class);
 
     assertThatCode(() -> configService.updateMethodAuthorizer(mockCache, true,
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
index 8fee460..b8f3d69 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
@@ -207,7 +207,8 @@ public class InternalConfigurationPersistenceServiceTest {
   @Test
   public void removeDuplicateGatewayReceiversWithDefaultProperties() throws Exception {
     Document document =
-        XmlUtils.createDocumentFromXml(getDuplicateReceiversWithDefaultPropertiesXml());
+        XmlUtils.createDocumentFromXml(getDuplicateReceiversWithDefaultPropertiesXml(),
+            ModuleService.DEFAULT);
     System.out.println("Initial document:\n" + XmlUtils.prettyXml(document));
     assertThat(document.getElementsByTagName("gateway-receiver").getLength()).isEqualTo(2);
     service.removeDuplicateGatewayReceivers(document);
@@ -218,7 +219,8 @@ public class InternalConfigurationPersistenceServiceTest {
   @Test
   public void removeInvalidGatewayReceiversWithDifferentHostNameForSenders() throws Exception {
     Document document =
-        XmlUtils.createDocumentFromXml(getDuplicateReceiversWithDifferentHostNameForSendersXml());
+        XmlUtils.createDocumentFromXml(getDuplicateReceiversWithDifferentHostNameForSendersXml(),
+            ModuleService.DEFAULT);
     System.out.println("Initial document:\n" + XmlUtils.prettyXml(document));
     assertThat(document.getElementsByTagName("gateway-receiver").getLength()).isEqualTo(2);
     service.removeInvalidGatewayReceivers(document);
@@ -229,7 +231,8 @@ public class InternalConfigurationPersistenceServiceTest {
   @Test
   public void removeInvalidGatewayReceiversWithDifferentBindAddresses() throws Exception {
     Document document =
-        XmlUtils.createDocumentFromXml(getDuplicateReceiversWithDifferentBindAddressesXml());
+        XmlUtils.createDocumentFromXml(getDuplicateReceiversWithDifferentBindAddressesXml(),
+            ModuleService.DEFAULT);
     System.out.println("Initial document:\n" + XmlUtils.prettyXml(document));
     assertThat(document.getElementsByTagName("gateway-receiver").getLength()).isEqualTo(2);
     service.removeInvalidGatewayReceivers(document);
@@ -240,7 +243,8 @@ public class InternalConfigurationPersistenceServiceTest {
   @Test
   public void keepValidGatewayReceiversWithDefaultBindAddress() throws Exception {
     Document document =
-        XmlUtils.createDocumentFromXml(getSingleReceiverWithDefaultBindAddressXml());
+        XmlUtils.createDocumentFromXml(getSingleReceiverWithDefaultBindAddressXml(),
+            ModuleService.DEFAULT);
     System.out.println("Initial document:\n" + XmlUtils.prettyXml(document));
     assertThat(document.getElementsByTagName("gateway-receiver").getLength()).isEqualTo(1);
     service.removeInvalidGatewayReceivers(document);
@@ -255,7 +259,8 @@ public class InternalConfigurationPersistenceServiceTest {
     Region<String, Configuration> configurationRegion = mock(Region.class);
     configuration.setCacheXmlContent(xml);
     System.out.println("Initial xml content:\n" + configuration.getCacheXmlContent());
-    Document document = XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent());
+    Document document =
+        XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent(), ModuleService.DEFAULT);
     assertThat(document.getElementsByTagName("gateway-receiver").getLength())
         .isEqualTo(expectedInitialElements);
     Set<Map.Entry<String, Configuration>> configurationEntries = new HashSet<>();
@@ -263,7 +268,8 @@ public class InternalConfigurationPersistenceServiceTest {
     doReturn(configurationEntries).when(configurationRegion).entrySet();
     service.removeInvalidXmlConfigurations(configurationRegion);
     System.out.println("Processed xml content:\n" + configuration.getCacheXmlContent());
-    document = XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent());
+    document =
+        XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent(), ModuleService.DEFAULT);
     assertThat(document.getElementsByTagName("gateway-receiver").getLength())
         .isEqualTo(expectFinalElements);
   }
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/configuration/domain/CacheElementJUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/configuration/domain/CacheElementJUnitTest.java
index 330c189..6ff51f8 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/configuration/domain/CacheElementJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/configuration/domain/CacheElementJUnitTest.java
@@ -52,7 +52,7 @@ public class CacheElementJUnitTest {
     final XMLReader xmlReader = XMLReaderFactory.createXMLReader();
     xmlReader.setEntityResolver(entityResolver);
 
-    return XmlUtils.getDocumentBuilder()
+    return XmlUtils.getDocumentBuilder(ModuleService.DEFAULT)
         .parse(entityResolver.resolveEntity(null, schemaLocation).getByteStream());
   }
 
@@ -101,7 +101,8 @@ public class CacheElementJUnitTest {
   @Test
   public void testBuildElementMap() throws Exception {
     final Document doc = XmlUtils.createDocumentFromReader(
-        new InputStreamReader(this.getClass().getResourceAsStream("CacheElementJUnitTest.xml")));
+        new InputStreamReader(this.getClass().getResourceAsStream("CacheElementJUnitTest.xml")),
+        ModuleService.DEFAULT);
 
     final LinkedHashMap<String, CacheElement> elementMap =
         CacheElement.buildElementMap(doc, ModuleService.DEFAULT);
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/configuration/domain/ConfigurationTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/configuration/domain/ConfigurationTest.java
index 23b1f7d..aed6866 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/configuration/domain/ConfigurationTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/configuration/domain/ConfigurationTest.java
@@ -34,6 +34,7 @@ import org.junit.rules.TemporaryFolder;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.management.configuration.Deployment;
+import org.apache.geode.services.module.ModuleService;
 
 public class ConfigurationTest {
 
@@ -51,7 +52,8 @@ public class ConfigurationTest {
   public void setInvalidCacheXmlFile() throws IOException {
     File file = folder.newFile("test.xml");
     FileUtils.writeStringToFile(file, "invalid xml content", "UTF-8");
-    assertThatThrownBy(() -> configuration.setCacheXmlFile(file)).isInstanceOf(IOException.class)
+    assertThatThrownBy(() -> configuration.setCacheXmlFile(file, ModuleService.DEFAULT))
+        .isInstanceOf(IOException.class)
         .hasMessageContaining("Unable to parse");
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/configuration/utils/XmlUtilsJUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/configuration/utils/XmlUtilsJUnitTest.java
index 77576fa..23c5718 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/configuration/utils/XmlUtilsJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/configuration/utils/XmlUtilsJUnitTest.java
@@ -42,10 +42,11 @@ import org.w3c.dom.NodeList;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils.XPathContext;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Unit tests for {@link XmlUtils}. See Also {@link XmlUtilsAddNewNodeJUnitTest} for tests related
- * to {@link XmlUtils#addNewNode(Document, XmlEntity)}
+ * to {@link XmlUtils#addNewNode(Document, XmlEntity, ModuleService)}
  *
  * @since GemFire 8.1
  */
@@ -62,7 +63,8 @@ public class XmlUtilsJUnitTest {
   @Test
   public void testBuildSchemaLocationMapAttribute() throws Exception {
     final Document doc = XmlUtils.createDocumentFromReader(new InputStreamReader(getClass()
-        .getResourceAsStream("XmlUtilsJUnitTest.testBuildSchemaLocationMapAttribute.xml")));
+        .getResourceAsStream("XmlUtilsJUnitTest.testBuildSchemaLocationMapAttribute.xml")),
+        ModuleService.DEFAULT);
     final String schemaLocationAttribute = XmlUtils.getAttribute(doc.getDocumentElement(),
         W3C_XML_SCHEMA_INSTANCE_ATTRIBUTE_SCHEMA_LOCATION, W3C_XML_SCHEMA_INSTANCE_NS_URI);
     final Map<String, String> schemaLocationMap =
@@ -88,7 +90,8 @@ public class XmlUtilsJUnitTest {
   @Test
   public void testBuildSchemaLocationMapNullAttribute() throws Exception {
     final Document doc = XmlUtils.createDocumentFromReader(new InputStreamReader(getClass()
-        .getResourceAsStream("XmlUtilsJUnitTest.testBuildSchemaLocationMapNullAttribute.xml")));
+        .getResourceAsStream("XmlUtilsJUnitTest.testBuildSchemaLocationMapNullAttribute.xml")),
+        ModuleService.DEFAULT);
     final String schemaLocationAttribute = XmlUtils.getAttribute(doc.getDocumentElement(),
         W3C_XML_SCHEMA_INSTANCE_ATTRIBUTE_SCHEMA_LOCATION, W3C_XML_SCHEMA_INSTANCE_NS_URI);
     assertNull(schemaLocationAttribute);
@@ -103,7 +106,8 @@ public class XmlUtilsJUnitTest {
   @Test
   public void testBuildSchemaLocationMapEmptyAttribute() throws Exception {
     final Document doc = XmlUtils.createDocumentFromReader(new InputStreamReader(getClass()
-        .getResourceAsStream("XmlUtilsJUnitTest.testBuildSchemaLocationMapEmptyAttribute.xml")));
+        .getResourceAsStream("XmlUtilsJUnitTest.testBuildSchemaLocationMapEmptyAttribute.xml")),
+        ModuleService.DEFAULT);
     final String schemaLocationAttribute = XmlUtils.getAttribute(doc.getDocumentElement(),
         W3C_XML_SCHEMA_INSTANCE_ATTRIBUTE_SCHEMA_LOCATION, W3C_XML_SCHEMA_INSTANCE_NS_URI);
     assertNotNull(schemaLocationAttribute);
@@ -115,7 +119,8 @@ public class XmlUtilsJUnitTest {
   @Test
   public void testQuerySingleElement() throws Exception {
     final Document doc = XmlUtils.createDocumentFromReader(new InputStreamReader(
-        getClass().getResourceAsStream("XmlUtilsJUnitTest.testQuerySingleElement.xml")));
+        getClass().getResourceAsStream("XmlUtilsJUnitTest.testQuerySingleElement.xml")),
+        ModuleService.DEFAULT);
     final Element root = doc.getDocumentElement();
     final String cacheNamespace = "http://geode.apache.org/schema/cache";
     final XPathContext cacheXPathContext = new XPathContext("cache", cacheNamespace);
@@ -159,7 +164,7 @@ public class XmlUtilsJUnitTest {
    */
   @Test
   public void testChangeNamespaceWithNoRootNamespace() throws Exception {
-    Document doc = XmlUtils.getDocumentBuilder().newDocument();
+    Document doc = XmlUtils.getDocumentBuilder(ModuleService.DEFAULT).newDocument();
     Element root = doc.createElement("root");
     root = (Element) doc.appendChild(root);
     final Element child = doc.createElement("child");
@@ -183,7 +188,7 @@ public class XmlUtilsJUnitTest {
 
   @Test
   public void testChangeNamespaceWithExistingRootNamespace() throws Exception {
-    Document doc = XmlUtils.getDocumentBuilder().newDocument();
+    Document doc = XmlUtils.getDocumentBuilder(ModuleService.DEFAULT).newDocument();
 
     final String ns0 = "urn:namespace0";
     Element root = doc.createElementNS(ns0, "root");
@@ -211,7 +216,8 @@ public class XmlUtilsJUnitTest {
   @Test
   public void testCreateAndUpgradeDocumentFromXml() throws Exception {
     Document doc = XmlUtils.createAndUpgradeDocumentFromXml(IOUtils.toString(
-        this.getClass().getResourceAsStream("SharedConfigurationJUnitTest.xml"), "UTF-8"));
+        this.getClass().getResourceAsStream("SharedConfigurationJUnitTest.xml"), "UTF-8"),
+        ModuleService.DEFAULT);
 
     String schemaLocation = XmlUtils.getAttribute(doc.getDocumentElement(),
         W3C_XML_SCHEMA_INSTANCE_ATTRIBUTE_SCHEMA_LOCATION, W3C_XML_SCHEMA_INSTANCE_NS_URI);
@@ -238,14 +244,15 @@ public class XmlUtilsJUnitTest {
 
   @Test
   public void testUpgradeSchemaFromGemfireNamespace() throws Exception {
-    Document doc = XmlUtils.createDocumentFromXml(CLUSTER8_XML);
+    Document doc = XmlUtils.createDocumentFromXml(CLUSTER8_XML, ModuleService.DEFAULT);
     Element oldRoot = doc.getDocumentElement();
     assertThat(oldRoot.getAttribute(CacheXml.VERSION)).isEqualTo("8.1");
     assertThat(oldRoot.getNamespaceURI()).isEqualTo(CacheXml.GEMFIRE_NAMESPACE);
     assertThat(oldRoot.getAttribute("xsi:schemaLocation")).isEqualTo(GEMFIRE_SCHEMA_LOCATION);
 
     String version = "1.0";
-    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version);
+    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version,
+        ModuleService.DEFAULT);
 
     Element root = doc.getDocumentElement();
 
@@ -260,10 +267,11 @@ public class XmlUtilsJUnitTest {
   @Test
   public void testUpgradeSchemaFromOtherInvaidNS() throws Exception {
     String xml = "<cache version=\"8.1\" xmlns=\"http://test.org/cache\"></cache>";
-    Document doc = XmlUtils.createDocumentFromXml(xml);
+    Document doc = XmlUtils.createDocumentFromXml(xml, ModuleService.DEFAULT);
 
     String version = "1.0";
-    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version);
+    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version,
+        ModuleService.DEFAULT);
 
     Element root = doc.getDocumentElement();
     assertThat(root.getNamespaceURI()).isEqualTo(GEODE_NAMESPACE);
@@ -274,13 +282,14 @@ public class XmlUtilsJUnitTest {
   @Test
   public void testUpgradeSchemaFromGemfireNamespaceWithNoLocation() throws Exception {
     String xml = "<cache version=\"8.1\" xmlns=\"http://schema.pivotal.io/gemfire/cache\"></cache>";
-    Document doc = XmlUtils.createDocumentFromXml(xml);
+    Document doc = XmlUtils.createDocumentFromXml(xml, ModuleService.DEFAULT);
     Element oldRoot = doc.getDocumentElement();
     assertThat(oldRoot.getAttribute(CacheXml.VERSION)).isEqualTo("8.1");
     assertThat(oldRoot.getNamespaceURI()).isEqualTo(CacheXml.GEMFIRE_NAMESPACE);
 
     String version = "1.0";
-    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version);
+    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version,
+        ModuleService.DEFAULT);
 
     Element root = doc.getDocumentElement();
     assertThat(root.getNamespaceURI()).isEqualTo(GEODE_NAMESPACE);
@@ -294,12 +303,13 @@ public class XmlUtilsJUnitTest {
         + "    <a:region name=\"one\">\n"
         + "        <a:region-attributes scope=\"distributed-ack\" data-policy=\"replicate\"/>\n"
         + "    </a:region>\n" + "</a:cache>";
-    Document doc = XmlUtils.createDocumentFromXml(xml);
+    Document doc = XmlUtils.createDocumentFromXml(xml, ModuleService.DEFAULT);
     Element oldRoot = doc.getDocumentElement();
     assertThat(oldRoot.getNamespaceURI()).isEqualTo(CacheXml.GEMFIRE_NAMESPACE);
 
     String version = "1.0";
-    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version);
+    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version,
+        ModuleService.DEFAULT);
 
     Element root = doc.getDocumentElement();
 
@@ -317,10 +327,11 @@ public class XmlUtilsJUnitTest {
         + "    <a:region name=\"one\">\n"
         + "        <a:region-attributes scope=\"distributed-ack\" data-policy=\"replicate\"/>\n"
         + "    </a:region>\n" + "</a:cache>";
-    Document doc = XmlUtils.createDocumentFromXml(xml);
+    Document doc = XmlUtils.createDocumentFromXml(xml, ModuleService.DEFAULT);
     String schemaLocation2 = "http://geode.apache.org/schema/cache/cache-2.0.xsd";
     String version = "2.0";
-    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, schemaLocation2, version);
+    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, schemaLocation2, version,
+        ModuleService.DEFAULT);
 
     Element root = doc.getDocumentElement();
 
@@ -335,14 +346,15 @@ public class XmlUtilsJUnitTest {
 
   @Test
   public void testUpgradeSchemaFromGeodeNamespace() throws Exception {
-    Document doc = XmlUtils.createDocumentFromXml(CLUSTER9_XML);
+    Document doc = XmlUtils.createDocumentFromXml(CLUSTER9_XML, ModuleService.DEFAULT);
     Element oldRoot = doc.getDocumentElement();
     assertThat(oldRoot.getAttribute(CacheXml.VERSION)).isEqualTo("1.0");
     assertThat(oldRoot.getNamespaceURI()).isEqualTo(GEODE_NAMESPACE);
     assertThat(oldRoot.getAttribute("xsi:schemaLocation")).isEqualTo(GEODE_SCHEMA_LOCATION);
 
     String version = "1.0";
-    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version);
+    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, version,
+        ModuleService.DEFAULT);
     Element root = doc.getDocumentElement();
 
     assertThat(root.getNamespaceURI()).isEqualTo(GEODE_NAMESPACE);
@@ -352,14 +364,15 @@ public class XmlUtilsJUnitTest {
 
   @Test
   public void testUpgradeSchemaFromGeodeNamespaceToAnotherVersion() throws Exception {
-    Document doc = XmlUtils.createDocumentFromXml(CLUSTER9_XML);
+    Document doc = XmlUtils.createDocumentFromXml(CLUSTER9_XML, ModuleService.DEFAULT);
     Element oldRoot = doc.getDocumentElement();
     assertThat(oldRoot.getAttribute(CacheXml.VERSION)).isEqualTo("1.0");
     assertThat(oldRoot.getNamespaceURI()).isEqualTo(GEODE_NAMESPACE);
     assertThat(oldRoot.getAttribute("xsi:schemaLocation")).isEqualTo(GEODE_SCHEMA_LOCATION);
 
     String schemaLocation2 = "http://geode.apache.org/schema/cache/cache-2.0.xsd";
-    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, schemaLocation2, "2.0");
+    doc =
+        XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, schemaLocation2, "2.0", ModuleService.DEFAULT);
     Element root = doc.getDocumentElement();
 
     assertThat(root.getNamespaceURI()).isEqualTo(GEODE_NAMESPACE);
@@ -375,11 +388,12 @@ public class XmlUtilsJUnitTest {
         + "       xmlns:aop=\"http://aop\"\n" + "       version=\"8.1\"\n"
         + "       xsi:schemaLocation=\"http://cache http://test.org/cache.xsd "
         + "        http://aop http://test.org/aop.xsd\">\n" + "</cache>";
-    Document doc = XmlUtils.createDocumentFromXml(xml);
+    Document doc = XmlUtils.createDocumentFromXml(xml, ModuleService.DEFAULT);
 
     String version = "1.0";
     String namespace = "http://geode.apache.org/schema/cache";
-    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, "1.0");
+    doc = XmlUtils.upgradeSchema(doc, GEODE_NAMESPACE, LATEST_SCHEMA_LOCATION, "1.0",
+        ModuleService.DEFAULT);
 
     Element root = doc.getDocumentElement();
 
diff --git a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/AlterCompressorDUnitTest.java b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/AlterCompressorDUnitTest.java
index f1d78a1..2de1775 100644
--- a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/AlterCompressorDUnitTest.java
+++ b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/AlterCompressorDUnitTest.java
@@ -38,6 +38,7 @@ import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.RegionEntry;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
 import org.apache.geode.test.junit.categories.CompressionTest;
@@ -193,7 +194,7 @@ public class AlterCompressorDUnitTest {
   }
 
   private static String addCompressor(String cacheXmlContent, String name) throws Exception {
-    Document document = XmlUtils.createDocumentFromXml(cacheXmlContent);
+    Document document = XmlUtils.createDocumentFromXml(cacheXmlContent, ModuleService.DEFAULT);
     NodeList nodeList = document.getElementsByTagName("region-attributes");
     Node compressor = document.createElement("compressor");
     Node classname = document.createElement("class-name");
diff --git a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandDUnitTest.java b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandDUnitTest.java
index 6622214..fe06fdb 100644
--- a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandDUnitTest.java
+++ b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandDUnitTest.java
@@ -31,6 +31,7 @@ import org.apache.geode.internal.jndi.JNDIInvoker;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.dunit.IgnoredException;
 import org.apache.geode.test.dunit.SerializableRunnableIF;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
@@ -81,7 +82,7 @@ public class CreateJndiBindingCommandDUnitTest {
       Configuration configuration = ccService.getConfiguration("cluster");
       String xmlContent = configuration.getCacheXmlContent();
 
-      Document document = XmlUtils.createDocumentFromXml(xmlContent);
+      Document document = XmlUtils.createDocumentFromXml(xmlContent, ModuleService.DEFAULT);
       NodeList jndiBindings = document.getElementsByTagName("jndi-binding");
 
       assertThat(jndiBindings.getLength()).isEqualTo(1);
diff --git a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreatePooledJndiBindingDUnitTest.java b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreatePooledJndiBindingDUnitTest.java
index fe957f3..811f605 100644
--- a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreatePooledJndiBindingDUnitTest.java
+++ b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/CreatePooledJndiBindingDUnitTest.java
@@ -28,6 +28,7 @@ import org.apache.geode.distributed.internal.InternalConfigurationPersistenceSer
 import org.apache.geode.internal.jndi.JNDIInvoker;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
 import org.apache.geode.test.junit.categories.GfshTest;
@@ -74,7 +75,7 @@ public class CreatePooledJndiBindingDUnitTest {
       Configuration configuration = ccService.getConfiguration("cluster");
       String xmlContent = configuration.getCacheXmlContent();
 
-      Document document = XmlUtils.createDocumentFromXml(xmlContent);
+      Document document = XmlUtils.createDocumentFromXml(xmlContent, ModuleService.DEFAULT);
       NodeList jndiBindings = document.getElementsByTagName("jndi-binding");
 
       assertThat(jndiBindings.getLength()).isEqualTo(1);
diff --git a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandDUnitTest.java b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandDUnitTest.java
index 9a351a8..85b17b7 100644
--- a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandDUnitTest.java
+++ b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandDUnitTest.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.internal.jndi.JNDIInvoker;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
 import org.apache.geode.test.junit.rules.GfshCommandRule;
@@ -78,7 +79,8 @@ public class DestroyJndiBindingCommandDUnitTest {
       InternalConfigurationPersistenceService ccService =
           internalLocator.getConfigurationPersistenceService();
       Configuration configuration = ccService.getConfiguration("cluster");
-      Document document = XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent());
+      Document document =
+          XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent(), ModuleService.DEFAULT);
       NodeList jndiBindings = document.getElementsByTagName("jndi-binding");
 
       assertThat(jndiBindings.getLength()).isEqualTo(0);
diff --git a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DestroySecondJndiBindingCommandDUnitTest.java b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DestroySecondJndiBindingCommandDUnitTest.java
index ba0a9a7..3560ab1 100644
--- a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DestroySecondJndiBindingCommandDUnitTest.java
+++ b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DestroySecondJndiBindingCommandDUnitTest.java
@@ -33,6 +33,7 @@ import org.apache.geode.distributed.internal.InternalConfigurationPersistenceSer
 import org.apache.geode.internal.jndi.JNDIInvoker;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
 import org.apache.geode.test.junit.categories.GfshTest;
@@ -84,7 +85,8 @@ public class DestroySecondJndiBindingCommandDUnitTest {
       InternalConfigurationPersistenceService ccService =
           ClusterStartupRule.getLocator().getConfigurationPersistenceService();
       Configuration configuration = ccService.getConfiguration("cluster");
-      Document document = XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent());
+      Document document =
+          XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent(), ModuleService.DEFAULT);
       NodeList jndiBindings = document.getElementsByTagName("jndi-binding");
 
       assertThat(jndiBindings.getLength()).isEqualTo(1);
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/cli/CommandService.java b/geode-gfsh/src/main/java/org/apache/geode/management/cli/CommandService.java
index 2fb1708..18eb274 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/cli/CommandService.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/cli/CommandService.java
@@ -24,6 +24,7 @@ import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.management.DependenciesNotFoundException;
 import org.apache.geode.management.internal.cli.CliUtil;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Processes remote GemFire Command Line Interface (CLI) commands. Refer to the vFabric GemFire
@@ -113,7 +114,7 @@ public abstract class CommandService {
    * @param cache Underlying <code>Cache</code> instance to be used to create a Command Service.
    * @throws CommandServiceException If command service could not be initialized.
    */
-  public static CommandService createLocalCommandService(Cache cache)
+  public static CommandService createLocalCommandService(Cache cache, ModuleService moduleService)
       throws CommandServiceException {
     if (cache == null) {
       throw new CacheClosedException("Can not create command service as cache doesn't exist.");
@@ -133,7 +134,7 @@ public abstract class CommandService {
 
       localCommandService =
           new org.apache.geode.management.internal.cli.remote.MemberCommandService(
-              (InternalCache) cache);
+              (InternalCache) cache, moduleService);
     }
 
     return localCommandService;
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/cli/GeodeCommandMarker.java b/geode-gfsh/src/main/java/org/apache/geode/management/cli/GeodeCommandMarker.java
new file mode 100644
index 0000000..89b7ed1
--- /dev/null
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/cli/GeodeCommandMarker.java
@@ -0,0 +1,25 @@
+/*
+ * 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.cli;
+
+import org.springframework.shell.core.CommandMarker;
+
+import org.apache.geode.services.module.ModuleService;
+
+public interface GeodeCommandMarker extends CommandMarker {
+  void init(ModuleService moduleService);
+}
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/cli/GfshCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/cli/GfshCommand.java
index 239d505..2235f1c 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/cli/GfshCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/cli/GfshCommand.java
@@ -21,7 +21,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.Supplier;
 
 import org.apache.shiro.subject.Subject;
-import org.springframework.shell.core.CommandMarker;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.Cache;
@@ -42,12 +41,22 @@ import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
 import org.apache.geode.management.internal.util.ManagementUtils;
 import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.services.module.ModuleService;
 
 @Experimental
-public abstract class GfshCommand implements CommandMarker {
+public abstract class GfshCommand implements GeodeCommandMarker {
   public static final String EXPERIMENTAL = "(Experimental) ";
   private InternalCache cache;
+  private ModuleService moduleService;
 
+  protected ModuleService getModuleService() {
+    return moduleService;
+  }
+
+  @Override
+  public void init(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   public boolean isOnlineCommandAvailable() {
     Gfsh gfsh = Gfsh.getCurrentInstance();
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/CommandManager.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/CommandManager.java
index c5e6f61..b6f2d47 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/CommandManager.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/CommandManager.java
@@ -29,7 +29,6 @@ import java.util.Set;
 
 import org.springframework.shell.converters.EnumConverter;
 import org.springframework.shell.converters.SimpleFileConverter;
-import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.Converter;
 import org.springframework.shell.core.MethodTarget;
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
@@ -40,11 +39,13 @@ import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.management.cli.Disabled;
+import org.apache.geode.management.cli.GeodeCommandMarker;
 import org.apache.geode.management.cli.GfshCommand;
 import org.apache.geode.management.internal.cli.commands.VersionCommand;
 import org.apache.geode.management.internal.cli.help.Helper;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 import org.apache.geode.management.internal.util.ClasspathScanLoadHelper;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.util.internal.GeodeGlossary;
 
 /**
@@ -62,7 +63,7 @@ public class CommandManager {
   private final Helper helper = new Helper();
 
   private final List<Converter<?>> converters = new ArrayList<>();
-  private final List<CommandMarker> commandMarkers = new ArrayList<>();
+  private final List<GeodeCommandMarker> commandMarkers = new ArrayList<>();
 
   private Properties cacheProperties;
   private LogWrapper logWrapper;
@@ -72,21 +73,22 @@ public class CommandManager {
    * this constructor is used from Gfsh VM. We are getting the user-command-package from system
    * environment. used by Gfsh.
    */
-  public CommandManager() {
-    this(null, null);
+  public CommandManager(ModuleService moduleService) {
+    this(null, null, moduleService);
   }
 
   /**
    * this is used when getting the instance in a cache server. We are getting the
    * user-command-package from distribution properties. used by OnlineCommandProcessor.
    */
-  public CommandManager(final Properties cacheProperties, InternalCache cache) {
+  public CommandManager(final Properties cacheProperties, InternalCache cache,
+      ModuleService moduleService) {
     if (cacheProperties != null) {
       this.cacheProperties = cacheProperties;
     }
     this.cache = cache;
     logWrapper = LogWrapper.getInstance(cache);
-    loadCommands();
+    loadCommands(moduleService);
   }
 
   private static void raiseExceptionIfEmpty(Set<Class<?>> foundClasses, String errorFor)
@@ -127,18 +129,22 @@ public class CommandManager {
     return userCommandPackages;
   }
 
-  private void loadUserCommands(ClasspathScanLoadHelper scanner, Set<String> restrictedToPackages) {
+  private void loadUserCommands(ClasspathScanLoadHelper scanner, Set<String> restrictedToPackages,
+      ModuleService moduleService) {
     if (restrictedToPackages.size() == 0) {
       return;
     }
 
     // Load commands found in all of the packages
     try {
-      Set<Class<?>> foundClasses = scanner.scanPackagesForClassesImplementing(CommandMarker.class,
-          restrictedToPackages.toArray(new String[] {}));
+      Set<Class<?>> foundClasses =
+          scanner.scanPackagesForClassesImplementing(GeodeCommandMarker.class,
+              restrictedToPackages.toArray(new String[] {}));
       for (Class<?> klass : foundClasses) {
         try {
-          add((CommandMarker) klass.newInstance());
+          GeodeCommandMarker geodeCommandMarker = (GeodeCommandMarker) klass.newInstance();
+          geodeCommandMarker.init(moduleService);
+          add(geodeCommandMarker);
         } catch (Exception e) {
           logWrapper.warning("Could not load User Commands from: " + klass + " due to "
               + e.getLocalizedMessage()); // continue
@@ -156,14 +162,16 @@ public class CommandManager {
    *
    * @since GemFire 8.1
    */
-  private void loadPluginCommands() {
-    ServiceLoader<CommandMarker> loader =
-        ServiceLoader.load(CommandMarker.class, ClassPathLoader.getLatest().asClassLoader());
-    Iterator<CommandMarker> iterator = loader.iterator();
+  private void loadPluginCommands(ModuleService moduleService) {
+    ServiceLoader<GeodeCommandMarker> loader =
+        ServiceLoader.load(GeodeCommandMarker.class, ClassPathLoader.getLatest().asClassLoader());
+    Iterator<GeodeCommandMarker> iterator = loader.iterator();
     try {
       while (iterator.hasNext()) {
         try {
-          add(iterator.next());
+          GeodeCommandMarker geodeCommandMarker = iterator.next();
+          geodeCommandMarker.init(moduleService);
+          add(geodeCommandMarker);
         } catch (Throwable t) {
           logWrapper.warning("Could not load plugin command: " + t.getMessage());
         }
@@ -173,7 +181,7 @@ public class CommandManager {
     }
   }
 
-  private void loadCommands() {
+  private void loadCommands(ModuleService moduleService) {
     Set<String> userCommandPackages = getUserCommandPackages();
     Set<String> packagesToScan = new HashSet<>(userCommandPackages);
     packagesToScan.add("org.apache.geode.management.internal.cli.converters");
@@ -183,9 +191,9 @@ public class CommandManager {
 
     // Create one scanner to be used everywhere
     try (ClasspathScanLoadHelper scanner = new ClasspathScanLoadHelper(packagesToScan)) {
-      loadUserCommands(scanner, userCommandPackages);
-      loadPluginCommands();
-      loadGeodeCommands(scanner);
+      loadUserCommands(scanner, userCommandPackages, moduleService);
+      loadPluginCommands(moduleService);
+      loadGeodeCommands(scanner, moduleService);
       loadConverters(scanner);
     }
   }
@@ -228,18 +236,21 @@ public class CommandManager {
     }
   }
 
-  private void loadGeodeCommands(ClasspathScanLoadHelper scanner) {
+  private void loadGeodeCommands(ClasspathScanLoadHelper scanner, ModuleService moduleService) {
     // CommandMarkers
     Set<Class<?>> foundClasses;
     try {
       // geode's commands
-      foundClasses = scanner.scanPackagesForClassesImplementing(CommandMarker.class,
+      foundClasses = scanner.scanPackagesForClassesImplementing(GeodeCommandMarker.class,
           GfshCommand.class.getPackage().getName(),
           VersionCommand.class.getPackage().getName());
 
       for (Class<?> klass : foundClasses) {
         try {
-          add((CommandMarker) klass.newInstance());
+          GeodeCommandMarker geodeCommandMarker = (GeodeCommandMarker) klass.newInstance();
+          geodeCommandMarker.init(moduleService);
+
+          add(geodeCommandMarker);
         } catch (Exception e) {
           logWrapper.warning(
               "Could not load Command from: " + klass + " due to " + e.getLocalizedMessage()); // continue
@@ -268,7 +279,7 @@ public class CommandManager {
     return converters;
   }
 
-  public List<CommandMarker> getCommandMarkers() {
+  public List<GeodeCommandMarker> getCommandMarkers() {
     return commandMarkers;
   }
 
@@ -285,7 +296,7 @@ public class CommandManager {
   /**
    * Method to add new Commands to the parser
    */
-  void add(CommandMarker commandMarker) {
+  void add(GeodeCommandMarker commandMarker) {
     Disabled classDisabled = commandMarker.getClass().getAnnotation(Disabled.class);
     if (classDisabled != null && (classDisabled.unlessPropertyIsSet().isEmpty()
         || System.getProperty(classDisabled.unlessPropertyIsSet()) == null)) {
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
index eed2695..7dc8a33 100755
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
@@ -21,7 +21,6 @@ import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.shell.converters.ArrayConverter;
-import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.Completion;
 import org.springframework.shell.core.Converter;
 import org.springframework.shell.core.Parser;
@@ -29,6 +28,7 @@ import org.springframework.shell.core.SimpleParser;
 import org.springframework.shell.event.ParseResult;
 
 import org.apache.geode.management.cli.ConverterHint;
+import org.apache.geode.management.cli.GeodeCommandMarker;
 import org.apache.geode.management.internal.i18n.CliStrings;
 
 /**
@@ -55,7 +55,7 @@ public class GfshParser extends SimpleParser {
   public GfshParser(CommandManager commandManager) {
     this.commandManager = commandManager;
 
-    for (CommandMarker command : commandManager.getCommandMarkers()) {
+    for (GeodeCommandMarker command : commandManager.getCommandMarkers()) {
       add(command);
     }
 
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/AlterRuntimeConfigCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/AlterRuntimeConfigCommand.java
index 578683b..7ee733d 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/AlterRuntimeConfigCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/AlterRuntimeConfigCommand.java
@@ -221,7 +221,7 @@ public class AlterRuntimeConfigCommand extends GfshCommand {
       successInfo.addLine(successMessageBuilder.toString());
       // Set the Cache attributes to be modified
       final XmlEntity xmlEntity = XmlEntity.builder().withType(CacheXml.CACHE)
-          .withAttributes(rumTimeCacheAttributes).build();
+          .withAttributes(rumTimeCacheAttributes).build(getModuleService());
       InternalConfigurationPersistenceService cps = getConfigurationPersistenceService();
       if (cps == null) {
         successInfo.addLine(CommandExecutor.SERVICE_NOT_RUNNING_CHANGE_NOT_PERSISTED);
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommand.java
index fdb8f0b..b02f4bc 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateRegionCommand.java
@@ -249,7 +249,8 @@ public class CreateRegionCommand extends SingleGfshCommand {
 
         if (!regionAssociatedMembers.isEmpty()) {
           List<CliFunctionResult> regionXmlResults = executeAndGetFunctionResult(
-              FetchRegionAttributesFunction.INSTANCE, templateRegion, regionAssociatedMembers);
+              new FetchRegionAttributesFunction(getModuleService()), templateRegion,
+              regionAssociatedMembers);
 
           JAXBService jaxbService = new JAXBService(CacheConfig.class);
           templateRegionConfigs = regionXmlResults.stream().filter(CliFunctionResult::isSuccessful)
@@ -492,7 +493,7 @@ public class CreateRegionCommand extends SingleGfshCommand {
         new CreateRegionFunctionArgs(regionPath, regionConfig, ifNotExists);
 
     List<CliFunctionResult> regionCreateResults = executeAndGetFunctionResult(
-        RegionCreateFunction.INSTANCE, functionArgs, membersToCreateRegionOn);
+        new RegionCreateFunction(getModuleService()), functionArgs, membersToCreateRegionOn);
 
     ResultModel resultModel = ResultModel.createMemberStatusResult(regionCreateResults);
     InternalConfigurationPersistenceService service = getConfigurationPersistenceService();
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyAsyncEventQueueCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyAsyncEventQueueCommand.java
index baf01a2..c40816a 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyAsyncEventQueueCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyAsyncEventQueueCommand.java
@@ -68,7 +68,8 @@ public class DestroyAsyncEventQueueCommand extends GfshCommand {
 
     Set<DistributedMember> members = getMembers(onGroups, null);
     List<CliFunctionResult> functionResults = executeAndGetFunctionResult(
-        new DestroyAsyncEventQueueFunction(), asyncEventQueueDestoryFunctionArgs, members);
+        new DestroyAsyncEventQueueFunction(getModuleService()), asyncEventQueueDestoryFunctionArgs,
+        members);
 
     ResultModel result = ResultModel.createMemberStatusResult(functionResults);
     XmlEntity xmlEntity = getXmlEntity(functionResults);
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyDiskStoreCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyDiskStoreCommand.java
index 9c82b41..9067788 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyDiskStoreCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyDiskStoreCommand.java
@@ -58,7 +58,8 @@ public class DestroyDiskStoreCommand extends SingleGfshCommand {
     DestroyDiskStoreFunctionArgs functionArgs = new DestroyDiskStoreFunctionArgs(name, ifExist);
 
     List<CliFunctionResult> results =
-        executeAndGetFunctionResult(new DestroyDiskStoreFunction(), functionArgs, targetMembers);
+        executeAndGetFunctionResult(new DestroyDiskStoreFunction(getModuleService()), functionArgs,
+            targetMembers);
 
     ResultModel result = ResultModel.createMemberStatusResult(results, ifExist);
     result.setConfigObject(name);
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommand.java
index b213026..8f763f1 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommand.java
@@ -67,7 +67,8 @@ public class DestroyGatewaySenderCommand extends SingleGfshCommand {
     Set<DistributedMember> members = getMembers(onGroups, onMember);
 
     List<CliFunctionResult> functionResults = executeAndGetFunctionResult(
-        GatewaySenderDestroyFunction.INSTANCE, gatewaySenderDestroyFunctionArgs, members);
+        new GatewaySenderDestroyFunction(getModuleService()), gatewaySenderDestroyFunctionArgs,
+        members);
 
     ResultModel resultModel = ResultModel.createMemberStatusResult(functionResults);
     resultModel.setConfigObject(id);
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyRegionCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyRegionCommand.java
index d3c0084..29d4e52 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyRegionCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyRegionCommand.java
@@ -75,7 +75,8 @@ public class DestroyRegionCommand extends GfshCommand {
     // deem the destroy action successful, since if one member destroy successfully, the subsequent
     // destroy on a another member would probably throw RegionDestroyedException
     List<CliFunctionResult> resultsList =
-        executeAndGetFunctionResult(RegionDestroyFunction.INSTANCE, regionPath, regionMembersList);
+        executeAndGetFunctionResult(new RegionDestroyFunction(getModuleService()), regionPath,
+            regionMembersList);
 
 
     ResultModel result = ResultModel.createMemberStatusResult(resultsList);
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/ImportClusterConfigurationCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/ImportClusterConfigurationCommand.java
index d686cbc..84d7cd6 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/ImportClusterConfigurationCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/ImportClusterConfigurationCommand.java
@@ -137,7 +137,7 @@ public class ImportClusterConfigurationCommand extends GfshCommand {
         if (configuration == null) {
           configuration = new Configuration(group);
         }
-        configuration.setCacheXmlFile(file);
+        configuration.setCacheXmlFile(file, getModuleService());
         ccService.setConfiguration(group, configuration);
         logger.info(
             configuration.getConfigName() + "xml content: \n" + configuration.getCacheXmlContent());
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/OfflineGfshCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/OfflineGfshCommand.java
index e3a5e24..e6bc5a9 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/OfflineGfshCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/OfflineGfshCommand.java
@@ -24,15 +24,26 @@ import java.util.Properties;
 
 import javax.management.remote.JMXServiceURL;
 
-import org.springframework.shell.core.CommandMarker;
-
+import org.apache.geode.management.cli.GeodeCommandMarker;
 import org.apache.geode.management.internal.cli.CliUtil;
 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;
 import org.apache.geode.management.internal.i18n.CliStrings;
+import org.apache.geode.services.module.ModuleService;
+
+public abstract class OfflineGfshCommand implements GeodeCommandMarker {
+
+  private ModuleService moduleService;
 
-public abstract class OfflineGfshCommand implements CommandMarker {
+  protected ModuleService getModuleService() {
+    return moduleService;
+  }
+
+  @Override
+  public void init(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   public boolean isDebugging() {
     return getGfsh() != null && getGfsh().getDebug();
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction.java
index 2789a47..a5d960a 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction.java
@@ -21,6 +21,7 @@ import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.cli.commands.DestroyAsyncEventQueueCommand;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Function used by the 'destroy async-event-queue' gfsh command to destroy an asynchronous event
@@ -31,6 +32,12 @@ public class DestroyAsyncEventQueueFunction
 
   private static final long serialVersionUID = -7754359270344102817L;
 
+  private final ModuleService moduleService;
+
+  public DestroyAsyncEventQueueFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
+
   @Override
   public void execute(FunctionContext<DestroyAsyncEventQueueFunctionArgs> context) {
     DestroyAsyncEventQueueFunctionArgs aeqArgs =
@@ -54,7 +61,7 @@ public class DestroyAsyncEventQueueFunction
         }
       } else {
         // this is the XmlEntity that needs to be removed from the cluster config
-        XmlEntity xmlEntity = getAEQXmlEntity("id", aeqId);
+        XmlEntity xmlEntity = getAEQXmlEntity("id", aeqId, moduleService);
 
         aeq.stop();
         aeq.destroy();
@@ -71,8 +78,8 @@ public class DestroyAsyncEventQueueFunction
     }
   }
 
-  XmlEntity getAEQXmlEntity(String key, String value) {
-    return new XmlEntity(CacheXml.ASYNC_EVENT_QUEUE, key, value);
+  XmlEntity getAEQXmlEntity(String key, String value, ModuleService moduleService) {
+    return new XmlEntity(CacheXml.ASYNC_EVENT_QUEUE, key, value, moduleService);
   }
 
   @Override
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction.java
index f73b95d..24fb74d 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction.java
@@ -23,6 +23,7 @@ import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Function used by the 'destroy disk-store' gfsh command to destroy a disk store on each member.
@@ -32,6 +33,12 @@ import org.apache.geode.management.internal.functions.CliFunctionResult;
 public class DestroyDiskStoreFunction implements InternalFunction<DestroyDiskStoreFunctionArgs> {
   private static final long serialVersionUID = 1L;
 
+  private final ModuleService moduleService;
+
+  public DestroyDiskStoreFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
+
   @Override
   @SuppressWarnings("deprecation")
   public void execute(FunctionContext<DestroyDiskStoreFunctionArgs> context) {
@@ -55,7 +62,8 @@ public class DestroyDiskStoreFunction implements InternalFunction<DestroyDiskSto
     CliFunctionResult result;
     try {
       if (diskStore != null) {
-        XmlEntity xmlEntity = new XmlEntity(CacheXml.DISK_STORE, "name", args.getId());
+        XmlEntity xmlEntity =
+            new XmlEntity(CacheXml.DISK_STORE, "name", args.getId(), moduleService);
         diskStore.destroy();
         result = new CliFunctionResult(memberId, xmlEntity, "Success");
       } else {
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction.java
index 2c44255..2209007 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction.java
@@ -16,7 +16,6 @@ package org.apache.geode.management.internal.cli.functions;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.annotations.Immutable;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -24,6 +23,7 @@ import org.apache.geode.management.cli.CliFunction;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  *
@@ -36,8 +36,11 @@ public class FetchRegionAttributesFunction extends CliFunction<String> {
 
   private static final String ID = FetchRegionAttributesFunction.class.getName();
 
-  @Immutable
-  public static final FetchRegionAttributesFunction INSTANCE = new FetchRegionAttributesFunction();
+  private final ModuleService moduleService;
+
+  public FetchRegionAttributesFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   @Override
   public boolean isHA() {
@@ -54,7 +57,8 @@ public class FetchRegionAttributesFunction extends CliFunction<String> {
       throw new IllegalArgumentException(
           CliStrings.CREATE_REGION__MSG__SPECIFY_VALID_REGION_PATH);
     }
-    XmlEntity xmlEntity = new XmlEntity(CacheXml.REGION, "name", regionPath.substring(1));
+    XmlEntity xmlEntity =
+        new XmlEntity(CacheXml.REGION, "name", regionPath.substring(1), moduleService);
     return new CliFunctionResult(context.getMemberName(), xmlEntity.getXmlDefinition());
   }
 
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java
index 30b87df..c4b8429 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java
@@ -14,7 +14,6 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import org.apache.geode.annotations.Immutable;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
@@ -24,13 +23,18 @@ import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
+import org.apache.geode.services.module.ModuleService;
 
 public class GatewaySenderDestroyFunction
     implements InternalFunction<GatewaySenderDestroyFunctionArgs> {
   private static final long serialVersionUID = 1L;
   private static final String ID = GatewaySenderDestroyFunction.class.getName();
-  @Immutable
-  public static final GatewaySenderDestroyFunction INSTANCE = new GatewaySenderDestroyFunction();
+
+  private final ModuleService moduleService;
+
+  public GatewaySenderDestroyFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
 
   @Override
   @SuppressWarnings("deprecation")
@@ -61,7 +65,8 @@ public class GatewaySenderDestroyFunction
     try {
       gatewaySender.stop();
       gatewaySender.destroy();
-      XmlEntity xmlEntity = new XmlEntity(CacheXml.GATEWAY_SENDER, "id", senderId);
+      XmlEntity xmlEntity =
+          new XmlEntity(CacheXml.GATEWAY_SENDER, "id", senderId, moduleService);
       resultSender.lastResult(new CliFunctionResult(memberNameOrId, xmlEntity,
           String.format("GatewaySender \"%s\" destroyed on \"%s\"", senderId, memberNameOrId)));
     } catch (Exception e) {
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java
index ae89639..b865d48 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java
@@ -32,6 +32,7 @@ import org.apache.geode.management.internal.configuration.realizers.RegionConfig
 import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
 import org.apache.geode.management.internal.util.RegionPath;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  *
@@ -47,11 +48,14 @@ public class RegionCreateFunction implements InternalFunction {
   private static final String ID = RegionCreateFunction.class.getName();
 
   @Immutable
-  public static final RegionCreateFunction INSTANCE = new RegionCreateFunction();
-
-  @Immutable
   private static final RegionConfigRealizer realizer = new RegionConfigRealizer();
 
+  private final ModuleService moduleService;
+
+  public RegionCreateFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
+
   @Override
   public boolean isHA() {
     return false;
@@ -71,7 +75,9 @@ public class RegionCreateFunction implements InternalFunction {
     try {
       RegionPath regionPath = new RegionPath(regionCreateArgs.getRegionPath());
       getRealizer().create(regionCreateArgs.getConfig(), regionCreateArgs.getRegionPath(), cache);
-      XmlEntity xmlEntity = new XmlEntity(CacheXml.REGION, "name", regionPath.getRootRegionName());
+      XmlEntity xmlEntity =
+          new XmlEntity(CacheXml.REGION, "name", regionPath.getRootRegionName(),
+              moduleService);
       resultSender.lastResult(new CliFunctionResult(memberNameOrId, xmlEntity.getXmlDefinition(),
           CliStrings.format(CliStrings.CREATE_REGION__MSG__REGION_0_CREATED_ON_1,
               regionCreateArgs.getRegionPath(), memberNameOrId)));
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java
index 7c419cb..de54b5f 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java
@@ -16,7 +16,6 @@ package org.apache.geode.management.internal.cli.functions;
 
 import static org.apache.geode.cache.Region.SEPARATOR;
 
-import org.apache.geode.annotations.Immutable;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionDestroyedException;
@@ -27,6 +26,7 @@ import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  *
@@ -35,11 +35,14 @@ import org.apache.geode.management.internal.functions.CliFunctionResult;
 public class RegionDestroyFunction implements InternalFunction<String> {
   private static final long serialVersionUID = 9172773671865750685L;
 
-  @Immutable
-  public static final RegionDestroyFunction INSTANCE = new RegionDestroyFunction();
-
   private static final String ID = RegionDestroyFunction.class.getName();
 
+  private final ModuleService moduleService;
+
+  public RegionDestroyFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
+
   @Override
   public boolean hasResult() {
     return true;
@@ -73,7 +76,8 @@ public class RegionDestroyFunction implements InternalFunction<String> {
 
       String regionName =
           regionPath.startsWith(SEPARATOR) ? regionPath.substring(1) : regionPath;
-      XmlEntity xmlEntity = new XmlEntity(CacheXml.REGION, "name", regionName);
+      XmlEntity xmlEntity =
+          new XmlEntity(CacheXml.REGION, "name", regionName, moduleService);
       context.getResultSender().lastResult(new CliFunctionResult(memberName, xmlEntity,
           String.format("Region '%s' destroyed successfully", regionPath)));
 
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/remote/MemberCommandService.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/remote/MemberCommandService.java
index cb4f7ac..8e0f00a 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/remote/MemberCommandService.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/remote/MemberCommandService.java
@@ -22,6 +22,7 @@ import org.apache.geode.management.cli.CommandServiceException;
 import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.cli.result.CommandResult;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * @deprecated since 1.3 use OnlineCommandProcessor directly
@@ -33,11 +34,12 @@ public class MemberCommandService extends org.apache.geode.management.cli.Comman
   private InternalCache cache;
   private CommandProcessor commandProcessor;
 
-  public MemberCommandService(InternalCache cache) throws CommandServiceException {
+  public MemberCommandService(InternalCache cache, ModuleService moduleService)
+      throws CommandServiceException {
     this.cache = cache;
     try {
       this.commandProcessor = cache.getService(CommandProcessor.class);
-      this.commandProcessor.init(cache);
+      this.commandProcessor.init(cache, moduleService);
     } catch (Exception e) {
       throw new CommandServiceException("Could not load commands.", e);
     }
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/remote/OnlineCommandProcessor.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/remote/OnlineCommandProcessor.java
index cbeea88..2b4d417 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/remote/OnlineCommandProcessor.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/remote/OnlineCommandProcessor.java
@@ -40,11 +40,13 @@ import org.apache.geode.management.internal.cli.result.model.ResultModel;
 import org.apache.geode.management.internal.cli.util.CommentSkipHelper;
 import org.apache.geode.management.internal.security.ResourceOperation;
 import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * @since GemFire 7.0
  */
 public class OnlineCommandProcessor implements CommandProcessor {
+  private ModuleService moduleService;
   protected CommandExecutor executor;
   private GfshParser gfshParser;
 
@@ -59,10 +61,11 @@ public class OnlineCommandProcessor implements CommandProcessor {
 
   @VisibleForTesting
   public OnlineCommandProcessor(Properties cacheProperties, SecurityService securityService,
-      CommandExecutor commandExecutor, InternalCache cache) {
-    this.gfshParser = new GfshParser(new CommandManager(cacheProperties, cache));
+      CommandExecutor commandExecutor, InternalCache cache, ModuleService moduleService) {
+    this.gfshParser = new GfshParser(new CommandManager(cacheProperties, cache, moduleService));
     this.executor = commandExecutor;
     this.securityService = securityService;
+    this.moduleService = moduleService;
   }
 
   protected CommandExecutor getCommandExecutor() {
@@ -134,10 +137,13 @@ public class OnlineCommandProcessor implements CommandProcessor {
   }
 
   @Override
-  public boolean init(Cache cache) {
+  public boolean init(Cache cache, ModuleService moduleService) {
     Properties cacheProperties = cache.getDistributedSystem().getProperties();
+    this.moduleService = moduleService;
     this.securityService = ((InternalCache) cache).getSecurityService();
-    this.gfshParser = new GfshParser(new CommandManager(cacheProperties, (InternalCache) cache));
+    this.gfshParser =
+        new GfshParser(new CommandManager(cacheProperties, (InternalCache) cache,
+            this.moduleService));
     this.executor = new CommandExecutor();
     this.cache = (InternalCache) cache;
 
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/shell/Gfsh.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/shell/Gfsh.java
index 53d1d54..2dc2015 100755
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/shell/Gfsh.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/shell/Gfsh.java
@@ -207,7 +207,7 @@ public class Gfsh extends JLineShell {
     initializeEnvironment();
     // 7. Create Roo/SpringShell framework objects
     this.executionStrategy = new GfshExecutionStrategy(this);
-    this.parser = new GfshParser(new CommandManager());
+    this.parser = new GfshParser(new CommandManager(moduleService));
     // 8. Set max History file size
     setHistorySize(gfshConfig.getHistorySize());
 
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/CommandManagerJUnitTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/CommandManagerJUnitTest.java
index 899dad1..ecb707e 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/CommandManagerJUnitTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/CommandManagerJUnitTest.java
@@ -23,7 +23,6 @@ import java.util.Properties;
 import com.examples.UserGfshCommand;
 import org.junit.Before;
 import org.junit.Test;
-import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.Completion;
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
 import org.springframework.shell.core.annotation.CliCommand;
@@ -32,11 +31,13 @@ import org.springframework.shell.core.annotation.CliOption;
 import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.Disabled;
+import org.apache.geode.management.cli.GeodeCommandMarker;
 import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.cli.result.CommandResult;
 import org.apache.geode.management.internal.security.ResourceOperation;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * CommandManagerTest - Includes tests to check the CommandManager functions
@@ -89,7 +90,7 @@ public class CommandManagerJUnitTest {
 
   @Before
   public void before() {
-    commandManager = new CommandManager();
+    commandManager = new CommandManager(ModuleService.DEFAULT);
   }
 
   /**
@@ -127,7 +128,7 @@ public class CommandManagerJUnitTest {
   public void testCommandManagerLoadsUserCommand() throws Exception {
     Properties props = new Properties();
     props.setProperty(ConfigurationProperties.USER_COMMAND_PACKAGES, "com.examples");
-    CommandManager commandManager = new CommandManager(props, null);
+    CommandManager commandManager = new CommandManager(props, null, ModuleService.DEFAULT);
 
     assertThat(
         commandManager.getCommandMarkers().stream().anyMatch(c -> c instanceof UserGfshCommand));
@@ -137,10 +138,10 @@ public class CommandManagerJUnitTest {
   public void commandManagerDoesNotAddUnsatisfiedFeatureFlaggedCommands() {
     System.setProperty("enabled.flag", "true");
     try {
-      CommandMarker accessibleCommand = new AccessibleCommand();
-      CommandMarker enabledCommand = new FeatureFlaggedAndEnabledCommand();
-      CommandMarker reachableButDisabledCommand = new FeatureFlaggedReachableCommand();
-      CommandMarker unreachableCommand = new FeatureFlaggedUnreachableCommand();
+      GeodeCommandMarker accessibleCommand = new AccessibleCommand();
+      GeodeCommandMarker enabledCommand = new FeatureFlaggedAndEnabledCommand();
+      GeodeCommandMarker reachableButDisabledCommand = new FeatureFlaggedReachableCommand();
+      GeodeCommandMarker unreachableCommand = new FeatureFlaggedUnreachableCommand();
 
       commandManager.add(accessibleCommand);
       commandManager.add(enabledCommand);
@@ -158,7 +159,7 @@ public class CommandManagerJUnitTest {
   /**
    * class that represents dummy commands
    */
-  public static class Commands implements CommandMarker {
+  public static class Commands implements GeodeCommandMarker {
 
     @CliCommand(value = {COMMAND1_NAME, COMMAND1_NAME_ALIAS}, help = COMMAND1_HELP)
     @CliMetaData(shellOnly = true, relatedTopic = {"relatedTopicOfCommand1"})
@@ -206,26 +207,41 @@ public class CommandManagerJUnitTest {
     public boolean isAvailable() {
       return true; // always available on server
     }
+
+    @Override
+    public void init(ModuleService moduleService) {
+
+    }
   }
 
-  public static class MockPluginCommand implements CommandMarker {
+  public static class MockPluginCommand implements GeodeCommandMarker {
     @CliCommand(value = "mock plugin command")
     @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ)
     public Result mockPluginCommand() {
       return null;
     }
+
+    @Override
+    public void init(ModuleService moduleService) {
+
+    }
   }
 
-  public static class MockPluginCommandUnlisted implements CommandMarker {
+  public static class MockPluginCommandUnlisted implements GeodeCommandMarker {
     @CliCommand(value = "mock plugin command unlisted")
     @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ)
     public Result mockPluginCommandUnlisted() {
       return null;
     }
+
+    @Override
+    public void init(ModuleService moduleService) {
+
+    }
   }
 
 
-  class AccessibleCommand implements CommandMarker {
+  class AccessibleCommand implements GeodeCommandMarker {
     @CliCommand(value = "test-command")
     public Result ping() {
       return CommandResult.createInfo("pong");
@@ -235,30 +251,50 @@ public class CommandManagerJUnitTest {
     public boolean always() {
       return true;
     }
+
+    @Override
+    public void init(ModuleService moduleService) {
+
+    }
   }
 
   @Disabled
-  class FeatureFlaggedUnreachableCommand implements CommandMarker {
+  class FeatureFlaggedUnreachableCommand implements GeodeCommandMarker {
     @CliCommand(value = "unreachable")
     public Result nothing() {
       throw new RuntimeException("You reached the body of a feature-flagged command.");
     }
+
+    @Override
+    public void init(ModuleService moduleService) {
+
+    }
   }
 
   @Disabled(unlessPropertyIsSet = "reachable.flag")
-  class FeatureFlaggedReachableCommand implements CommandMarker {
+  class FeatureFlaggedReachableCommand implements GeodeCommandMarker {
     @CliCommand(value = "reachable")
     public Result nothing() {
       throw new RuntimeException("You reached the body of a feature-flagged command.");
     }
+
+    @Override
+    public void init(ModuleService moduleService) {
+
+    }
   }
 
   @Disabled(unlessPropertyIsSet = "enabled.flag")
-  class FeatureFlaggedAndEnabledCommand implements CommandMarker {
+  class FeatureFlaggedAndEnabledCommand implements GeodeCommandMarker {
     @CliCommand(value = "reachable")
     public Result nothing() {
       throw new RuntimeException("You reached the body of a feature-flagged command.");
     }
+
+    @Override
+    public void init(ModuleService moduleService) {
+
+    }
   }
 
 }
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicatorTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicatorTest.java
index 962803f..89c54cd 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicatorTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicatorTest.java
@@ -20,14 +20,14 @@ package org.apache.geode.management.internal.cli.commands;
 import org.junit.Test;
 
 import org.apache.geode.management.internal.cli.CommandManager;
-
+import org.apache.geode.services.module.ModuleService;
 
 
 public class CommandAvailabilityIndicatorTest {
 
   @Test
   public void allOnlineCommandsHaveAvailabilityIndicator() {
-    CommandManager manager = new CommandManager();
+    CommandManager manager = new CommandManager(ModuleService.DEFAULT);
     CommandAvailabilityIndicatorTestHelper.assertOnlineCommandsHasAvailabilityIndicator(manager);
   }
 
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunctionTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunctionTest.java
index 4dbd53c..66eb94c 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunctionTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunctionTest.java
@@ -15,6 +15,7 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
@@ -33,6 +34,7 @@ import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.fake.Fakes;
 
 public class DestroyAsyncEventQueueFunctionTest {
@@ -53,7 +55,7 @@ public class DestroyAsyncEventQueueFunctionTest {
     mockContext = mock(FunctionContext.class);
     mockArgs = mock(DestroyAsyncEventQueueFunctionArgs.class);
     cache = Fakes.cache();
-    function = spy(DestroyAsyncEventQueueFunction.class);
+    function = spy(new DestroyAsyncEventQueueFunction(ModuleService.DEFAULT));
     resultSender = mock(ResultSender.class);
 
     when(mockContext.getCache()).thenReturn(cache);
@@ -68,7 +70,7 @@ public class DestroyAsyncEventQueueFunctionTest {
   @SuppressWarnings("deprecation")
   public void execute_validAeqId_OK() {
     XmlEntity xmlEntity = mock(XmlEntity.class);
-    doReturn(xmlEntity).when(function).getAEQXmlEntity(anyString(), anyString());
+    doReturn(xmlEntity).when(function).getAEQXmlEntity(anyString(), anyString(), any());
     when(cache.getAsyncEventQueue(TEST_AEQ_ID)).thenReturn(mockAEQ);
 
     function.execute(mockContext);
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionTest.java
index 24b1ddd..d040544 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionTest.java
@@ -31,6 +31,7 @@ import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
+import org.apache.geode.services.module.ModuleService;
 
 
 public class GatewaySenderDestroyFunctionTest {
@@ -45,7 +46,7 @@ public class GatewaySenderDestroyFunctionTest {
   @Before
   @SuppressWarnings("unchecked")
   public void before() {
-    function = spy(GatewaySenderDestroyFunction.class);
+    function = spy(new GatewaySenderDestroyFunction(ModuleService.DEFAULT));
     context = mock(FunctionContext.class);
     cache = mock(InternalCache.class);
     args = mock(GatewaySenderDestroyFunctionArgs.class);
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunctionJUnitTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunctionJUnitTest.java
index 17435ec..bbcb207 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunctionJUnitTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunctionJUnitTest.java
@@ -38,12 +38,13 @@ import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.management.internal.configuration.realizers.RegionConfigRealizer;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
+import org.apache.geode.services.module.ModuleService;
 
 public class RegionCreateFunctionJUnitTest {
 
   @Test
   public void testSkipIfExists() {
-    RegionCreateFunction function = spy(new RegionCreateFunction());
+    RegionCreateFunction function = spy(new RegionCreateFunction(ModuleService.DEFAULT));
     @SuppressWarnings("unchecked")
     FunctionContext<CreateRegionFunctionArgs> context = mock(FunctionContext.class);
     InternalCache internalCache = mock(InternalCache.class);
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunctionTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunctionTest.java
index b7f369d..e04cf27 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunctionTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunctionTest.java
@@ -34,6 +34,7 @@ import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
+import org.apache.geode.services.module.ModuleService;
 
 
 public class RegionDestroyFunctionTest {
@@ -47,7 +48,7 @@ public class RegionDestroyFunctionTest {
   @Before
   @SuppressWarnings("unchecked")
   public void before() {
-    function = spy(RegionDestroyFunction.class);
+    function = spy(new RegionDestroyFunction(ModuleService.DEFAULT));
     context = mock(FunctionContext.class);
     InternalCache cache = mock(InternalCache.class);
     filterCache = mock(InternalCacheForClientAccess.class);
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/help/HelperUnitTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/help/HelperUnitTest.java
index 8777247..8470832 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/help/HelperUnitTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/help/HelperUnitTest.java
@@ -25,11 +25,11 @@ import java.lang.reflect.Method;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
+import org.apache.geode.management.cli.GeodeCommandMarker;
 import org.apache.geode.management.internal.cli.commands.DescribeOfflineDiskStoreCommand;
 
 
@@ -38,7 +38,7 @@ public class HelperUnitTest {
   private CliCommand cliCommand;
   private Method method;
   private CliAvailabilityIndicator availabilityIndicator;
-  private CommandMarker commandMarker;
+  private GeodeCommandMarker commandMarker;
 
   private Annotation[][] annotations;
   private CliOption cliOption;
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/remote/MemberCommandServiceTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/remote/MemberCommandServiceTest.java
index cd24f2a..bb4014b 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/remote/MemberCommandServiceTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/remote/MemberCommandServiceTest.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.management.cli.Result;
+import org.apache.geode.services.module.ModuleService;
 
 public class MemberCommandServiceTest {
   private InternalCache cache;
@@ -43,14 +44,17 @@ public class MemberCommandServiceTest {
     when(cache.getDistributedSystem()).thenReturn(distributedSystem);
     when(cache.isClosed()).thenReturn(true);
     when(cache.getSecurityService()).thenReturn(securityService);
-    when(cache.getService(CommandProcessor.class)).thenReturn(new OnlineCommandProcessor());
+    OnlineCommandProcessor onlineCommandProcessor = new OnlineCommandProcessor();
+    onlineCommandProcessor.init(cache, ModuleService.DEFAULT);
+    when(cache.getService(CommandProcessor.class)).thenReturn(onlineCommandProcessor);
     when(distributedSystem.getProperties()).thenReturn(cacheProperties);
   }
 
   @Test
   public void processCommandError() throws Exception {
     @SuppressWarnings("deprecation")
-    MemberCommandService memberCommandService = new MemberCommandService(cache);
+    MemberCommandService memberCommandService =
+        new MemberCommandService(cache, ModuleService.DEFAULT);
 
     Result result = memberCommandService.processCommand("fake command");
 
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/remote/OnlineCommandProcessorTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/remote/OnlineCommandProcessorTest.java
index 472f4ca..2b1ae01 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/remote/OnlineCommandProcessorTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/remote/OnlineCommandProcessorTest.java
@@ -31,6 +31,7 @@ import org.junit.rules.TemporaryFolder;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
 import org.apache.geode.security.NotAuthorizedException;
+import org.apache.geode.services.module.ModuleService;
 
 public class OnlineCommandProcessorTest {
 
@@ -52,7 +53,8 @@ public class OnlineCommandProcessorTest {
     when(executor.execute(any())).thenReturn(result);
 
     onlineCommandProcessor =
-        new OnlineCommandProcessor(properties, securityService, executor, null);
+        new OnlineCommandProcessor(properties, securityService, executor, null,
+            ModuleService.DEFAULT);
   }
 
   @Test
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExecutionStrategyTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExecutionStrategyTest.java
index 287a462..16c3c4e 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExecutionStrategyTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExecutionStrategyTest.java
@@ -23,15 +23,16 @@ import static org.mockito.Mockito.when;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.springframework.shell.core.CommandMarker;
 
 import org.apache.geode.management.cli.CliMetaData;
+import org.apache.geode.management.cli.GeodeCommandMarker;
 import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.cli.AbstractCliAroundInterceptor;
 import org.apache.geode.management.internal.cli.CommandRequest;
 import org.apache.geode.management.internal.cli.GfshParseResult;
 import org.apache.geode.management.internal.cli.LogWrapper;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * GfshExecutionStrategyTest - Includes tests to for GfshExecutionStrategyTest
@@ -122,7 +123,7 @@ public class GfshExecutionStrategyTest {
   /**
    * represents class for dummy methods
    */
-  public static class Commands implements CommandMarker {
+  public static class Commands implements GeodeCommandMarker {
     @CliMetaData(shellOnly = true)
     public ResultModel offlineCommand() {
       return ResultModel.createInfo(COMMAND1_SUCCESS);
@@ -143,6 +144,11 @@ public class GfshExecutionStrategyTest {
     public ResultModel interceptedCommand() {
       return ResultModel.createInfo(COMMAND4_SUCCESS);
     }
+
+    @Override
+    public void init(ModuleService moduleService) {
+
+    }
   }
 
   /*
diff --git a/geode-gfsh/src/test/resources/META-INF/services/org.springframework.shell.core.CommandMarker b/geode-gfsh/src/test/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
similarity index 100%
rename from geode-gfsh/src/test/resources/META-INF/services/org.springframework.shell.core.CommandMarker
rename to geode-gfsh/src/test/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
diff --git a/geode-http-service/build.gradle b/geode-http-service/build.gradle
index ec304c1..fc36f73 100755
--- a/geode-http-service/build.gradle
+++ b/geode-http-service/build.gradle
@@ -28,6 +28,8 @@ dependencies {
   implementation('org.eclipse.jetty:jetty-server')
   implementation('org.apache.commons:commons-lang3')
 
+  compileOnly(project(':geode-common-services'))
+
   compileOnly(project(':geode-core'))
   compileOnly(project(':geode-common')) {
     exclude module: 'junit'
diff --git a/geode-http-service/src/main/java/org/apache/geode/internal/cache/InternalHttpService.java b/geode-http-service/src/main/java/org/apache/geode/internal/cache/InternalHttpService.java
index d37d645..0c521a3 100644
--- a/geode-http-service/src/main/java/org/apache/geode/internal/cache/InternalHttpService.java
+++ b/geode-http-service/src/main/java/org/apache/geode/internal/cache/InternalHttpService.java
@@ -47,6 +47,7 @@ import org.apache.geode.internal.net.SSLUtil;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
+import org.apache.geode.services.module.ModuleService;
 
 public class InternalHttpService implements HttpService {
 
@@ -63,7 +64,7 @@ public class InternalHttpService implements HttpService {
   private List<WebAppContext> webApps = new ArrayList<>();
 
   @Override
-  public boolean init(Cache cache) {
+  public boolean init(Cache cache, ModuleService moduleService) {
     InternalDistributedSystem distributedSystem =
         (InternalDistributedSystem) cache.getDistributedSystem();
     DistributionConfig systemConfig = distributedSystem.getConfig();
diff --git a/geode-http-service/src/test/java/org/apache/geode/management/internal/InternalHttpServiceJunitTest.java b/geode-http-service/src/test/java/org/apache/geode/management/internal/InternalHttpServiceJunitTest.java
index 6100501..437cbdb 100644
--- a/geode-http-service/src/test/java/org/apache/geode/management/internal/InternalHttpServiceJunitTest.java
+++ b/geode-http-service/src/test/java/org/apache/geode/management/internal/InternalHttpServiceJunitTest.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalHttpService;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * The InternalHttpServiceJunitTest class is a test suite of test cases testing the contract and
@@ -60,7 +61,7 @@ public class InternalHttpServiceJunitTest {
     setup("", 8090);
 
     final InternalHttpService jetty = new InternalHttpService();
-    boolean didInit = jetty.init(cache);
+    boolean didInit = jetty.init(cache, ModuleService.DEFAULT);
 
     assertThat(didInit).as("Jetty did not initialize").isTrue();
     assertThat(jetty.getHttpServer().getConnectors()[0]).isNotNull();
@@ -73,7 +74,7 @@ public class InternalHttpServiceJunitTest {
     setup("127.0.0.1", 10480);
 
     final InternalHttpService jetty = new InternalHttpService();
-    boolean didInit = jetty.init(cache);
+    boolean didInit = jetty.init(cache, ModuleService.DEFAULT);
 
     assertThat(didInit).as("Jetty did not initialize").isTrue();
     assertThat(jetty.getHttpServer().getConnectors()[0]).isNotNull();
diff --git a/geode-junit/build.gradle b/geode-junit/build.gradle
index 1ec83f5..0a91955 100755
--- a/geode-junit/build.gradle
+++ b/geode-junit/build.gradle
@@ -23,6 +23,7 @@ apply from: "${project.projectDir}/../gradle/publish-java.gradle"
 dependencies {
   compile(platform(project(':boms:geode-all-bom')))
 
+  compileOnly(project(':geode-common-services'))
   compileOnly(project(':geode-core'))
   compileOnly(project(':geode-logging'))
   compileOnly(project(':geode-serialization'))
diff --git a/geode-junit/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicatorTestHelper.java b/geode-junit/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicatorTestHelper.java
index 1e846d4..0cdc960 100644
--- a/geode-junit/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicatorTestHelper.java
+++ b/geode-junit/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicatorTestHelper.java
@@ -20,10 +20,10 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.lang.reflect.Method;
 import java.util.List;
 
-import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.annotation.CliCommand;
 
 import org.apache.geode.management.cli.CliMetaData;
+import org.apache.geode.management.cli.GeodeCommandMarker;
 import org.apache.geode.management.cli.GfshCommand;
 import org.apache.geode.management.internal.cli.CommandManager;
 
@@ -31,8 +31,8 @@ import org.apache.geode.management.internal.cli.CommandManager;
 public class CommandAvailabilityIndicatorTestHelper {
 
   public static void assertOnlineCommandsHasAvailabilityIndicator(CommandManager manager) {
-    List<CommandMarker> commandMarkers = manager.getCommandMarkers();
-    for (CommandMarker commandMarker : commandMarkers) {
+    List<GeodeCommandMarker> commandMarkers = manager.getCommandMarkers();
+    for (GeodeCommandMarker commandMarker : commandMarkers) {
       // ignore all the other commands beside GfshCommand
       if (!GfshCommand.class.isAssignableFrom(commandMarker.getClass())) {
         continue;
diff --git a/geode-junit/src/main/java/org/apache/geode/test/junit/rules/GfshParserRule.java b/geode-junit/src/main/java/org/apache/geode/test/junit/rules/GfshParserRule.java
index 92f9202..f300102 100644
--- a/geode-junit/src/main/java/org/apache/geode/test/junit/rules/GfshParserRule.java
+++ b/geode-junit/src/main/java/org/apache/geode/test/junit/rules/GfshParserRule.java
@@ -34,6 +34,7 @@ import org.apache.geode.management.internal.cli.GfshParser;
 import org.apache.geode.management.internal.cli.remote.CommandExecutor;
 import org.apache.geode.management.internal.cli.result.CommandResult;
 import org.apache.geode.management.internal.cli.result.model.ResultModel;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.junit.assertions.CommandResultAssert;
 
 public class GfshParserRule extends ExternalResource {
@@ -44,7 +45,7 @@ public class GfshParserRule extends ExternalResource {
 
   @Override
   public void before() {
-    commandManager = new CommandManager();
+    commandManager = new CommandManager(ModuleService.DEFAULT);
     parser = new GfshParser(commandManager);
     commandExecutor = new CommandExecutor();
   }
diff --git a/geode-lucene/build.gradle b/geode-lucene/build.gradle
index f463b98..6cd1a09 100644
--- a/geode-lucene/build.gradle
+++ b/geode-lucene/build.gradle
@@ -39,6 +39,7 @@ dependencies {
   implementation('org.apache.logging.log4j:log4j-api')
 
   compileOnly(platform(project(':boms:geode-all-bom')))
+  compileOnly(project(':geode-common-services'))
   compileOnly('com.fasterxml.jackson.core:jackson-annotations')
 
   runtimeOnly('org.apache.lucene:lucene-analyzers-phonetic')
diff --git a/geode-lucene/src/integrationTest/java/org/apache/geode/cache/lucene/internal/LuceneServiceImplIntegrationTest.java b/geode-lucene/src/integrationTest/java/org/apache/geode/cache/lucene/internal/LuceneServiceImplIntegrationTest.java
index 9c8f7a6..5946d64 100644
--- a/geode-lucene/src/integrationTest/java/org/apache/geode/cache/lucene/internal/LuceneServiceImplIntegrationTest.java
+++ b/geode-lucene/src/integrationTest/java/org/apache/geode/cache/lucene/internal/LuceneServiceImplIntegrationTest.java
@@ -35,6 +35,7 @@ import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.cache.lucene.LuceneService;
 import org.apache.geode.cache.lucene.LuceneServiceProvider;
 import org.apache.geode.cache.lucene.internal.distributed.LuceneQueryFunction;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.junit.categories.LuceneTest;
 
 @Category({LuceneTest.class})
@@ -57,7 +58,7 @@ public class LuceneServiceImplIntegrationTest {
   @Test
   public void getCacheShouldReturnTheCorrectCache() {
     cache = getCache();
-    new LuceneServiceImpl().init(cache);
+    new LuceneServiceImpl().init(cache, ModuleService.DEFAULT);
     LuceneService service = LuceneServiceProvider.get(cache);
     assertTrue(service.getCache().equals(cache));
   }
@@ -69,7 +70,7 @@ public class LuceneServiceImplIntegrationTest {
     assertNull(function);
 
     cache = getCache();
-    new LuceneServiceImpl().init(cache);
+    new LuceneServiceImpl().init(cache, ModuleService.DEFAULT);
 
     function = FunctionService.getFunction(LuceneQueryFunction.ID);
     assertNotNull(function);
diff --git a/geode-lucene/src/integrationTest/java/org/apache/geode/cache/lucene/test/LuceneFunctionSecurityTest.java b/geode-lucene/src/integrationTest/java/org/apache/geode/cache/lucene/test/LuceneFunctionSecurityTest.java
index a0448cf..4b66438 100644
--- a/geode-lucene/src/integrationTest/java/org/apache/geode/cache/lucene/test/LuceneFunctionSecurityTest.java
+++ b/geode-lucene/src/integrationTest/java/org/apache/geode/cache/lucene/test/LuceneFunctionSecurityTest.java
@@ -42,6 +42,7 @@ import org.apache.geode.cache.lucene.internal.results.LuceneGetPageFunction;
 import org.apache.geode.examples.SimpleSecurityManager;
 import org.apache.geode.management.internal.security.ResourcePermissions;
 import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.dunit.IgnoredException;
 import org.apache.geode.test.junit.categories.LuceneTest;
 import org.apache.geode.test.junit.categories.SecurityTest;
@@ -70,7 +71,7 @@ public class LuceneFunctionSecurityTest {
 
   @BeforeClass
   public static void setupFunctions() {
-    functions.add(new LuceneCreateIndexFunction());
+    functions.add(new LuceneCreateIndexFunction(ModuleService.DEFAULT));
     functions.add(new LuceneDescribeIndexFunction());
     functions.add(new LuceneDestroyIndexFunction());
     functions.add(new LuceneListIndexFunction());
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
index 2b894af..4b3ff35 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
@@ -84,6 +84,7 @@ import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.util.internal.GeodeGlossary;
 
 /**
@@ -119,7 +120,8 @@ public class LuceneServiceImpl implements InternalLuceneService {
   }
 
   @Override
-  public boolean init(final Cache cache) {
+  public boolean init(final Cache cache,
+      ModuleService moduleService) {
     if (cache == null) {
       throw new IllegalStateException("cache is null");
     }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneCreateIndexCommand.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneCreateIndexCommand.java
index 6b91ea6..7d975ec 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneCreateIndexCommand.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneCreateIndexCommand.java
@@ -45,9 +45,6 @@ import org.apache.geode.security.ResourcePermission.Resource;
 @SuppressWarnings("unused")
 public class LuceneCreateIndexCommand extends LuceneCommandBase {
 
-  private static final LuceneCreateIndexFunction createIndexFunction =
-      new LuceneCreateIndexFunction();
-
   /**
    * On the server, we also verify the resource operation permissions CLUSTER:WRITE:DISK
    */
@@ -83,7 +80,8 @@ public class LuceneCreateIndexCommand extends LuceneCommandBase {
         new LuceneIndexInfo(indexName, regionPath, trimmedFields, analyzers, serializer);
 
     final ResultCollector<?, ?> rc =
-        this.executeFunctionOnAllMembers(createIndexFunction, indexInfo);
+        this.executeFunctionOnAllMembers(new LuceneCreateIndexFunction(getModuleService()),
+            indexInfo);
     final List<CliFunctionResult> funcResults = (List<CliFunctionResult>) rc.getResult();
     final XmlEntity xmlEntity = funcResults.stream().filter(CliFunctionResult::isSuccessful)
         .map(CliFunctionResult::getXmlEntity).filter(Objects::nonNull).findFirst().orElse(null);
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java
index f05f59f..58b86ec 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java
@@ -42,6 +42,7 @@ import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
 import org.apache.geode.management.internal.i18n.CliStrings;
 import org.apache.geode.management.internal.util.ManagementUtils;
+import org.apache.geode.services.module.ModuleService;
 
 
 /**
@@ -60,6 +61,12 @@ public class LuceneCreateIndexFunction implements InternalFunction {
 
   private static final long serialVersionUID = 3061443846664615818L;
 
+  private final ModuleService moduleService;
+
+  public LuceneCreateIndexFunction(ModuleService moduleService) {
+    this.moduleService = moduleService;
+  }
+
   @Override
   public String getId() {
     return LuceneCreateIndexFunction.class.getName();
@@ -107,7 +114,7 @@ public class LuceneCreateIndexFunction implements InternalFunction {
       if (LuceneServiceImpl.LUCENE_REINDEX) {
         indexFactory.create(indexName, regionPath, true);
         if (cache.getRegion(regionPath) != null) {
-          xmlEntity = getXmlEntity(regionPath);
+          xmlEntity = getXmlEntity(regionPath, moduleService);
         }
       } else {
         indexFactory.create(indexName, regionPath, false);
@@ -121,9 +128,9 @@ public class LuceneCreateIndexFunction implements InternalFunction {
     }
   }
 
-  protected XmlEntity getXmlEntity(String regionPath) {
+  protected XmlEntity getXmlEntity(String regionPath, ModuleService moduleService) {
     String regionName = StringUtils.stripStart(regionPath, SEPARATOR);
-    return new XmlEntity(CacheXml.REGION, "name", regionName);
+    return new XmlEntity(CacheXml.REGION, "name", regionName, moduleService);
   }
 
   private LuceneSerializer toSerializer(String serializerName)
diff --git a/geode-lucene/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker b/geode-lucene/src/main/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
similarity index 100%
rename from geode-lucene/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker
rename to geode-lucene/src/main/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunctionJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunctionJUnitTest.java
index 0b2f951..fecdcf6 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunctionJUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunctionJUnitTest.java
@@ -44,6 +44,7 @@ import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.management.internal.functions.CliFunctionResult;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.fake.Fakes;
 import org.apache.geode.test.junit.categories.LuceneTest;
 
@@ -91,7 +92,7 @@ public class LuceneCreateIndexFunctionJUnitTest {
         new String[] {"field1", "field2", "field3"}, analyzers, null);
     when(context.getArguments()).thenReturn(indexInfo);
 
-    LuceneCreateIndexFunction function = new LuceneCreateIndexFunction();
+    LuceneCreateIndexFunction function = new LuceneCreateIndexFunction(ModuleService.DEFAULT);
     function.execute(context);
 
     ArgumentCaptor<Map> analyzersCaptor = ArgumentCaptor.forClass(Map.class);
@@ -116,7 +117,7 @@ public class LuceneCreateIndexFunctionJUnitTest {
         new LuceneIndexInfo("index1", SEPARATOR + "region1", fields, null, null);
     when(context.getArguments()).thenReturn(indexInfo);
 
-    LuceneCreateIndexFunction function = new LuceneCreateIndexFunction();
+    LuceneCreateIndexFunction function = new LuceneCreateIndexFunction(ModuleService.DEFAULT);
     function.execute(context);
 
     verify(factory).addField(eq("field1"));
@@ -139,7 +140,7 @@ public class LuceneCreateIndexFunctionJUnitTest {
         PrimitiveSerializer.class.getCanonicalName());
     when(context.getArguments()).thenReturn(indexInfo);
 
-    LuceneCreateIndexFunction function = new LuceneCreateIndexFunction();
+    LuceneCreateIndexFunction function = new LuceneCreateIndexFunction(ModuleService.DEFAULT);
     function.execute(context);
 
     verify(factory).addField(eq("field1"));
diff --git a/geode-memcached/build.gradle b/geode-memcached/build.gradle
index 5a813b2..d06dce3 100644
--- a/geode-memcached/build.gradle
+++ b/geode-memcached/build.gradle
@@ -22,6 +22,7 @@ apply from: "${project.projectDir}/../gradle/publish-java.gradle"
 dependencies {
   compileOnly(platform(project(':boms:geode-all-bom')))
   compileOnly('com.github.stephenc.findbugs:findbugs-annotations')
+  compileOnly(project(':geode-common-services'))
 
   implementation(platform(project(':boms:geode-all-bom')))
   implementation(project(':geode-core'))
diff --git a/geode-memcached/src/main/java/org/apache/geode/internal/memcached/GeodeMemcachedService.java b/geode-memcached/src/main/java/org/apache/geode/internal/memcached/GeodeMemcachedService.java
index b878e77..453099b 100644
--- a/geode-memcached/src/main/java/org/apache/geode/internal/memcached/GeodeMemcachedService.java
+++ b/geode-memcached/src/main/java/org/apache/geode/internal/memcached/GeodeMemcachedService.java
@@ -25,6 +25,7 @@ import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
 import org.apache.geode.memcached.GemFireMemcachedServer;
+import org.apache.geode.services.module.ModuleService;
 
 /**
  * Service loaded at cache initialization that starts the {@link GemFireMemcachedServer}
@@ -35,7 +36,7 @@ public class GeodeMemcachedService implements CacheService {
   private GemFireMemcachedServer memcachedServer;
 
   @Override
-  public boolean init(Cache cache) {
+  public boolean init(Cache cache, ModuleService moduleService) {
     InternalCache internalCache = (InternalCache) cache;
     startMemcachedServer(internalCache);
 
diff --git a/geode-module-bootstrapping/src/main/java/org/apache/geode/services/bootstrapping/impl/BootstrappingServiceImpl.java b/geode-module-bootstrapping/src/main/java/org/apache/geode/services/bootstrapping/impl/BootstrappingServiceImpl.java
index 0214833..dc694dd 100644
--- a/geode-module-bootstrapping/src/main/java/org/apache/geode/services/bootstrapping/impl/BootstrappingServiceImpl.java
+++ b/geode-module-bootstrapping/src/main/java/org/apache/geode/services/bootstrapping/impl/BootstrappingServiceImpl.java
@@ -35,26 +35,26 @@ public class BootstrappingServiceImpl implements BootstrappingService {
 
   private final String[] projects = new String[] {
       "geode-common",
-      // "geode-connectors",
+      "geode-connectors",
       "geode-core",
-      // "geode-cq",
+      "geode-cq",
       "geode-gfsh",
       "geode-http-service",
       "geode-log4j",
       "geode-logging",
-      // "geode-lucene",
+      "geode-lucene",
       "geode-management",
       "geode-membership",
-      // "geode-memcached",
-      // "geode-old-client-support",
-      // "geode-protobuf",
-      // "geode-protobuf-messages",
+      "geode-memcached",
+      "geode-old-client-support",
+      "geode-protobuf",
+      "geode-protobuf-messages",
       "geode-rebalancer",
-      // "geode-redis",
+      "geode-redis",
       "geode-serialization",
       "geode-tcp-server",
       "geode-unsafe",
-      // "geode-wan",
+      "geode-wan",
       "geode-module-management"};
 
 
diff --git a/geode-old-client-support/build.gradle b/geode-old-client-support/build.gradle
index 99e826c..13de2aa 100644
--- a/geode-old-client-support/build.gradle
+++ b/geode-old-client-support/build.gradle
@@ -29,6 +29,8 @@ dependencies {
     exclude module: 'geode-core'
   }
 
+  compileOnly(project(':geode-common-services'))
+
   testImplementation(project(":geode-modules"))
   integrationTestImplementation(project(":geode-modules"))
   acceptanceTestImplementation(project(":geode-modules"))
diff --git a/geode-old-client-support/src/main/java/com/gemstone/gemfire/OldClientSupportProvider.java b/geode-old-client-support/src/main/java/com/gemstone/gemfire/OldClientSupportProvider.java
index f8dc5b4..2d560b7 100644
--- a/geode-old-client-support/src/main/java/com/gemstone/gemfire/OldClientSupportProvider.java
+++ b/geode-old-client-support/src/main/java/com/gemstone/gemfire/OldClientSupportProvider.java
@@ -27,6 +27,7 @@ import org.apache.geode.internal.cache.tier.sockets.OldClientSupportService;
 import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.util.internal.GeodeGlossary;
 
 import com.gemstone.gemfire.cache.execute.EmtpyRegionFunctionException;
@@ -54,7 +55,7 @@ public class OldClientSupportProvider implements OldClientSupportService {
   }
 
   @Override
-  public boolean init(final Cache cache) {
+  public boolean init(final Cache cache, ModuleService moduleService) {
     InternalDataSerializer.setOldClientSupportService(this);
     return true;
   }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolService.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolService.java
index ed983c4..c31e83f 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolService.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolService.java
@@ -28,11 +28,7 @@ import org.apache.geode.services.module.ModuleService;
 
 public class ProtobufProtocolService implements ClientProtocolService {
   private volatile ClientStatistics statistics;
-  private final ProtobufStreamProcessor protobufStreamProcessor;
-
-  public ProtobufProtocolService(ModuleService moduleService) {
-    this.protobufStreamProcessor = new ProtobufStreamProcessor(moduleService);;
-  }
+  private ProtobufStreamProcessor protobufStreamProcessor;
 
   @Override
   public synchronized void initializeStatistics(String statisticsName, StatisticsFactory factory) {
@@ -72,4 +68,9 @@ public class ProtobufProtocolService implements ClientProtocolService {
   public int getServiceProtocolVersion() {
     return ProtocolVersion.MajorVersions.CURRENT_MAJOR_VERSION_VALUE;
   }
+
+  @Override
+  public void init(ModuleService moduleService) {
+    this.protobufStreamProcessor = new ProtobufStreamProcessor(moduleService);
+  }
 }
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolServiceJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolServiceJUnitTest.java
index e995f52..9cf2800 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolServiceJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/ProtobufProtocolServiceJUnitTest.java
@@ -28,7 +28,8 @@ import org.apache.geode.test.junit.categories.ClientServerTest;
 public class ProtobufProtocolServiceJUnitTest {
   @Test
   public void initializeStatistics() {
-    ProtobufProtocolService service = new ProtobufProtocolService(ModuleService.DEFAULT);
+    ProtobufProtocolService service = new ProtobufProtocolService();
+    service.init(ModuleService.DEFAULT);
     service.initializeStatistics("first", new DummyStatisticsFactory());
     ClientStatistics firstStatistics = service.getStatistics();
     service.initializeStatistics("second", new DummyStatisticsFactory());
diff --git a/geode-redis/build.gradle b/geode-redis/build.gradle
index 08562a7..c70fee6 100644
--- a/geode-redis/build.gradle
+++ b/geode-redis/build.gradle
@@ -39,6 +39,8 @@ dependencies {
   implementation('org.apache.logging.log4j:log4j-api')
   implementation('commons-codec:commons-codec')
 
+  compileOnly(project(':geode-common-services'))
+
   testImplementation(project(":geode-modules"))
   integrationTestImplementation(project(":geode-modules"))
   acceptanceTestImplementation(project(":geode-modules"))
diff --git a/geode-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisService.java b/geode-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisService.java
index d1e0716..d1b6e4a 100644
--- a/geode-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisService.java
+++ b/geode-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisService.java
@@ -27,6 +27,7 @@ import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
 import org.apache.geode.redis.internal.data.ByteArrayWrapper;
+import org.apache.geode.services.module.ModuleService;
 
 public class GeodeRedisService implements CacheService, ResourceEventsListener {
   private static final Logger logger = LogService.getLogger();
@@ -34,7 +35,7 @@ public class GeodeRedisService implements CacheService, ResourceEventsListener {
   private InternalCache cache;
 
   @Override
-  public boolean init(Cache cache) {
+  public boolean init(Cache cache, ModuleService moduleService) {
     this.cache = (InternalCache) cache;
     if (!this.cache.getInternalDistributedSystem().getConfig().getRedisEnabled()) {
       return false;
diff --git a/geode-redis/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker b/geode-redis/src/main/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
similarity index 100%
rename from geode-redis/src/main/resources/META-INF/services/org.springframework.shell.core.CommandMarker
rename to geode-redis/src/main/resources/META-INF/services/org.apache.geode.management.cli.GeodeCommandMarker
diff --git a/geode-wan/build.gradle b/geode-wan/build.gradle
index 0a30b22..5f4f764 100644
--- a/geode-wan/build.gradle
+++ b/geode-wan/build.gradle
@@ -61,7 +61,7 @@ dependencies {
   distributedTestImplementation('org.assertj:assertj-core')
   distributedTestImplementation('pl.pragmatists:JUnitParams')
 
-
+  upgradeTestImplementation(project(':geode-common-services'))
   upgradeTestImplementation(project(':geode-gfsh'))
   upgradeTestImplementation(project(':geode-junit'))
   upgradeTestImplementation(project(':geode-dunit'))
diff --git a/geode-wan/src/upgradeTest/java/org/apache/geode/cache/wan/WANRollingUpgradeMultipleReceiversDefinedInClusterConfiguration.java b/geode-wan/src/upgradeTest/java/org/apache/geode/cache/wan/WANRollingUpgradeMultipleReceiversDefinedInClusterConfiguration.java
index 130656d..76a2916 100644
--- a/geode-wan/src/upgradeTest/java/org/apache/geode/cache/wan/WANRollingUpgradeMultipleReceiversDefinedInClusterConfiguration.java
+++ b/geode-wan/src/upgradeTest/java/org/apache/geode/cache/wan/WANRollingUpgradeMultipleReceiversDefinedInClusterConfiguration.java
@@ -43,6 +43,7 @@ import org.apache.geode.internal.cache.xmlcache.CacheCreation;
 import org.apache.geode.internal.cache.xmlcache.CacheXmlGenerator;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
+import org.apache.geode.services.module.ModuleService;
 import org.apache.geode.test.dunit.DistributedTestUtils;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.NetworkUtils;
@@ -186,7 +187,7 @@ public class WANRollingUpgradeMultipleReceiversDefinedInClusterConfiguration
     CacheXmlGenerator.generate(creation, printWriter, true, false, false);
     printWriter.close();
     String baseXml = stringWriter.toString();
-    Document document = XmlUtils.createDocumentFromXml(baseXml);
+    Document document = XmlUtils.createDocumentFromXml(baseXml, ModuleService.DEFAULT);
 
     // Add gateway-receiver for each attribute
     for (Attribute attribute : attributes) {
@@ -220,7 +221,8 @@ public class WANRollingUpgradeMultipleReceiversDefinedInClusterConfiguration
         configurationRegion.get(ConfigurationPersistenceService.CLUSTER_CONFIG);
 
     // Verify the configuration contains no gateway-receiver elements
-    Document document = XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent());
+    Document document =
+        XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent(), ModuleService.DEFAULT);
     assertThat(document.getElementsByTagName("gateway-receiver").getLength())
         .isEqualTo(expectedReceivers);
   }