Repository: naver/ngrinder
Issue: Failed to launch ngrinder 3.4

I've been tried to use ngrinder on ec2 ubuntu 14.04.
I tried 1) war file standalone deployment and 2) deployment with tomcat 7 and both cases failed with same errors. Also, I tried multiple java/tomcat versions and all failed.
Strangely, when I tried it again in another clean digitalocean machine and my local osx with the same environment, it worked.
I guess that anyone can easily reproduce this error because the same thing happens again even on the newly launched ec2 instance.
Please let me know if i'm missing something here.
## Followings are the stack traces

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'NGrinderDefaultExtensionFinder' defined in file [/home/ubuntu/.ngrinder/tmp/webapp/WEB-INF/classes/org/ngrinder/infra/plugin/finder/NGrinderDefaultExtensionFinder.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [ro.fortsoft.pf4j.PluginManager]: Error creating bean with name 'NGrinderDefaultPluginManager': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.ngrinder.infra.plugin.extension.NGrinderDefaultPluginManager.setExtensionFinder(ro.fortsoft.pf4j.ExtensionFinder); nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'NGrinderDefaultExtensionFinder': Requested bean is currently in creation: Is there an unresolvable circular reference?; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'NGrinderDefaultPluginManager': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.ngrinder.infra.plugin.extension.NGrinderDefaultPluginManager.setExtensionFinder(ro.fortsoft.pf4j.ExtensionFinder); nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'NGrinderDefaultExtensionFinder': Requested bean is currently in creation: Is there an unresolvable circular reference?
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
        at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800)
        at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:444)
        at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:791)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:294)
        at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.server.Server.start(Server.java:387)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.Server.doStart(Server.java:354)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.ngrinder.NGrinderControllerStarter.run(NGrinderControllerStarter.java:236)
        at org.ngrinder.NGrinderControllerStarter.main(NGrinderControllerStarter.java:310)
Caused by:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'NGrinderDefaultPluginManager': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.ngrinder.infra.plugin.extension.NGrinderDefaultPluginManager.setExtensionFinder(ro.fortsoft.pf4j.ExtensionFinder); nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'NGrinderDefaultExtensionFinder': Requested bean is currently in creation: Is there an unresolvable circular reference?
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:618)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
        at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800)
        at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:444)
        at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:791)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:294)
        at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.server.Server.start(Server.java:387)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.Server.doStart(Server.java:354)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.ngrinder.NGrinderControllerStarter.run(NGrinderControllerStarter.java:236)
        at org.ngrinder.NGrinderControllerStarter.main(NGrinderControllerStarter.java:310)


Changed files:
ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderSpringExtensionFactory.java
ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/finder/NGrinderDefaultExtensionFinder.java
ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderDefaultPluginManager.java
ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/PluginManager.java

diff --git a/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/PluginManager.java b/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/PluginManager.java
index 09e97e450..0cce37340 100644
--- a/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/PluginManager.java
+++ b/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/PluginManager.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
  *  You may obtain a copy of the License at
@@ -9,21 +9,23 @@
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
- * limitations under the License. 
+ * limitations under the License.
  */
 package org.ngrinder.infra.plugin;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-
 import org.ngrinder.infra.config.Config;
+import org.ngrinder.infra.plugin.extension.NGrinderDefaultPluginManager;
+import org.ngrinder.infra.plugin.extension.NGrinderSpringExtensionFactory;
+import org.ngrinder.infra.plugin.finder.NGrinderDefaultExtensionFinder;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Component;
+import ro.fortsoft.pf4j.spring.SpringExtensionFactory;
 
