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/03 08:51:03 UTC

svn commit: r1656640 - in /felix/trunk/http/base/src: main/java/org/apache/felix/http/base/internal/handler/ main/java/org/apache/felix/http/base/internal/runtime/ main/java/org/apache/felix/http/base/internal/whiteboard/ test/java/org/apache/felix/htt...

Author: cziegeler
Date: Tue Feb  3 07:51:02 2015
New Revision: 1656640

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

Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/AbstractHandler.java
    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/PerContextHandlerRegistry.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/runtime/AbstractInfo.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletInfo.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
    felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/AbstractHandlerTest.java
    felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/FilterHandlerTest.java
    felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/ServletHandlerTest.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/AbstractHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/AbstractHandler.java?rev=1656640&r1=1656639&r2=1656640&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/AbstractHandler.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/AbstractHandler.java Tue Feb  3 07:51:02 2015
@@ -16,9 +16,7 @@
  */
 package org.apache.felix.http.base.internal.handler;
 
-import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Pattern;
 
 import javax.servlet.Filter;
@@ -29,35 +27,17 @@ import org.apache.felix.http.base.intern
 
 public abstract class AbstractHandler<T extends AbstractHandler> implements Comparable<T>
 {
-    private final static AtomicInteger ID = new AtomicInteger();
-
-    private final int id;
     private final String baseName;
     private final ExtServletContext context;
     private final Map<String, String> initParams;
 
-    public AbstractHandler(ExtServletContext context, String baseName)
-    {
-        this.context = context;
-        this.baseName = baseName;
-        this.id = ID.incrementAndGet();
-        this.initParams = new HashMap<String, String>();
-    }
-
     public AbstractHandler(ExtServletContext context, final Map<String, String> initParams, String baseName)
     {
         this.context = context;
         this.baseName = baseName;
-        this.id = ID.incrementAndGet();
-        this.initParams = new HashMap<String, String>();
-        if ( initParams != null)
-        {
-            this.initParams.putAll(initParams);
-        }
+        this.initParams = initParams;
     }
 
-    public abstract void destroy();
-
     public final Map<String, String> getInitParams()
     {
         return this.initParams;
@@ -68,30 +48,26 @@ public abstract class AbstractHandler<T
         String name = this.baseName;
         if (name == null)
         {
-            name = String.format("%s_%d", getSubject().getClass(), this.id);
+            name = String.format("%s_%d", getSubject().getClass(), this.hashCode());
         }
         return name;
     }
 
-    public abstract void init() throws ServletException;
-
     public ExtServletContext getContext()
     {
         return this.context;
     }
 
-    /**
-     * @return a unique ID for this handler, &gt; 0.
-     */
-    protected final int getId()
-    {
-        return id;
-    }
+    public abstract void init() throws ServletException;
+
+    public abstract void destroy();
 
     /**
      * @return the {@link Servlet} or {@link Filter} this handler handles.
      */
     protected abstract Object getSubject();
 
+    protected abstract long getServiceId();
+
     public abstract Pattern[] getPatterns();
 }

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=1656640&r1=1656639&r2=1656640&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 Tue Feb  3 07:51:02 2015
@@ -31,8 +31,8 @@ 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.ServletContextHelperInfo;
 import org.apache.felix.http.base.internal.runtime.FilterInfo;
+import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
 import org.apache.felix.http.base.internal.util.PatternUtil;
 
 public final class FilterHandler extends AbstractHandler<FilterHandler>
