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/02/13 14:11:01 UTC

svn commit: r1659549 - /felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/

Author: cziegeler
Date: Fri Feb 13 13:11:01 2015
New Revision: 1659549

URL: http://svn.apache.org/r1659549
Log:
FELIX-4781 : Implement various listeners. Ignore new whiteboard listeners for Http Service

Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/AbstractListenerManager.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionAttributeListenerManager.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionListenerManager.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletContextAttributeListenerManager.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestAttributeListenerManager.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestListenerManager.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/AbstractListenerManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/AbstractListenerManager.java?rev=1659549&r1=1659548&r2=1659549&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/AbstractListenerManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/AbstractListenerManager.java Fri Feb 13 13:11:01 2015
@@ -21,22 +21,21 @@ package org.apache.felix.http.base.inter
 import java.util.ArrayList;
 import java.util.Iterator;
 
-
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
 import org.osgi.framework.ServiceReference;
 import org.osgi.util.tracker.ServiceTracker;
 
-public class AbstractListenerManager<ListenerType> extends ServiceTracker
+public class AbstractListenerManager<ListenerType> extends ServiceTracker<ListenerType, ListenerType>
 {
 
     private ArrayList<ListenerType> allContextListeners;
 
-    private final Object lock;
+    private final Object lock = new Object();
 
-    protected AbstractListenerManager(BundleContext context, Class<ListenerType> clazz)
+    protected AbstractListenerManager(final BundleContext context, final Filter filter)
     {
-        super(context, clazz.getName(), null);
-        lock = new Object();
+        super(context, filter, null);
     }
 
     @SuppressWarnings("unchecked")
@@ -74,7 +73,7 @@ public class AbstractListenerManager<Lis
     }
 
     @Override
