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/04/02 15:58:00 UTC

svn commit: r1670916 - in /felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal: service/ whiteboard/ whiteboard/tracker/

Author: cziegeler
Date: Thu Apr  2 13:58:00 2015
New Revision: 1670916

URL: http://svn.apache.org/r1670916
Log:
FELIX-4060 : Implement HTTP Service Update (RFC-189) - merge two manager classes into single one

Removed:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java
Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/HttpServiceRuntimeImpl.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.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/HttpSessionAttributeListenerTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionIdListenerTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionListenerTracker.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/ServletRequestAttributeListenerTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletRequestListenerTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/WhiteboardServiceTracker.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/HttpServiceRuntimeImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/HttpServiceRuntimeImpl.java?rev=1670916&r1=1670915&r2=1670916&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/HttpServiceRuntimeImpl.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/HttpServiceRuntimeImpl.java Thu Apr  2 13:58:00 2015
@@ -24,7 +24,7 @@ import java.util.Hashtable;
 import org.apache.felix.http.base.internal.handler.HandlerRegistry;
 import org.apache.felix.http.base.internal.runtime.dto.RegistryRuntime;
 import org.apache.felix.http.base.internal.runtime.dto.RuntimeDTOBuilder;
-import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
+import org.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.service.http.runtime.HttpServiceRuntime;
 import org.osgi.service.http.runtime.dto.RequestInfoDTO;
 import org.osgi.service.http.runtime.dto.RuntimeDTO;
@@ -34,15 +34,16 @@ public final class HttpServiceRuntimeImp
     private final Hashtable<String, Object> attributes = new Hashtable<String, Object>();
 
     private final HandlerRegistry registry;
-    private final ServletContextHelperManager contextManager;
+    private final WhiteboardManager contextManager;
 
     public HttpServiceRuntimeImpl(HandlerRegistry registry,
-            ServletContextHelperManager contextManager)
+            WhiteboardManager contextManager)
     {
         this.registry = registry;
         this.contextManager = contextManager;
     }
 