-import ro.fortsoft.pf4j.DefaultPluginManager;
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Plugin manager which is responsible to initialize the plugin infra.<br/>
@@ -40,9 +42,10 @@ public class PluginManager {
 	@Autowired
 	private Config config;
 
-	@Autowired
-	private DefaultPluginManager manager;
+	private NGrinderDefaultPluginManager manager;
 
+	@Autowired
+	private ApplicationContext applicationContext;
 	/**
 	 * Initialize plugin component.
 	 */
@@ -58,6 +61,9 @@ public class PluginManager {
 	 * Initialize Plugin Framework.
 	 */
 	public void initPluginFramework() {
+		manager = new NGrinderDefaultPluginManager(config, applicationContext);
+		manager.setExtensionFinder(new NGrinderDefaultExtensionFinder(manager));
+		manager.setSpringExtensionFactory(new NGrinderSpringExtensionFactory(manager, applicationContext));
 		manager.loadPlugins();
 		manager.startPlugins();
 	}
diff --git a/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderDefaultPluginManager.java b/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderDefaultPluginManager.java
index f3af53965..ce2c7b73a 100644
--- a/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderDefaultPluginManager.java
+++ b/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderDefaultPluginManager.java
@@ -1,64 +1,60 @@
-package org.ngrinder.infra.plugin.extension;
-
-import java.net.MalformedURLException;
-
-import org.ngrinder.infra.config.Config;
-import org.ngrinder.infra.plugin.finder.NGrinderPluginClasspath;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
-
-import ro.fortsoft.pf4j.DefaultPluginManager;
-import ro.fortsoft.pf4j.DefaultPluginRepository;
-import ro.fortsoft.pf4j.DevelopmentPluginClasspath;
-import ro.fortsoft.pf4j.ExtensionFactory;
-import ro.fortsoft.pf4j.ExtensionFinder;
-import ro.fortsoft.pf4j.PluginClasspath;
-import ro.fortsoft.pf4j.RuntimeMode;
-import ro.fortsoft.pf4j.spring.SpringExtensionFactory;
-import ro.fortsoft.pf4j.util.JarFileFilter;
-
-/**
- * DefaultPluginManager extended class.
- *
- * @author Gisoo Gwon ,GeunWoo Son
- * @see https://github.com/decebals/pf4j
- * @since 3.0
- */
-@Component
-public class NGrinderDefaultPluginManager extends DefaultPluginManager {
-
-	@Autowired
-	public NGrinderDefaultPluginManager(Config config, ApplicationContext applicationContext) throws MalformedURLException {
-		super(config.isClustered() ? config.getExHome().getPluginsCacheDirectory() : config.getHome().getPluginsCacheDirectory());
-		super.pluginRepository = new DefaultPluginRepository(config.getHome().getPluginsDirectory(), new JarFileFilter());
-	}
-
-	@Autowired
-	public void setExtensionFinder(ExtensionFinder extensionFinder) {
-		super.extensionFinder = extensionFinder;
-	}
-
-	@Autowired
-	public void setSpringExtensionFactory(SpringExtensionFactory extensionFactory) {
-		super.extensionFactory = extensionFactory;
-	}
-
-	@Override
-	protected PluginClasspath createPluginClasspath() {
-		return new NGrinderPluginClasspath();
-	}
-
-	@Override
-	protected ExtensionFactory createExtensionFactory() {
-		// Disable the default Factory
-		return null;
-	}
-
-	@Override
-	protected ExtensionFinder createExtensionFinder() {
-		// Disable the default finder
-		return null;
-	}
-
-}
+package org.ngrinder.infra.plugin.extension;
+
+import java.net.MalformedURLException;
+
+import org.ngrinder.infra.config.Config;
+import org.ngrinder.infra.plugin.finder.NGrinderPluginClasspath;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import ro.fortsoft.pf4j.DefaultPluginManager;
+import ro.fortsoft.pf4j.DefaultPluginRepository;
+import ro.fortsoft.pf4j.DevelopmentPluginClasspath;
+import ro.fortsoft.pf4j.ExtensionFactory;
+import ro.fortsoft.pf4j.ExtensionFinder;
+import ro.fortsoft.pf4j.PluginClasspath;
+import ro.fortsoft.pf4j.RuntimeMode;
+import ro.fortsoft.pf4j.spring.SpringExtensionFactory;
+import ro.fortsoft.pf4j.util.JarFileFilter;
+
+/**
+ * DefaultPluginManager extended class.
+ *
+ * @author Gisoo Gwon ,GeunWoo Son
+ * @see https://github.com/decebals/pf4j
+ * @since 3.0
+ */
+public class NGrinderDefaultPluginManager extends DefaultPluginManager {
+
+	public void setExtensionFinder(ExtensionFinder extensionFinder) {
+		super.extensionFinder = extensionFinder;
+	}
+
+	public NGrinderDefaultPluginManager(Config config, ApplicationContext applicationContext)  {
+		super(config.isClustered() ? config.getExHome().getPluginsCacheDirectory() : config.getHome().getPluginsCacheDirectory());
+		super.pluginRepository = new DefaultPluginRepository(config.getHome().getPluginsDirectory(), new JarFileFilter());
+	}
+
+	public void setSpringExtensionFactory(SpringExtensionFactory extensionFactory) {
+		super.extensionFactory = extensionFactory;
+	}
+
+	@Override
+	protected PluginClasspath createPluginClasspath() {
+		return new NGrinderPluginClasspath();
+	}
+
+	@Override
+	protected ExtensionFactory createExtensionFactory() {
+		// Disable the default Factory
+		return null;
+	}
+
+	@Override
+	protected ExtensionFinder createExtensionFinder() {
+		// Disable the default finder
+		return null;
+	}
+
+}
diff --git a/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderSpringExtensionFactory.java b/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderSpringExtensionFactory.java
index 8ddbfd0d7..d15c0c470 100644
--- a/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderSpringExtensionFactory.java
+++ b/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/extension/NGrinderSpringExtensionFactory.java
@@ -1,51 +1,45 @@
-package org.ngrinder.infra.plugin.extension;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
-
-import ro.fortsoft.pf4j.Plugin;
-import ro.fortsoft.pf4j.PluginManager;
-import ro.fortsoft.pf4j.PluginWrapper;
-import ro.fortsoft.pf4j.spring.SpringExtensionFactory;
-import ro.fortsoft.pf4j.spring.SpringPlugin;
-
-/**
- * SpringExtensionFactory extended class.
- * The springframework ApplicationContext injection.
- *
- * @author Gisoo Gwon ,GeunWoo Son
- * @see https://github.com/decebals/pf4j-spring
- * @since 3.0
- */
-@Component
-public class NGrinderSpringExtensionFactory extends SpringExtensionFactory {
-
-	private final PluginManager pluginManager;
-
-	@Autowired
-	private ApplicationContext applicationContext;
-
-	@Autowired
-	public NGrinderSpringExtensionFactory(PluginManager pluginManager) {
-		super(pluginManager);
-		this.pluginManager = pluginManager;
-	}
-
-	protected void setApplicationContext(ApplicationContext applicationContext) {
-		this.applicationContext = applicationContext;
-	}
-
-	@Override
-	public Object create(Class<?> extensionClass) {
-		Object extension = createWithoutSpring(extensionClass);
-		if (extension != null) {
-			PluginWrapper pluginWrapper = pluginManager.whichPlugin(extensionClass);
-			if (pluginWrapper != null) {
-				applicationContext.getAutowireCapableBeanFactory().autowireBean(extension);
-			}
-		}
-		return extension;
-	}
-
-}
+package org.ngrinder.infra.plugin.extension;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import ro.fortsoft.pf4j.Plugin;
+import ro.fortsoft.pf4j.PluginManager;
+import ro.fortsoft.pf4j.PluginWrapper;
+import ro.fortsoft.pf4j.spring.SpringExtensionFactory;
+import ro.fortsoft.pf4j.spring.SpringPlugin;
+
+/**
+ * SpringExtensionFactory extended class.
+ * The springframework ApplicationContext injection.
+ *
+ * @author Gisoo Gwon ,GeunWoo Son
+ * @see https://github.com/decebals/pf4j-spring
+ * @since 3.0
+ */
+public class NGrinderSpringExtensionFactory extends SpringExtensionFactory {
+
+	private final PluginManager pluginManager;
+
+	private ApplicationContext applicationContext;
+
+	public NGrinderSpringExtensionFactory(PluginManager pluginManager, ApplicationContext applicationContext) {
+		super(pluginManager);
+		this.pluginManager = pluginManager;
+		this.applicationContext = applicationContext;
+	}
+
+	@Override
+	public Object create(Class<?> extensionClass) {
+		Object extension = createWithoutSpring(extensionClass);
+		if (extension != null) {
+			PluginWrapper pluginWrapper = pluginManager.whichPlugin(extensionClass);
+			if (pluginWrapper != null) {
+				applicationContext.getAutowireCapableBeanFactory().autowireBean(extension);
+			}
+		}
+		return extension;
+	}
+
+}
diff --git a/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/finder/NGrinderDefaultExtensionFinder.java b/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/finder/NGrinderDefaultExtensionFinder.java
index 0bf22021c..8e1e14d30 100644
--- a/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/finder/NGrinderDefaultExtensionFinder.java
+++ b/ngrinder-controller/src/main/java/org/ngrinder/infra/plugin/finder/NGrinderDefaultExtensionFinder.java
@@ -1,31 +1,40 @@
-package org.ngrinder.infra.plugin.finder;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import ro.fortsoft.pf4j.DefaultExtensionFinder;
-import ro.fortsoft.pf4j.PluginManager;
-
-/**
- * DefaultExtensionFinder extended class.
- * Connect with Finder.
- *
- * @author Gisoo Gwon ,GeunWoo Son
- * @see https://github.com/decebals/pf4j-spring
- * @since 3.0
- */
-@Component
-public class NGrinderDefaultExtensionFinder extends DefaultExtensionFinder{
-
-	@Autowired
-	public NGrinderDefaultExtensionFinder(PluginManager pluginManager) {
-		super(pluginManager);
-		finders.add(new NGrinderServiceProviderExtensionFinder(pluginManager));
-	}
-
-	@Override
-	protected void addDefaults(PluginManager pluginManager) {
-		// Disable the default ProviderExtensionFinder
-	}
-
-}
+package org.ngrinder.infra.plugin.finder;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import ro.fortsoft.pf4j.DefaultExtensionFinder;
+import ro.fortsoft.pf4j.ExtensionFinder;
+import ro.fortsoft.pf4j.ExtensionWrapper;
+import ro.fortsoft.pf4j.PluginManager;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * DefaultExtensionFinder extended class.
+ * Connect with Finder.
+ *
+ * @author Gisoo Gwon ,GeunWoo Son
+ * @see https://github.com/decebals/pf4j-spring
+ * @since 3.0
+ */
+public class NGrinderDefaultExtensionFinder implements ExtensionFinder {
+
+	private NGrinderServiceProviderExtensionFinder finder;
+
+	public NGrinderDefaultExtensionFinder(PluginManager pluginManager) {
+		finder = new NGrinderServiceProviderExtensionFinder(pluginManager);
+	}
+
+
+	@Override
+	public <T> List<ExtensionWrapper<T>> find(Class<T> type) {
+		return finder.find(type);
+	}
+
+	@Override
+	public Set<String> findClassNames(String pluginId) {
+		return finder.findClassNames(pluginId);
+	}
+}