docs: private void processConfigUrl(URL url) throws Exception {
          final String methodName = "processConfigUrl()";
          if (tc.isEntryEnabled())
              Tr.entry(tc, methodName + " configUrl=" + url);
  
          processedUrls.add(url);
          Properties props = new Properties();
          InputStream is = url.openStream();
          try {
              props.load(is);
          } finally {
              is.close();
          }
  
          int i = 0;
          VariableRegistry vr = variableRegistryRef.get();
          boolean found = false;
          do {
              // Look for instance name ( JNDI name == cacheName )
              String instancekey = "cache.instance." + i;
              String instanceName = props.getProperty(instancekey);
  
              // Remove leading forward slash
              if (instanceName != null && instanceName.charAt(0) == '/')
                  instanceName = instanceName.substring(1);
  
              // Do we have an instance name?
              if (instanceName != null) {
                  instanceName = instanceName.trim();
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, methodName + " Adding new cache instance. instanceName=" + instanceName);
                  found = true;
  
                  // Build a vMap converted properties object
                  Iterator<Object> it = props.keySet().iterator();
                  Properties ccProps = new Properties();
                  ccProps.put(CacheConfig.CACHE_NAME, instanceName);
                  while (it.hasNext()) {
                      String s = (String) it.next();
                      if (s.startsWith(instancekey + ".")) {
                          String value = vr.resolveString(props.getProperty(s)).trim();
                          if (tc.isDebugEnabled())
                              Tr.debug(tc, methodName + " Adding property: " + s + " value:" + value);
                          ccProps.put("com.ibm.ws.cache.CacheConfig" + s.substring(instancekey.length()), value);
                          // for external cache provider access
                          String unmodifiedKey = s.substring(instancekey.length() + 1);
                          if (tc.isDebugEnabled()) {
                              Tr.debug(tc, methodName + " Adding property: " + unmodifiedKey + " value:" + value);
                          }
                          ccProps.put(unmodifiedKey, value);
                      }
                  }
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, methodName + " Final props=" + ccProps);
  
                  // ------------------------------------------------------------
                  // Bind to JNDI if the cache & the config do not exist
                  // ------------------------------------------------------------
                  DCache c = ServerCache.getCache(instanceName);
  
                  CacheService cs = getCacheService();
                  CacheConfig cacheConfig = cs.getCacheInstanceConfig(instanceName);
                  if (c == null && cacheConfig == null) {
                      cacheConfig = cs.addCacheInstanceConfig(ccProps);
                      if (cacheConfig.isCreateCacheAtServerStartup()) {
                          if (tc.isDebugEnabled()) {
                              Tr.debug(tc, "Create cache instance \"" + instanceName + "\" during startup because the cache is configured to.");
                          }
                          ServerCache.createCache(cacheConfig.getCacheName(), cacheConfig);
                      }
                  } else {
                      // In this case, the instanceName already exists, so output
                      // a
                      // warning message for the user
                      // DYNA1057W=DYNA1057W: Cache instance \"{0}\" defined in
                      // the \"{1}\" is not added because a cache with this name
                      // already exists.
                      // DYNA1057W.explanation=The cache instance is not added
                      // because a cache with this name already exists.
                      // DYNA1057W.useraction=Ensure that the cache instance does
                      // not define more than once in the properties file.
                      Tr.warning(tc, "DYNA1057W", new Object[] { instanceName, url.toString() });
                  }
              } else {
                  found = false;
              }
              i++;
          } while (found);
  
          if (tc.isEntryEnabled())
              Tr.exit(tc, methodName + " configUrl=" + url);
      }