Author: sdeboy
Date: Thu Mar 14 05:10:42 2013
New Revision: 1456324

URL: http://svn.apache.org/r1456324
Log:
Implementing LOG4J2-175: Plugin cache should be reset when addPackages is called
 - updated PluginManager#addPackage to reset the pluginTypeMap if a package was 
added, causing calls to PluginManager#collectPlugins to retrieve plugins 
instead of use the pluginTypeMap cache
 - updated BaseConfiguration - removed pluginManager member, changed 
getPluginManager to construct a new 'Core' instance and call collectPlugins on 
that instance prior to returning
 
 Resolves the issue where a packages definition on the configuration would not 
have any effect due to cached plugins and a cached pluginmanager in the 
configuration

Modified:
    
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java
    
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java

Modified: 
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java?rev=1456324&r1=1456323&r2=1456324&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java
 (original)
+++ 
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java
 Thu Mar 14 05:10:42 2013
@@ -69,11 +69,6 @@ public class BaseConfiguration extends A
     protected Node rootNode;
 
     /**
-     * The Plugin Manager.
-     */
-    protected PluginManager pluginManager;
-
-    /**
      * Listeners for configuration changes.
      */
     protected final List<ConfigurationListener> listeners =
@@ -109,7 +104,6 @@ public class BaseConfiguration extends A
      * Constructor.
      */
     protected BaseConfiguration() {
-        pluginManager = new PluginManager("Core");
         rootNode = new Node();
     }
 
@@ -121,7 +115,6 @@ public class BaseConfiguration extends A
      * Initialize the configuration.
      */
     public void start() {
-        pluginManager.collectPlugins();
         setup();
         doConfigure();
         for (final LoggerConfig logger : loggers.values()) {
@@ -243,7 +236,11 @@ public class BaseConfiguration extends A
     }
 
     protected PluginManager getPluginManager() {
-        return pluginManager;
+        //don't cache a pluginmanager instance - packages may be updated, 
requiring 
+        // re-discovery of plugins
+        PluginManager mgr = new PluginManager("Core");
+        mgr.collectPlugins();
+        return mgr;
     }
 
     /**

Modified: 
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java?rev=1456324&r1=1456323&r2=1456324&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
 (original)
+++ 
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
 Thu Mar 14 05:10:42 2013
@@ -98,7 +98,11 @@ public class PluginManager {
      * @param p The package name.
      */
     public static void addPackage(final String p) {
-        PACKAGES.addIfAbsent(p);
+        if (PACKAGES.addIfAbsent(p))
+        {
+            //set of available plugins could have changed, reset plugin cache 
for newly-retrieved managers
+            pluginTypeMap.clear();
+        }
     }
 
     /**


Reply via email to