@Override public void run() { try { doShutdown(); } finally { shutdownComplete.countDown(); } } }
@Override @SuppressWarnings("unchecked") public <A> A adapt(Class<A> type) { A result = super.adapt(type); if (result == null) { if (type.isAssignableFrom(RuntimeServicesManager.class)) { result = (A) serviceManager; } else if (type.isAssignableFrom(RuntimeStorageHandler.class)) { result = (A) storageHandler; } } return result; }
@Override public final Module installModule(ClassLoader classLoader, Dictionary<String, String> headers) throws ModuleException { assertNoShutdown(); return installModule(classLoader, null, headers, null); }
@Override public final Module installModule(ClassLoader classLoader, Resource resource, Dictionary<String, String> headers, Attachable context) throws ModuleException { assertNoShutdown(); context = context != null ? context : new AttachableSupport(); AbstractModule module = createModule(classLoader, resource, headers, context); // Attach the {@link ModuleEntriesProvider} ModuleEntriesProvider entriesProvider = context.getAttachment(AbstractModule.MODULE_ENTRIES_PROVIDER_KEY); entriesProvider = entriesProvider != null ? entriesProvider : getDefaultEntriesProvider(module, context); if (entriesProvider != null) { module.putAttachment(AbstractModule.MODULE_ENTRIES_PROVIDER_KEY, entriesProvider); } if (getModule(module.getIdentity()) != null) throw new ModuleException("Module already installed: " + module); modules.put(module.getModuleId(), module); // #1 The module's state is set to {@code INSTALLED}. module.setState(State.INSTALLED); // #2 A module event of type {@link ModuleEvent#INSTALLED} is fired. runtimeEvents.fireModuleEvent(module, ModuleEvent.INSTALLED); LOGGER.info("Installed: {}", module); return module; }
@Override public final Module getModule(ClassLoader classLoader) { Set<Module> modules = getModules(classLoader); return modules.size() > 0 ? modules.iterator().next() : null; }
@SuppressWarnings("unchecked") public <A> A adapt(Class<A> type) { A result = null; if (type.isAssignableFrom(RuntimeEventsManager.class)) { result = (A) runtimeEvents; } else if (type.isAssignableFrom(ModuleContext.class)) { result = (A) getModuleContext(); } return result; }
protected void assertNoShutdown() { if (shutdown.get()) { throw new IllegalStateException(shutdownComplete() ? "Runtime has been shut down" : "Runtime is shuting down"); } }
@Override public ModuleContext getModuleContext() { Module sysmodule = getModule(0); return sysmodule != null ? sysmodule.getModuleContext() : null; }
@Override public final Set<Module> getModules(ClassLoader classLoader) { Set<Module> result = getModules(); Iterator<Module> iterator = result.iterator(); while(iterator.hasNext()) { Module module = iterator.next(); if (!module.adapt(ClassLoader.class).equals(classLoader)) { iterator.remove(); } } return result; }
@Override protected void doShutdown() { super.doShutdown(); for (ServiceRegistration<?> sreg : systemServices) { sreg.unregister(); } }
@Override public final Module installModule(ClassLoader classLoader, Resource resource, Dictionary<String, String> headers) throws ModuleException { assertNoShutdown(); return installModule(classLoader, resource, headers, null); }
private RuntimeStorageHandler getStorageHandler() { AbstractRuntime runtime = adapt(AbstractRuntime.class); return runtime.adapt(RuntimeStorageHandler.class); } }
@Override public Set<Module> getModules(String symbolicName, VersionRange range) { Set<Module> result = getModules(); Iterator<Module> iterator = result.iterator(); while(iterator.hasNext()) { ResourceIdentity modid = iterator.next().getIdentity(); if (symbolicName != null && !symbolicName.equals(modid.getSymbolicName())) { iterator.remove(); } if (range != null && !range.includes(modid.getVersion())) { iterator.remove(); } } return result; }
@Override public File getDataFile(String filename) { AbstractRuntime runtime = adapt(AbstractRuntime.class); RuntimeStorageHandler storageHandler = runtime.adapt(RuntimeStorageHandler.class); return storageHandler.getDataFile(this, filename); }
protected void doShutdown() { for (Module module : getModules()) { if (!module.getIdentity().equals(systemIdentity)) { module.uninstall(); } } }
private RuntimeEventsManager getEventsManager() { AbstractRuntime runtime = getModule().adapt(AbstractRuntime.class); return runtime.adapt(RuntimeEventsManager.class); } }
private RuntimeServicesManager getServicesManager() { AbstractRuntime runtime = getModule().adapt(AbstractRuntime.class); return runtime.adapt(RuntimeServicesManager.class); }