docs: protected void configure(Map<String, String> initProps) throws LocationException {
          if (initProps == null)
              throw new IllegalArgumentException("Initial properties can not be null");
  
          this.initProps = initProps;
  
          // Set the process type. e.g., server or client
          initProps.put(BootstrapConstants.LOC_PROPERTY_PROCESS_TYPE, getProcessType());
  
          // Update for setSystemProperties.
          initProps.put(BootstrapConstants.INTERNAL_SERVER_NAME, processName);
  
          // Check for / read bootstrap props
          File f = getConfigFile(BootstrapConstants.BOOTSTRAP_PROPERTIES);
          if (f.exists()) {
              mergeProperties(initProps, null, f.toURI().toString());
          }
  
          boolean userRootIsDefault = userRoot.getParentFile().equals(installRoot);
  
          // Set locations into initProps
          initProps.put(BootstrapConstants.LOC_PROPERTY_INSTALL_DIR, getPathProperty(installRoot));
          initProps.put(BootstrapConstants.LOC_PROPERTY_INSTANCE_DIR, getPathProperty(userRoot));
          initProps.put(BootstrapConstants.LOC_PROPERTY_INSTANCE_DIR_IS_DEFAULT, Boolean.toString(userRootIsDefault));
  
          initProps.put(BootstrapConstants.LOC_PROPERTY_SRVCFG_DIR, getPathProperty(configDir));
          initProps.put(BootstrapConstants.LOC_PROPERTY_SRVOUT_DIR, getPathProperty(outputDir));
          initProps.put(BootstrapConstants.LOC_PROPERTY_SRVTMP_DIR, getPathProperty(outputDir,
                                                                                    BootstrapConstants.LOC_AREA_NAME_WORKING,
                                                                                    BootstrapConstants.LOC_AREA_NAME_TMP));
          if (BootstrapConstants.LOC_PROCESS_TYPE_CLIENT.equals(getProcessType())) {
              initProps.put(BootstrapConstants.LOC_PROPERTY_CLIENTCFG_DIR, getPathProperty(configDir));
              initProps.put(BootstrapConstants.LOC_PROPERTY_CLIENTOUT_DIR, getPathProperty(outputDir));
              initProps.put(BootstrapConstants.LOC_PROPERTY_CLIENTTMP_DIR, getPathProperty(outputDir,
                                                                                           BootstrapConstants.LOC_AREA_NAME_WORKING,
                                                                                           BootstrapConstants.LOC_AREA_NAME_TMP));
          }
  
          initProps.put(BootstrapConstants.LOC_INTERNAL_LIB_DIR, getPathProperty(bootstrapLib));
          initProps.put(BootstrapConstants.LOC_PROPERTY_SHARED_APP_DIR, getPathProperty(userRoot,
                                                                                        BootstrapConstants.LOC_AREA_NAME_SHARED,
                                                                                        BootstrapConstants.LOC_AREA_NAME_APP));
          initProps.put(BootstrapConstants.LOC_PROPERTY_SHARED_CONFIG_DIR, getPathProperty(userRoot,
                                                                                           BootstrapConstants.LOC_AREA_NAME_SHARED,
                                                                                           BootstrapConstants.LOC_AREA_NAME_CFG));
          initProps.put(BootstrapConstants.LOC_PROPERTY_SHARED_RES_DIR, getPathProperty(userRoot,
                                                                                        BootstrapConstants.LOC_AREA_NAME_SHARED,
                                                                                        BootstrapConstants.LOC_AREA_NAME_RES));
  
          // Wait to look for symbols until we have location properties set
          substituteSymbols(initProps);
  
      }