You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2015/07/24 15:53:29 UTC

svn commit: r1692518 - in /felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal: registry/EventListenerRegistry.java whiteboard/WhiteboardManager.java

Author: cziegeler
Date: Fri Jul 24 13:53:29 2015
New Revision: 1692518

URL: http://svn.apache.org/r1692518
Log:
Catch potential exceptions from serlvet context listener

Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/EventListenerRegistry.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/EventListenerRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/EventListenerRegistry.java?rev=1692518&r1=1692517&r2=1692518&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/EventListenerRegistry.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/EventListenerRegistry.java Fri Jul 24 13:53:29 2015
@@ -35,6 +35,7 @@ import javax.servlet.http.HttpSessionIdL
 import javax.servlet.http.HttpSessionListener;
 
 import org.apache.felix.http.base.internal.handler.ListenerHandler;
+import org.apache.felix.http.base.internal.logger.SystemLogger;
 import org.apache.felix.http.base.internal.runtime.ListenerInfo;
 import org.osgi.service.http.runtime.dto.FailedListenerDTO;
 import org.osgi.service.http.runtime.dto.ListenerDTO;
@@ -129,7 +130,7 @@ public final class EventListenerRegistry
      */
     public void removeListeners(@Nonnull final ListenerInfo info)
     {
-        // each listener map returns the same handler, we just need it once to destory
+        // each listener map returns the same handler, we just need it once to destroy
         ListenerHandler handler = null;
         if ( info.isListenerType(ServletContextListener.class.getName()))
         {
@@ -176,7 +177,7 @@ public final class EventListenerRegistry
             final ServletContextListener listener = (ServletContextListener)l.getListener();
             if ( listener != null )
             {
-                listener.contextInitialized(new ServletContextEvent(l.getContext()));
+                contextInitialized(l.getListenerInfo(), listener, new ServletContextEvent(l.getContext()));
             }
         }
     }
@@ -187,7 +188,7 @@ public final class EventListenerRegistry
             final ServletContextListener listener = (ServletContextListener) l.getListener();
             if ( listener != null )
             {
-                listener.contextDestroyed(new ServletContextEvent(l.getContext()));
+                contextDestroyed(l.getListenerInfo(), listener, new ServletContextEvent(l.getContext()));
             }
         }
     }
@@ -336,4 +337,34 @@ public final class EventListenerRegistry
             dto.listenerDTOs = listenerDTOs.toArray(new ListenerDTO[listenerDTOs.size()]);
         }
     }
+
+    public static void contextInitialized(
+            @Nonnull final ListenerInfo info,
+            @Nonnull final ServletContextListener listener,
+            @Nonnull final ServletContextEvent event)
+    {
+        try
+        {
+            listener.contextInitialized(event);
+        }
+        catch (final Throwable t)
+        {
+            SystemLogger.error(info.getServiceReference(), "Exception while calling servlet context listener.", t);
+        }
+    }
+
+    public static void contextDestroyed(
+            @Nonnull final ListenerInfo info,
+            @Nonnull final ServletContextListener listener,
+            @Nonnull final ServletContextEvent event)
+    {
+        try
+        {
+            listener.contextDestroyed(event);
+        }
+        catch (final Throwable t)
+        {
+            SystemLogger.error(info.getServiceReference(), "Exception while calling servlet context listener.", t);
+        }
+    }
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java?rev=1692518&r1=1692517&r2=1692518&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java Fri Jul 24 13:53:29 2015
@@ -50,6 +50,7 @@ import org.apache.felix.http.base.intern
 import org.apache.felix.http.base.internal.handler.WhiteboardListenerHandler;
 import org.apache.felix.http.base.internal.handler.WhiteboardServletHandler;
 import org.apache.felix.http.base.internal.logger.SystemLogger;
+import org.apache.felix.http.base.internal.registry.EventListenerRegistry;
 import org.apache.felix.http.base.internal.registry.HandlerRegistry;
 import org.apache.felix.http.base.internal.runtime.AbstractInfo;
 import org.apache.felix.http.base.internal.runtime.FilterInfo;
@@ -588,7 +589,7 @@ public final class WhiteboardManager
                                     final ServletContextListener listener = (ServletContextListener)handler.getListener();
                                     if ( listener != null )
                                     {
-                                        listener.contextInitialized(new ServletContextEvent(handler.getContext()));
+                                        EventListenerRegistry.contextInitialized(handler.getListenerInfo(), listener, new ServletContextEvent(handler.getContext()));
                                     }
                                 }
                             }
@@ -633,7 +634,7 @@ public final class WhiteboardManager
                                     final ServletContextListener listener = (ServletContextListener) handler.getListener();
                                     if ( listener != null )
                                     {
-                                        listener.contextDestroyed(new ServletContextEvent(handler.getContext()));
+                                        EventListenerRegistry.contextDestroyed(handler.getListenerInfo(), listener, new ServletContextEvent(handler.getContext()));
                                     }
                                 }
                             }