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 2016/07/08 06:03:06 UTC

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

Author: cziegeler
Date: Fri Jul  8 06:03:06 2016
New Revision: 1751862

URL: http://svn.apache.org/viewvc?rev=1751862&view=rev
Log:
FELIX-5302 : NPE using Http Whiteboard

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

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/HandlerRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/HandlerRegistry.java?rev=1751862&r1=1751861&r2=1751862&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/HandlerRegistry.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/registry/HandlerRegistry.java Fri Jul  8 06:03:06 2016
@@ -53,6 +53,15 @@ public final class HandlerRegistry
     }
 
     /**
+     * Reset to initial state
+     */
+    public void reset()
+    {
+        this.registrations.clear();
+        this.init();
+    }
+
+    /**
      * Shutdown
      */
     public void shutdown()

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/FailureStateHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/FailureStateHandler.java?rev=1751862&r1=1751861&r2=1751862&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/FailureStateHandler.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/FailureStateHandler.java Fri Jul  8 06:03:06 2016
@@ -34,6 +34,14 @@ public class FailureStateHandler {
 
     private final Map<AbstractInfo<?>, FailureStatus> serviceFailures = new ConcurrentHashMap<AbstractInfo<?>, FailureStatus>();
 
+    /**
+     * Remove all failures.
+     */
+    public void clear()
+    {
+        this.serviceFailures.clear();
+    }
+
     public void add(final AbstractInfo<?> info, final int reason)
     {
         this.add(info, 0, reason);

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=1751862&r1=1751861&r2=1751862&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java Fri Jul  8 06:03:06 2016
@@ -88,12 +88,18 @@ import org.osgi.util.tracker.ServiceTrac
 
 public final class WhiteboardManager
 {
+    /** The bundle context of the http bundle. */
     private final BundleContext httpBundleContext;
 
+    /** The http service factory. */
     private final HttpServiceFactory httpServiceFactory;
 
     private final HttpServiceRuntimeImpl serviceRuntime;
 
+    private final List<ServiceTracker<?, ?>> trackers = new ArrayList<ServiceTracker<?, ?>>();
+
+    private final HttpServicePlugin plugin;
+
     /** A map containing all servlet context registrations. Mapped by context name */
     private final Map<String, List<WhiteboardContextHandler>> contextMap = new HashMap<String, List<WhiteboardContextHandler>>();
 
@@ -108,17 +114,14 @@ public final class WhiteboardManager
 
     private volatile ServiceRegistration<ServletContextHelper> defaultContextRegistration;
 
-    private final List<ServiceTracker<?, ?>> trackers = new ArrayList<ServiceTracker<?, ?>>();
-
     private volatile ServiceRegistration<HttpServiceRuntime> runtimeServiceReg;
 
-    private final HttpServicePlugin plugin;
-
     /**
      * Create a new whiteboard http manager
-     * @param bundleContext
-     * @param httpServiceFactory
-     * @param registry
+     *
+     * @param bundleContext The bundle context of the http bundle
+     * @param httpServiceFactory The http service factory
+     * @param registry The handler registry
      */
     public WhiteboardManager(final BundleContext bundleContext,
             final HttpServiceFactory httpServiceFactory,
@@ -131,6 +134,10 @@ public final class WhiteboardManager
         this.plugin = new HttpServicePlugin(bundleContext, this.serviceRuntime);
     }
 
+    /**
+     * Start the whiteboard manager
+     * @param containerContext The servlet context
+     */
     public void start(final ServletContext containerContext)
     {
         this.serviceRuntime.setAttribute(HttpServiceRuntimeConstants.HTTP_SERVICE_ID,
@@ -190,6 +197,10 @@ public final class WhiteboardManager
         this.plugin.register();
     }
 
+    /**
+     * Add a tracker and start it
+     * @param tracker The tracker instance
+     */
     private void addTracker(ServiceTracker<?, ?> tracker)
     {
         this.trackers.add(tracker);
@@ -210,6 +221,11 @@ public final class WhiteboardManager
 
         this.serviceRuntime.setServiceReference(null);
 
+        this.contextMap.clear();
+        this.servicesMap.clear();
+        this.failureStateHandler.clear();
+        this.registry.reset();
+
         if (this.defaultContextRegistration != null)
         {
             this.defaultContextRegistration.unregister();
@@ -221,6 +237,7 @@ public final class WhiteboardManager
             this.runtimeServiceReg.unregister();
             this.runtimeServiceReg = null;
         }
+        this.webContext = null;
     }
 
     public void setProperties(final Hashtable<String, Object> props)