protected ClassLoader createClassLoader()

in jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentInstaller.java [272:308]


    protected ClassLoader createClassLoader(Bundle bundle, String name, String[] classPathNames, boolean parentFirst, SharedLibrary[] sharedLibs) {
        // Create parents classloaders
        ClassLoader[] parents;
        if (sharedLibs != null) {
            parents = new ClassLoader[sharedLibs.length + 2];
            for (int i = 0; i < sharedLibs.length; i++) {
                parents[i] = sharedLibs[i].getClassLoader();
            }
        } else {
            parents = new ClassLoader[2];
        }
        parents[parents.length - 2] = new BundleDelegatingClassLoader(bundle, getClass().getClassLoader());
        parents[parents.length - 1] = new BundleDelegatingClassLoader(getBundleContext().getBundle(0));

        // Create urls
        List<URL> urls = new ArrayList<URL>();
        for (int i = 0; i < classPathNames.length; i++) {
            File f = new File(installRoot, classPathNames[i]);
            if (!f.exists()) {
                logger.warn("Component classpath entry not found: '" + classPathNames[i] + "'");
            }
            try {
                urls.add(f.getCanonicalFile().toURL());
            } catch (IOException e) {
                throw new IllegalArgumentException("Component classpath entry not found: '" + classPathNames[i] + "'");
            }
        }

        // Create classloader
        return new MultiParentClassLoader(
                name,
                urls.toArray(new URL[urls.size()]),
                parents,
                !parentFirst,
                new String[0],
                new String[]{"java.", "javax."});
    }