mwomack 2002/12/09 22:58:03 Modified: src/java/org/apache/log4j PluginRegistry.java Log: Added code to register and maintain a listener for LoggerRepository events. When reset or shutdown messages recieved, all plugins associated with that repository are stopped. Revision Changes Path 1.4 +33 -2 jakarta-log4j/src/java/org/apache/log4j/PluginRegistry.java Index: PluginRegistry.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/PluginRegistry.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- PluginRegistry.java 22 Nov 2002 10:27:23 -0000 1.3 +++ PluginRegistry.java 10 Dec 2002 06:58:03 -0000 1.4 @@ -10,6 +10,7 @@ import java.util.Hashtable; import java.util.Enumeration; import org.apache.log4j.spi.LoggerRepository; +import org.apache.log4j.spi.LoggerRepositoryEventListener; /** This is a registry for Plugin instances. It provides methods to @@ -21,6 +22,7 @@ */ public class PluginRegistry { private static Hashtable repositoryMap = new Hashtable(); + private static RepositoryListener listener = new RepositoryListener(); /** Starts a Plugin with default logger repository. */ @@ -45,6 +47,7 @@ if (pluginMap == null) { pluginMap = new Hashtable(); repositoryMap.put(repository, pluginMap); + repository.addLoggerRepositoryEventListener(listener); } // existing plugin exists with the @@ -120,8 +123,10 @@ // if no more plugins, remove the plugin map from // repository map - if (pluginMap.isEmpty()) + if (pluginMap.isEmpty()) { + repository.removeLoggerRepositoryEventListener(listener); repositoryMap.remove(repository); + } // return it for future use return plugin; @@ -136,12 +141,15 @@ /** Stops all plugins in the given logger repository. */ - public static void stopAllPlugins(LoggerRepository repository) { + public static void stopAllPlugins(LoggerRepository repository) { synchronized(repositoryMap) { Hashtable pluginMap = (Hashtable)repositoryMap.get(repository); if (pluginMap == null) return; + // remove the listener for this repository + repository.removeLoggerRepositoryEventListener(listener); + Enumeration enum = pluginMap.elements(); while(enum.hasMoreElements()) { Plugin plugin = (Plugin)enum.nextElement(); @@ -151,6 +159,29 @@ // since no more plugins, remove plugin map from // the repository repositoryMap.remove(repository); + } + } + + /** + Internal class used to handle listener events from repositories. */ + private static class RepositoryListener + implements LoggerRepositoryEventListener { + /** + Stops all plugins associated with the repository being reset. */ + public void configurationResetEvent(LoggerRepository repository) { + PluginRegistry.stopAllPlugins(repository); + } + + /** + Called when the repository configuration is changed. */ + public void configurationChangedEvent(LoggerRepository repository) { + // do nothing with this event + } + + /** + Stops all plugins associated with the repository being shutdown. */ + public void shutdownEvent(LoggerRepository repository) { + PluginRegistry.stopAllPlugins(repository); } } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>