+    @Override
     public synchronized RuntimeDTO getRuntimeDTO()
     {
         RegistryRuntime runtime = contextManager.getRuntime(registry);

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=1670916&r1=1670915&r2=1670916&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 Thu Apr  2 13:58:00 2015
@@ -16,22 +16,77 @@
  */
 package org.apache.felix.http.base.internal.whiteboard;
 
+import static org.osgi.service.http.runtime.dto.DTOConstants.FAILURE_REASON_NO_SERVLET_CONTEXT_MATCHING;
+import static org.osgi.service.http.runtime.dto.DTOConstants.FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE;
+import static org.osgi.service.http.runtime.dto.DTOConstants.FAILURE_REASON_UNKNOWN;
+import static org.osgi.service.http.runtime.dto.DTOConstants.FAILURE_REASON_VALIDATION_FAILED;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentSkipListMap;
 
 import javax.annotation.Nonnull;
 import javax.servlet.ServletContext;
+import javax.servlet.ServletContextListener;
 import javax.servlet.http.HttpSession;
 
 import org.apache.felix.http.base.internal.context.ExtServletContext;
 import org.apache.felix.http.base.internal.handler.HandlerRegistry;
 import org.apache.felix.http.base.internal.handler.HttpSessionWrapper;
+import org.apache.felix.http.base.internal.logger.SystemLogger;
+import org.apache.felix.http.base.internal.runtime.AbstractInfo;
+import org.apache.felix.http.base.internal.runtime.FilterInfo;
+import org.apache.felix.http.base.internal.runtime.HttpSessionAttributeListenerInfo;
+import org.apache.felix.http.base.internal.runtime.HttpSessionIdListenerInfo;
+import org.apache.felix.http.base.internal.runtime.HttpSessionListenerInfo;
+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.ServletRequestAttributeListenerInfo;
+import org.apache.felix.http.base.internal.runtime.ServletRequestListenerInfo;
+import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
+import org.apache.felix.http.base.internal.runtime.dto.ContextRuntime;
+import org.apache.felix.http.base.internal.runtime.dto.FailureRuntime;
+import org.apache.felix.http.base.internal.runtime.dto.RegistryRuntime;
+import org.apache.felix.http.base.internal.runtime.dto.ServletContextHelperRuntime;
 import org.apache.felix.http.base.internal.service.HttpServiceFactory;
 import org.apache.felix.http.base.internal.service.HttpServiceRuntimeImpl;
+import org.apache.felix.http.base.internal.util.MimeTypes;
+import org.apache.felix.http.base.internal.whiteboard.tracker.FilterTracker;
+import org.apache.felix.http.base.internal.whiteboard.tracker.HttpSessionAttributeListenerTracker;
+import org.apache.felix.http.base.internal.whiteboard.tracker.HttpSessionListenerTracker;
+import org.apache.felix.http.base.internal.whiteboard.tracker.ResourceTracker;
+import org.apache.felix.http.base.internal.whiteboard.tracker.ServletContextAttributeListenerTracker;
+import org.apache.felix.http.base.internal.whiteboard.tracker.ServletContextHelperTracker;
+import org.apache.felix.http.base.internal.whiteboard.tracker.ServletContextListenerTracker;
+import org.apache.felix.http.base.internal.whiteboard.tracker.ServletRequestAttributeListenerTracker;
+import org.apache.felix.http.base.internal.whiteboard.tracker.ServletRequestListenerTracker;
+import org.apache.felix.http.base.internal.whiteboard.tracker.ServletTracker;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.http.context.ServletContextHelper;
 import org.osgi.service.http.runtime.HttpServiceRuntime;
 import org.osgi.service.http.runtime.HttpServiceRuntimeConstants;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
+import org.osgi.util.tracker.ServiceTracker;
 
 public final class WhiteboardManager
 {
@@ -41,7 +96,25 @@ public final class WhiteboardManager
 
     private final HttpServiceRuntimeImpl serviceRuntime;
 
-    private final ServletContextHelperManager contextManager;
+    /** A map containing all servlet context registrations. Mapped by context name */
+    private final Map<String, List<ContextHandler>> contextMap = new HashMap<String, List<ContextHandler>>();
+
+    /** A map with all servlet/filter registrations, mapped by abstract info. */
+    private final Map<WhiteboardServiceInfo<?>, List<ContextHandler>> servicesMap = new HashMap<WhiteboardServiceInfo<?>, List<ContextHandler>>();
+
+    private final WhiteboardHttpService httpService;
+
+    private final ListenerRegistry listenerRegistry;
+
+    private final Map<AbstractInfo<?>, Integer> serviceFailures = new ConcurrentSkipListMap<AbstractInfo<?>, Integer>();
+
+    private volatile ServletContext webContext;
+
+    private volatile ServiceReference<HttpServiceRuntime> httpServiceRuntime;
+
+    private volatile ServiceRegistration<ServletContextHelper> defaultContextRegistration;
+
+    private final List<ServiceTracker<?, ?>> trackers = new ArrayList<ServiceTracker<?, ?>>();
 
     private volatile ServiceRegistration<HttpServiceRuntime> runtimeServiceReg;
 
@@ -57,8 +130,9 @@ public final class WhiteboardManager
     {
         this.bundleContext = bundleContext;
         this.httpServiceFactory = httpServiceFactory;
-        this.contextManager = new ServletContextHelperManager(bundleContext, registry);
-        this.serviceRuntime = new HttpServiceRuntimeImpl(registry, this.contextManager);
+        this.httpService = new WhiteboardHttpService(this.bundleContext, registry);
+        this.listenerRegistry = new ListenerRegistry(bundleContext.getBundle());
+        this.serviceRuntime = new HttpServiceRuntimeImpl(registry, this);
     }
 
     public void start(final ServletContext context)
@@ -70,12 +144,82 @@ public final class WhiteboardManager
                 serviceRuntime,
                 this.serviceRuntime.getAttributes());
 
-        this.contextManager.start(context, this.runtimeServiceReg.getReference());
+        this.webContext = webContext;
+        this.httpServiceRuntime = httpServiceRuntime;
+
+        final Dictionary<String, Object> props = new Hashtable<String, Object>();
+        props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME, HttpWhiteboardConstants.HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME);
+        props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH, "/");
+        props.put(Constants.SERVICE_RANKING, Integer.MIN_VALUE);
+
+        this.defaultContextRegistration = bundleContext.registerService(
+                ServletContextHelper.class,
+                new ServiceFactory<ServletContextHelper>()
+                {
+
+                    @Override
+                    public ServletContextHelper getService(
+                            final Bundle bundle,
+                            final ServiceRegistration<ServletContextHelper> registration)
+                    {
+                        return new ServletContextHelper(bundle)
+                        {
+
+                            @Override
+                            public String getMimeType(final String file)
+                            {
+                                return MimeTypes.get().getByFile(file);
+                            }
+                        };
+                    }
+
+                    @Override
+                    public void ungetService(
+                            final Bundle bundle,
+                            final ServiceRegistration<ServletContextHelper> registration,
+                            final ServletContextHelper service)
+                    {
+                        // nothing to do
+                    }
+                }, props);
+        addTracker(new FilterTracker(this.bundleContext, this));
+        addTracker(new ServletTracker(this.bundleContext, this));
+        addTracker(new ResourceTracker(this.bundleContext, this));
+
+        addTracker(new HttpSessionListenerTracker(this.bundleContext, this));
+        addTracker(new HttpSessionAttributeListenerTracker(this.bundleContext, this));
+
+        addTracker(new ServletContextHelperTracker(this.bundleContext, this));
+        addTracker(new ServletContextListenerTracker(this.bundleContext, this));
+        addTracker(new ServletContextAttributeListenerTracker(this.bundleContext, this));
+
+        addTracker(new ServletRequestListenerTracker(this.bundleContext, this));
+        addTracker(new ServletRequestAttributeListenerTracker(this.bundleContext, this));
+    }
+
+    private void addTracker(ServiceTracker<?, ?> tracker)
+    {
+        this.trackers.add(tracker);
+        tracker.open();
     }
 
