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

Reply via email to