public void addPackageClassData(PackageClassData packageCD) { packageClassDatas.put(packageCD.getPackageUUID(), packageCD); removedPackageClassDatas.remove(packageCD.getPackageUUID()); } public void removePackageClassData(PackageClassData packageCD) {
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; }
PackageClassData packageClassData = new PackageClassData(packageDef.getUUID(), map); repository.storePackageClassData(packageClassData);
private static Class< ? > lookIntoPackageClassLoader(final PackageDefinitionUUID packageUUID, final String className) { final Repository repository = EngineEnvTool.getRepository(); final 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)) { final PackageClassLoader bonitaClassLoader = new PackageClassLoader(packageClassData.getClasses()); packageClassLoaders.put(packageUUID, bonitaClassLoader); } final ClassLoader classLoader = packageClassLoaders.get(packageUUID); try { final Class< ? > result = load(classLoader, className); if (result != null && result.getClassLoader().equals(classLoader)) { return result; } } catch (final ClassNotFoundException e) { return null; } } return null; }
public void removeClass(final String className) throws DeploymentException { FacadeUtil.checkArgsNotNull(className); final Repository repository = EnvTool.getRepository(); if (repository.getGlobalClassData(className) == null) { throw new DeploymentException("There is no class defined in global class repository with name: ", className); } // check that no process is still using this class final Set<PackageDependency> packageDependencies = repository.getPackageDependencies(className); if (packageDependencies != null && !packageDependencies.isEmpty()) { for (final PackageDependency packageDependency : packageDependencies) { final PackageClassData data = repository.getPackageClassData(packageDependency.getPackageDefinitionUUID()); if (data == null || !data.getClasses().containsKey(className)) { throw new DeploymentException("Package is still using global class. " + "Cannot undeploy class.", className, packageDependency.getPackageDefinitionUUID()); } } } repository.removeGlobalClassData(className); ClassDataLoader.removeGlobalClassLoader(className); }
public void removePackageClassData(PackageClassData packageCD) { PackageDefinitionUUID packageUUIDUUID = packageCD.getPackageUUID(); removedPackageClassDatas.put(packageUUIDUUID, packageCD); packageClassDatas.remove(packageUUIDUUID); } public boolean isPackageClassDataRemoved(PackageDefinitionUUID packageUUID) {