Author: markt Date: Tue Mar 31 19:56:36 2015 New Revision: 1670455 URL: http://svn.apache.org/r1670455 Log: Merge LifecycleBase and LifecycleSupport
Removed: tomcat/trunk/java/org/apache/catalina/util/LifecycleSupport.java Modified: tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java Modified: tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java?rev=1670455&r1=1670454&r2=1670455&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/util/LifecycleBase.java Tue Mar 31 19:56:36 2015 @@ -18,6 +18,7 @@ package org.apache.catalina.util; import org.apache.catalina.Lifecycle; +import org.apache.catalina.LifecycleEvent; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleListener; import org.apache.catalina.LifecycleState; @@ -41,10 +42,11 @@ public abstract class LifecycleBase impl /** - * Used to handle firing lifecycle events. - * TODO: Consider merging LifecycleSupport into this class. + * The set of registered LifecycleListeners for event notifications. */ - private final LifecycleSupport lifecycle = new LifecycleSupport(this); + private LifecycleListener listeners[] = new LifecycleListener[0]; + + private final Object listenersLock = new Object(); // Lock object for changes to listeners /** @@ -58,7 +60,14 @@ public abstract class LifecycleBase impl */ @Override public void addLifecycleListener(LifecycleListener listener) { - lifecycle.addLifecycleListener(listener); + synchronized (listenersLock) { + LifecycleListener results[] = new LifecycleListener[listeners.length + 1]; + for (int i = 0; i < listeners.length; i++) { + results[i] = listeners[i]; + } + results[listeners.length] = listener; + listeners = results; + } } @@ -67,7 +76,7 @@ public abstract class LifecycleBase impl */ @Override public LifecycleListener[] findLifecycleListeners() { - return lifecycle.findLifecycleListeners(); + return listeners; } @@ -76,7 +85,26 @@ public abstract class LifecycleBase impl */ @Override public void removeLifecycleListener(LifecycleListener listener) { - lifecycle.removeLifecycleListener(listener); + synchronized (listenersLock) { + int n = -1; + for (int i = 0; i < listeners.length; i++) { + if (listeners[i] == listener) { + n = i; + break; + } + } + if (n < 0) { + return; + } + LifecycleListener results[] = new LifecycleListener[listeners.length - 1]; + int j = 0; + for (int i = 0; i < listeners.length; i++) { + if (i != n) { + results[j++] = listeners[i]; + } + } + listeners = results; + } } @@ -87,7 +115,11 @@ public abstract class LifecycleBase impl * @param data Data associated with event. */ protected void fireLifecycleEvent(String type, Object data) { - lifecycle.fireLifecycleEvent(type, data); + LifecycleEvent event = new LifecycleEvent(this, type, data); + LifecycleListener interested[] = listeners; + for (int i = 0; i < interested.length; i++) { + interested[i].lifecycleEvent(event); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org