@BeforeClass
  public static void startServer() throws Exception {

    EmbeddedServerFactory.setupCleanDirectories(System.getProperties());

    ServerEnvironment serverEnvironment =
        Main.determineEnvironment(
            new String[0], new Properties(System.getProperties()), System.getenv());
    Assert.assertNotNull(serverEnvironment);
    final Bootstrap bootstrap = Bootstrap.Factory.newInstance();
    final Bootstrap.Configuration configuration = new Bootstrap.Configuration();
    configuration.setServerEnvironment(serverEnvironment);
    configuration.setModuleLoader(Module.getBootModuleLoader());
    configuration.setPortOffset(0);

    container = bootstrap.startup(configuration, Collections.<ServiceActivator>emptyList()).get();
    Assert.assertNotNull(container);
  }
    @Override
    public void start() throws ServerStartException {

      try {

        // Take control of server use of System.exit
        SystemExiter.initialize(
            new SystemExiter.Exiter() {
              @Override
              public void exit(int status) {
                StandaloneServerImpl.this.exit();
              }
            });

        // Take control of stdio
        try {
          StdioContext.install();
          uninstallStdIo = true;
        } catch (IllegalStateException ignored) {
          // already installed
        }

        // Determine the ServerEnvironment
        ServerEnvironment serverEnvironment =
            Main.determineEnvironment(
                cmdargs, systemProps, systemEnv, ServerEnvironment.LaunchType.EMBEDDED);

        Bootstrap bootstrap = Bootstrap.Factory.newInstance();

        Bootstrap.Configuration configuration = new Bootstrap.Configuration(serverEnvironment);

        /*
         * This would setup an {@link TransientConfigurationPersister} which does not persist anything
         *
        final ExtensionRegistry extensionRegistry = configuration.getExtensionRegistry();
        final Bootstrap.ConfigurationPersisterFactory configurationPersisterFactory = new Bootstrap.ConfigurationPersisterFactory() {
            @Override
            public ExtensibleConfigurationPersister createConfigurationPersister(ServerEnvironment serverEnvironment, ExecutorService executorService) {
                final QName rootElement = new QName(Namespace.CURRENT.getUriString(), "server");
                final StandaloneXml parser = new StandaloneXml(Module.getBootModuleLoader(), executorService, extensionRegistry);
                final File configurationFile = serverEnvironment.getServerConfigurationFile().getBootFile();
                XmlConfigurationPersister persister = new TransientConfigurationPersister(configurationFile, rootElement, parser, parser);
                for (Namespace namespace : Namespace.domainValues()) {
                    if (!namespace.equals(Namespace.CURRENT)) {
                        persister.registerAdditionalRootElement(new QName(namespace.getUriString(), "server"), parser);
                    }
                }
                extensionRegistry.setWriterRegistry(persister);
                return persister;
            }
        };
        configuration.setConfigurationPersisterFactory(configurationPersisterFactory);
        */

        configuration.setModuleLoader(moduleLoader);

        Future<ServiceContainer> future =
            bootstrap.startup(configuration, Collections.<ServiceActivator>emptyList());

        serviceContainer = future.get();

        executorService = Executors.newCachedThreadPool();

        @SuppressWarnings("unchecked")
        final Value<ControlledProcessStateService> processStateServiceValue =
            (Value<ControlledProcessStateService>)
                serviceContainer.getRequiredService(ControlledProcessStateService.SERVICE_NAME);
        controlledProcessStateService = processStateServiceValue.getValue();
        controlledProcessStateService.addPropertyChangeListener(processStateListener);
        establishModelControllerClient(controlledProcessStateService.getCurrentState());

      } catch (RuntimeException rte) {
        throw rte;
      } catch (Exception ex) {
        throw EmbeddedLogger.ROOT_LOGGER.cannotStartEmbeddedServer(ex);
      }
    }