From 35679f0dcff04f16590d64c0c3dd2b1950831210 Mon Sep 17 00:00:00 2001 From: Decebal Suiu Date: Wed, 6 Dec 2017 19:26:51 +0200 Subject: [PATCH 1/4] handle Scope annotation on extension class --- .../java/org/pf4j/demo/WhazzupGreeting.java | 2 ++ demo/app/src/main/resources/log4j.properties | 2 +- .../java/org/pf4j/demo/hello/HelloPlugin.java | 6 ++++++ .../org/pf4j/spring/ExtensionsInjector.java | 20 +++++++++++++++++-- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java b/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java index c742127..bc5a85a 100644 --- a/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java +++ b/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java @@ -17,11 +17,13 @@ import org.pf4j.Extension; import org.pf4j.demo.api.Greeting; +import org.springframework.context.annotation.Scope; /** * @author Decebal Suiu */ @Extension +@Scope("prototype") public class WhazzupGreeting implements Greeting { @Override diff --git a/demo/app/src/main/resources/log4j.properties b/demo/app/src/main/resources/log4j.properties index f42e226..b7b7039 100644 --- a/demo/app/src/main/resources/log4j.properties +++ b/demo/app/src/main/resources/log4j.properties @@ -1,4 +1,4 @@ -log4j.rootLogger=DEBUG, Console +log4j.rootLogger=WARN, Console # # PF4J log diff --git a/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java b/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java index 05d5030..944f38d 100644 --- a/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java +++ b/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java @@ -15,6 +15,7 @@ */ package org.pf4j.demo.hello; +import org.pf4j.spring.SpringPluginManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -48,6 +49,11 @@ public void stop() { @Override protected ApplicationContext createApplicationContext() { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(); + /* + // set the parent context (to access beans from application) + SpringPluginManager pluginManager = (SpringPluginManager) getWrapper().getPluginManager(); + applicationContext.setParent(pluginManager.getApplicationContext()); + */ applicationContext.setClassLoader(getWrapper().getPluginClassLoader()); applicationContext.register(SpringConfiguration.class); applicationContext.refresh(); diff --git a/pf4j-spring/src/main/java/org/pf4j/spring/ExtensionsInjector.java b/pf4j-spring/src/main/java/org/pf4j/spring/ExtensionsInjector.java index 7cf5ab9..4a07530 100644 --- a/pf4j-spring/src/main/java/org/pf4j/spring/ExtensionsInjector.java +++ b/pf4j-spring/src/main/java/org/pf4j/spring/ExtensionsInjector.java @@ -19,7 +19,11 @@ import org.pf4j.PluginWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.annotation.Scope; import java.util.List; import java.util.Set; @@ -77,8 +81,20 @@ public void injectExtensions() { * 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); + String beanName = extensionClass.getName(); + + if (extensionClass.isAnnotationPresent(Scope.class)) { + String scope = extensionClass.getAnnotation(Scope.class).value(); + log.info("Registering {} with scope: {}", beanName, scope); + BeanDefinitionBuilder definitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(extensionClass); + definitionBuilder.setScope(scope); + BeanDefinition definition = definitionBuilder.getBeanDefinition(); + ((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(beanName, definition); + } else { + log.info("Registering {} as singleton", beanName); + Object extension = pluginManager.getExtensionFactory().create(extensionClass); + beanFactory.registerSingleton(extension.getClass().getName(), extension); + } } } From 5710e424f2b024c82aa378ee83444303f211e22f Mon Sep 17 00:00:00 2001 From: Decebal Suiu Date: Fri, 8 Dec 2017 19:44:38 +0200 Subject: [PATCH 2/4] [maven-release-plugin] prepare release release-0.4.0 --- demo/api/pom.xml | 4 ++-- demo/app/pom.xml | 4 ++-- demo/plugins/plugin1/pom.xml | 4 ++-- demo/plugins/plugin2/pom.xml | 4 ++-- demo/plugins/pom.xml | 4 ++-- demo/pom.xml | 4 ++-- pf4j-spring/pom.xml | 4 ++-- pom.xml | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/demo/api/pom.xml b/demo/api/pom.xml index 57d0b31..a222b48 100644 --- a/demo/api/pom.xml +++ b/demo/api/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-parent - 0.4.0-SNAPSHOT + 0.4.0 4.0.0 pf4j-spring-demo-api - 0.4.0-SNAPSHOT + 0.4.0 jar Demo Api diff --git a/demo/app/pom.xml b/demo/app/pom.xml index b4610ec..757032f 100644 --- a/demo/app/pom.xml +++ b/demo/app/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-parent - 0.4.0-SNAPSHOT + 0.4.0 4.0.0 pf4j-spring-demo-app - 0.4.0-SNAPSHOT + 0.4.0 jar Demo App diff --git a/demo/plugins/plugin1/pom.xml b/demo/plugins/plugin1/pom.xml index 080ab26..d8350b2 100644 --- a/demo/plugins/plugin1/pom.xml +++ b/demo/plugins/plugin1/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-plugins - 0.4.0-SNAPSHOT + 0.4.0 4.0.0 pf4j-spring-demo-plugin1 - 0.4.0-SNAPSHOT + 0.4.0 jar Demo Plugin #1 diff --git a/demo/plugins/plugin2/pom.xml b/demo/plugins/plugin2/pom.xml index a623434..5314b75 100644 --- a/demo/plugins/plugin2/pom.xml +++ b/demo/plugins/plugin2/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-plugins - 0.4.0-SNAPSHOT + 0.4.0 4.0.0 pf4j-spring-demo-plugin2 - 0.4.0-SNAPSHOT + 0.4.0 jar Demo Plugin #2 diff --git a/demo/plugins/pom.xml b/demo/plugins/pom.xml index ebd8550..593ccd8 100644 --- a/demo/plugins/pom.xml +++ b/demo/plugins/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-parent - 0.4.0-SNAPSHOT + 0.4.0 4.0.0 pf4j-spring-demo-plugins - 0.4.0-SNAPSHOT + 0.4.0 pom Demo Plugins Parent diff --git a/demo/pom.xml b/demo/pom.xml index 1d78c8d..1f9bc07 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -4,13 +4,13 @@ org.pf4j pf4j-spring-parent - 0.4.0-SNAPSHOT + 0.4.0 4.0.0 org.pf4j.demo pf4j-spring-demo-parent - 0.4.0-SNAPSHOT + 0.4.0 pom Demo Parent diff --git a/pf4j-spring/pom.xml b/pf4j-spring/pom.xml index 02c7c7d..b8c4309 100644 --- a/pf4j-spring/pom.xml +++ b/pf4j-spring/pom.xml @@ -4,12 +4,12 @@ org.pf4j pf4j-spring-parent - 0.4.0-SNAPSHOT + 0.4.0 4.0.0 pf4j-spring - 0.4.0-SNAPSHOT + 0.4.0 PF4J-Spring Parent PF4J-Spring Integration diff --git a/pom.xml b/pom.xml index 286cb8a..f22f085 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ 4.0.0 org.pf4j pf4j-spring-parent - 0.4.0-SNAPSHOT + 0.4.0 pom PF4J-Spring Parent PF4J-Spring Integration @@ -27,7 +27,7 @@ scm:git:https://github.com/decebals/pf4j-spring.git scm:git:https://github.com/decebals/pf4j-spring.git git@github.com/decebals/pf4j-spring.git - HEAD + release-0.4.0 From 59acc22a797237fc401659c1ffaa33180fed0301 Mon Sep 17 00:00:00 2001 From: Decebal Suiu Date: Fri, 8 Dec 2017 19:45:19 +0200 Subject: [PATCH 3/4] [maven-release-plugin] prepare for next development iteration --- demo/api/pom.xml | 4 ++-- demo/app/pom.xml | 4 ++-- demo/plugins/plugin1/pom.xml | 4 ++-- demo/plugins/plugin2/pom.xml | 4 ++-- demo/plugins/pom.xml | 4 ++-- demo/pom.xml | 4 ++-- pf4j-spring/pom.xml | 4 ++-- pom.xml | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/demo/api/pom.xml b/demo/api/pom.xml index a222b48..a734be0 100644 --- a/demo/api/pom.xml +++ b/demo/api/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-parent - 0.4.0 + 0.5.0-SNAPSHOT 4.0.0 pf4j-spring-demo-api - 0.4.0 + 0.5.0-SNAPSHOT jar Demo Api diff --git a/demo/app/pom.xml b/demo/app/pom.xml index 757032f..ca4c7a5 100644 --- a/demo/app/pom.xml +++ b/demo/app/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-parent - 0.4.0 + 0.5.0-SNAPSHOT 4.0.0 pf4j-spring-demo-app - 0.4.0 + 0.5.0-SNAPSHOT jar Demo App diff --git a/demo/plugins/plugin1/pom.xml b/demo/plugins/plugin1/pom.xml index d8350b2..398f3f7 100644 --- a/demo/plugins/plugin1/pom.xml +++ b/demo/plugins/plugin1/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-plugins - 0.4.0 + 0.5.0-SNAPSHOT 4.0.0 pf4j-spring-demo-plugin1 - 0.4.0 + 0.5.0-SNAPSHOT jar Demo Plugin #1 diff --git a/demo/plugins/plugin2/pom.xml b/demo/plugins/plugin2/pom.xml index 5314b75..39719b3 100644 --- a/demo/plugins/plugin2/pom.xml +++ b/demo/plugins/plugin2/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-plugins - 0.4.0 + 0.5.0-SNAPSHOT 4.0.0 pf4j-spring-demo-plugin2 - 0.4.0 + 0.5.0-SNAPSHOT jar Demo Plugin #2 diff --git a/demo/plugins/pom.xml b/demo/plugins/pom.xml index 593ccd8..410e983 100644 --- a/demo/plugins/pom.xml +++ b/demo/plugins/pom.xml @@ -4,12 +4,12 @@ org.pf4j.demo pf4j-spring-demo-parent - 0.4.0 + 0.5.0-SNAPSHOT 4.0.0 pf4j-spring-demo-plugins - 0.4.0 + 0.5.0-SNAPSHOT pom Demo Plugins Parent diff --git a/demo/pom.xml b/demo/pom.xml index 1f9bc07..320d36e 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -4,13 +4,13 @@ org.pf4j pf4j-spring-parent - 0.4.0 + 0.5.0-SNAPSHOT 4.0.0 org.pf4j.demo pf4j-spring-demo-parent - 0.4.0 + 0.5.0-SNAPSHOT pom Demo Parent diff --git a/pf4j-spring/pom.xml b/pf4j-spring/pom.xml index b8c4309..3acb067 100644 --- a/pf4j-spring/pom.xml +++ b/pf4j-spring/pom.xml @@ -4,12 +4,12 @@ org.pf4j pf4j-spring-parent - 0.4.0 + 0.5.0-SNAPSHOT 4.0.0 pf4j-spring - 0.4.0 + 0.5.0-SNAPSHOT PF4J-Spring Parent PF4J-Spring Integration diff --git a/pom.xml b/pom.xml index f22f085..87659ee 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ 4.0.0 org.pf4j pf4j-spring-parent - 0.4.0 + 0.5.0-SNAPSHOT pom PF4J-Spring Parent PF4J-Spring Integration @@ -27,7 +27,7 @@ scm:git:https://github.com/decebals/pf4j-spring.git scm:git:https://github.com/decebals/pf4j-spring.git git@github.com/decebals/pf4j-spring.git - release-0.4.0 + HEAD From f74c67815a42b1535dda22ff31450311f4df2ea1 Mon Sep 17 00:00:00 2001 From: Decebal Suiu Date: Fri, 8 Dec 2017 21:07:56 +0200 Subject: [PATCH 4/4] Update readme --- README.md | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 19fea7c..7803cc5 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Components - **ExtensionsInjector** allows PF4J's extensions to be expose as Spring beans. - **SpringPlugin** your plugin extends this class if your plugin contains Spring beans - **SpringExtensionFactory** use this ExtensionFactory in your PluginManager if you have SpringPlugins +- **SpringPluginManager** a Spring aware PluginManager Using Maven ------------------- @@ -52,29 +53,12 @@ Create the Spring configuration (declare some beans) using annotations with: public class SpringConfiguration { @Bean - public PluginManager pluginManager() { - PluginManager pluginManager = new DefaultPluginManager() { - - @Override - protected ExtensionFactory createExtensionFactory() { - return new SpringExtensionFactory(this); - } - - }; - pluginManager.loadPlugins(); - - // start (active/resolved) the plugins - pluginManager.startPlugins(); - - return pluginManager; - } - - @Bean - public static ExtensionsInjector extensionsInjector() { - return new ExtensionsInjector(pluginManager()); + public SpringPluginManager pluginManager() { + return new SpringPluginManager(); } @Bean + @DependsOn("pluginManager") public Greetings greetings() { return new Greetings(); }