@@ -45,7 +45,7 @@ public final class FilterHandler extends
 
     public FilterHandler(final ServletContextHelperInfo contextInfo, ExtServletContext context, Filter filter, FilterInfo filterInfo)
     {
-        super(context, filterInfo.getInitParams(), filterInfo.getName());
+        super(context, filterInfo.getInitParameters(), filterInfo.getName());
         this.filter = filter;
         this.filterInfo = filterInfo;
         // Compose a single array of all patterns & regexs the filter must represent...
@@ -153,4 +153,10 @@ public final class FilterHandler extends
     {
         return this.contextServiceId;
     }
+
+    @Override
+    protected long getServiceId()
+    {
+        return this.filterInfo.getServiceId();
+    }
 }

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=1656640&r1=1656639&r2=1656640&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 Tue Feb  3 07:51:02 2015
@@ -54,23 +54,15 @@ public final class HandlerRegistry
 
     public PerContextHandlerRegistry getRegistry(final ServletContextHelperInfo info)
     {
+        final long key = (info == null ? 0 : info.getServiceId());
+
         synchronized ( this )
         {
             for(final PerContextHandlerRegistry r : this.registrations)
             {
-                if ( info == null )
-                {
-                    if ( r.getContextServiceid() == -1)
-                    {
-                        return r;
-                    }
-                }
-                else
+                if ( key == r.getContextServiceId())
                 {
-                    if ( info.getServiceId() == r.getContextServiceid())
-                    {
-                        return r;
-                    }
+                    return r;
                 }
             }
             final PerContextHandlerRegistry reg = new PerContextHandlerRegistry(info);
@@ -85,7 +77,7 @@ public final class HandlerRegistry
         final List<PerContextHandlerRegistry> regs = this.registrations;
         for(final PerContextHandlerRegistry r : regs)
         {
-            if ( serviceId != null && serviceId == r.getContextServiceid() )
+            if ( serviceId != null && serviceId == r.getContextServiceId() )
             {
                 return r.getErrorsMapping();
             }
@@ -108,7 +100,7 @@ public final class HandlerRegistry
         final List<PerContextHandlerRegistry> regs = this.registrations;
         for(final PerContextHandlerRegistry r : regs)
         {
-            if ( id == r.getContextServiceid() )
+            if ( id == r.getContextServiceId() )
             {
                 return r.getFilterHandlers(servletHandler, dispatcherType, requestURI);
             }
@@ -123,7 +115,7 @@ public final class HandlerRegistry
             final List<PerContextHandlerRegistry> regs = this.registrations;
             for(final PerContextHandlerRegistry r : regs)
             {
-                if ( contextId == r.getContextServiceid() )
+                if ( contextId == r.getContextServiceId() )
                 {
                     return r.getServletHandlerByName(name);
                 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java?rev=1656640&r1=1656639&r2=1656640&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java Tue Feb  3 07:51:02 2015
@@ -349,7 +349,7 @@ public final class PerContextHandlerRegi
         return this.prefixPath;
     }
 
-    public long getContextServiceid()
+    public long getContextServiceId()
     {
         return this.serviceId;
     }

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=1656640&r1=1656639&r2=1656640&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 Tue Feb  3 07:51:02 2015
@@ -51,7 +51,7 @@ public final class ServletHandler extend
                           final ServletInfo servletInfo,
                           final Servlet servlet)
     {
-        super(context, servletInfo.getInitParams(), servletInfo.getName());
+        super(context, servletInfo.getInitParameters(), servletInfo.getName());
         this.servlet = servlet;
         this.servletInfo = servletInfo;
 
@@ -78,7 +78,7 @@ public final class ServletHandler extend
     @Override
     public int compareTo(final ServletHandler other)
     {
-        return getId() - other.getId();
+        return this.servletInfo.compareTo(other.servletInfo);
     }
 
     public String determineServletPath(String uri)
@@ -158,4 +158,10 @@ public final class ServletHandler extend
     {
         return this.contextServiceId;
     }
+
+    @Override
+    protected long getServiceId()
+    {
+        return this.servletInfo.getServiceId();
+    }
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/AbstractInfo.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/AbstractInfo.java?rev=1656640&r1=1656639&r2=1656640&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/AbstractInfo.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/AbstractInfo.java Tue Feb  3 07:51:02 2015
@@ -162,7 +162,7 @@ public abstract class AbstractInfo<T> im
      */
     protected Map<String, String> getInitParams(final ServiceReference<T> ref, final String prefix)
     {
-        Map<String, String> result = null;
+        final Map<String, String> result = new HashMap<String, String>();
         for (final String key : ref.getPropertyKeys())
         {
             if ( key.startsWith(prefix))
@@ -172,10 +172,6 @@ public abstract class AbstractInfo<T> im
 
                 if (paramValue != null)
                 {
-                    if ( result == null )
-                    {
-                        result = new HashMap<String, String>();
-                    }
                     result.put(paramKey, paramValue);
                 }
             }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java?rev=1656640&r1=1656639&r2=1656640&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java Tue Feb  3 07:51:02 2015
@@ -173,7 +173,7 @@ public final class FilterInfo extends Wh
         return dispatcher;
     }
 
-    public Map<String, String> getInitParams()
+    public Map<String, String> getInitParameters()
     {
         return initParams;
     }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java?rev=1656640&r1=1656639&r2=1656640&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java Tue Feb  3 07:51:02 2015
@@ -46,7 +46,8 @@ public final class ServletContextHelperI
      */
     private final Map<String, String> initParams;
 
-    public ServletContextHelperInfo(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);
@@ -97,7 +98,7 @@ public final class ServletContextHelperI
         return this.prefix;
     }
 
-    public Map<String, String> getInitParams()
+    public Map<String, String> getInitParameters()
     {
         return initParams;
     }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletInfo.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletInfo.java?rev=1656640&r1=1656639&r2=1656640&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletInfo.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletInfo.java Tue Feb  3 07:51:02 2015
@@ -18,6 +18,7 @@
  */
 package org.apache.felix.http.base.internal.runtime;
 
+import java.util.Collections;
 import java.util.Map;
 
 import javax.servlet.Servlet;
@@ -89,7 +90,7 @@ public final class ServletInfo extends W
         this.patterns = resource.getPatterns();
         this.errorPage = null;
         this.asyncSupported = false;
-        this.initParams = null;
+        this.initParams = Collections.emptyMap();
     }
 
     private static ServiceReference getRef(final ServiceReference ref)
@@ -139,7 +140,7 @@ public final class ServletInfo extends W
         return asyncSupported;
     }
 
-    public Map<String, String> getInitParams()
+    public Map<String, String> getInitParameters()
     {
         return initParams;
     }

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=1656640&r1=1656639&r2=1656640&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 Tue Feb  3 07:51:02 2015
@@ -69,7 +69,7 @@ public final class ContextHandler implem
         this.sharedContext = new SharedServletContextImpl(webContext,
                 info.getName(),
                 info.getPrefix(),
-                info.getInitParams(),
+                info.getInitParameters(),
                 new ServletContextAttributeListener() {
 
                     @Override

Modified: felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/AbstractHandlerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/AbstractHandlerTest.java?rev=1656640&r1=1656639&r2=1656640&view=diff
==============================================================================
--- felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/AbstractHandlerTest.java (original)
+++ felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/AbstractHandlerTest.java Tue Feb  3 07:51:02 2015
@@ -43,9 +43,9 @@ public abstract class AbstractHandlerTes
         AbstractHandler h1 = createHandler();
         AbstractHandler h2 = createHandler();
 
-        Assert.assertTrue(h1.getId() > 0);
-        Assert.assertTrue(h2.getId() > 0);
-        Assert.assertFalse(h1.getId() == h2.getId());
+        Assert.assertTrue(h1.getServiceId() < 0);
+        Assert.assertTrue(h2.getServiceId() < 0);
+        Assert.assertFalse(h1.getServiceId() == h2.getServiceId());
     }
 
     @Test

Modified: felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/FilterHandlerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/FilterHandlerTest.java?rev=1656640&r1=1656639&r2=1656640&view=diff
==============================================================================
--- felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/FilterHandlerTest.java (original)
+++ felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/FilterHandlerTest.java Tue Feb  3 07:51:02 2015
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import java.util.Collections;
 import java.util.Map;
 
 import javax.servlet.DispatcherType;
@@ -240,8 +241,12 @@ public class FilterHandlerTest extends A
         return createHandler(pattern, ranking, null);
     }
 
-    private FilterHandler createHandler(String pattern, int ranking, final Map<String, String> initParams)
+    private FilterHandler createHandler(String pattern, int ranking, Map<String, String> initParams)
     {
+        if ( initParams == null )
+        {
+            initParams = Collections.emptyMap();
+        }
         final FilterInfo info = new FilterInfo(null, pattern, ranking, initParams);
         return new FilterHandler(null, this.context, this.filter, info);
     }

Modified: felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/ServletHandlerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/ServletHandlerTest.java?rev=1656640&r1=1656639&r2=1656640&view=diff
==============================================================================
--- felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/ServletHandlerTest.java (original)
+++ felix/trunk/http/base/src/test/java/org/apache/felix/http/base/internal/handler/ServletHandlerTest.java Tue Feb  3 07:51:02 2015
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import java.util.Collections;
 import java.util.Map;
 
 import javax.servlet.Servlet;
@@ -219,6 +220,10 @@ public class ServletHandlerTest extends
 
     private ServletHandler createHandler(String alias, Map<String, String> map)
     {
+        if ( map == null )
+        {
+            map = Collections.emptyMap();
+        }
         final ServletInfo info = new ServletInfo(null, alias, 0, map);
         return new ServletHandler(null, this.context, info, this.servlet);
     }