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