public void registerThrowAwayClassloader()

in extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/adapters/ClassLoaderServiceImpl.java [45:80]


    public void registerThrowAwayClassloader()
    {
        //we do not have the luxury of a pluggable classloading extensions like in myfaces
        // instead we have to provide our own classloader which is hooked in from time to time into the running system
        final ClassLoader loader = ClassLoaderUtils.getDefaultClassLoader();
        boolean found = false;
        ClassLoader parent = loader;
        while (parent != null && !found)
        {
            found = parent instanceof ThrowAwayClassloader;
            if (!found)
            {
                parent = parent.getParent();
            }
        }
        if (found)
        {
            return;
        }
        //in case of an unchanged classloader we can recycle our old throw away classloader
        if (_oldClassLoader != null && loader.equals(_oldClassLoader.getParent()))
        {
            Thread.currentThread().setContextClassLoader(_oldClassLoader);
        } else
        {
            _oldClassLoader = (ClassLoader) AccessController.doPrivileged(
                    new PrivilegedAction()
                    {
                        public Object run()
                        {
                            return new ThrowAwayClassloader(loader);
                        }
                    });
            Thread.currentThread().setContextClassLoader(_oldClassLoader);
        }
    }