Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle Scope annotation on extension class #6

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 4 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
-------------------
Expand Down Expand Up @@ -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();
}
Expand Down
4 changes: 2 additions & 2 deletions demo/api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
<parent>
<groupId>org.pf4j.demo</groupId>
<artifactId>pf4j-spring-demo-parent</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>pf4j-spring-demo-api</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Demo Api</name>

Expand Down
4 changes: 2 additions & 2 deletions demo/app/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
<parent>
<groupId>org.pf4j.demo</groupId>
<artifactId>pf4j-spring-demo-parent</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>pf4j-spring-demo-app</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Demo App</name>

Expand Down
2 changes: 2 additions & 0 deletions demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion demo/app/src/main/resources/log4j.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
log4j.rootLogger=DEBUG, Console
log4j.rootLogger=WARN, Console

#
# PF4J log
Expand Down
4 changes: 2 additions & 2 deletions demo/plugins/plugin1/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
<parent>
<groupId>org.pf4j.demo</groupId>
<artifactId>pf4j-spring-demo-plugins</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>pf4j-spring-demo-plugin1</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Demo Plugin #1</name>

Expand Down
4 changes: 2 additions & 2 deletions demo/plugins/plugin2/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
<parent>
<groupId>org.pf4j.demo</groupId>
<artifactId>pf4j-spring-demo-plugins</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>pf4j-spring-demo-plugin2</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Demo Plugin #2</name>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand Down
4 changes: 2 additions & 2 deletions demo/plugins/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
<parent>
<groupId>org.pf4j.demo</groupId>
<artifactId>pf4j-spring-demo-parent</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>pf4j-spring-demo-plugins</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Demo Plugins Parent</name>

Expand Down
4 changes: 2 additions & 2 deletions demo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
<parent>
<groupId>org.pf4j</groupId>
<artifactId>pf4j-spring-parent</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>org.pf4j.demo</groupId>
<artifactId>pf4j-spring-demo-parent</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Demo Parent</name>

Expand Down
4 changes: 2 additions & 2 deletions pf4j-spring/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
<parent>
<groupId>org.pf4j</groupId>
<artifactId>pf4j-spring-parent</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>pf4j-spring</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
<name>PF4J-Spring Parent</name>
<description>PF4J-Spring Integration</description>

Expand Down
20 changes: 18 additions & 2 deletions pf4j-spring/src/main/java/org/pf4j/spring/ExtensionsInjector.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
}

}
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.pf4j</groupId>
<artifactId>pf4j-spring-parent</artifactId>
<version>0.4.0-SNAPSHOT</version>
<version>0.5.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>PF4J-Spring Parent</name>
<description>PF4J-Spring Integration</description>
Expand Down