docs: public synchronized static void init(boolean forceCreate) {
      if (!isInitialized) {
        if(processEngines == null) {
          // Create new map to store process-engines if current map is null
          processEngines = new HashMap<String, ProcessEngine>();
        }
        ClassLoader classLoader = ReflectUtil.getClassLoader();
        Enumeration<URL> resources = null;
        try {
          resources = classLoader.getResources("camunda.cfg.xml");
        } catch (IOException e) {
          try {
            resources = classLoader.getResources("activiti.cfg.xml");
          } catch(IOException ex) {
            if(forceCreate) {
              throw new ProcessEngineException("problem retrieving camunda.cfg.xml and activiti.cfg.xml resources on the classpath: "+System.getProperty("java.class.path"), ex);
            } else {
              return;
            }
          }
        }
  
        // Remove duplicated configuration URL's using set. Some classloaders may return identical URL's twice, causing duplicate startups
        Set<URL> configUrls = new HashSet<URL>();
        while (resources.hasMoreElements()) {
          configUrls.add( resources.nextElement() );
        }
        for (Iterator<URL> iterator = configUrls.iterator(); iterator.hasNext();) {
          URL resource = iterator.next();
          initProcessEngineFromResource(resource);
        }
  
        try {
          resources = classLoader.getResources("activiti-context.xml");
        } catch (IOException e) {
          if(forceCreate) {
            throw new ProcessEngineException("problem retrieving activiti-context.xml resources on the classpath: "+System.getProperty("java.class.path"), e);
          } else {
            return;
          }
        }
        while (resources.hasMoreElements()) {
          URL resource = resources.nextElement();
          initProcessEngineFromSpringResource(resource);
        }
  
        isInitialized = true;
      } else {
        LOG.processEngineAlreadyInitialized();
      }
    }