@Override
    protected synchronized Class<?> loadClass(String sClassName, boolean bResolve)
    throws ClassNotFoundException
    {
        log("Loading: %s (resolve=%b)", sClassName, bResolve);
        Class<?> c = null;
        try {
            // Step 1. Load from JAR.
            if (isLaunchedFromJar()) {
                try {
                    c = findJarClass(sClassName);
                    log("Loaded %s from JAR by %s", sClassName, getClass().getName());
                    return c;
                } catch (JarClassLoaderException e) {
                    if (e.getCause() == null) {
                        log("Not found %s in JAR by %s", 
                                e.getMessage(), getClass().getName());
                    } else {
                        log("Error %s in JAR by %s", e.getCause(), getClass().getName());
                    }
                    // keep looking
                }
            }
            // Step 2. Load by parent (usually system) class loader.
            // Call findSystemClass() AFTER attempt to find in a JAR. 
            // If it called BEFORE it will load class-in-jar using 
            // SystemClassLoader and "infect" it with SystemClassLoader.
            // The SystemClassLoader will be used to load all dependent 
            // classes. SystemClassLoader will fail to load a class from 
            // jar-in-jar and to load dll-in-jar. 
            try {
                // No need to call findLoadedClass(sClassName)  
                // because it's called inside:
                ClassLoader cl = getParent(); 
                c = cl.loadClass(sClassName);
                log("Loaded %s by %s", sClassName, cl.getClass().getName());
                return c;
            } catch (ClassNotFoundException e) {
                // keep looking
            }
            // What else?
            throw new ClassNotFoundException("Failure to load: " + sClassName);
        } finally {
            if (c != null  &&  bResolve) {
                resolveClass(c);
            }
        }
    } // loadClass()