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]>