diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/ConfigurationResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/ConfigurationResource.java index 934fe8dbcf..e8bed8bb83 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/ConfigurationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/ConfigurationResource.java @@ -40,7 +40,6 @@ import com.google.inject.Provider; import com.google.inject.Singleton; import sonia.scm.config.ScmConfiguration; -import sonia.scm.plugin.PluginManager; import sonia.scm.util.ScmConfigurationUtil; import sonia.scm.util.SecurityUtil; import sonia.scm.web.security.WebSecurityContext; @@ -72,16 +71,14 @@ public class ConfigurationResource * * @param configuration * @param securityContextProvider - * @param pluginManager */ @Inject public ConfigurationResource( Provider securityContextProvider, - ScmConfiguration configuration, PluginManager pluginManager) + ScmConfiguration configuration) { this.securityContextProvider = securityContextProvider; this.configuration = configuration; - this.pluginManager = pluginManager; } //~--- get methods ---------------------------------------------------------- @@ -127,12 +124,6 @@ public class ConfigurationResource ScmConfiguration newConfig) { SecurityUtil.assertIsAdmin(securityContextProvider); - - if (!configuration.getPluginUrl().equals(newConfig.getPluginUrl())) - { - pluginManager.clearCache(); - } - configuration.load(newConfig); synchronized (ScmConfiguration.class) @@ -148,9 +139,6 @@ public class ConfigurationResource /** Field description */ public ScmConfiguration configuration; - /** Field description */ - private PluginManager pluginManager; - /** Field description */ private Provider securityContextProvider; } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java index 2915c73d75..6641748097 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java @@ -42,6 +42,7 @@ import com.google.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.ConfigChangedListener; import sonia.scm.ConfigurationException; import sonia.scm.SCMContext; import sonia.scm.SCMContextProvider; @@ -80,7 +81,8 @@ import javax.xml.bind.Unmarshaller; * @author Sebastian Sdorra */ @Singleton -public class DefaultPluginManager implements PluginManager +public class DefaultPluginManager + implements PluginManager, ConfigChangedListener { /** Field description */ @@ -111,21 +113,22 @@ public class DefaultPluginManager implements PluginManager * @param configuration * @param pluginLoader * @param cacheManager - * @param client + * @param clientProvider */ @Inject public DefaultPluginManager( SCMContextProvider context, Provider securityContextProvicer, ScmConfiguration configuration, PluginLoader pluginLoader, - CacheManager cacheManager, HttpClient client) + CacheManager cacheManager, Provider clientProvider) { this.context = context; this.securityContextProvicer = securityContextProvicer; this.configuration = configuration; + this.configuration.addListener(this); this.cache = cacheManager.getCache(String.class, PluginCenter.class, CACHE_NAME); - this.client = client; + this.clientProvider = clientProvider; installedPlugins = new HashMap(); for (Plugin plugin : pluginLoader.getInstalledPlugins()) @@ -158,9 +161,26 @@ public class DefaultPluginManager implements PluginManager @Override public void clearCache() { + if (logger.isDebugEnabled()) + { + logger.debug("clear plugin cache"); + } + cache.clear(); } + /** + * Method description + * + * + * @param config + */ + @Override + public void configChanged(Object config) + { + clearCache(); + } + /** * Method description * @@ -534,7 +554,7 @@ public class DefaultPluginManager implements PluginManager try { - input = client.get(pluginUrl).getContent(); + input = clientProvider.get().get(pluginUrl).getContent(); /* * TODO: add gzip support @@ -648,7 +668,7 @@ public class DefaultPluginManager implements PluginManager private Cache cache; /** Field description */ - private HttpClient client; + private Provider clientProvider; /** Field description */ private ScmConfiguration configuration;