protected synchronized Class< ? > loadClass(String name, boolean resolve) throws ClassNotFoundException { // First check if the class is already loaded Class< ? > c = findClass(name); if (c == null) { c = getParent().loadClass(name); } if (resolve) { resolveClass(c); } if (LOG.isLoggable(Level.FINE)) { LOG.fine("loadClass: " + name + ", result: " + c); } return c; }
public static Set<String> getPackageClassLoadersClasses() { if (packageClassLoaders == null || packageClassLoaders.isEmpty()) { return null; } Set<String> result = new HashSet<String>(); for (BonitaClassLoader bcl : packageClassLoaders.values()) { if (bcl.getClasses() != null) { result.addAll(bcl.getClasses()); } } return result; } public static Set<String> getGlobalClassLoadersClasses() {
public Class< ? > findClass(String name) { if (LOG.isLoggable(Level.FINE)) { LOG.fine("Looking for class " + name + "... "); } try { if (classDatas != null && classDatas.containsKey(name)) { return getClass(name, classDatas.get(name)); } if (LOG.isLoggable(Level.FINE)) { LOG.fine("class " + name + " not found."); } return null; } catch (Throwable e) { throw new BonitaRuntimeException("Problem while loading class with name : " + name, e); } }
public static ClassLoader getGlobalClassLoader(Repository repository, String className) { GlobalClassData globalClassData = repository.getGlobalClassData(className); if (globalClassData != null) { if (LOG.isLoggable(Level.FINE)) { LOG.fine("Class " + className + " is defined as a global class"); } if (!globalClassLoaders.containsKey(className)) { Map<String, byte[]> datas = new HashMap<String, byte[]>(); datas.put(globalClassData.getClassName(), globalClassData.getClassData()); BonitaClassLoader bonitaClassLoader = new BonitaClassLoader(datas); globalClassLoaders.put(className, bonitaClassLoader); if (LOG.isLoggable(Level.FINE)) { LOG.fine("BonitaClassLoader added to globalClassLoaders for class " + className); } } return globalClassLoaders.get(className); } return null; }
private Class< ? > getClass(String className, byte[] classData) { if (loadedClasses != null && loadedClasses.containsKey(className)) { if (LOG.isLoggable(Level.FINE)) { LOG.fine("class " + className + " found in loaded classes."); } return loadedClasses.get(className); } if (LOG.isLoggable(Level.FINE)) { LOG.fine("Defining class:" + className); } Class< ? > clazz = defineClass(className, classData, 0, classData.length); if (loadedClasses == null) { loadedClasses = new HashMap<String, Class< ? >>(); } loadedClasses.put(clazz.getName(), clazz); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Defined class:" + clazz); } return clazz; }
public BonitaClassLoader(Map<String, byte[]> classDatas) { this(); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Creating a new BonitaClassLoader... classDatas = " + classDatas); } this.classDatas = classDatas; if (classDatas != null) { for (Map.Entry<String, byte[]> classData : classDatas.entrySet()) { if (LOG.isLoggable(Level.FINE)) { LOG.fine("BonitaClassLoader constructor: defining class..."); } getClass(classData.getKey(), classData.getValue()); } } if (LOG.isLoggable(Level.FINE)) { String availableClasses = "no class"; if (classDatas != null) { availableClasses = ""; for (String className : classDatas.keySet()) { availableClasses += className + ", "; } } LOG.fine("BonitaClassLoader: " + this + " created. Datas are available for classDatas : " + availableClasses); } }
private static Class< ? > lookIntoPackageClassLoader(PackageDefinitionUUID packageUUID, Repository repository, String className) { PackageClassData packageClassData = repository.getPackageClassData(packageUUID); if (packageClassData != null) { if (LOG.isLoggable(Level.FINE)) { LOG.fine("Class " + className + " is defined in package : " + packageUUID); } if (!packageClassLoaders.containsKey(packageUUID)) { BonitaClassLoader bonitaClassLoader = new BonitaClassLoader(packageClassData.getClasses()); packageClassLoaders.put(packageUUID, bonitaClassLoader); } ClassLoader classLoader = packageClassLoaders.get(packageUUID); try { Class< ? > result = load(classLoader, className); if (result != null && result.getClassLoader().equals(classLoader)) { return result; } } catch (ClassNotFoundException e) { return null; } } return null; }