Author: [email protected]
Date: Thu Nov 24 14:28:55 2011
New Revision: 1764

Log:
AMDATU-468 Refactored tenant hostname resolver to use whiteboard tenant services

Modified:
   
trunk/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/osgi/HostnameTenantResolverActivator.java
   
trunk/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/service/HostnameTenantResolverExtenderFilter.java

Modified: 
trunk/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/osgi/HostnameTenantResolverActivator.java
==============================================================================
--- 
trunk/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/osgi/HostnameTenantResolverActivator.java
     (original)
+++ 
trunk/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/osgi/HostnameTenantResolverActivator.java
     Thu Nov 24 14:28:55 2011
@@ -18,7 +18,6 @@
 import java.util.Dictionary;
 import java.util.Hashtable;
 
-import org.amdatu.core.tenant.TenantManagementService;
 import org.amdatu.web.dispatcher.DispatchExtenderFilter;
 import org.amdatu.web.dispatcher.DispatcherService;
 import 
org.amdatu.web.tenantresolver.hostname.service.HostnameTenantResolverExtenderFilter;
@@ -28,6 +27,12 @@
 import org.osgi.framework.Constants;
 import org.osgi.service.log.LogService;
 
+/**
+ * BundleActivator for the {@link HostnameTenantResolverExtenderFilter} 
component.
+ * 
+ * @author <a href="mailto:[email protected]";>Amdatu Project 
Team</a>
+ * 
+ */
 public final class HostnameTenantResolverActivator extends 
DependencyActivatorBase {
 
     @Override
@@ -38,19 +43,16 @@
         properties.put(DispatcherService.PATTERN_KEY, ".*");
         manager.add(
             createComponent()
-            .setInterface(DispatchExtenderFilter.class.getName(), properties)
-            .setImplementation(HostnameTenantResolverExtenderFilter.class)
-            // Guards filter lifecycle
-            .add(createServiceDependency()
-                       .setService(DispatcherService.class)
-                       .setRequired(true))
-            .add(createServiceDependency()
-                       .setService(TenantManagementService.class)
-                       .setRequired(true))
-            .add(createServiceDependency()
-                       .setService(LogService.class)
-                       .setRequired(false))
-               );
+                .setInterface(DispatchExtenderFilter.class.getName(), 
properties)
+                .setImplementation(HostnameTenantResolverExtenderFilter.class)
+                // Guards filter lifecycle
+                .add(createServiceDependency()
+                    .setService(DispatcherService.class)
+                    .setRequired(true))
+                .add(createServiceDependency()
+                    .setService(LogService.class)
+                    .setRequired(false))
+            );
     }
 
     @Override

Modified: 
trunk/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/service/HostnameTenantResolverExtenderFilter.java
==============================================================================
--- 
trunk/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/service/HostnameTenantResolverExtenderFilter.java
     (original)
+++ 
trunk/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/service/HostnameTenantResolverExtenderFilter.java
     Thu Nov 24 14:28:55 2011
@@ -13,12 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.amdatu.web.tenantresolver.hostname.service;
-
+package org.amdatu.web.tenantresolver.hostname.service;
+
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -26,48 +23,67 @@
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.amdatu.core.tenant.Tenant;
-import org.amdatu.core.tenant.TenantEntity;
-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.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.log.LogService;
-
-public final class HostnameTenantResolverExtenderFilter implements 
DispatchExtenderFilter {
-    private volatile TenantManagementService m_tenantManagementService;
-    private volatile LogService m_logService;
-
-    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 {
-        HttpServletRequest httpServletRequest = (HttpServletRequest) 
servletRequest;
-        String serverName = httpServletRequest.getServerName();
-        if (serverName != null) {
-            try {
-                Map<String, String> matchProperties = new HashMap<String, 
String>();
-                matchProperties.put(Tenant.HOSTNAME_PROPERTY, serverName);
-                List<TenantEntity> tenants = 
m_tenantManagementService.getTenants(matchProperties);
-                if (tenants != null && tenants.size() > 0) {
-                    if (tenants.size() > 1) {
-                        m_logService.log(LogService.LOG_WARNING, "Hostname 
resolved to multiple tenants..... using first");
-                    }
-                    TenantEntity tenant = tenants.get(0);
-                                       
servletRequest.setAttribute(DispatcherService.TENANT_REQUESTCONTEXT_KEY, 
tenant);
-                    
servletRequest.setAttribute(DispatcherService.TENANTID_REQUESTCONTEXT_KEY, 
tenant.getId());
-                }
-            }
-            catch (TenantException e) {}
-        }
-        filterChain.doFilter(servletRequest, servletResponse);
-    }
-}
+
+/**
+ * Amdatu Web {@link DispatchExtenderFilter} that resolves the {@link Tenant} 
by
+ * comparing the request hostname against the host property of available 
tenants.
+ * 
+ * @author <a href="mailto:[email protected]";>Amdatu Project 
Team</a>
+ * 
+ */
+public final class HostnameTenantResolverExtenderFilter implements 
DispatchExtenderFilter {
+
+    private volatile LogService m_logService;
+    private volatile BundleContext m_bundleContext;
+
+    public void init(FilterConfig filterConfig) throws ServletException {
+        m_logService.log(LogService.LOG_DEBUG, "Initializing hostname base 
tenantresolver filter");
+    }
+
+    public void destroy() {
+        m_logService.log(LogService.LOG_DEBUG, "Destroying hostname base 
tenantresolver filter");
+    }
+
+    public void doFilter(ServletRequest servletRequest, ServletResponse 
servletResponse, FilterChain filterChain)
+        throws IOException, ServletException {
+
+        final HttpServletRequest httpServletRequest = (HttpServletRequest) 
servletRequest;
+        final String serverName = httpServletRequest.getServerName();
+        boolean resolved = false;
+
+        if (serverName != null) {
+            try {
+                ServiceReference[] refs =
+                    
m_bundleContext.getServiceReferences(Tenant.class.getName(), "(" + 
Tenant.TENANT_SERVICEPROPERTY
+                        + "hostname=" + serverName + ")");
+                if (refs != null && refs.length > 0) {
+                    Tenant tenant = (Tenant) 
m_bundleContext.getService(refs[0]);
+                    if (tenant != null) {
+                        
servletRequest.setAttribute(DispatcherService.TENANT_REQUESTCONTEXT_KEY, 
tenant);
+                        
servletRequest.setAttribute(DispatcherService.TENANTID_REQUESTCONTEXT_KEY, 
tenant.getId());
+                        resolved = true;
+                    }
+                }
+            }
+            catch (InvalidSyntaxException e) {
+                m_logService.log(LogService.LOG_ERROR, "Illegal filter in 
servicelookup... should never happen!", e);
+                throw new ServletException("Illegal filter in servicelookup... 
should never happen!", e);
+            }
+        }
+        if (!resolved) {
+            // No INF/WARN/ERR cause there may be multiple resolvers in play
+            m_logService.log(LogService.LOG_DEBUG, "Failed to resolved request 
to available tenant for hostname: "
+                + serverName);
+        }
+        filterChain.doFilter(servletRequest, servletResponse);
+    }
+}
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to