You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by mw...@apache.org on 2002/12/12 06:20:22 UTC
cvs commit: jakarta-log4j/src/java/org/apache/log4j Hierarchy.java
mwomack 2002/12/11 21:20:22
Modified: src/java/org/apache/log4j Hierarchy.java
Log:
Switched listener lists from Vector to ArrayList to avoid some unneeded synchronization charges.
Thread safety changes. Added synchronization for listener lists when adding/removing and copying when reporting events.
Revision Changes Path
1.44 +71 -71 jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java
Index: Hierarchy.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Hierarchy.java,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- Hierarchy.java 22 Nov 2002 11:03:28 -0000 1.43
+++ Hierarchy.java 12 Dec 2002 05:20:22 -0000 1.44
@@ -15,6 +15,7 @@
import java.util.Hashtable;
import java.util.Enumeration;
import java.util.Vector;
+import java.util.ArrayList;
import org.apache.log4j.spi.LoggerFactory;
import org.apache.log4j.spi.HierarchyEventListener;
@@ -57,8 +58,8 @@
public class Hierarchy implements LoggerRepository, RendererSupport {
private LoggerFactory defaultFactory;
- private Vector repositoryEventListeners;
- private Vector loggerEventListeners;
+ private ArrayList repositoryEventListeners;
+ private ArrayList loggerEventListeners;
Hashtable ht;
Logger root;
@@ -79,8 +80,8 @@
public
Hierarchy(Logger root) {
ht = new Hashtable();
- repositoryEventListeners = new Vector(1);
- loggerEventListeners = new Vector(1);
+ repositoryEventListeners = new ArrayList(1);
+ loggerEventListeners = new ArrayList(1);
this.root = root;
// Enable all level levels by default.
setThreshold(Level.ALL);
@@ -102,12 +103,14 @@
@since 1.3*/
public void addLoggerRepositoryEventListener(
LoggerRepositoryEventListener listener) {
-
- if(repositoryEventListeners.contains(listener)) {
- LogLog.warn(
- "Ignoring attempt to add a previously registerd LoggerRepositoryEventListener.");
- } else {
- repositoryEventListeners.addElement(listener);
+
+ synchronized(repositoryEventListeners) {
+ if(repositoryEventListeners.contains(listener)) {
+ LogLog.warn(
+ "Ignoring attempt to add a previously registerd LoggerRepositoryEventListener.");
+ } else {
+ repositoryEventListeners.add(listener);
+ }
}
}
@@ -117,11 +120,13 @@
public void removeLoggerRepositoryEventListener(
LoggerRepositoryEventListener listener) {
- if(!repositoryEventListeners.contains(listener)) {
- LogLog.warn(
- "Ignoring attempt to remove a non-registered LoggerRepositoryEventListener.");
- } else {
- repositoryEventListeners.remove(listener);
+ synchronized(repositoryEventListeners) {
+ if(!repositoryEventListeners.contains(listener)) {
+ LogLog.warn(
+ "Ignoring attempt to remove a non-registered LoggerRepositoryEventListener.");
+ } else {
+ repositoryEventListeners.remove(listener);
+ }
}
}
@@ -130,11 +135,13 @@
will be called when repository events occur.
@since 1.3*/
public void addLoggerEventListener(LoggerEventListener listener) {
- if(loggerEventListeners.contains(listener)) {
- LogLog.warn(
- "Ignoring attempt to add a previously registerd LoggerEventListener.");
- } else {
- loggerEventListeners.addElement(listener);
+ synchronized(loggerEventListeners) {
+ if(loggerEventListeners.contains(listener)) {
+ LogLog.warn(
+ "Ignoring attempt to add a previously registerd LoggerEventListener.");
+ } else {
+ loggerEventListeners.add(listener);
+ }
}
}
@@ -142,12 +149,13 @@
Remove a {@link LoggerEventListener} from the repository.
@since 1.3*/
public void removeLoggerEventListener(LoggerEventListener listener) {
-
- if(!loggerEventListeners.contains(listener)) {
- LogLog.warn(
- "Ignoring attempt to remove a non-registered LoggerEventListener.");
- } else {
- loggerEventListeners.remove(listener);
+ synchronized(loggerEventListeners) {
+ if(!loggerEventListeners.contains(listener)) {
+ LogLog.warn(
+ "Ignoring attempt to remove a non-registered LoggerEventListener.");
+ } else {
+ loggerEventListeners.remove(listener);
+ }
}
}
@@ -223,13 +231,10 @@
@param appender The appender added to the logger.
@since 1.3*/
public void fireAddAppenderEvent(Logger logger, Appender appender) {
- if(loggerEventListeners != null) {
- int size = loggerEventListeners.size();
- LoggerEventListener listener;
- for(int i = 0; i < size; i++) {
- listener = (LoggerEventListener)loggerEventListeners.elementAt(i);
- listener.appenderAddedEvent(logger, appender);
- }
+ ArrayList list = copyListenerList(loggerEventListeners);
+ int size = list.size();
+ for(int i = 0; i < size; i++) {
+ ((LoggerEventListener)list.get(i)).appenderAddedEvent(logger, appender);
}
}
@@ -240,13 +245,10 @@
@param appender The appender removed from the logger.
@since 1.3*/
public void fireRemoveAppenderEvent(Logger logger, Appender appender) {
- if(loggerEventListeners != null) {
- int size = loggerEventListeners.size();
- LoggerEventListener listener;
- for(int i = 0; i < size; i++) {
- listener = (LoggerEventListener)loggerEventListeners.elementAt(i);
- listener.appenderRemovedEvent(logger, appender);
- }
+ ArrayList list = copyListenerList(loggerEventListeners);
+ int size = list.size();
+ for(int i = 0; i < size; i++) {
+ ((LoggerEventListener)list.get(i)).appenderRemovedEvent(logger, appender);
}
}
@@ -256,13 +258,10 @@
@param logger The logger which changed levels.
@since 1.3*/
public void fireLevelChangedEvent(Logger logger) {
- if(loggerEventListeners != null) {
- int size = loggerEventListeners.size();
- LoggerEventListener listener;
- for(int i = 0; i < size; i++) {
- listener = (LoggerEventListener)loggerEventListeners.elementAt(i);
- listener.levelChangedEvent(logger);
- }
+ ArrayList list = copyListenerList(loggerEventListeners);
+ int size = list.size();
+ for(int i = 0; i < size; i++) {
+ ((LoggerEventListener)list.get(i)).levelChangedEvent(logger);
}
}
@@ -271,18 +270,27 @@
{@link LoggerRepositoryEventListener}.
@since 1.3*/
public void fireConfigurationChangedEvent() {
- if(repositoryEventListeners != null) {
- int size = repositoryEventListeners.size();
- LoggerRepositoryEventListener listener;
- for(int i = 0; i < size; i++) {
- listener = (LoggerRepositoryEventListener)
- repositoryEventListeners.elementAt(i);
- listener.configurationChangedEvent(this);
- }
+ ArrayList list = copyListenerList(repositoryEventListeners);
+ int size = list.size();
+ for(int i = 0; i < size; i++) {
+ ((LoggerRepositoryEventListener)list.get(i)).configurationChangedEvent(this);
}
}
/**
+ Returns a copy of the given listener vector. */
+ private ArrayList copyListenerList(ArrayList list) {
+ ArrayList listCopy = null;
+ synchronized(list) {
+ int size = list.size();
+ listCopy = new ArrayList(size);
+ for (int x = 0; x < size; x++) {
+ listCopy.add(list.get(x));
+ }
+ }
+ return listCopy;
+ }
+ /**
Returns a {@link Level} representation of the <code>enable</code>
state.
@@ -456,14 +464,10 @@
rendererMap.clear();
// inform the listeners that the configuration has been reset
- if(repositoryEventListeners != null) {
- int size = repositoryEventListeners.size();
- LoggerRepositoryEventListener listener;
- for(int i = 0; i < size; i++) {
- listener =
- (LoggerRepositoryEventListener)repositoryEventListeners.elementAt(i);
- listener.configurationResetEvent(this);
- }
+ ArrayList list = copyListenerList(repositoryEventListeners);
+ int size = list.size();
+ for(int i = 0; i < size; i++) {
+ ((LoggerRepositoryEventListener)list.get(i)).configurationResetEvent(this);
}
}
@@ -498,14 +502,10 @@
// let listeners know about shutdown if this is
// not being done as part of a reset.
if (!doingReset) {
- if(repositoryEventListeners != null) {
- int size = repositoryEventListeners.size();
- LoggerRepositoryEventListener listener;
- for(int i = 0; i < size; i++) {
- listener =
- (LoggerRepositoryEventListener)repositoryEventListeners.elementAt(i);
- listener.shutdownEvent(this);
- }
+ ArrayList list = copyListenerList(repositoryEventListeners);
+ int size = list.size();
+ for(int i = 0; i < size; i++) {
+ ((LoggerRepositoryEventListener)list.get(i)).shutdownEvent(this);
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>