Author: wesw Date: Mon Dec 1 22:41:52 2008 New Revision: 722386 URL: http://svn.apache.org/viewvc?rev=722386&view=rev Log: incorporating Concurrency API. Per WW-2880, thanks for the patch Mathias Bogaert
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=722386&r1=722385&r2=722386&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Mon Dec 1 22:41:52 2008 @@ -31,6 +31,7 @@ import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.concurrent.CopyOnWriteArrayList; import javax.servlet.ServletContext; import javax.servlet.ServletException; @@ -105,7 +106,7 @@ * Store list of DispatcherListeners. */ private static List<DispatcherListener> dispatcherListeners = - new ArrayList<DispatcherListener>(); + new CopyOnWriteArrayList<DispatcherListener>(); /** * Store ConfigurationManager instance, set on init. @@ -169,7 +170,7 @@ * * @param listener The listener to add */ - public static synchronized void addDispatcherListener(DispatcherListener listener) { + public static void addDispatcherListener(DispatcherListener listener) { dispatcherListeners.add(listener); } @@ -178,7 +179,7 @@ * * @param listener The listener */ - public static synchronized void removeDispatcherListener(DispatcherListener listener) { + public static void removeDispatcherListener(DispatcherListener listener) { dispatcherListeners.remove(listener); } @@ -264,11 +265,9 @@ instance.set(null); // clean up DispatcherListeners - synchronized(Dispatcher.class) { - if (dispatcherListeners.size() > 0) { - for (DispatcherListener l : dispatcherListeners) { - l.dispatcherDestroyed(this); - } + if (!dispatcherListeners.isEmpty()) { + for (DispatcherListener l : dispatcherListeners) { + l.dispatcherDestroyed(this); } } @@ -382,15 +381,6 @@ paramsWorkaroundEnabled = "true".equals(container.getInstance(String.class, StrutsConstants.STRUTS_DISPATCHER_PARAMETERSWORKAROUND)); } - - synchronized(Dispatcher.class) { - if (dispatcherListeners.size() > 0) { - for (DispatcherListener l : dispatcherListeners) { - l.dispatcherInitialized(this); - } - } - } - } /** @@ -415,6 +405,11 @@ init_CheckConfigurationReloading(container); init_CheckWebLogicWorkaround(container); + if (!dispatcherListeners.isEmpty()) { + for (DispatcherListener l : dispatcherListeners) { + l.dispatcherInitialized(this); + } + } } /**