Author: bdekruijff at gmail.com
Date: Tue Feb 1 11:05:54 2011
New Revision: 737
Log:
AMDATU-245 extenderfilter mechanism changed to services
Modified:
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/DispatcherService.java
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenantParameterDispatchExtender.java
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/FilterHandlerRegistry.java
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/osgi/DispatcherServiceActivator.java
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/service/DispatcherServiceImpl.java
Modified:
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/DispatcherService.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/DispatcherService.java
(original)
+++
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/DispatcherService.java
Tue Feb 1 11:05:54 2011
@@ -25,17 +25,16 @@
public interface DispatcherService {
-
public final static String CONTEXT_ID_KEY = "contextId";
public final static String PATTERN_KEY = "pattern";
public final static String ALIAS_KEY = "alias";
public final static String INIT_KEY_PREFIX = "init.";
-// HttpServlet getServletByAlias(String alias);
-
- public FilterPipeline getFilterPipeline(HttpServletRequest
httpServletRequest);
+ FilterPipeline getFilterPipeline(HttpServletRequest httpServletRequest);
HttpContextManager getHttpContextManager();
+
LogService getLogService();
+
ServletContext getServletContext();
}
Modified:
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
(original)
+++
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
Tue Feb 1 11:05:54 2011
@@ -16,13 +16,16 @@
import org.amdatu.core.tenant.TenantException;
import org.amdatu.core.tenant.TenantManagementService;
import org.amdatu.web.dispatcher.DispatchExtenderFilter;
+import org.amdatu.web.dispatcher.DispatcherService;
+import org.osgi.service.log.LogService;
public final class TenanHostNameDispatchExtender implements
DispatchExtenderFilter {
public final static String TENANT_REQUESTCONTEXT_KEY =
"org.amdatu.web.dispatcher.TENANT";
public final static String TENANT_PROPERTY_PARAMETER = "hostname";
- private TenantManagementService m_tenantManagementService;
+ private volatile TenantManagementService m_tenantManagementService;
+ private volatile LogService m_logService;
public void setTenentManagementService(TenantManagementService
tenantManagementService) {
m_tenantManagementService = tenantManagementService;
Modified:
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenantParameterDispatchExtender.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenantParameterDispatchExtender.java
(original)
+++
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenantParameterDispatchExtender.java
Tue Feb 1 11:05:54 2011
@@ -13,13 +13,16 @@
import org.amdatu.core.tenant.TenantException;
import org.amdatu.core.tenant.TenantManagementService;
import org.amdatu.web.dispatcher.DispatchExtenderFilter;
+import org.osgi.service.log.LogService;
public final class TenantParameterDispatchExtender implements
DispatchExtenderFilter {
public final static String TENANT_REQUESTCONTEXT_KEY =
"org.amdatu.web.dispatcher.TENANT";
public final static String TENANT_REQUEST_PARAMETER = "tenant";
- private TenantManagementService m_tenantManagementService;
+ private volatile TenantManagementService m_tenantManagementService;
+ private volatile LogService m_logService;
+
public void setTenentManagementService(TenantManagementService
tenantManagementService) {
m_tenantManagementService = tenantManagementService;
Modified:
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/FilterHandlerRegistry.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/FilterHandlerRegistry.java
(original)
+++
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/FilterHandlerRegistry.java
Tue Feb 1 11:05:54 2011
@@ -10,6 +10,7 @@
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
+import org.amdatu.web.dispatcher.DispatchExtenderFilter;
import org.amdatu.web.dispatcher.DispatchFilterMatcher;
import org.amdatu.web.dispatcher.DispatcherService;
import org.amdatu.web.dispatcher.context.HandlerServletContext;
@@ -21,47 +22,68 @@
private final Map<ServiceReference, FilterHandler> m_filterHandlers =
new HashMap<ServiceReference, FilterHandler>();
- private final Map<Filter, FilterHandler> m_extenderFilterHandlers = new
HashMap<Filter, FilterHandler>();
+ private final Map<ServiceReference, FilterHandler>
m_extenderFilterHandlers =
+ new HashMap<ServiceReference, FilterHandler>();
private Set<DispatchFilterMatcher> m_matchers = new
HashSet<DispatchFilterMatcher>();
public FilterHandlerRegistry(DispatcherService dispatcherService) {
super(dispatcherService);
}
- public void addDispatchFilterMatcher(DispatchFilterMatcher
dispatchFilterMatcher) {
- if (m_matchers.contains(dispatchFilterMatcher)) {
- throw new IllegalStateException("unforseen duplicate matcher....");
+ public void addDispatchExtenderFilter(ServiceReference serviceReference,
DispatchExtenderFilter extenderFilter) {
+ if (m_extenderFilterHandlers.containsKey(serviceReference)) {
+ throw new IllegalStateException("Unexpected.... ");
}
- m_matchers.add(dispatchFilterMatcher);
- }
- public void removeDispatchFilterMatcher(DispatchFilterMatcher
dispatchFilterMatcher) {
- if (!m_matchers.contains(dispatchFilterMatcher)) {
- throw new IllegalStateException("unforseen unknown matcher....");
+ int ranking = getIntProperty(serviceReference,
Constants.SERVICE_RANKING, 0);
+ String pattern = getStringProperty(serviceReference,
DispatcherService.PATTERN_KEY);
+ if (pattern == null) {
+ return;
}
- m_matchers.remove(dispatchFilterMatcher);
- }
- public void addDispatchExtenderFilter(FilterHandler handler)
- throws ServletException {
- if (m_extenderFilterHandlers.containsKey(handler.getFilter())) {
+ HandlerServletContext extServletContextWrapper =
+ new HandlerServletContext(getServletContext(),
getHttpContext(serviceReference));
+ FilterHandler filterHandler =
+ new FilterHandler(this, extServletContextWrapper, extenderFilter,
pattern, ranking, null);
+ filterHandler.setInitParams(getInitParams(serviceReference));
+
+ if (m_extenderFilterHandlers.containsKey(serviceReference)) {
throw new IllegalStateException("unforseen duplicate
extender....");
}
- handler.init();
- m_extenderFilterHandlers.put(handler.getFilter(), handler);
+ try {
+ filterHandler.init();
+ m_extenderFilterHandlers.put(serviceReference, filterHandler);
+ }
+ catch (ServletException e) {
+ e.printStackTrace();
+ }
}
- public void removeDispatchExtenderFilter(Filter filter) {
- if (!m_extenderFilterHandlers.containsKey(filter)) {
+ public void removeDispatchExtenderFilter(ServiceReference
serviceReference, DispatchExtenderFilter extenderFilter) {
+ if (!m_extenderFilterHandlers.containsKey(serviceReference)) {
throw new IllegalStateException("unforseen unknown extender....");
}
- FilterHandler handler = m_extenderFilterHandlers.remove(filter);
+ FilterHandler handler =
m_extenderFilterHandlers.remove(serviceReference);
if (handler != null) {
handler.destroy();
}
}
+ public void addDispatchFilterMatcher(DispatchFilterMatcher
dispatchFilterMatcher) {
+ if (m_matchers.contains(dispatchFilterMatcher)) {
+ throw new IllegalStateException("unforseen duplicate matcher....");
+ }
+ m_matchers.add(dispatchFilterMatcher);
+ }
+
+ public void removeDispatchFilterMatcher(DispatchFilterMatcher
dispatchFilterMatcher) {
+ if (!m_matchers.contains(dispatchFilterMatcher)) {
+ throw new IllegalStateException("unforseen unknown matcher....");
+ }
+ m_matchers.remove(dispatchFilterMatcher);
+ }
+
public void addFilterHandler(ServiceReference serviceReference, Filter
filter) {
if (m_filterHandlers.containsKey(serviceReference)) {
throw new IllegalStateException("Unexpected.... ");
Modified:
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/osgi/DispatcherServiceActivator.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/osgi/DispatcherServiceActivator.java
(original)
+++
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/osgi/DispatcherServiceActivator.java
Tue Feb 1 11:05:54 2011
@@ -24,13 +24,17 @@
import org.amdatu.core.tenant.Tenant;
import org.amdatu.core.tenant.TenantManagementService;
+import org.amdatu.web.dispatcher.DispatchExtenderFilter;
import org.amdatu.web.dispatcher.DispatcherService;
+import org.amdatu.web.dispatcher.extender.TenanHostNameDispatchExtender;
+import org.amdatu.web.dispatcher.extender.TenantParameterDispatchExtender;
import org.amdatu.web.dispatcher.service.DispatcherServiceImpl;
import org.amdatu.web.dispatcher.test.HelloWorldServlet;
import org.apache.felix.dm.DependencyActivatorBase;
import org.apache.felix.dm.DependencyManager;
import org.apache.felix.http.api.ExtHttpService;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
import org.osgi.service.http.HttpContext;
import org.osgi.service.log.LogService;
@@ -46,7 +50,11 @@
.setImplementation(DispatcherServiceImpl.class)
.add(createServiceDependency().setService(ExtHttpService.class).setRequired(true))
.add(createServiceDependency().setService(LogService.class).setRequired(true))
-
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true))
+ .add(
+ createServiceDependency()
+ .setService(DispatchExtenderFilter.class)
+ .setCallbacks("addExtenderFilter",
"removeExtenderFilter")
+ .setRequired(false))
.add(
createServiceDependency()
.setService(HttpContext.class)
@@ -64,6 +72,30 @@
.setRequired(false))
);
+ Dictionary<String, Object> thProperties = new Hashtable<String,
Object>();
+ thProperties.put(Constants.SERVICE_RANKING, 0);
+ thProperties.put(DispatcherService.PATTERN_KEY, ".*");
+ manager.add(
+ createComponent()
+ .setInterface(DispatchExtenderFilter.class.getName(),
thProperties)
+ .setImplementation(TenanHostNameDispatchExtender.class)
+ // Guards filter lifecycle
+
.add(createServiceDependency().setService(DispatcherService.class).setRequired(true))
+
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true))
+
.add(createServiceDependency().setService(LogService.class).setRequired(true)));
+
+ Dictionary<String, Object> tpProperties = new Hashtable<String,
Object>();
+ tpProperties.put(Constants.SERVICE_RANKING, 0);
+ tpProperties.put(DispatcherService.PATTERN_KEY, ".*");
+ manager.add(
+ createComponent()
+ .setInterface(DispatchExtenderFilter.class.getName(),
tpProperties)
+ .setImplementation(TenantParameterDispatchExtender.class)
+ // Guards filter lifecycle
+
.add(createServiceDependency().setService(DispatcherService.class).setRequired(true))
+
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true))
+
.add(createServiceDependency().setService(LogService.class).setRequired(true)));
+
// test servlets
Dictionary<String, String> props = new Hashtable<String, String>();
props.put("alias", "/hello/world");
Modified:
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/service/DispatcherServiceImpl.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/service/DispatcherServiceImpl.java
(original)
+++
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/service/DispatcherServiceImpl.java
Tue Feb 1 11:05:54 2011
@@ -24,17 +24,14 @@
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
-import org.amdatu.core.tenant.TenantManagementService;
+import org.amdatu.web.dispatcher.DispatchExtenderFilter;
import org.amdatu.web.dispatcher.DispatcherService;
import org.amdatu.web.dispatcher.context.DefaultHttpContext;
import org.amdatu.web.dispatcher.context.HandlerServletContext;
import org.amdatu.web.dispatcher.context.HttpContextManager;
import org.amdatu.web.dispatcher.dispatch.FilterPipeline;
import org.amdatu.web.dispatcher.dispatch.ServletPipeline;
-import org.amdatu.web.dispatcher.extender.TenanHostNameDispatchExtender;
-import org.amdatu.web.dispatcher.extender.TenantParameterDispatchExtender;
import org.amdatu.web.dispatcher.filter.DispatchInterceptFilter;
-import org.amdatu.web.dispatcher.handler.FilterHandler;
import org.amdatu.web.dispatcher.handler.FilterHandlerRegistry;
import org.amdatu.web.dispatcher.handler.ServletHandlerRegistry;
import org.amdatu.web.dispatcher.matcher.TenantAwareServletMatcher;
@@ -50,7 +47,6 @@
private volatile BundleContext m_bundleContext;
private volatile LogService m_logService;
private volatile ExtHttpService m_httpService;
- private volatile TenantManagementService m_tenantManagementService;
private DispatchInterceptFilter m_interceptorFilter;
private HttpContextManager m_httpContextManager;
@@ -80,20 +76,6 @@
HandlerServletContext extServletContextWrapper =
new HandlerServletContext(m_extServletContext, new
DefaultHttpContext(m_bundleContext.getBundle()));
- TenanHostNameDispatchExtender the = new
TenanHostNameDispatchExtender();
- the.setTenentManagementService(m_tenantManagementService);
- FilterHandler theHandler =
- new FilterHandler(m_filterHandlerRegistry,
extServletContextWrapper, the, ".*", 0, null);
- theHandler.setInitParams(null);
- m_filterHandlerRegistry.addDispatchExtenderFilter(theHandler);
-
- TenantParameterDispatchExtender tde = new
TenantParameterDispatchExtender();
- tde.setTenentManagementService(m_tenantManagementService);
- FilterHandler tdeHandler =
- new FilterHandler(m_filterHandlerRegistry,
extServletContextWrapper, tde, ".*", 0, null);
- tdeHandler.setInitParams(null);
- m_filterHandlerRegistry.addDispatchExtenderFilter(tdeHandler);
-
m_httpContextManager = new HttpContextManager();
m_interceptorFilter = new DispatchInterceptFilter();
@@ -123,6 +105,16 @@
m_logService.log(LogService.LOG_INFO,
DispatcherServiceImpl.class.getSimpleName() + " stopped");
}
+ public void addExtenderFilter(ServiceReference serviceReference, Object
service) {
+ DispatchExtenderFilter extenderFilter = (DispatchExtenderFilter)
service;
+ m_filterHandlerRegistry.addDispatchExtenderFilter(serviceReference,
extenderFilter);
+ }
+
+ public void removeExtenderFilter(ServiceReference serviceReference, Object
service) {
+ DispatchExtenderFilter extenderFilter = (DispatchExtenderFilter)
service;
+ m_filterHandlerRegistry.removeDispatchExtenderFilter(serviceReference,
extenderFilter);
+ }
+
public void addHttpContext(ServiceReference serviceReference, Object
service) {
HttpContext httpContext = (HttpContext) service;
Bundle bundle = serviceReference.getBundle();