public static void initOperations(
      final ManagementResourceRegistration root,
      final ContentRepository contentRepository,
      final ExtensibleConfigurationPersister extensibleConfigurationPersister,
      final ServerEnvironment serverEnvironment,
      final ControlledProcessState processState,
      final RunningModeControl runningModeControl,
      final AbstractVaultReader vaultReader,
      final ExtensionRegistry extensionRegistry,
      final boolean parallelBoot,
      final PathManagerService pathManager) {

    // System Properties
    root.registerSubModel(
        SystemPropertyResourceDefinition.createForStandaloneServer(serverEnvironment));

    // vault
    root.registerSubModel(new VaultResourceDefinition(vaultReader));

    // Central Management
    // Start with the base /core-service=management MNR. The Resource for this is added by
    // ServerService itself, so there is no add/remove op handlers
    ManagementResourceRegistration management =
        root.registerSubModel(CoreManagementDefinition.INSTANCE);

    management.registerSubModel(SecurityRealmResourceDefinition.INSTANCE);
    management.registerSubModel(LdapConnectionResourceDefinition.INSTANCE);
    management.registerSubModel(NativeManagementResourceDefinition.INSTANCE);
    management.registerSubModel(NativeRemotingManagementResourceDefinition.INSTANCE);
    management.registerSubModel(HttpManagementResourceDefinition.INSTANCE);

    // Other core services
    ManagementResourceRegistration serviceContainer =
        root.registerSubModel(
            new SimpleResourceDefinition(
                PathElement.pathElement(CORE_SERVICE, SERVICE_CONTAINER),
                ControllerResolver.getResolver("core", SERVICE_CONTAINER)));
    serviceContainer.registerOperationHandler(
        DumpServicesHandler.DEFINITION, DumpServicesHandler.INSTANCE);

    // Platform MBeans
    PlatformMBeanResourceRegistrar.registerPlatformMBeanResources(root);

    // Paths
    root.registerSubModel(PathResourceDefinition.createSpecified(pathManager));

    // Interfaces
    ManagementResourceRegistration interfaces =
        root.registerSubModel(
            new InterfaceDefinition(
                SpecifiedInterfaceAddHandler.INSTANCE,
                SpecifiedInterfaceRemoveHandler.INSTANCE,
                true));
    interfaces.registerReadOnlyAttribute(
        NetworkInterfaceRuntimeHandler.RESOLVED_ADDRESS, NetworkInterfaceRuntimeHandler.INSTANCE);
    interfaces.registerOperationHandler(
        SpecifiedInterfaceResolveHandler.DEFINITION, SpecifiedInterfaceResolveHandler.INSTANCE);

    // TODO socket-binding-group currently lives in controller and the child RDs live in server so
    // they currently need passing in from here
    root.registerSubModel(
        new SocketBindingGroupResourceDefinition(
            BindingGroupAddHandler.INSTANCE,
            SocketBindingGroupRemoveHandler.INSTANCE,
            false,
            SocketBindingResourceDefinition.INSTANCE,
            RemoteDestinationOutboundSocketBindingResourceDefinition.INSTANCE,
            LocalDestinationOutboundSocketBindingResourceDefinition.INSTANCE));

    // Deployments
    ManagementResourceRegistration deployments =
        root.registerSubModel(
            ServerDeploymentResourceDescription.create(contentRepository, vaultReader));

    // deployment overlays
    root.registerSubModel(
        new DeploymentOverlayDefinition(DeploymentOverlayPriority.SERVER, contentRepository, null));

    // The sub-deployments registry
    deployments.registerSubModel(
        new SimpleResourceDefinition(
            PathElement.pathElement(SUBDEPLOYMENT), DeploymentAttributes.DEPLOYMENT_RESOLVER));

    // Extensions
    root.registerSubModel(new ExtensionResourceDefinition(extensionRegistry, parallelBoot, false));
    if (extensionRegistry != null) {
      // extension registry may be null during testing
      extensionRegistry.setSubsystemParentResourceRegistrations(root, deployments);
      extensionRegistry.setPathManager(pathManager);
    }

    // Util
    root.registerOperationHandler(
        DeployerChainAddHandler.DEFINITION, DeployerChainAddHandler.INSTANCE, false);
  }
  @Override
  public void registerOperations(ManagementResourceRegistration hostRegistration) {
    super.registerOperations(hostRegistration);
    hostRegistration.registerOperationHandler(
        NamespaceAddHandler.DEFINITION, NamespaceAddHandler.INSTANCE);
    hostRegistration.registerOperationHandler(
        NamespaceRemoveHandler.DEFINITION, NamespaceRemoveHandler.INSTANCE);
    hostRegistration.registerOperationHandler(
        SchemaLocationAddHandler.DEFINITION, SchemaLocationAddHandler.INSTANCE);
    hostRegistration.registerOperationHandler(
        SchemaLocationRemoveHandler.DEFINITION, SchemaLocationRemoveHandler.INSTANCE);

    hostRegistration.registerOperationHandler(
        ValidateAddressOperationHandler.DEFINITION, ValidateAddressOperationHandler.INSTANCE);

    hostRegistration.registerOperationHandler(
        ResolveExpressionHandler.DEFINITION, ResolveExpressionHandler.INSTANCE);
    hostRegistration.registerOperationHandler(
        ResolveExpressionOnHostHandler.DEFINITION, ResolveExpressionOnHostHandler.INSTANCE);
    hostRegistration.registerOperationHandler(
        SpecifiedInterfaceResolveHandler.DEFINITION, SpecifiedInterfaceResolveHandler.INSTANCE);
    hostRegistration.registerOperationHandler(
        CleanObsoleteContentHandler.DEFINITION,
        CleanObsoleteContentHandler.createOperation(contentRepository));

    XmlMarshallingHandler xmh =
        new HostXmlMarshallingHandler(
            configurationPersister.getHostPersister(), hostControllerInfo);
    hostRegistration.registerOperationHandler(XmlMarshallingHandler.DEFINITION, xmh);

    StartServersHandler ssh =
        new StartServersHandler(environment, serverInventory, runningModeControl);
    hostRegistration.registerOperationHandler(StartServersHandler.DEFINITION, ssh);

    HostShutdownHandler hsh = new HostShutdownHandler(domainController);
    hostRegistration.registerOperationHandler(HostShutdownHandler.DEFINITION, hsh);

    HostProcessReloadHandler reloadHandler =
        new HostProcessReloadHandler(
            HostControllerService.HC_SERVICE_NAME, runningModeControl, processState);
    hostRegistration.registerOperationHandler(
        HostProcessReloadHandler.getDefinition(hostControllerInfo), reloadHandler);

    DomainServerLifecycleHandlers.initializeServerInventory(serverInventory);
    DomainSocketBindingGroupRemoveHandler.INSTANCE.initializeServerInventory(serverInventory);

    ValidateOperationHandler validateOperationHandler =
        hostControllerInfo.isMasterDomainController()
            ? ValidateOperationHandler.INSTANCE
            : ValidateOperationHandler.SLAVE_HC_INSTANCE;
    hostRegistration.registerOperationHandler(
        ValidateOperationHandler.DEFINITION_PRIVATE, validateOperationHandler);

    SnapshotDeleteHandler snapshotDelete =
        new SnapshotDeleteHandler(configurationPersister.getHostPersister());
    hostRegistration.registerOperationHandler(SnapshotDeleteHandler.DEFINITION, snapshotDelete);
    SnapshotListHandler snapshotList =
        new SnapshotListHandler(configurationPersister.getHostPersister());
    hostRegistration.registerOperationHandler(SnapshotListHandler.DEFINITION, snapshotList);
    SnapshotTakeHandler snapshotTake =
        new SnapshotTakeHandler(configurationPersister.getHostPersister());
    hostRegistration.registerOperationHandler(SnapshotTakeHandler.DEFINITION, snapshotTake);

    ignoredRegistry.registerResources(hostRegistration);

    // Platform MBeans
    PlatformMBeanResourceRegistrar.registerPlatformMBeanResources(hostRegistration);
  }