private ExtensionWrapper createExtensionWrapper(Class<?> extensionClass) { int ordinal = 0; if (extensionClass.isAnnotationPresent(Extension.class)) { ordinal = extensionClass.getAnnotation(Extension.class).ordinal(); } ExtensionDescriptor descriptor = new ExtensionDescriptor(ordinal, extensionClass); return new ExtensionWrapper<>(descriptor, pluginManager.getExtensionFactory()); }
PluginWrapper pluginWrapper = pluginManager.getPlugin(pluginId); if (PluginState.STARTED != pluginWrapper.getPluginState()) { return result; ClassLoader classLoader = (pluginId != null) ? pluginManager.getPluginClassLoader(pluginId) : getClass().getClassLoader(); PluginWrapper requiredPlugin = pluginManager.getPlugin(requiredPluginId); if (requiredPlugin == null || !PluginState.STARTED.equals(requiredPlugin.getPluginState())) { missingPluginIds.add(requiredPluginId); } else { log.trace("'{}' is not an extension for extension point '{}'", className, type.getName()); if (RuntimeMode.DEVELOPMENT.equals(pluginManager.getRuntimeMode())) { checkDifferentClassLoaders(type, extensionClass);
@Override public Map<String, Set<String>> readPluginsStorages() { log.debug("Reading extensions storages from plugins"); Map<String, Set<String>> result = new LinkedHashMap<>(); List<PluginWrapper> plugins = pluginManager.getPlugins(); for (PluginWrapper plugin : plugins) { String pluginId = plugin.getDescriptor().getPluginId(); log.debug("Reading extensions storages for plugin '{}'", pluginId); final Set<String> bucket = new HashSet<>(); try { Enumeration<URL> urls = ((PluginClassLoader) plugin.getPluginClassLoader()).findResources(getExtensionsResource()); if (urls.hasMoreElements()) { collectExtensions(urls, bucket); } else { log.debug("Cannot find '{}'", getExtensionsResource()); } debugExtensions(bucket); result.put(pluginId, bucket); } catch (IOException | URISyntaxException e) { log.error(e.getMessage(), e); } } return result; }
PluginWrapper pluginWrapper = pluginManager.getPlugin(pluginId); if (PluginState.STARTED != pluginWrapper.getPluginState()) { return result; ClassLoader classLoader = (pluginId != null) ? pluginManager.getPluginClassLoader(pluginId) : getClass().getClassLoader();
pluginManager.loadPlugins(); List<PluginWrapper> resolvedPlugins = pluginManager.getResolvedPlugins(); for (PluginWrapper plugin : resolvedPlugins) { if (plugin.getPlugin() instanceof WicketPlugin) { pluginManager.startPlugins(); List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins(); for (PluginWrapper plugin : startedPlugins) { classResolver.add(new PluginClassResolver(plugin));
@Override public void destroy(Application application) { List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins(); Collections.reverse(startedPlugins); // stop plugins pluginManager.stopPlugins(); // destroy started plugins in reverse order for (PluginWrapper plugin : startedPlugins) { if (plugin.getPlugin() instanceof WicketPlugin) { ((WicketPlugin) plugin.getPlugin()).destroy(application); } } }
public void injectExtensions() { // add extensions from classpath (non plugin) Set<String> extensionClassNames = pluginManager.getExtensionClassNames(null); for (String extensionClassName : extensionClassNames) { try { log.debug("Register extension '{}' as bean", extensionClassName); Class<?> extensionClass = getClass().getClassLoader().loadClass(extensionClassName); registerExtension(extensionClass); } catch (ClassNotFoundException e) { log.error(e.getMessage(), e); } } // add extensions for each started plugin List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins(); for (PluginWrapper plugin : startedPlugins) { log.debug("Registering extensions of the plugin '{}' as beans", plugin.getPluginId()); extensionClassNames = pluginManager.getExtensionClassNames(plugin.getPluginId()); for (String extensionClassName : extensionClassNames) { try { log.debug("Register extension '{}' as bean", extensionClassName); Class<?> extensionClass = plugin.getPluginClassLoader().loadClass(extensionClassName); registerExtension(extensionClass); } catch (ClassNotFoundException e) { log.error(e.getMessage(), e); } } } }
private Class<?> loadClassFromDependencies(String className) { log.trace("Search in dependencies for class '{}'", className); List<PluginDependency> dependencies = pluginDescriptor.getDependencies(); for (PluginDependency dependency : dependencies) { ClassLoader classLoader = pluginManager.getPluginClassLoader(dependency.getPluginId()); // If the dependency is marked as optional, its class loader might not be available. if (classLoader == null && dependency.isOptional()) { continue; } try { return classLoader.loadClass(className); } catch (ClassNotFoundException e) { // try next dependency } } return null; }
@Override public Object getFieldValue(Field field, Object fieldOwner) { if (field.isAnnotationPresent(Inject.class)) { // field.getType().getName() must be java.util.List // System.out.println(">>>> " + field.getType().getName()); ParameterizedType parameterizedType = (ParameterizedType) field.getGenericType(); Class<?> type = (Class<?>) parameterizedType.getActualTypeArguments()[0]; return pluginManager.getExtensions(type) ; } return null; }
PluginWrapper pluginWrapper = pluginManager.getPlugin(pluginId); if (PluginState.STARTED != pluginWrapper.getPluginState()) { return result; ClassLoader classLoader = (pluginId != null) ? pluginManager.getPluginClassLoader(pluginId) : getClass().getClassLoader();
private Class<?> loadClassFromDependencies(String className) { log.trace("Search in dependencies for class '{}'", className); List<PluginDependency> dependencies = pluginDescriptor.getDependencies(); for (PluginDependency dependency : dependencies) { ClassLoader classLoader = pluginManager.getPluginClassLoader(dependency.getPluginId()); // If the dependency is marked as optional, its class loader might not be available. if (classLoader == null && dependency.isOptional()) { continue; } try { return classLoader.loadClass(className); } catch (ClassNotFoundException e) { // try next dependency } } return null; }
PluginWrapper pluginWrapper = pluginManager.getPlugin(pluginId); if (PluginState.STARTED != pluginWrapper.getPluginState()) { return result; ClassLoader classLoader = (pluginId != null) ? pluginManager.getPluginClassLoader(pluginId) : getClass().getClassLoader(); PluginWrapper requiredPlugin = pluginManager.getPlugin(requiredPluginId); if (requiredPlugin == null || !PluginState.STARTED.equals(requiredPlugin.getPluginState())) { missingPluginIds.add(requiredPluginId); } else { log.trace("'{}' is not an extension for extension point '{}'", className, type.getName()); if (RuntimeMode.DEVELOPMENT.equals(pluginManager.getRuntimeMode())) { checkDifferentClassLoaders(type, extensionClass);
/** * Register an extension as bean. * Current implementation register extension as singleton using {@code beanFactory.registerSingleton()}. * The extension instance is created using {@code pluginManager.getExtensionFactory().create(extensionClass)}. * The bean name is the extension class name. * Override this method if you wish other register strategy. */ protected void registerExtension(Class<?> extensionClass) { Object extension = pluginManager.getExtensionFactory().create(extensionClass); beanFactory.registerSingleton(extension.getClass().getName(), extension); }
@Override public Map<String, Set<String>> readPluginsStorages() { log.debug("Reading extensions storages from plugins"); Map<String, Set<String>> result = new LinkedHashMap<>(); List<PluginWrapper> plugins = pluginManager.getPlugins(); for (PluginWrapper plugin : plugins) { String pluginId = plugin.getDescriptor().getPluginId(); log.debug("Reading extensions storage from plugin '{}'", pluginId); Set<String> bucket = new HashSet<>(); try { Enumeration<URL> urls = ((PluginClassLoader) plugin.getPluginClassLoader()).findResources(getExtensionsResource()); if (urls.hasMoreElements()) { collectExtensions(urls, bucket); } else { log.debug("Cannot find '{}'", getExtensionsResource()); } debugExtensions(bucket); result.put(pluginId, bucket); } catch (IOException e) { log.error(e.getMessage(), e); } } return result; }
private ExtensionWrapper createExtensionWrapper(Class<?> extensionClass) { int ordinal = 0; if (extensionClass.isAnnotationPresent(Extension.class)) { ordinal = extensionClass.getAnnotation(Extension.class).ordinal(); } ExtensionDescriptor descriptor = new ExtensionDescriptor(ordinal, extensionClass); return new ExtensionWrapper<>(descriptor, pluginManager.getExtensionFactory()); }
@Override public Map<String, Set<String>> readPluginsStorages() { log.debug("Reading extensions storages from plugins"); Map<String, Set<String>> result = new LinkedHashMap<>(); List<PluginWrapper> plugins = pluginManager.getPlugins(); for (PluginWrapper plugin : plugins) { String pluginId = plugin.getDescriptor().getPluginId(); log.debug("Reading extensions storages for plugin '{}'", pluginId); final Set<String> bucket = new HashSet<>(); try { Enumeration<URL> urls = ((PluginClassLoader) plugin.getPluginClassLoader()).findResources(getExtensionsResource()); if (urls.hasMoreElements()) { collectExtensions(urls, bucket); } else { log.debug("Cannot find '{}'", getExtensionsResource()); } debugExtensions(bucket); result.put(pluginId, bucket); } catch (IOException | URISyntaxException e) { log.error(e.getMessage(), e); } } return result; }
@Override public Map<String, Set<String>> readPluginsStorages() { log.debug("Reading extensions storages from plugins"); Map<String, Set<String>> result = new LinkedHashMap<>(); List<PluginWrapper> plugins = pluginManager.getPlugins(); for (PluginWrapper plugin : plugins) { String pluginId = plugin.getDescriptor().getPluginId(); log.debug("Reading extensions storage from plugin '{}'", pluginId); Set<String> bucket = new HashSet<>(); try { Enumeration<URL> urls = ((PluginClassLoader) plugin.getPluginClassLoader()).findResources(getExtensionsResource()); if (urls.hasMoreElements()) { collectExtensions(urls, bucket); } else { log.debug("Cannot find '{}'", getExtensionsResource()); } debugExtensions(bucket); result.put(pluginId, bucket); } catch (IOException e) { log.error(e.getMessage(), e); } } return result; }