Author: bdekruijff at gmail.com
Date: Mon Jan 31 17:12:51 2011
New Revision: 733
Log:
AMDATU-245 added dispatch extender for resolving based on hostname
Added:
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
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/service/DispatcherServiceImpl.java
Added:
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
==============================================================================
--- (empty file)
+++
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
Mon Jan 31 17:12:51 2011
@@ -0,0 +1,61 @@
+package org.amdatu.web.dispatcher.extender;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+import org.amdatu.core.tenant.TenantEntity;
+import org.amdatu.core.tenant.TenantException;
+import org.amdatu.core.tenant.TenantManagementService;
+import org.amdatu.web.dispatcher.DispatchExtenderFilter;
+
+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;
+
+ public void setTenentManagementService(TenantManagementService
tenantManagementService) {
+ m_tenantManagementService = tenantManagementService;
+ }
+
+ public void init(FilterConfig filterConfig) throws ServletException {
+ }
+
+ public void destroy() {
+ }
+
+ public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain)
+ throws IOException,
+ ServletException {
+
+ // TODO maybe another extender already resolved before us?
+ HttpServletRequest httpServletRequest = (HttpServletRequest)
servletRequest;
+ String serverName = httpServletRequest.getServerName();
+ if (serverName != null) {
+ try {
+ Map<String, String> matchProperties = new HashMap<String,
String>();
+ matchProperties.put(TENANT_PROPERTY_PARAMETER, serverName);
+ List<TenantEntity> tenants =
m_tenantManagementService.getTenants(matchProperties);
+ if (tenants != null) {
+ if (tenants.size() > 1) {
+ // FIXME proper logging
+ System.err.println("Hostname resolved to multiple
tenants..... using first");
+ }
+ servletRequest.setAttribute(TENANT_REQUESTCONTEXT_KEY,
tenants.get(0));
+ }
+ }
+ catch (TenantException e) {}
+ }
+ filterChain.doFilter(servletRequest, servletResponse);
+ }
+}
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
Mon Jan 31 17:12:51 2011
@@ -35,6 +35,7 @@
throws IOException,
ServletException {
+ // TODO maybe another extender already resolved before us?
HttpServletRequest httpServletRequest = (HttpServletRequest)
servletRequest;
String tenantId =
httpServletRequest.getParameter(TENANT_REQUEST_PARAMETER);
if (tenantId != null) {
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
Mon Jan 31 17:12:51 2011
@@ -31,6 +31,7 @@
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;
@@ -78,12 +79,20 @@
m_filterHandlerRegistry = new FilterHandlerRegistry(this);
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 handler =
+ FilterHandler tdeHandler =
new FilterHandler(m_filterHandlerRegistry,
extServletContextWrapper, tde, ".*", 0, null);
- handler.setInitParams(null);
- m_filterHandlerRegistry.addDispatchExtenderFilter(handler);
+ tdeHandler.setInitParams(null);
+ m_filterHandlerRegistry.addDispatchExtenderFilter(tdeHandler);
m_httpContextManager = new HttpContextManager();