static void stop(Addon addon) { started.remove(addon.getClassLoader()); }
private Class<?> loadAddonClass(String className) throws ClassNotFoundException { return Class.forName(className, true, addon.getClassLoader()); }
@Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("ExportedInstanceImpl ["); if (requestedType != null) builder.append("requestedType=").append(requestedType).append(", "); if (actualType != null) builder.append("actualType=").append(actualType).append(", "); if (addon.getClassLoader() != null) builder.append("addon.getClassLoader()=").append(addon.getClassLoader()); builder.append("]"); return builder.toString(); }
@Override public URL getResource(String name) { try { return addon.getClassLoader().getResource(name); } catch (Exception e) { throw new ResourceLoadingException(e); } }
@Override public boolean hasService(String clazz) { try { return hasService(Class.forName(clazz, false, addon.getClassLoader())); } catch (ClassNotFoundException e) { return false; } }
@Override public Object call() throws Exception { context = manager.createCreationalContext(requestedBean); Object delegate = manager.getReference(requestedBean, actualType, context); return Proxies.enhance(addon.getClassLoader(), delegate, new ClassLoaderInterceptor(addon.getClassLoader(), delegate)); } };
@Override public boolean hasService(String clazz) { try { Class<?> type = sourceAddon.getClassLoader().loadClass(clazz); return hasService(type); } catch (ClassNotFoundException e) { } return false; }
@SuppressWarnings("unchecked") @Override public <T> ExportedInstance<T> getExportedInstance(String type) { try { Class<T> clazz = (Class<T>) sourceAddon.getClassLoader().loadClass(type); return getExportedInstance(clazz); } catch (ClassNotFoundException e) { } return null; }
static void start(Addon addon, Furnace furnace) { started.put(addon.getClassLoader(), new ContainerEntry(furnace, addon)); }
@Override @SuppressWarnings("unchecked") public <T> Set<ExportedInstance<T>> getExportedInstances(String clazz) { try { return getExportedInstances((Class<T>) Class.forName(clazz, false, addon.getClassLoader())); } catch (ClassNotFoundException e) { return Collections.emptySet(); } }
@Override @SuppressWarnings("unchecked") public <T> ExportedInstance<T> getExportedInstance(String clazz) { try { Class<?> type = Class.forName(clazz, false, addon.getClassLoader()); return getExportedInstance((Class<T>) type); } catch (ClassNotFoundException e) { return null; } }
@SuppressWarnings("unchecked") @Override public <T> Set<ExportedInstance<T>> getExportedInstances(String type) { try { Class<T> clazz = (Class<T>) sourceAddon.getClassLoader().loadClass(type); return getExportedInstances(clazz); } catch (ClassNotFoundException e) { } return null; }
public GraphApiCompositeClassLoaderProvider() { this.furnace = SimpleContainer.getFurnace(GraphApiCompositeClassLoaderProvider.class.getClassLoader()); for (Addon addon : this.furnace.getAddonRegistry().getAddons()) { if (addon.getClassLoader() != null && addon.getClassLoader().equals(GraphApiCompositeClassLoaderProvider.class.getClassLoader())) { this.addon = addon; break; } } }
public GraphApiCompositeClassLoaderProvider() { this.furnace = SimpleContainer.getFurnace(GraphApiCompositeClassLoaderProvider.class.getClassLoader()); for (Addon addon : this.furnace.getAddonRegistry().getAddons()) { if (addon.getClassLoader() != null && addon.getClassLoader().equals(GraphApiCompositeClassLoaderProvider.class.getClassLoader())) { this.addon = addon; break; } } }
/** * Ensures that the returned class is loaded from the {@link Addon} */ @SuppressWarnings("unchecked") private <T> Class<T> loadAddonClass(Class<T> actualType) throws ClassNotFoundException { final Class<T> type; if (actualType.getClassLoader() == addon.getClassLoader()) { type = actualType; } else { type = (Class<T>) loadAddonClass(actualType.getName()); } return type; }
@Override public Object call() throws Exception { Bean<R> bean = (Bean<R>) manager.resolve(manager.getBeans(actualType, ServiceRegistryImpl.getQualifiersFrom(actualType))); context = manager.createCreationalContext(bean); Object delegate = manager.getInjectableReference(injectionPoint, context); return Proxies.enhance(addon.getClassLoader(), delegate, new ClassLoaderInterceptor(addon.getClassLoader(), delegate)); } };
@Override public T get() { T delegate = null; try { delegate = type.newInstance(); delegate = Proxies.enhance(addon.getClassLoader(), delegate, new ClassLoaderInterceptor(addon.getClassLoader(), delegate)); } catch (Exception e) { throw new ContainerException("Could not create instance of [" + type.getName() + "] through reflection.", e); } return delegate; }
private T newInstance() { try { T delegate = producer.newInstance().get(); delegate = Proxies.enhance(addon.getClassLoader(), delegate, new ClassLoaderInterceptor(addon.getClassLoader(), delegate)); return delegate; } catch (Exception e) { throw new ContainerException("Could not create instance of [" + type.getName() + "] through reflection.", e); } }
@Override public void start(Addon addon) throws Exception { Set<Module> modules = new LinkedHashSet<>(); modules.add(new GuiceContainerModule(furnace, addonRegistry, addon)); modules.add(binder -> binder.bindListener(Matchers.any(), new ServiceTypeListener(addonRegistry))); for (Module addonModule : ServiceLoader.load(Module.class, addon.getClassLoader())) { modules.add(addonModule); } this.injector = Guice.createInjector(Stage.PRODUCTION, modules); this.serviceRegistry = new GuiceServiceRegistry(addon, injector); this.eventManager = new GuiceEventManager(serviceRegistry); }
@Override public URL call() throws Exception { URL result = null; for (Addon addon : furnace.getAddonRegistry().getAddons(AddonFilters.allLoaded())) { URL url = addon.getClassLoader().getResource(name); if (url != null) { result = url; break; } } return result; } });