mwomack     2002/12/11 23:52:41

  Modified:    src/java/org/apache/log4j/plugins PluginRegistry.java
  Log:
  Various bug fixes.
  Switched Hashtable to HashMap to avoid extra synchronization. It also allows a null 
value for the key so the code does not need to be as paranoid about the plugin name 
being null.
  
  Revision  Changes    Path
  1.2       +52 -50    
jakarta-log4j/src/java/org/apache/log4j/plugins/PluginRegistry.java
  
  Index: PluginRegistry.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/plugins/PluginRegistry.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PluginRegistry.java       11 Dec 2002 07:25:14 -0000      1.1
  +++ PluginRegistry.java       12 Dec 2002 07:52:41 -0000      1.2
  @@ -7,8 +7,8 @@
   
   package org.apache.log4j.plugins;
   
  -import java.util.Hashtable;
  -import java.util.Enumeration;
  +import java.util.HashMap;
  +import java.util.Iterator;
   import org.apache.log4j.LogManager;
   import org.apache.log4j.spi.LoggerRepository;
   import org.apache.log4j.spi.LoggerRepositoryEventListener;
  @@ -22,13 +22,21 @@
     @since 1.3
   */
   public class PluginRegistry {
  -  private static Hashtable repositoryMap = new Hashtable();
  +  private static HashMap repositoryMap = new HashMap();
     private static RepositoryListener listener = new RepositoryListener();
     
     /**
       Starts a Plugin with default logger repository. */
     public static Plugin startPlugin(Plugin plugin) {
  -    return startPlugin(plugin, LogManager.getLoggerRepository());
  +    // if repository already set in plugin, use it
  +    LoggerRepository repository = plugin.getLoggerRepository();
  +    
  +    // else use the default one
  +    if (repository == null) {
  +      repository = LogManager.getLoggerRepository();
  +    }
  +    
  +    return startPlugin(plugin, repository);
     }
   
     /**
  @@ -36,36 +44,38 @@
     public static Plugin startPlugin(Plugin plugin,
     LoggerRepository repository) {
       
  -    // make sure the plugin has reference to repository
  -    plugin.setLoggerRepository(repository);
  -    
  +    // if the plugin is already active, just return it
  +    if (plugin.isActive())
  +      return plugin;
  +      
       // put plugin into the repository's reciever map
       synchronized(repositoryMap) {
         // get plugin map for repository
  -      Hashtable pluginMap = (Hashtable)repositoryMap.get(repository);
  +      HashMap pluginMap = (HashMap)repositoryMap.get(repository);
         
  +      String name = plugin.getName();
  +
  +      // make sure the plugin has reference to repository
  +      plugin.setLoggerRepository(repository);
  +
         // if the plugin map does not exist, create one
         if (pluginMap == null) {
  -        pluginMap = new Hashtable();
  +        pluginMap = new HashMap();
           repositoryMap.put(repository, pluginMap);
           repository.addLoggerRepositoryEventListener(listener);
         }
  -      
  -      // existing plugin exists with the
  -      String name = plugin.getName();
  -      if (name == null) {
  -        name = "";
  -      }
  -      Plugin existingPlugin = (Plugin)pluginMap.get(name);
  -      if (existingPlugin != null) {
  -        boolean isEqual = existingPlugin.equals(plugin);
  -        
  -        // if the plugins are equivalent and the existing one
  -        // is still active, just return the existing one now
  -        if (isEqual && existingPlugin.isActive()) {
  -          return existingPlugin;
  -        } else {
  -          existingPlugin.shutdown();
  +      else {
  +        Plugin existingPlugin = (Plugin)pluginMap.get(name);
  +        if (existingPlugin != null) {
  +          boolean isEqual = existingPlugin.equals(plugin);
  +          
  +          // if the plugins are equivalent and the existing one
  +          // is still active, just return the existing one now
  +          if (isEqual && existingPlugin.isActive()) {
  +            return existingPlugin;
  +          } else {
  +            existingPlugin.shutdown();
  +          }
           }
         }
         
  @@ -80,35 +90,28 @@
     }
     
     /**
  -    Stops a plugin in the default logger repository. */
  +    Stops a plugin by plugin object. */
     public static Plugin stopPlugin(Plugin plugin) {
  -    return stopPlugin(plugin.getName(), 
  -      LogManager.getLoggerRepository());
  -  }
  -
  -  /**
  -    Stops a plugin in the default logger repository. */  
  -  public static Plugin stopPlugin(String pluginName) {
  -    return stopPlugin(pluginName,
  -      LogManager.getLoggerRepository());
  +    return stopPlugin(plugin.getName(), plugin.getLoggerRepository());
     }
     
     /**
  -    Stops a plugin in the given logger repository. */
  -  public static Plugin stopPlugin(Plugin plugin, 
  -  LoggerRepository repository) {
  -    return stopPlugin(plugin.getName(), repository);
  +    Stops a plugin by plugin name using default repository. */
  +  public static Plugin stopPlugin(String pluginName) {
  +    return stopPlugin(pluginName, LogManager.getLoggerRepository());
     }
  -  
  +
     /**
  -    Stops a plugin in the given logger repository. */
  -  public static Plugin stopPlugin(String pluginName, 
  +    Stops a plugin by plugin name and repository. */
  +  public static Plugin stopPlugin(String pluginName,
     LoggerRepository repository) {
  -    if (pluginName == null) {
  -      pluginName = "";
  +    // if a null repository, exit now
  +    if (repository == null) {
  +      return null;
       }
  +
       synchronized(repositoryMap) {
  -      Hashtable pluginMap = (Hashtable)repositoryMap.get(repository);
  +      HashMap pluginMap = (HashMap)repositoryMap.get(repository);
         if (pluginMap == null)
           return null;
           
  @@ -144,17 +147,16 @@
       Stops all plugins in the given logger repository. */
     public static void stopAllPlugins(LoggerRepository repository) {    
       synchronized(repositoryMap) {
  -      Hashtable pluginMap = (Hashtable)repositoryMap.get(repository);
  +      HashMap pluginMap = (HashMap)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();
  -        plugin.shutdown();
  +      Iterator iter = pluginMap.values().iterator();
  +      while(iter.hasNext()) {
  +        ((Plugin)iter.next()).shutdown();
         }
         
         // since no more plugins, remove plugin map from
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to