@Override
  public URL getResource(String name) {
    URL resource = null;
    boolean parentLoaded = false;

    // Delegate to the parent first if necessary
    if (loadResourceUsingParentFirst(name)) {
      if (LOG.isDebugEnabled()) {
        LOG.debug("Checking parent first for resource " + name);
      }
      resource = super.getResource(name);
      parentLoaded = true;
    }

    if (resource == null) {
      synchronized (getClassLoadingLock(name)) {
        // Try to find the resource in this jar
        resource = findResource(name);
        if ((resource == null) && !parentLoaded) {
          // Not found in this jar and we haven't attempted to load
          // the resource in the parent yet; fall back to the parent
          resource = super.getResource(name);
        }
      }
    }
    return resource;
  }
Get a CoprocessorClassLoader for a coprocessor jar path from cache. If not in cache, create
one.
@param path       the path to the coprocessor jar file to load classes from
@param parent     the parent class loader for exempted classes
@param pathPrefix a prefix used in temp path name to store the jar file locally
@param conf       the configuration used to create the class loader, if needed
@return a CoprocessorClassLoader for the coprocessor jar path
hbase-common/src/main/java/org/apache/hadoop/hbase/util/CoprocessorClassLoader.java