/** * Creates a new child {@link ModulesRegistryImpl} in this {@link ModulesRegistryImpl}. */ public ModulesRegistry createChild() { return new ModulesRegistryImpl(this); }
/** * fires a ModuleChange event to all listeners */ protected void fireChangeEvent() { ArrayList<ModuleChangeListener> list = new ArrayList<ModuleChangeListener>(listeners); for (ModuleChangeListener listener : list) { listener.changed(this); } // registry listens by default registry.changed(this); }
@Override public Module find(Class clazz) { Module m = super.find(clazz); if (m == null) return proxyMod[0]; return m; }
/** * Creates and return a new private module implementation giving a name and * version constraints. A private module is like any other module except * it is not registered to be shared by other potential module users. * * @param moduleName the module name * @param version the desired version * @return the new private module or null if cannot be found * @throws com.sun.enterprise.module.ResolveError if the module dependencies cannot be resolved */ /*package*/ ModuleImpl newPrivateModuleFor(String moduleName, String version) { if(parent!=null) { ModuleImpl m = ModulesRegistryImpl.class.cast(parent).newPrivateModuleFor(moduleName,version); if(m!=null) return m; } ModuleId id = AbstractFactory.getInstance().createModuleId(moduleName, version); Module module = modules.get(id); if (module!=null) { ModuleImpl privateModule = (ModuleImpl)newModule(module.getModuleDefinition()); privateModule.resolve(); return privateModule; } return (ModuleImpl)loadFromRepository(moduleName, version); }
/** * Create and add a new module to this module's list of * imports. * @param dependency new module's definition */ public Module addImport(ModuleDependency dependency) { ModuleImpl newModule; if (dependency.isShared()) { newModule = (ModuleImpl)registry.makeModuleFor(dependency.getName(), dependency.getVersion()); } else { newModule = registry.newPrivateModuleFor(dependency.getName(), dependency.getVersion()); } addImport(newModule); return newModule; }
parent = getParentClassLoader(); Module module = this.makeModuleFor(def.getName(), def.getVersion()); cl.addDelegate(module.getClassLoader());
ModuleImpl depModule = (ModuleImpl)registry.makeModuleFor(dependency.getName(), dependency.getVersion()); if (depModule==null) { state = ModuleState.ERROR; for (ModuleLifecycleListener l : registry.getLifecycleListeners()) { l.moduleResolved(this);
protected Module newModule(ModuleDefinition moduleDef) { Module m = new ModuleImpl(this, moduleDef); for (ModuleLifecycleListener l : getLifecycleListeners()) { l.moduleInstalled(m); } return m; }
protected Class<?> findClass(String name) throws ClassNotFoundException { try { return super.findClass(name); } catch (ClassNotFoundException e) { // punch in. find the provider class, no matter where we are. ModuleImpl m = module.getRegistry().getProvidingModule(name); if(m!=null) return m.getPrivateClassLoader().loadClass(name); throw e; } }
public ModuleClassLoader run() { return new ModuleClassLoader( ModuleImpl.this, urls, registry.getParentClassLoader()); } });
/** * Shuts down this module's registry, apply housekeeping tasks * */ public void shutdown() { detachAll(); for (Repository repo : repositories.values()) { try { repo.shutdown(); } catch(Exception e) { Logger.getAnonymousLogger().log(Level.SEVERE, "Error while closing repository " + repo, e); // swallows } } }
/** * Returns a ClassLoader capable of loading classes from a set of modules identified * by their module definition * * @param parent the parent class loader for the returned class loader instance * @param defs module definitions for all modules this classloader should be * capable of loading classes from * @return class loader instance * @throws com.sun.enterprise.module.ResolveError if one of the provided module * definition cannot be resolved */ public ClassLoader getModulesClassLoader(ClassLoader parent, Collection<ModuleDefinition> defs) throws ResolveError { return getModulesClassLoader(parent, defs, null); }
/** * Creates and return a new private module implementation giving a name and * version constraints. A private module is like any other module except * it is not registered to be shared by other potential module users. * * @param moduleName the module name * @param version the desired version * @return the new private module or null if cannot be found * @throws com.sun.enterprise.module.ResolveError if the module dependencies cannot be resolved */ /*package*/ ModuleImpl newPrivateModuleFor(String moduleName, String version) { if(parent!=null) { ModuleImpl m = ModulesRegistryImpl.class.cast(parent).newPrivateModuleFor(moduleName,version); if(m!=null) return m; } ModuleId id = AbstractFactory.getInstance().createModuleId(moduleName, version); Module module = modules.get(id); if (module!=null) { ModuleImpl privateModule = (ModuleImpl)newModule(module.getModuleDefinition()); privateModule.resolve(); return privateModule; } return (ModuleImpl)loadFromRepository(moduleName, version); }
/** * Create and add a new module to this module's list of * imports. * @param dependency new module's definition */ public Module addImport(ModuleDependency dependency) { ModuleImpl newModule; if (dependency.isShared()) { newModule = (ModuleImpl)registry.makeModuleFor(dependency.getName(), dependency.getVersion()); } else { newModule = registry.newPrivateModuleFor(dependency.getName(), dependency.getVersion()); } addImport(newModule); return newModule; }
parent = getParentClassLoader(); Module module = this.makeModuleFor(def.getName(), def.getVersion()); cl.addDelegate(module.getClassLoader());
ModuleImpl depModule = (ModuleImpl)registry.makeModuleFor(dependency.getName(), dependency.getVersion()); if (depModule==null) { state = ModuleState.ERROR; for (ModuleLifecycleListener l : registry.getLifecycleListeners()) { l.moduleResolved(this);
protected Module newModule(ModuleDefinition moduleDef) { Module m = new ModuleImpl(this, moduleDef); for (ModuleLifecycleListener l : getLifecycleListeners()) { l.moduleInstalled(m); } return m; }
public URL getResource(String name) { initialize(name); if(name.startsWith(META_INF_SERVICES)) { // punch in. find the service loader from any module String serviceName = name.substring(META_INF_SERVICES.length()); ModulesRegistry reg = module.getRegistry(); for( Module m : reg.getModules() ) { List<URL> list = m.getMetadata().getDescriptors(serviceName); if(!list.isEmpty()) return list.get(0); } // no such resource return super.getResource(name); } else { // normal service look up URL url = super.getResource(name); if(url!=null) return url; // commons-logging looks for a class file resource for providers, // so check for those if(name.endsWith(".class")) { String className = name.replace('/', '.').substring(0, name.length() - 6); ModuleImpl m = module.getRegistry().getProvidingModule(className); if(m!=null) return m.getPrivateClassLoader().getResource(name); } return null; } }
public ModuleClassLoader run() { return new ModuleClassLoader( ModuleImpl.this, urls, registry.getParentClassLoader()); } });
/** * Shuts down this module's registry, apply housekeeping tasks * */ public void shutdown() { detachAll(); for (Repository repo : repositories.values()) { try { repo.shutdown(); } catch(Exception e) { Logger.getAnonymousLogger().log(Level.SEVERE, "Error while closing repository " + repo, e); // swallows } } }