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/02 09:04:59 UTC

svn commit: r1656399 - in /felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal: handler/ runtime/ whiteboard/ whiteboard/tracker/

Author: cziegeler
Date: Mon Feb  2 08:04:59 2015
New Revision: 1656399

URL: http://svn.apache.org/r1656399
Log:
FELIX-4060 : Implement HTTP Service Update (RFC-189)

Added:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
      - copied, changed from r1656283, felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ContextInfo.java
Removed:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ContextInfo.java
Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/AbstractReferenceTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/FilterTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ResourceTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextAttributeListenerTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextHelperTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextListenerTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/FilterHandler.java Mon Feb  2 08:04:59 2015
@@ -31,7 +31,7 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.felix.http.base.internal.context.ExtServletContext;
-import org.apache.felix.http.base.internal.runtime.ContextInfo;
+import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
 import org.apache.felix.http.base.internal.runtime.FilterInfo;
 import org.apache.felix.http.base.internal.util.PatternUtil;
 
@@ -43,7 +43,7 @@ public final class FilterHandler extends
 
     private final long contextServiceId;
 
-    public FilterHandler(final ContextInfo contextInfo, ExtServletContext context, Filter filter, FilterInfo filterInfo)
+    public FilterHandler(final ServletContextHelperInfo contextInfo, ExtServletContext context, Filter filter, FilterInfo filterInfo)
     {
         super(context, filterInfo.getInitParams(), filterInfo.getName());
         this.filter = filter;

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java Mon Feb  2 08:04:59 2015
@@ -28,7 +28,7 @@ import javax.servlet.Filter;
 import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 
-import org.apache.felix.http.base.internal.runtime.ContextInfo;
+import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
 import org.apache.felix.http.base.internal.runtime.FilterInfo;
 import org.apache.felix.http.base.internal.runtime.ServletInfo;
 import org.osgi.service.http.NamespaceException;
@@ -58,7 +58,7 @@ public final class HandlerRegistry
     /**
      * Add a new servlet.
      */
-    public synchronized void addServlet(ContextInfo contextInfo, ServletHandler handler) throws ServletException, NamespaceException
+    public synchronized void addServlet(ServletContextHelperInfo contextInfo, ServletHandler handler) throws ServletException, NamespaceException
     {
         if (this.servletMap.containsKey(handler.getServlet()))
         {
@@ -210,7 +210,7 @@ public final class HandlerRegistry
         return null;
     }
 
-    public synchronized Servlet removeServlet(final ContextInfo contextInfo, ServletInfo servletInfo, final boolean destroy)
+    public synchronized Servlet removeServlet(final ServletContextHelperInfo contextInfo, ServletInfo servletInfo, final boolean destroy)
     {
         for(final ServletHandler handler : this.servletMap.values())
         {

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java Mon Feb  2 08:04:59 2015
@@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.felix.http.base.internal.context.ExtServletContext;
-import org.apache.felix.http.base.internal.runtime.ContextInfo;
+import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
 import org.apache.felix.http.base.internal.runtime.ServletInfo;
 import org.apache.felix.http.base.internal.util.PatternUtil;
 
@@ -46,7 +46,7 @@ public final class ServletHandler extend
 
     private final long contextServiceId;
 
-    public ServletHandler(final ContextInfo contextInfo,
+    public ServletHandler(final ServletContextHelperInfo contextInfo,
                           final ExtServletContext context,
                           final ServletInfo servletInfo,
                           final Servlet servlet)

Copied: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java (from r1656283, felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ContextInfo.java)
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java?p2=felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java&p1=felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ContextInfo.java&r1=1656283&r2=1656399&rev=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ContextInfo.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java Mon Feb  2 08:04:59 2015
@@ -25,7 +25,7 @@ import org.osgi.service.http.whiteboard.
 /**
  * Provides registration information for a {@link ServletContextHelper}
  */
-public final class ContextInfo extends AbstractInfo<ServletContextHelper> {
+public final class ServletContextHelperInfo extends AbstractInfo<ServletContextHelper> {
 
     private final String name;
 
@@ -33,7 +33,7 @@ public final class ContextInfo extends A
 
     private final String prefix;
 
-    public ContextInfo(final ServiceReference<ServletContextHelper> ref) {
+    public ServletContextHelperInfo(final ServiceReference<ServletContextHelper> ref) {
         super(ref);
         this.name = this.getStringProperty(ref, HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME);
         this.path = this.getStringProperty(ref, HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH);

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java Mon Feb  2 08:04:59 2015
@@ -28,16 +28,17 @@ import javax.servlet.ServletContextEvent
 import javax.servlet.ServletContextListener;
 
 import org.apache.felix.http.base.internal.context.ExtServletContext;
-import org.apache.felix.http.base.internal.runtime.ContextInfo;
 import org.apache.felix.http.base.internal.runtime.ServletContextAttributeListenerInfo;
+import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
 import org.apache.felix.http.base.internal.runtime.ServletContextListenerInfo;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceObjects;
 import org.osgi.service.http.context.ServletContextHelper;
 
 public final class ContextHandler implements Comparable<ContextHandler>
 {
     /** The info object for the context. */
-    private final ContextInfo info;
+    private final ServletContextHelperInfo info;
 
     /** A map of all created servlet contexts. */
     private final Map<Long, ContextHolder> contextMap = new HashMap<Long, ContextHolder>();
@@ -51,14 +52,20 @@ public final class ContextHandler implem
     /** Servlet context attribute listeners. */
     private final Map<Long, ServletContextAttributeListener> contextAttributeListeners = new ConcurrentHashMap<Long, ServletContextAttributeListener>();
 
+    /** The http bundle. */
+    private final Bundle bundle;
+
     /**
      * Create new handler.
      * @param info
      * @param webContext
      */
-    public ContextHandler(final ContextInfo info, final ServletContext webContext)
+    public ContextHandler(final ServletContextHelperInfo info,
+            final ServletContext webContext,
+            final Bundle bundle)
     {
         this.info = info;
+        this.bundle = bundle;
         this.sharedContext = new SharedServletContextImpl(webContext,
                 info.getPrefix(),
                 info.getName(),
@@ -93,7 +100,7 @@ public final class ContextHandler implem
     /**
      * Get the context info
      */
-    public ContextInfo getContextInfo()
+    public ServletContextHelperInfo getContextInfo()
     {
         return this.info;
     }
@@ -104,31 +111,35 @@ public final class ContextHandler implem
         return this.info.compareTo(o.info);
     }
 
-    public void activate(final Bundle bundle)
+    public void activate()
     {
         getServletContext(bundle);
     }
 
-    public void deactivate(final Bundle bundle)
+    public void deactivate()
     {
         this.ungetServletContext(bundle);
     }
 
-    public void initialized(final Bundle bundle, final ServletContextListenerInfo listenerInfo)
+    public void initialized(@Nonnull final ServletContextListenerInfo listenerInfo)
     {
-        final ServletContextListener listener = bundle.getBundleContext().getServiceObjects(listenerInfo.getServiceReference()).getService();
-        if ( listener != null)
+        final ServiceObjects<ServletContextListener> so = bundle.getBundleContext().getServiceObjects(listenerInfo.getServiceReference());
+        if ( so != null )
         {
-            // no need to sync map - initialized is called in sync
-            this.listeners.put(listenerInfo.getServiceId(), listener);
+            final ServletContextListener listener = so.getService();
+            if ( listener != null)
+            {
+                // no need to sync map - initialized is called in sync
+                this.listeners.put(listenerInfo.getServiceId(), listener);
 
-            final ServletContext context = this.getServletContext(listenerInfo.getServiceReference().getBundle());
+                final ServletContext context = this.getServletContext(listenerInfo.getServiceReference().getBundle());
 
-            listener.contextInitialized(new ServletContextEvent(context));
+                listener.contextInitialized(new ServletContextEvent(context));
+            }
         }
     }
 
-    public void destroyed(final ServletContextListenerInfo listenerInfo)
+    public void destroyed(@Nonnull final ServletContextListenerInfo listenerInfo)
     {
         // no need to sync map - destroyed is called in sync
         final ServletContextListener listener = this.listeners.remove(listenerInfo.getServiceId());
@@ -136,7 +147,14 @@ public final class ContextHandler implem
         {
             final ServletContext context = this.getServletContext(listenerInfo.getServiceReference().getBundle());
             listener.contextDestroyed(new ServletContextEvent(context));
+            // call unget twice, once for the call in initialized and once for the call in this method(!)
+            this.ungetServletContext(listenerInfo.getServiceReference().getBundle());
             this.ungetServletContext(listenerInfo.getServiceReference().getBundle());
+            final ServiceObjects<ServletContextListener> so = bundle.getBundleContext().getServiceObjects(listenerInfo.getServiceReference());
+            if ( so != null )
+            {
+                so.ungetService(listener);
+            }
         }
     }
 
@@ -148,12 +166,17 @@ public final class ContextHandler implem
             ContextHolder holder = this.contextMap.get(key);
             if ( holder == null )
             {
-                holder = new ContextHolder();
-                // TODO check for null
-                holder.servletContextHelper = bundle.getBundleContext().getServiceObjects(this.info.getServiceReference()).getService();
-                holder.servletContext = new PerBundleServletContextImpl(bundle,
-                        this.sharedContext,
-                        holder.servletContextHelper);
+                final ServiceObjects<ServletContextHelper> so = bundle.getBundleContext().getServiceObjects(this.info.getServiceReference());
+                if ( so != null )
+                {
+                    holder = new ContextHolder();
+                    // TODO check for null
+                    holder.servletContextHelper = so.getService();
+                    holder.servletContext = new PerBundleServletContextImpl(bundle,
+                            this.sharedContext,
+                            holder.servletContextHelper);
+                    this.contextMap.put(key, holder);
+                }
             }
             holder.counter++;
 
@@ -173,27 +196,46 @@ public final class ContextHandler implem
                 if ( holder.counter <= 0 )
                 {
                     this.contextMap.remove(key);
-                    bundle.getBundleContext().getServiceObjects(this.info.getServiceReference()).ungetService(holder.servletContextHelper);
+                    final ServiceObjects<ServletContextHelper> so = bundle.getBundleContext().getServiceObjects(this.info.getServiceReference());
+                    if ( so != null )
+                    {
+                        so.ungetService(holder.servletContextHelper);
+                    }
                 }
             }
         }
     }
 
-    public void addListener(@Nonnull final Bundle bundle, @Nonnull final ServletContextAttributeListenerInfo info)
+    /**
+     * Add servlet context attribute listener
+     * @param info
+     */
+    public void addListener(@Nonnull final ServletContextAttributeListenerInfo info)
     {
-        final  ServletContextAttributeListener service = bundle.getBundleContext().getServiceObjects(info.getServiceReference()).getService();
-        if ( service != null )
+        final ServiceObjects<ServletContextAttributeListener> so =  bundle.getBundleContext().getServiceObjects(info.getServiceReference());
+        if ( so != null )
         {
-            this.contextAttributeListeners.put(info.getServiceId(), service);
+            final  ServletContextAttributeListener service = bundle.getBundleContext().getServiceObjects(info.getServiceReference()).getService();
+            if ( service != null )
+            {
+                this.contextAttributeListeners.put(info.getServiceId(), service);
+            }
         }
     }
 
-    public void removeListener(@Nonnull final Bundle bundle, @Nonnull final ServletContextAttributeListenerInfo info)
+    /**
+     * Remove servlet context attribute listener
+     * @param info
+     */
+    public void removeListener(@Nonnull final ServletContextAttributeListenerInfo info)
     {
         final  ServletContextAttributeListener service = this.contextAttributeListeners.remove(info.getServiceId());
         if ( service != null )
         {
-            bundle.getBundleContext().getServiceObjects(info.getServiceReference()).ungetService(service);
+            final ServiceObjects<ServletContextAttributeListener> so =  bundle.getBundleContext().getServiceObjects(info.getServiceReference());
+            if ( so != null ) {
+                so.ungetService(service);
+            }
         }
     }
 

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java Mon Feb  2 08:04:59 2015
@@ -25,12 +25,14 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
 import javax.servlet.ServletContext;
 
-import org.apache.felix.http.base.internal.runtime.ContextInfo;
+import org.apache.felix.http.base.internal.logger.SystemLogger;
 import org.apache.felix.http.base.internal.runtime.FilterInfo;
 import org.apache.felix.http.base.internal.runtime.ResourceInfo;
 import org.apache.felix.http.base.internal.runtime.ServletContextAttributeListenerInfo;
+import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
 import org.apache.felix.http.base.internal.runtime.ServletContextListenerInfo;
 import org.apache.felix.http.base.internal.runtime.ServletInfo;
 import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
@@ -117,7 +119,7 @@ public final class ServletContextHelperM
      */
     private void activate(final ContextHandler handler)
     {
-        handler.activate(this.bundle);
+        handler.activate();
         // context listeners first
         final List<WhiteboardServiceInfo<?>> services = new ArrayList<WhiteboardServiceInfo<?>>();
         for(final Map.Entry<WhiteboardServiceInfo<?>, List<ContextHandler>> entry : this.servicesMap.entrySet())
@@ -127,7 +129,7 @@ public final class ServletContextHelperM
                 entry.getValue().add(handler);
                 if ( entry.getKey() instanceof ServletContextListenerInfo )
                 {
-                    handler.initialized(this.bundle, (ServletContextListenerInfo)entry.getKey());
+                    handler.initialized((ServletContextListenerInfo)entry.getKey());
                 }
                 else
                 {
@@ -173,42 +175,51 @@ public final class ServletContextHelperM
         {
             handler.destroyed(info);
         }
-        handler.deactivate(this.bundle);
+        handler.deactivate();
     }
 
     /**
      * Add a servlet context helper.
      */
-    public void addContextHelper(final ContextInfo info)
+    public void addContextHelper(final ServletContextHelperInfo info)
     {
-        final ContextHandler handler = new ContextHandler(info, this.webContext);
-        synchronized ( this.contextMap )
+        if ( info.isValid() )
         {
-            List<ContextHandler> handlerList = this.contextMap.get(info.getName());
-            if ( handlerList == null )
-            {
-                handlerList = new ArrayList<ContextHandler>();
-                this.contextMap.put(info.getName(), handlerList);
-            }
-            handlerList.add(handler);
-            Collections.sort(handlerList);
-            // check for activate/deactivate
-            if ( handlerList.get(0) == handler )
+            final ContextHandler handler = new ContextHandler(info, this.webContext, this.bundle);
+            synchronized ( this.contextMap )
             {
-                // check for deactivate
-                if ( handlerList.size() > 1 )
+                List<ContextHandler> handlerList = this.contextMap.get(info.getName());
+                if ( handlerList == null )
+                {
+                    handlerList = new ArrayList<ContextHandler>();
+                    this.contextMap.put(info.getName(), handlerList);
+                }
+                handlerList.add(handler);
+                Collections.sort(handlerList);
+                // check for activate/deactivate
+                if ( handlerList.get(0) == handler )
                 {
-                    this.deactivate(handlerList.get(1));
+                    // check for deactivate
+                    if ( handlerList.size() > 1 )
+                    {
+                        this.deactivate(handlerList.get(1));
+                    }
+                    this.activate(handler);
                 }
-                this.activate(handler);
             }
         }
+        else
+        {
+            // TODO - failure DTO
+            final String type = info.getClass().getSimpleName().substring(0, info.getClass().getSimpleName().length() - 4);
+            SystemLogger.debug("Ignoring " + type + " service " + info.getServiceReference());
+        }
     }
 
     /**
      * Remove a servlet context helper
      */
-    public void removeContextHelper(final ContextInfo info)
+    public void removeContextHelper(final ServletContextHelperInfo info)
     {
         synchronized ( this.contextMap )
         {
@@ -266,24 +277,33 @@ public final class ServletContextHelperM
      * Add new whiteboard service to the registry
      * @param info Whiteboard service info
      */
-    public void addWhiteboardService(final WhiteboardServiceInfo<?> info)
+    public void addWhiteboardService(@Nonnull final WhiteboardServiceInfo<?> info)
     {
-        synchronized ( this.contextMap )
+        if ( info.isValid() )
         {
-            final List<ContextHandler> handlerList = this.getMatchingContexts(info);
-            this.servicesMap.put(info, handlerList);
-            for(final ContextHandler h : handlerList)
+            synchronized ( this.contextMap )
             {
-                this.registerWhiteboardService(h, info);
+                final List<ContextHandler> handlerList = this.getMatchingContexts(info);
+                this.servicesMap.put(info, handlerList);
+                for(final ContextHandler h : handlerList)
+                {
+                    this.registerWhiteboardService(h, info);
+                }
             }
         }
+        else
+        {
+            // TODO - failure DTO
+            final String type = info.getClass().getSimpleName().substring(0, info.getClass().getSimpleName().length() - 4);
+            SystemLogger.debug("Ignoring " + type + " service " + info.getServiceReference());
+        }
     }
 
     /**
      * Remove whiteboard service from the registry
      * @param info Whiteboard service info
      */
-    public void removeWhiteboardService(final WhiteboardServiceInfo<?> info)
+    public void removeWhiteboardService(@Nonnull final WhiteboardServiceInfo<?> info)
     {
         synchronized ( this.contextMap )
         {
@@ -319,7 +339,7 @@ public final class ServletContextHelperM
         }
         else if ( info instanceof ServletContextAttributeListenerInfo )
         {
-            handler.addListener(this.bundle, (ServletContextAttributeListenerInfo)info );
+            handler.addListener((ServletContextAttributeListenerInfo)info );
         }
     }
 
@@ -344,7 +364,7 @@ public final class ServletContextHelperM
         }
         else if ( info instanceof ServletContextAttributeListenerInfo )
         {
-            handler.removeListener(this.bundle, (ServletContextAttributeListenerInfo)info );
+            handler.removeListener((ServletContextAttributeListenerInfo)info );
         }
     }
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/AbstractReferenceTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/AbstractReferenceTracker.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/AbstractReferenceTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/AbstractReferenceTracker.java Mon Feb  2 08:04:59 2015
@@ -16,6 +16,8 @@
  */
 package org.apache.felix.http.base.internal.whiteboard.tracker;
 
+import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
+import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Filter;
 import org.osgi.framework.ServiceReference;
@@ -27,9 +29,13 @@ import org.osgi.util.tracker.ServiceTrac
  */
 public abstract class AbstractReferenceTracker<T> extends ServiceTracker<T, ServiceReference<T>>
 {
-    public AbstractReferenceTracker(final BundleContext context, final Filter filter)
+    private final ServletContextHelperManager contextManager;
+
+    public AbstractReferenceTracker(final ServletContextHelperManager contextManager,
+            final BundleContext context, final Filter filter)
     {
         super(context, filter, null);
+        this.contextManager = contextManager;
     }
 
     @Override
@@ -51,12 +57,23 @@ public abstract class AbstractReferenceT
         this.removed(ref);
     }
 
-    private void modified(final ServiceReference<T> ref) {
+    protected void modified(final ServiceReference<T> ref)
+    {
         removed(ref);
         added(ref);
     }
 
-    protected abstract void added(final ServiceReference<T> ref);
+    protected void added(final ServiceReference<T> ref)
+    {
+        final WhiteboardServiceInfo<T> info = this.getServiceInfo(ref);
+        this.contextManager.addWhiteboardService(info);
+    }
+
+    protected void removed(final ServiceReference<T> ref)
+    {
+        final WhiteboardServiceInfo<T> info = this.getServiceInfo(ref);
+        this.contextManager.removeWhiteboardService(info);
+    }
 
-    protected abstract void removed(final ServiceReference<T> ref);
+    protected abstract WhiteboardServiceInfo<T> getServiceInfo(final ServiceReference<T> ref);
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/FilterTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/FilterTracker.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/FilterTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/FilterTracker.java Mon Feb  2 08:04:59 2015
@@ -18,8 +18,8 @@ package org.apache.felix.http.base.inter
 
 import javax.servlet.Filter;
 
-import org.apache.felix.http.base.internal.logger.SystemLogger;
 import org.apache.felix.http.base.internal.runtime.FilterInfo;
+import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
 import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
@@ -28,7 +28,6 @@ import org.osgi.service.http.whiteboard.
 
 public final class FilterTracker extends AbstractReferenceTracker<Filter>
 {
-    private final ServletContextHelperManager contextManager;
 
     private static org.osgi.framework.Filter createFilter(final BundleContext btx)
     {
@@ -49,33 +48,11 @@ public final class FilterTracker extends
 
     public FilterTracker(final BundleContext context, final ServletContextHelperManager manager)
     {
-        super(context, createFilter(context));
-        this.contextManager = manager;
+        super(manager, context, createFilter(context));
     }
 
     @Override
-    protected void added(final ServiceReference<Filter> ref)
-    {
-        final FilterInfo info = new FilterInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.addWhiteboardService(info);
-        }
-        else
-        {
-            SystemLogger.debug("Ignoring Filter service " + ref);
-        }
-    }
-
-    @Override
-    protected void removed(final ServiceReference<Filter> ref)
-    {
-        final FilterInfo info = new FilterInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.removeWhiteboardService(info);
-        }
+    protected WhiteboardServiceInfo<Filter> getServiceInfo(final ServiceReference<Filter> ref) {
+        return new FilterInfo(ref);
     }
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ResourceTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ResourceTracker.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ResourceTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ResourceTracker.java Mon Feb  2 08:04:59 2015
@@ -16,8 +16,8 @@
  */
 package org.apache.felix.http.base.internal.whiteboard.tracker;
 
-import org.apache.felix.http.base.internal.logger.SystemLogger;
 import org.apache.felix.http.base.internal.runtime.ResourceInfo;
+import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
 import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Filter;
@@ -27,7 +27,6 @@ import org.osgi.service.http.whiteboard.
 
 public final class ResourceTracker extends AbstractReferenceTracker<Object>
 {
-    private final ServletContextHelperManager contextManager;
 
     private static Filter createFilter(final BundleContext btx)
     {
@@ -46,32 +45,11 @@ public final class ResourceTracker exten
 
     public ResourceTracker(final BundleContext context, final ServletContextHelperManager manager)
     {
-        super(context, createFilter(context));
-        this.contextManager = manager;
+        super(manager, context, createFilter(context));
     }
 
     @Override
-    protected void added(final ServiceReference<Object> ref)
-    {
-        final ResourceInfo info = new ResourceInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.addWhiteboardService(info);
-        }
-        else
-        {
-            SystemLogger.debug("Ignoring Resource service " + ref);
-        }
+    protected WhiteboardServiceInfo<Object> getServiceInfo(final ServiceReference<Object> ref) {
+        return new ResourceInfo(ref);
     }
-
-    @Override
-    protected void removed(final ServiceReference<Object> ref)
-    {
-        final ResourceInfo info = new ResourceInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.removeWhiteboardService(info);
-        }
-    }}
+}

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextAttributeListenerTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextAttributeListenerTracker.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextAttributeListenerTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextAttributeListenerTracker.java Mon Feb  2 08:04:59 2015
@@ -18,8 +18,8 @@ package org.apache.felix.http.base.inter
 
 import javax.servlet.ServletContextAttributeListener;
 
-import org.apache.felix.http.base.internal.logger.SystemLogger;
 import org.apache.felix.http.base.internal.runtime.ServletContextAttributeListenerInfo;
+import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
 import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
@@ -27,7 +27,6 @@ import org.osgi.framework.ServiceReferen
 
 public final class ServletContextAttributeListenerTracker extends AbstractReferenceTracker<ServletContextAttributeListener>
 {
-    private final ServletContextHelperManager contextManager;
 
     /** TODO Currently under discussion. */
     private static final String OPT_IN_PROP = "osgi.http.whiteboard.listener";
@@ -49,33 +48,11 @@ public final class ServletContextAttribu
 
     public ServletContextAttributeListenerTracker(final BundleContext context, final ServletContextHelperManager manager)
     {
-        super(context, createFilter(context));
-        this.contextManager = manager;
+        super(manager, context, createFilter(context));
     }
 
     @Override
-    protected void added(final ServiceReference<ServletContextAttributeListener> ref)
-    {
-        final ServletContextAttributeListenerInfo info = new ServletContextAttributeListenerInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.addWhiteboardService(info);
-        }
-        else
-        {
-            SystemLogger.debug("Ignoring ServletContextAttributeListenerInfo service " + ref);
-        }
-    }
-
-    @Override
-    protected void removed(final ServiceReference<ServletContextAttributeListener> ref)
-    {
-        final ServletContextAttributeListenerInfo info = new ServletContextAttributeListenerInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.removeWhiteboardService(info);
-        }
+    protected WhiteboardServiceInfo<ServletContextAttributeListener> getServiceInfo(final ServiceReference<ServletContextAttributeListener> ref) {
+        return new ServletContextAttributeListenerInfo(ref);
     }
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextHelperTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextHelperTracker.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextHelperTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextHelperTracker.java Mon Feb  2 08:04:59 2015
@@ -16,21 +16,23 @@
  */
 package org.apache.felix.http.base.internal.whiteboard.tracker;
 
-import org.apache.felix.http.base.internal.logger.SystemLogger;
-import org.apache.felix.http.base.internal.runtime.ContextInfo;
+import javax.annotation.Nonnull;
+
+import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
 import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.http.context.ServletContextHelper;
 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
+import org.osgi.util.tracker.ServiceTracker;
 
 /**
  * Tracks all {@link ServletContextHelper} services.
  * Only services with the required properties are tracker, services missing these
  * properties are ignored.
  */
-public final class ServletContextHelperTracker extends AbstractReferenceTracker<ServletContextHelper>
+public final class ServletContextHelperTracker extends ServiceTracker<ServletContextHelper, ServiceReference<ServletContextHelper>>
 {
     private final ServletContextHelperManager contextManager;
 
@@ -50,34 +52,41 @@ public final class ServletContextHelperT
         return null; // we never get here - and if we get an NPE which is fine
     }
 
-    public ServletContextHelperTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public ServletContextHelperTracker(@Nonnull final BundleContext context, @Nonnull final ServletContextHelperManager manager)
     {
-        super(context, createFilter(context));
+        super(context, createFilter(context), null);
         this.contextManager = manager;
     }
 
     @Override
-    protected void added(final ServiceReference<ServletContextHelper> ref)
+    public final ServiceReference<ServletContextHelper> addingService(@Nonnull final ServiceReference<ServletContextHelper> ref)
     {
-        final ContextInfo info = new ContextInfo(ref);
+        this.added(ref);
+        return ref;
+    }
 
-        if ( info.isValid() )
-        {
-            this.contextManager.addContextHelper(info);
-        }
-        else
-        {
-            SystemLogger.debug("Ignoring ServletContextHelper service " + ref);
-        }
+    @Override
+    public final void modifiedService(@Nonnull final ServiceReference<ServletContextHelper> ref, @Nonnull final ServiceReference<ServletContextHelper> service)
+    {
+        this.removed(ref);
+        this.added(ref);
     }
 
     @Override
-    protected void removed(final ServiceReference<ServletContextHelper> ref)
+    public final void removedService(@Nonnull final ServiceReference<ServletContextHelper> ref, @Nonnull final ServiceReference<ServletContextHelper> service)
     {
-        final ContextInfo info = new ContextInfo(ref);
-        if ( info.isValid() )
-        {
-            this.contextManager.removeContextHelper(info);
-        }
+        this.removed(ref);
+    }
+
+    private void added(@Nonnull final ServiceReference<ServletContextHelper> ref)
+    {
+        final ServletContextHelperInfo info = new ServletContextHelperInfo(ref);
+        this.contextManager.addContextHelper(info);
+    }
+
+    private void removed(@Nonnull final ServiceReference<ServletContextHelper> ref)
+    {
+        final ServletContextHelperInfo info = new ServletContextHelperInfo(ref);
+        this.contextManager.removeContextHelper(info);
     }
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextListenerTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextListenerTracker.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextListenerTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletContextListenerTracker.java Mon Feb  2 08:04:59 2015
@@ -18,8 +18,8 @@ package org.apache.felix.http.base.inter
 
 import javax.servlet.ServletContextListener;
 
-import org.apache.felix.http.base.internal.logger.SystemLogger;
 import org.apache.felix.http.base.internal.runtime.ServletContextListenerInfo;
+import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
 import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
@@ -27,7 +27,6 @@ import org.osgi.framework.ServiceReferen
 
 public final class ServletContextListenerTracker extends AbstractReferenceTracker<ServletContextListener>
 {
-    private final ServletContextHelperManager contextManager;
 
     /** TODO Currently under discussion. */
     private static final String OPT_IN_PROP = "osgi.http.whiteboard.listener";
@@ -49,33 +48,11 @@ public final class ServletContextListene
 
     public ServletContextListenerTracker(final BundleContext context, final ServletContextHelperManager manager)
     {
-        super(context, createFilter(context));
-        this.contextManager = manager;
+        super(manager, context, createFilter(context));
     }
 
     @Override
-    protected void added(final ServiceReference<ServletContextListener> ref)
-    {
-        final ServletContextListenerInfo info = new ServletContextListenerInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.addWhiteboardService(info);
-        }
-        else
-        {
-            SystemLogger.debug("Ignoring ServletContextListenerInfo service " + ref);
-        }
-    }
-
-    @Override
-    protected void removed(final ServiceReference<ServletContextListener> ref)
-    {
-        final ServletContextListenerInfo info = new ServletContextListenerInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.removeWhiteboardService(info);
-        }
+    protected WhiteboardServiceInfo<ServletContextListener> getServiceInfo(final ServiceReference<ServletContextListener> ref) {
+        return new ServletContextListenerInfo(ref);
     }
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java?rev=1656399&r1=1656398&r2=1656399&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java Mon Feb  2 08:04:59 2015
@@ -18,8 +18,8 @@ package org.apache.felix.http.base.inter
 
 import javax.servlet.Servlet;
 
-import org.apache.felix.http.base.internal.logger.SystemLogger;
 import org.apache.felix.http.base.internal.runtime.ServletInfo;
+import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
 import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
@@ -28,7 +28,6 @@ import org.osgi.service.http.whiteboard.
 
 public final class ServletTracker extends AbstractReferenceTracker<Servlet>
 {
-    private final ServletContextHelperManager contextManager;
 
     private static org.osgi.framework.Filter createFilter(final BundleContext btx)
     {
@@ -48,33 +47,11 @@ public final class ServletTracker extend
 
     public ServletTracker(final BundleContext context, final ServletContextHelperManager manager)
     {
-        super(context, createFilter(context));
-        this.contextManager = manager;
+        super(manager, context, createFilter(context));
     }
 
     @Override
-    protected void added(final ServiceReference<Servlet> ref)
-    {
-        final ServletInfo info = new ServletInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.addWhiteboardService(info);
-        }
-        else
-        {
-            SystemLogger.debug("Ignoring Servlet service " + ref);
-        }
-    }
-
-    @Override
-    protected void removed(final ServiceReference<Servlet> ref)
-    {
-        final ServletInfo info = new ServletInfo(ref);
-
-        if ( info.isValid() )
-        {
-            this.contextManager.removeWhiteboardService(info);
-        }
+    protected WhiteboardServiceInfo<Servlet> getServiceInfo(final ServiceReference<Servlet> ref) {
+        return new ServletInfo(ref);
     }
 }