+    /**
+     * Stop the instance
+     */
     public void stop()
     {
-        this.contextManager.stop();
+        for(final ServiceTracker<?, ?> t : this.trackers)
+        {
+            t.close();
+        }
+        this.trackers.clear();
+
+        // TODO cleanup
+        if (this.defaultContextRegistration != null)
+        {
+            this.defaultContextRegistration.unregister();
+            this.defaultContextRegistration = null;
+        }
 
         if ( this.runtimeServiceReg != null )
         {
@@ -101,17 +245,473 @@ public final class WhiteboardManager
     {
         for(final Long contextId : contextIds)
         {
-            // TODO - on shutdown context manager is already NULL which shouldn't be the case
-            if ( this.contextManager != null )
+            final ContextHandler handler = this.getContextHandler(contextId);
+            if ( handler != null )
+            {
+                final ExtServletContext context = handler.getServletContext(this.bundleContext.getBundle());
+                new HttpSessionWrapper(contextId, session, context, true).invalidate();
+                handler.ungetServletContext(this.bundleContext.getBundle());
+            }
+        }
+    }
+
+    /**
+     * Activate a servlet context helper.
+     * @param contextInfo A context info
+     */
+    private void activate(final ContextHandler handler)
+    {
+        handler.activate();
+
+        this.httpService.registerContext(handler);
+
+        final Map<ServiceReference<ServletContextListener>, ServletContextListenerInfo> listeners = new TreeMap<ServiceReference<ServletContextListener>, ServletContextListenerInfo>();
+        final List<WhiteboardServiceInfo<?>> services = new ArrayList<WhiteboardServiceInfo<?>>();
+
+        for(final Map.Entry<WhiteboardServiceInfo<?>, List<ContextHandler>> entry : this.servicesMap.entrySet())
+        {
+            if ( entry.getKey().getContextSelectionFilter().match(handler.getContextInfo().getServiceReference()) )
+            {
+                entry.getValue().add(handler);
+                if ( entry.getKey() instanceof ServletContextListenerInfo )
+                {
+                    final ServletContextListenerInfo info = (ServletContextListenerInfo)entry.getKey();
+                    listeners.put(info.getServiceReference(), info);
+                }
+                else
+                {
+                    services.add(entry.getKey());
+                }
+                removeFailure(entry.getKey(), FAILURE_REASON_NO_SERVLET_CONTEXT_MATCHING);
+            }
+        }
+        // context listeners first
+        for(final ServletContextListenerInfo info : listeners.values())
+        {
+            this.listenerRegistry.initialized(info, handler);
+        }
+        // now register services
+        for(final WhiteboardServiceInfo<?> info : services)
+        {
+            this.registerWhiteboardService(handler, info);
+        }
+    }
+
+    /**
+     * Deactivate a servlet context helper.
+     * @param contextInfo A context info
+     */
+    private void deactivate(final ContextHandler handler)
+    {
+        // context listeners last
+        final Map<ServiceReference<ServletContextListener>, ServletContextListenerInfo> listeners = new TreeMap<ServiceReference<ServletContextListener>, ServletContextListenerInfo>();
+        final Iterator<Map.Entry<WhiteboardServiceInfo<?>, List<ContextHandler>>> i = this.servicesMap.entrySet().iterator();
+        while ( i.hasNext() )
+        {
+            final Map.Entry<WhiteboardServiceInfo<?>, List<ContextHandler>> entry = i.next();
+            if ( entry.getValue().remove(handler) )
+            {
+                if ( entry.getKey() instanceof ServletContextListenerInfo )
+                {
+                    final ServletContextListenerInfo info = (ServletContextListenerInfo)entry.getKey();
+                    listeners.put(info.getServiceReference(), info);
+                }
+                else
+                {
+                    this.unregisterWhiteboardService(handler, entry.getKey());
+                }
+            }
+        }
+        for(final ServletContextListenerInfo info : listeners.values())
+        {
+            this.listenerRegistry.destroyed(info, handler);
+        }
+        handler.deactivate();
+
+        this.httpService.unregisterContext(handler);
+    }
+
+    /**
+     * Add a servlet context helper.
+     */
+    public void addContextHelper(final ServletContextHelperInfo info)
+    {
+        // no failure DTO and no logging if not matching
+        if ( isMatchingService(info) )
+        {
+            if ( info.isValid() )
+            {
+                synchronized ( this.contextMap )
+                {
+                    PerContextEventListener contextEventListener = listenerRegistry.addContext(info);
+                    ContextHandler handler = new ContextHandler(info,
+                            this.webContext,
+                            contextEventListener,
+                            this.bundleContext.getBundle());
+
+                    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 )
+                    {
+                        // check for deactivate
+                        if ( handlerList.size() > 1 )
+                        {
+                            ContextHandler oldHead = handlerList.get(1);
+                            this.deactivate(oldHead);
+                            this.serviceFailures.put(oldHead.getContextInfo(), FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE);
+                        }
+                        removeFailure(handler.getContextInfo(), FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE);
+                        this.activate(handler);
+                    }
+                    else
+                    {
+                        this.serviceFailures.put(handler.getContextInfo(), FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE);
+                    }
+                }
+            }
+            else
+            {
+                final String type = info.getClass().getSimpleName().substring(0, info.getClass().getSimpleName().length() - 4);
+                SystemLogger.debug("Ignoring " + type + " service " + info.getServiceReference());
+                this.serviceFailures.put(info, FAILURE_REASON_VALIDATION_FAILED);
+            }
+        }
+    }
+
+    /**
+     * Remove a servlet context helper
+     */
+    public void removeContextHelper(final ServletContextHelperInfo info)
+    {
+        // no failure DTO and no logging if not matching
+        if ( isMatchingService(info) )
+        {
+            if ( info.isValid() )
+            {
+                synchronized ( this.contextMap )
+                {
+                    final List<ContextHandler> handlerList = this.contextMap.get(info.getName());
+                    if ( handlerList != null )
+                    {
+                        final Iterator<ContextHandler> i = handlerList.iterator();
+                        boolean first = true;
+                        boolean activateNext = false;
+                        while ( i.hasNext() )
+                        {
+                            final ContextHandler handler = i.next();
+                            if ( handler.getContextInfo().compareTo(info) == 0 )
+                            {
+                                i.remove();
+                                // check for deactivate
+                                if ( first )
+                                {
+                                    this.deactivate(handler);
+                                    activateNext = true;
+                                }
+                                break;
+                            }
+                            first = false;
+                        }
+                        if ( handlerList.isEmpty() )
+                        {
+                            this.contextMap.remove(info.getName());
+                        }
+                        else if ( activateNext )
+                        {
+                            ContextHandler newHead = handlerList.get(0);
+                            this.activate(newHead);
+                            removeFailure(newHead.getContextInfo(), FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE);
+                        }
+                        listenerRegistry.removeContext(info);
+                    }
+                }
+            }
+            this.serviceFailures.remove(info);
+        }
+    }
+
+    /**
+     * Find the list of matching contexts for the whiteboard service
+     */
+    private List<ContextHandler> getMatchingContexts(final WhiteboardServiceInfo<?> info)
+    {
+        final List<ContextHandler> result = new ArrayList<ContextHandler>();
+        for(final List<ContextHandler> handlerList : this.contextMap.values()) {
+            final ContextHandler h = handlerList.get(0);
+            if ( info.getContextSelectionFilter().match(h.getContextInfo().getServiceReference()) )
+            {
+                result.add(h);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Add new whiteboard service to the registry
+     * @param info Whiteboard service info
+     */
+    public void addWhiteboardService(@Nonnull final WhiteboardServiceInfo<?> info)
+    {
+        // no logging and no DTO if other target service
+        if ( isMatchingService(info) )
+        {
+            if ( info.isValid() )
+            {
+                synchronized ( this.contextMap )
+                {
+                    final List<ContextHandler> handlerList = this.getMatchingContexts(info);
+                    this.servicesMap.put(info, handlerList);
+                    if (handlerList.isEmpty())
+                    {
+                        this.serviceFailures.put(info, FAILURE_REASON_NO_SERVLET_CONTEXT_MATCHING);
+                    }
+                    else
+                    {
+                        for(final ContextHandler h : handlerList)
+                        {
+                            this.registerWhiteboardService(h, info);
+                        }
+                    }
+                }
+            }
+            else
+            {
+                final String type = info.getClass().getSimpleName().substring(0, info.getClass().getSimpleName().length() - 4);
+                SystemLogger.debug("Ignoring invalid " + type + " service " + info.getServiceReference());
+                this.serviceFailures.put(info, FAILURE_REASON_VALIDATION_FAILED);
+            }
+        }
+    }
+
+    /**
+     * Remove whiteboard service from the registry
+     * @param info Whiteboard service info
+     */
+    public void removeWhiteboardService(@Nonnull final WhiteboardServiceInfo<?> info)
+    {
+        // no logging and no DTO if other target service
+        if ( isMatchingService(info) ) {
+            if ( info.isValid() )
+            {
+                synchronized ( this.contextMap )
+                {
+                    final List<ContextHandler> handlerList = this.servicesMap.remove(info);
+                    if ( handlerList != null )
+                    {
+                        for(final ContextHandler h : handlerList)
+                        {
+                            this.unregisterWhiteboardService(h, info);
+                        }
+                    }
+                }
+            }
+            this.serviceFailures.remove(info);
+        }
+    }
+
+    /**
+     * Register whiteboard service in the http service
+     * @param handler Context handler
+     * @param info Whiteboard service info
+     */
+    private void registerWhiteboardService(final ContextHandler handler, final WhiteboardServiceInfo<?> info)
+    {
+        try
+        {
+            if ( info instanceof ServletInfo )
+            {
+                this.httpService.registerServlet(handler, (ServletInfo)info);
+            }
+            else if ( info instanceof FilterInfo )
+            {
+                this.httpService.registerFilter(handler, (FilterInfo)info);
+            }
+            else if ( info instanceof ResourceInfo )
+            {
+                this.httpService.registerResource(handler, (ResourceInfo)info);
+            }
+
+            else if ( info instanceof ServletContextAttributeListenerInfo )
+            {
+                this.listenerRegistry.addListener((ServletContextAttributeListenerInfo) info, handler);
+            }
+            else if ( info instanceof HttpSessionListenerInfo )
+            {
+                this.listenerRegistry.addListener((HttpSessionListenerInfo) info, handler);
+            }
+            else if ( info instanceof HttpSessionAttributeListenerInfo )
+            {
+                this.listenerRegistry.addListener((HttpSessionAttributeListenerInfo) info, handler);
+            }
+            else if ( info instanceof HttpSessionIdListenerInfo )
+            {
+                this.listenerRegistry.addListener((HttpSessionIdListenerInfo) info, handler);
+            }
+            else if ( info instanceof ServletRequestListenerInfo )
+            {
+                this.listenerRegistry.addListener((ServletRequestListenerInfo) info, handler);
+            }
+            else if ( info instanceof ServletRequestAttributeListenerInfo )
+            {
+                this.listenerRegistry.addListener((ServletRequestAttributeListenerInfo) info, handler);
+            }
+        }
+        catch (final RegistrationFailureException e)
+        {
+            serviceFailures.put(e.getInfo(), e.getErrorCode());
+            SystemLogger.error("Exception while registering whiteboard service " + info.getServiceReference(), e);
+        }
+        catch (final RuntimeException e)
+        {
+            serviceFailures.put(info, FAILURE_REASON_UNKNOWN);
+            SystemLogger.error("Exception while registering whiteboard service " + info.getServiceReference(), e);
+        }
+    }
+
+    /**
+     * Unregister whiteboard service from the http service
+     * @param handler Context handler
+     * @param info Whiteboard service info
+     */
+    private void unregisterWhiteboardService(final ContextHandler handler, final WhiteboardServiceInfo<?> info)
+    {
+        try
+        {
+            if ( info instanceof ServletInfo )
+            {
+                this.httpService.unregisterServlet(handler, (ServletInfo)info);
+            }
+            else if ( info instanceof FilterInfo )
+            {
+                this.httpService.unregisterFilter(handler, (FilterInfo)info);
+            }
+            else if ( info instanceof ResourceInfo )
+            {
+                this.httpService.unregisterResource(handler, (ResourceInfo)info);
+            }
+
+            else if ( info instanceof ServletContextAttributeListenerInfo )
+            {
+                this.listenerRegistry.removeListener((ServletContextAttributeListenerInfo) info, handler);
+            }
+            else if ( info instanceof HttpSessionListenerInfo )
+            {
+                this.listenerRegistry.removeListener((HttpSessionListenerInfo) info, handler);
+            }
+            else if ( info instanceof HttpSessionAttributeListenerInfo )
+            {
+                this.listenerRegistry.removeListener((HttpSessionAttributeListenerInfo) info, handler);
+            }
+            else if ( info instanceof HttpSessionIdListenerInfo )
+            {
+                this.listenerRegistry.removeListener((HttpSessionIdListenerInfo) info, handler);
+            }
+            else if ( info instanceof ServletRequestListenerInfo )
+            {
+                this.listenerRegistry.removeListener((ServletRequestListenerInfo) info, handler);
+            }
+            else if ( info instanceof ServletRequestAttributeListenerInfo )
+            {
+                this.listenerRegistry.removeListener((ServletRequestAttributeListenerInfo) info, handler);
+            }
+        }
+        catch (final RegistrationFailureException e)
+        {
+            serviceFailures.put(e.getInfo(), e.getErrorCode());
+            SystemLogger.error("Exception while removing servlet", e);
+        }
+        serviceFailures.remove(info);
+    }
+
+    private void removeFailure(AbstractInfo<?> info, int failureCode)
+    {
+        Integer registeredFailureCode = this.serviceFailures.get(info);
+        if (registeredFailureCode != null && registeredFailureCode == failureCode)
+        {
+            this.serviceFailures.remove(info);
+        }
+    }
+
+    /**
+     * Check whether the service is specifying a target http service runtime
+     * and if so if that is matching this runtime
+     */
+    private boolean isMatchingService(final AbstractInfo<?> info)
+    {
+        final String target = info.getTarget();
+        if ( target != null )
+        {
+            try
+            {
+                final Filter f = this.bundleContext.createFilter(target);
+                return f.match(this.httpServiceRuntime);
+            }
+            catch ( final InvalidSyntaxException ise)
+            {
+                // log and ignore service
+                SystemLogger.error("Invalid target filter expression for " + info.getServiceReference() + " : " + target, ise);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public ContextHandler getContextHandler(final Long contextId)
+    {
+        synchronized ( this.contextMap )
+        {
+            for(final List<ContextHandler> handlerList : this.contextMap.values())
+            {
+                final ContextHandler h = handlerList.get(0);
+                if ( h.getContextInfo().getServiceId() == contextId )
+                {
+                    return h;
+                }
+            }
+        }
+        return null;
+    }
+
+    public Collection<ContextHandler> getContextHandlers()
+    {
+         final List<ContextHandler> handlers = new ArrayList<ContextHandler>();
+         synchronized ( this.contextMap )
+         {
+             for(final List<ContextHandler> handlerList : this.contextMap.values())
+             {
+                 final ContextHandler h = handlerList.get(0);
+                 handlers.add(h);
+             }
+         }
+         return handlers;
+    }
+
+    public RegistryRuntime getRuntime(HandlerRegistry registry)
+    {
+        Collection<ServletContextHelperRuntime> contextRuntimes = new TreeSet<ServletContextHelperRuntime>(ServletContextHelperRuntime.COMPARATOR);
+        List<ContextRuntime> handlerRuntimes;
+        Map<Long, Collection<ServiceReference<?>>> listenerRuntimes;
+        FailureRuntime.Builder failureRuntime = FailureRuntime.builder();
+        synchronized ( this.contextMap )
+        {
+            for (List<ContextHandler> contextHandlerList : this.contextMap.values())
             {
-                final ContextHandler handler = this.contextManager.getContextHandler(contextId);
-                if ( handler != null )
+                if ( !contextHandlerList.isEmpty() )
                 {
-                    final ExtServletContext context = handler.getServletContext(this.bundleContext.getBundle());
-                    new HttpSessionWrapper(contextId, session, context, true).invalidate();
-                    handler.ungetServletContext(this.bundleContext.getBundle());
+                    contextRuntimes.add(contextHandlerList.get(0));
                 }
             }
+            handlerRuntimes = registry.getRuntime(failureRuntime);
+            listenerRuntimes = listenerRegistry.getContextRuntimes();
+            failureRuntime.add(serviceFailures);
         }
+        return new RegistryRuntime(contextRuntimes, handlerRuntimes, listenerRuntimes, failureRuntime.build());
     }
 }

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=1670916&r1=1670915&r2=1670916&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 Thu Apr  2 13:58:00 2015
@@ -20,14 +20,14 @@ import javax.servlet.Filter;
 
 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.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
 public final class FilterTracker extends WhiteboardServiceTracker<Filter>
 {
-    public FilterTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public FilterTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, String.format("(&(objectClass=%s)(|(%s=*)(%s=*)(%s=*)))",
                 Filter.class.getName(),

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionAttributeListenerTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionAttributeListenerTracker.java?rev=1670916&r1=1670915&r2=1670916&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionAttributeListenerTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionAttributeListenerTracker.java Thu Apr  2 13:58:00 2015
@@ -20,13 +20,13 @@ import javax.servlet.http.HttpSessionAtt
 
 import org.apache.felix.http.base.internal.runtime.HttpSessionAttributeListenerInfo;
 import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
-import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
+import org.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
 public final class HttpSessionAttributeListenerTracker extends WhiteboardServiceTracker<HttpSessionAttributeListener>
 {
-    public HttpSessionAttributeListenerTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public HttpSessionAttributeListenerTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, createListenerFilterExpression(HttpSessionAttributeListener.class));
     }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionIdListenerTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionIdListenerTracker.java?rev=1670916&r1=1670915&r2=1670916&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionIdListenerTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionIdListenerTracker.java Thu Apr  2 13:58:00 2015
@@ -20,13 +20,13 @@ import javax.servlet.http.HttpSessionIdL
 
 import org.apache.felix.http.base.internal.runtime.HttpSessionIdListenerInfo;
 import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
-import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
+import org.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
 public final class HttpSessionIdListenerTracker extends WhiteboardServiceTracker<HttpSessionIdListener>
 {
-    public HttpSessionIdListenerTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public HttpSessionIdListenerTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, createListenerFilterExpression(HttpSessionIdListener.class));
     }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionListenerTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionListenerTracker.java?rev=1670916&r1=1670915&r2=1670916&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionListenerTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/HttpSessionListenerTracker.java Thu Apr  2 13:58:00 2015
@@ -20,13 +20,13 @@ import javax.servlet.http.HttpSessionLis
 
 import org.apache.felix.http.base.internal.runtime.HttpSessionListenerInfo;
 import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
-import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
+import org.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
 public final class HttpSessionListenerTracker extends WhiteboardServiceTracker<HttpSessionListener>
 {
-    public HttpSessionListenerTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public HttpSessionListenerTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, createListenerFilterExpression(HttpSessionListener.class));
     }

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=1670916&r1=1670915&r2=1670916&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 Thu Apr  2 13:58:00 2015
@@ -18,14 +18,14 @@ package org.apache.felix.http.base.inter
 
 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.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
 public final class ResourceTracker extends WhiteboardServiceTracker<Object>
 {
-    public ResourceTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public ResourceTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, String.format("(&(%s=*)(%s=*))",
                 HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN,

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=1670916&r1=1670915&r2=1670916&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 Thu Apr  2 13:58:00 2015
@@ -20,13 +20,13 @@ import javax.servlet.ServletContextAttri
 
 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.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
 public final class ServletContextAttributeListenerTracker extends WhiteboardServiceTracker<ServletContextAttributeListener>
 {
-    public ServletContextAttributeListenerTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public ServletContextAttributeListenerTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, createListenerFilterExpression(ServletContextAttributeListener.class));
     }

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=1670916&r1=1670915&r2=1670916&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 Thu Apr  2 13:58:00 2015
@@ -19,7 +19,7 @@ package org.apache.felix.http.base.inter
 import javax.annotation.Nonnull;
 
 import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
-import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
+import org.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
@@ -31,7 +31,7 @@ import org.osgi.util.tracker.ServiceTrac
  */
 public final class ServletContextHelperTracker extends ServiceTracker<ServletContextHelper, ServiceReference<ServletContextHelper>>
 {
-    private final ServletContextHelperManager contextManager;
+    private final WhiteboardManager contextManager;
 
     private static org.osgi.framework.Filter createFilter(final BundleContext btx)
     {
@@ -47,7 +47,7 @@ public final class ServletContextHelperT
         return null; // we never get here - and if we get an NPE which is fine
     }
 
-    public ServletContextHelperTracker(@Nonnull final BundleContext context, @Nonnull final ServletContextHelperManager manager)
+    public ServletContextHelperTracker(@Nonnull final BundleContext context, @Nonnull final WhiteboardManager manager)
     {
         super(context, createFilter(context), null);
         this.contextManager = manager;

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=1670916&r1=1670915&r2=1670916&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 Thu Apr  2 13:58:00 2015
@@ -20,13 +20,13 @@ import javax.servlet.ServletContextListe
 
 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.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
 public final class ServletContextListenerTracker extends WhiteboardServiceTracker<ServletContextListener>
 {
-    public ServletContextListenerTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public ServletContextListenerTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, createListenerFilterExpression(ServletContextListener.class));
     }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletRequestAttributeListenerTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletRequestAttributeListenerTracker.java?rev=1670916&r1=1670915&r2=1670916&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletRequestAttributeListenerTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletRequestAttributeListenerTracker.java Thu Apr  2 13:58:00 2015
@@ -20,13 +20,13 @@ import javax.servlet.ServletRequestAttri
 
 import org.apache.felix.http.base.internal.runtime.ServletRequestAttributeListenerInfo;
 import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
-import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
+import org.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
 public final class ServletRequestAttributeListenerTracker extends WhiteboardServiceTracker<ServletRequestAttributeListener>
 {
-    public ServletRequestAttributeListenerTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public ServletRequestAttributeListenerTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, createListenerFilterExpression(ServletRequestAttributeListener.class));
     }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletRequestListenerTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletRequestListenerTracker.java?rev=1670916&r1=1670915&r2=1670916&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletRequestListenerTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletRequestListenerTracker.java Thu Apr  2 13:58:00 2015
@@ -20,13 +20,13 @@ import javax.servlet.ServletRequestListe
 
 import org.apache.felix.http.base.internal.runtime.ServletRequestListenerInfo;
 import org.apache.felix.http.base.internal.runtime.WhiteboardServiceInfo;
-import org.apache.felix.http.base.internal.whiteboard.ServletContextHelperManager;
+import org.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
 public final class ServletRequestListenerTracker extends WhiteboardServiceTracker<ServletRequestListener>
 {
-    public ServletRequestListenerTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public ServletRequestListenerTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, createListenerFilterExpression(ServletRequestListener.class));
     }

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=1670916&r1=1670915&r2=1670916&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 Thu Apr  2 13:58:00 2015
@@ -20,14 +20,14 @@ import javax.servlet.Servlet;
 
 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.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 
 public final class ServletTracker extends WhiteboardServiceTracker<Servlet>
 {
-    public ServletTracker(final BundleContext context, final ServletContextHelperManager manager)
+    public ServletTracker(final BundleContext context, final WhiteboardManager manager)
     {
         super(manager, context, String.format("(&(objectClass=%s)(|(%s=*)(%s=*)))",
                 Servlet.class.getName(),

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/WhiteboardServiceTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/WhiteboardServiceTracker.java?rev=1670916&r1=1670915&r2=1670916&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/WhiteboardServiceTracker.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/WhiteboardServiceTracker.java Thu Apr  2 13:58:00 2015
@@ -17,7 +17,7 @@
 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.apache.felix.http.base.internal.whiteboard.WhiteboardManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
@@ -56,8 +56,8 @@ public abstract class WhiteboardServiceT
         return null; // we never get here - and if we get an NPE which is fine
     }
 
-    /** The context manager is called for each added/removed reference. */
-    private final ServletContextHelperManager contextManager;
+    /** The  manager is called for each added/removed reference. */
+    private final WhiteboardManager contextManager;
 
     /**
      * Create a new tracker
@@ -65,7 +65,7 @@ public abstract class WhiteboardServiceT
      * @param bundleContext The bundle context.
      * @param filterExpr The filter expression for the services to track
      */
-    public WhiteboardServiceTracker(final ServletContextHelperManager contextManager,
+    public WhiteboardServiceTracker(final WhiteboardManager contextManager,
             final BundleContext bundleContext, final String filterExpr)
     {
         super(bundleContext, createFilter(bundleContext, filterExpr), null);