-    public Object addingService(ServiceReference reference)
+    public ListenerType addingService(ServiceReference<ListenerType> reference)
     {
         synchronized (lock)
         {
@@ -85,7 +84,7 @@ public class AbstractListenerManager<Lis
     }
 
     @Override
-    public void modifiedService(ServiceReference reference, Object service)
+    public void modifiedService(ServiceReference<ListenerType> reference, ListenerType service)
     {
         synchronized (lock)
         {
@@ -96,7 +95,7 @@ public class AbstractListenerManager<Lis
     }
 
     @Override
-    public void removedService(ServiceReference reference, Object service)
+    public void removedService(ServiceReference<ListenerType> reference, ListenerType service)
     {
         synchronized (lock)
         {

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionAttributeListenerManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionAttributeListenerManager.java?rev=1659549&r1=1659548&r2=1659549&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionAttributeListenerManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionAttributeListenerManager.java Fri Feb 13 13:11:01 2015
@@ -24,6 +24,8 @@ import javax.servlet.http.HttpSessionAtt
 import javax.servlet.http.HttpSessionBindingEvent;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
 /**
  * The <code>ProxyListener</code> implements the Servlet API 2.4 listener
@@ -33,12 +35,27 @@ import org.osgi.framework.BundleContext;
 public class HttpSessionAttributeListenerManager extends AbstractListenerManager<HttpSessionAttributeListener>
     implements HttpSessionAttributeListener
 {
+    private static org.osgi.framework.Filter createFilter(final BundleContext btx)
+    {
+        try
+        {
+            return btx.createFilter(String.format("(&(objectClass=%s)(!(%s=*)))",
+                    HttpSessionAttributeListener.class.getName(),
+                    HttpWhiteboardConstants.HTTP_WHITEBOARD_LISTENER));
+        }
+        catch ( final InvalidSyntaxException ise)
+        {
+            // we can safely ignore it as the above filter is a constant
+        }
+        return null; // we never get here - and if we get an NPE which is fine
+    }
 
     public HttpSessionAttributeListenerManager(BundleContext context)
     {
-        super(context, HttpSessionAttributeListener.class);
+        super(context, createFilter(context));
     }
 
+    @Override
     public void attributeAdded(final HttpSessionBindingEvent se)
     {
         final Iterator<HttpSessionAttributeListener> listeners = getContextListeners();
@@ -48,6 +65,7 @@ public class HttpSessionAttributeListene
         }
     }
 
+    @Override
     public void attributeRemoved(final HttpSessionBindingEvent se)
     {
         final Iterator<HttpSessionAttributeListener> listeners = getContextListeners();
@@ -57,6 +75,7 @@ public class HttpSessionAttributeListene
         }
     }
 
+    @Override
     public void attributeReplaced(final HttpSessionBindingEvent se)
     {
         final Iterator<HttpSessionAttributeListener> listeners = getContextListeners();

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionListenerManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionListenerManager.java?rev=1659549&r1=1659548&r2=1659549&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionListenerManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/HttpSessionListenerManager.java Fri Feb 13 13:11:01 2015
@@ -24,6 +24,8 @@ import javax.servlet.http.HttpSessionEve
 import javax.servlet.http.HttpSessionListener;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
 /**
  * The <code>ProxyListener</code> implements the Servlet API 2.4 listener
@@ -33,12 +35,27 @@ import org.osgi.framework.BundleContext;
 public class HttpSessionListenerManager extends AbstractListenerManager<HttpSessionListener> implements
     HttpSessionListener
 {
+    private static org.osgi.framework.Filter createFilter(final BundleContext btx)
+    {
+        try
+        {
+            return btx.createFilter(String.format("(&(objectClass=%s)(!(%s=*)))",
+                    HttpSessionListener.class.getName(),
+                    HttpWhiteboardConstants.HTTP_WHITEBOARD_LISTENER));
+        }
+        catch ( final InvalidSyntaxException ise)
+        {
+            // we can safely ignore it as the above filter is a constant
+        }
+        return null; // we never get here - and if we get an NPE which is fine
+    }
 
     public HttpSessionListenerManager(BundleContext context)
     {
-        super(context, HttpSessionListener.class);
+        super(context, createFilter(context));
     }
 
+    @Override
     public void sessionCreated(final HttpSessionEvent se)
     {
         final Iterator<HttpSessionListener> listeners = getContextListeners();
@@ -48,6 +65,7 @@ public class HttpSessionListenerManager
         }
     }
 
+    @Override
     public void sessionDestroyed(final HttpSessionEvent se)
     {
         final Iterator<HttpSessionListener> listeners = getContextListeners();

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletContextAttributeListenerManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletContextAttributeListenerManager.java?rev=1659549&r1=1659548&r2=1659549&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletContextAttributeListenerManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletContextAttributeListenerManager.java Fri Feb 13 13:11:01 2015
@@ -22,7 +22,10 @@ import java.util.Iterator;
 
 import javax.servlet.ServletContextAttributeEvent;
 import javax.servlet.ServletContextAttributeListener;
+
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
 /**
  * The <code>ProxyListener</code> implements the Servlet API 2.4 listener
@@ -32,12 +35,27 @@ import org.osgi.framework.BundleContext;
 public class ServletContextAttributeListenerManager extends AbstractListenerManager<ServletContextAttributeListener>
     implements ServletContextAttributeListener
 {
+    private static org.osgi.framework.Filter createFilter(final BundleContext btx)
+    {
+        try
+        {
+            return btx.createFilter(String.format("(&(objectClass=%s)(!(%s=*)))",
+                    ServletContextAttributeListener.class.getName(),
+                    HttpWhiteboardConstants.HTTP_WHITEBOARD_LISTENER));
+        }
+        catch ( final InvalidSyntaxException ise)
+        {
+            // we can safely ignore it as the above filter is a constant
+        }
+        return null; // we never get here - and if we get an NPE which is fine
+    }
 
     public ServletContextAttributeListenerManager(BundleContext context)
     {
-        super(context, ServletContextAttributeListener.class);
+        super(context, createFilter(context));
     }
 
+    @Override
     public void attributeAdded(final ServletContextAttributeEvent scab)
     {
         final Iterator<ServletContextAttributeListener> listeners = getContextListeners();
@@ -47,6 +65,7 @@ public class ServletContextAttributeList
         }
     }
 
+    @Override
     public void attributeRemoved(final ServletContextAttributeEvent scab)
     {
         final Iterator<ServletContextAttributeListener> listeners = getContextListeners();
@@ -56,6 +75,7 @@ public class ServletContextAttributeList
         }
     }
 
+    @Override
     public void attributeReplaced(final ServletContextAttributeEvent scab)
     {
         final Iterator<ServletContextAttributeListener> listeners = getContextListeners();

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestAttributeListenerManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestAttributeListenerManager.java?rev=1659549&r1=1659548&r2=1659549&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestAttributeListenerManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestAttributeListenerManager.java Fri Feb 13 13:11:01 2015
@@ -24,6 +24,8 @@ import javax.servlet.ServletRequestAttri
 import javax.servlet.ServletRequestAttributeListener;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
 /**
  * The <code>ProxyListener</code> implements the Servlet API 2.4 listener
@@ -32,10 +34,24 @@ import org.osgi.framework.BundleContext;
  */
 public class ServletRequestAttributeListenerManager extends AbstractListenerManager<ServletRequestAttributeListener>
 {
+    private static org.osgi.framework.Filter createFilter(final BundleContext btx)
+    {
+        try
+        {
+            return btx.createFilter(String.format("(&(objectClass=%s)(!(%s=*)))",
+                    ServletRequestAttributeListener.class.getName(),
+                    HttpWhiteboardConstants.HTTP_WHITEBOARD_LISTENER));
+        }
+        catch ( final InvalidSyntaxException ise)
+        {
+            // we can safely ignore it as the above filter is a constant
+        }
+        return null; // we never get here - and if we get an NPE which is fine
+    }
 
     public ServletRequestAttributeListenerManager(BundleContext context)
     {
-        super(context, ServletRequestAttributeListener.class);
+        super(context, createFilter(context));
     }
 
     public void attributeAdded(final ServletRequestAttributeEvent srae)

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestListenerManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestListenerManager.java?rev=1659549&r1=1659548&r2=1659549&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestListenerManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/listener/ServletRequestListenerManager.java Fri Feb 13 13:11:01 2015
@@ -24,6 +24,8 @@ import javax.servlet.ServletRequestEvent
 import javax.servlet.ServletRequestListener;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
 /**
  * The <code>ProxyListener</code> implements the Servlet API 2.4 listener
@@ -32,10 +34,24 @@ import org.osgi.framework.BundleContext;
  */
 public class ServletRequestListenerManager extends AbstractListenerManager<ServletRequestListener>
 {
+    private static org.osgi.framework.Filter createFilter(final BundleContext btx)
+    {
+        try
+        {
+            return btx.createFilter(String.format("(&(objectClass=%s)(!(%s=*)))",
+                    ServletRequestListener.class.getName(),
+                    HttpWhiteboardConstants.HTTP_WHITEBOARD_LISTENER));
+        }
+        catch ( final InvalidSyntaxException ise)
+        {
+            // we can safely ignore it as the above filter is a constant
+        }
+        return null; // we never get here - and if we get an NPE which is fine
+    }
 
     public ServletRequestListenerManager(BundleContext context)
     {
-        super(context, ServletRequestListener.class);
+        super(context, createFilter(context));
     }
 
     public void requestDestroyed(final ServletRequestEvent sre)