docs: static Object find(final String factoryId, final String fallbackClassName) throws ConfigurationError {
  
          // Figure out which ClassLoader to use for loading the provider
          // class. If there is a Context ClassLoader then use it.
  
          ClassLoader classLoader = ss.getContextClassLoader();
  
          if (classLoader == null) {
              // if we have no Context ClassLoader
              // so use the current ClassLoader
              classLoader = FactoryFinder.class.getClassLoader();
          }
  
          dPrint("find factoryId =" + factoryId);
  
          // Use the system property first
          try {
              final String systemProp = ss.getSystemProperty(factoryId);
              if (systemProp != null) {
                  dPrint("found system property, value=" + systemProp);
                  return newInstance(systemProp, classLoader, true);
              }
          } catch (final SecurityException se) {
              // if first option fails due to any reason we should try next option in the
              // look up algorithm.
          }
  
          // try to read from /propono.properties
          try {
              final String configFile = "/propono.properties";
              String factoryClassName = null;
              if (firstTime) {
                  synchronized (cacheProps) {
                      if (firstTime) {
                          try {
                              final InputStream is = FactoryFinder.class.getResourceAsStream(configFile);
                              firstTime = false;
                              if (is != null) {
                                  dPrint("Read properties file: " + configFile);
                                  cacheProps.load(is);
                              }
                          } catch (final Exception intentionallyIgnored) {
                          }
                      }
                  }
              }
              factoryClassName = cacheProps.getProperty(factoryId);
  
              if (factoryClassName != null) {
                  dPrint("found in $java.home/propono.properties, value=" + factoryClassName);
                  return newInstance(factoryClassName, classLoader, true);
              }
          } catch (final Exception ex) {
              if (debug) {
                  ex.printStackTrace();
              }
          }
  
          // Try Jar Service Provider Mechanism
          final Object provider = findJarServiceProvider(factoryId);
          if (provider != null) {
              return provider;
          }
          if (fallbackClassName == null) {
              throw new ConfigurationError("Provider for " + factoryId + " cannot be found", null);
          }
  
          dPrint("loaded from fallback value: " + fallbackClassName);
          return newInstance(fallbackClassName, classLoader, true);
      }