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, > 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);
}