code: @Override
      public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
  
          if (context.getRunningMode() == RunningMode.ADMIN_ONLY) {
              throw new OperationFailedException(HostControllerLogger.ROOT_LOGGER.cannotStartServersInvalidMode(context.getRunningMode()));
          }
  
          final String serverName = context.getCurrentAddressValue();
          final boolean blocking = BLOCKING.resolveModelAttribute(context, operation).asBoolean();
          final boolean suspend = START_MODE.resolveModelAttribute(context, operation).asString().toLowerCase(Locale.ENGLISH).equals(SUSPEND);
  
          final ModelNode model = Resource.Tools.readModel(context.readResourceFromRoot(PathAddress.EMPTY_ADDRESS, true));
          context.addStep(new OperationStepHandler() {
              @Override
              public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
                  // WFLY-2189 trigger a write-runtime authz check
                  context.getServiceRegistry(true);
  
                  final ServerStatus origStatus = serverInventory.determineServerStatus(serverName);
                  if (origStatus != ServerStatus.STARTED && origStatus != ServerStatus.STARTING) {
                      final ServerStatus status = serverInventory.startServer(serverName, model, blocking, suspend);
                      persistAutoStart(context);
                      context.getResult().set(status.toString());
                  } else {
                      context.getResult().set(origStatus.toString());
                  }
                  context.completeStep(new OperationContext.RollbackHandler() {
                      @Override
                      public void handleRollback(OperationContext context, ModelNode operation) {
                          if (origStatus != ServerStatus.STARTED && origStatus != ServerStatus.STARTING) {
                              serverInventory.stopServer(serverName, -1);
                              persistAutoStart(context);
                          }
                      }
                  });
              }
              /**
               * By reading the model we ensure that ServerConfigResource.persistAutoStart will get called.
               * @param context the current operation context.
               */
              private void persistAutoStart(OperationContext context) {
                  context.readResource(PathAddress.EMPTY_ADDRESS, false).getModel();
              }
          }, OperationContext.Stage.RUNTIME);
      }
docs: {@inheritDoc}