docs: public int createPlatform(String[] args) {
          ReturnCode rc = ReturnCode.OK;
  
          Map<String, String> initProps = new HashMap<String, String>(20);
          initProps.put(BootstrapConstants.LAUNCH_TIME, Long.toString(launchTime));
          initProps.put("org.apache.aries.blueprint.preemptiveShutdown", Boolean.toString(false));
  
          BootstrapConfig bootProps = createBootstrapConfig();
  
          try {
              // process and consume Launcher-specific command line arguments
              // (bottom) bootstrap.properties file <- command line args <- system properties (top)
              LaunchArguments launchArgs = createLaunchArguments(args, initProps);
              rc = launchArgs.getRc(); // Pay attention that rc is not modified before calling handleActions().
  
              // Figure out log locations, etc.
              findLocations(bootProps, launchArgs.getProcessName());
  
              if (rc.logName != null) {
                  // If the server doesn't exist (and won't be created), then
                  // create the log in the common .logs dir.  We always put
                  // create.log in the common .logs dir because we don't want to
                  // create the server directory before verifying it.
                  if (rc == ReturnCode.CREATE_ACTION || (!bootProps.getConfigFile(null).exists() && !rc.getVerifyServer().willCreate())) {
                      Debug.open(bootProps.getUserOutputFile(".logs"), rc.logName);
                  } else {
                      Debug.open(bootProps.getLogDirectory(), rc.logName);
                  }
              }
  
              // Test/create required directories if this is a new server that should be created (--create)
              bootProps.verifyProcess(rc.getVerifyServer(), launchArgs);
  
              // Initialize bootstrap configuration: bootstrap properties, etc.
              if (rc.readInitialConfig()) {
  
                  // Read/merge bootstrap properties and System.properties into initProps
                  bootProps.configure(initProps);
  
                  // Set system properties based on configuration result..
                  bootProps.setSystemProperties();
              }
              bootProps.setCmdArgs(launchArgs.getExtraArguments());
  
              if (launchArgs.getProcessName() == null && launchArgs.getRc().defaultServerNameMessage()) {
                  System.out.println(MessageFormat.format(BootstrapConstants.messages.getString(getDefaultProcessNameMessageKey()),
                                                          getDefaultProcessName()));
              }
  
              // Now perform appropriate processing based on the current return code
              rc = handleActions(bootProps, launchArgs);
          } catch (LocationException e) {
              System.out.println(BootstrapConstants.messages.getString("error.unableToLaunch"));
              System.out.println(e.getTranslatedMessage());
  
              if (Debug.isOpen()) {
                  Debug.printStackTrace(e);
                  Debug.println(bootProps.printLocations(true));
              }
              if (e.getCause() != null) {
                  e.printStackTrace();
              }
              if (e.getCause() != null || bootProps.isConfigured()) {
                  System.out.println(bootProps.printLocations(true));
              }
  
              rc = ReturnCode.LOCATION_EXCEPTION;
          } catch (ClientRunnerException e) {
              System.out.println(e.getTranslatedMessage());
  
              if (Debug.isOpen()) {
                  Debug.printStackTrace(e);
              }
              if (e.getCause() != null) {
                  e.printStackTrace();
              }
  
              rc = e.getReturnCode();
          } catch (LaunchException e) {
              System.out.println(BootstrapConstants.messages.getString("error.unableToLaunch"));
              System.out.println(e.getTranslatedMessage());
  
              if (Debug.isOpen()) {
                  Debug.printStackTrace(e);
              }
              if (e.getCause() != null) {
                  e.printStackTrace();
              }
  
              rc = e.getReturnCode();
          } catch (RuntimeException e) {
              Throwable t = e.getCause();
              if (t == null)
                  t = e;
  
              System.out.println("in Launcher, about to error.unknownException");
              System.out.println(BootstrapConstants.messages.getString("error.unableToLaunch"));
              System.out.println(MessageFormat.format(BootstrapConstants.messages.getString("error.unknownException"), t.toString()));
  
              if (Debug.isOpen()) {
                  Debug.printStackTrace(e);
              }
              e.printStackTrace();
              rc = ReturnCode.RUNTIME_EXCEPTION;
          } catch (Throwable e) {
              System.out.println(BootstrapConstants.messages.getString("error.unableToLaunch"));
              System.out.println(MessageFormat.format(BootstrapConstants.messages.getString("error.unknownException"), e.toString()));
  
              if (Debug.isOpen()) {
                  Debug.printStackTrace(e);
              }
              e.printStackTrace();
              rc = ReturnCode.UNKNOWN_EXCEPTION;
          } finally {
              System.out.flush();
              if (!Debug.isOpen()) {
                  System.err.flush();
              } else {
                  boolean delete = rc == ReturnCode.OK;
  
                  if (!delete) {
                      Debug.println();
  
                      for (int i = 0; i < args.length; i++) {
                          Debug.println("arg" + i + "=" + args[i]);
                      }
  
                      Debug.println("exit=" + rc.val);
  
                      Debug.println();
                      Debug.println(bootProps.printLocations(true));
                  }
  
                  Debug.close(delete);
              }
          }
  
          return rc.val;
      }