protected void loadUserProcedures(Configuration conf, String confKey) {
    Class<?> implClass = null;

    // load default procedures from configure file
    String[] defaultProcClasses = conf.getStrings(confKey);
    if (defaultProcClasses == null || defaultProcClasses.length == 0) return;

    List<E> configured = new ArrayList<>();
    for (String className : defaultProcClasses) {
      className = className.trim();
      ClassLoader cl = this.getClass().getClassLoader();
      Thread.currentThread().setContextClassLoader(cl);
      try {
        implClass = cl.loadClass(className);
        configured.add(loadInstance(implClass));
        LOG.info("User procedure " + className + " was loaded successfully.");
      } catch (ClassNotFoundException e) {
        LOG.warn("Class " + className + " cannot be found. " + e.getMessage());
      } catch (IOException e) {
        LOG.warn("Load procedure " + className + " failed. " + e.getMessage());
      }
    }

    // add entire set to the collection
    procedures.addAll(configured);
  }
Load system procedures. Read the class names from configuration. Called by constructor.
hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureManagerHost.java