Author: [email protected]
Date: Thu Nov 24 14:29:05 2011
New Revision: 1765
Log:
AMDATU-468 Refactored tenant parameter resolver to use whiteboard tenant
services
Modified:
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
Modified:
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
==============================================================================
---
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
(original)
+++
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
Thu Nov 24 14:29:05 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.parameter.service.ParameterTenantResolverExtenderFilter;
@@ -28,6 +27,12 @@
import org.osgi.framework.Constants;
import org.osgi.service.log.LogService;
+/**
+ * BundleActivator for the {@link ParameterTenantResolverExtenderFilter}
component.
+ *
+ * @author <a href="mailto:[email protected]">Amdatu Project
Team</a>
+ *
+ */
public final class ParameterTenantResolverActivator extends
DependencyActivatorBase {
@Override
@@ -45,9 +50,6 @@
.setService(DispatcherService.class)
.setRequired(true))
.add(createServiceDependency()
- .setService(TenantManagementService.class)
- .setRequired(true))
- .add(createServiceDependency()
.setService(LogService.class)
.setRequired(false))
);
Modified:
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
==============================================================================
---
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
(original)
+++
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
Thu Nov 24 14:29:05 2011
@@ -13,8 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.amdatu.web.tenantresolver.parameter.service;
-
+package org.amdatu.web.tenantresolver.parameter.service;
+
import java.io.IOException;
import javax.servlet.FilterChain;
@@ -25,44 +25,66 @@
import javax.servlet.http.HttpServletRequest;
import org.amdatu.core.tenant.Tenant;
-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 ParameterTenantResolverExtenderFilter implements
DispatchExtenderFilter {
- public final static String TENANT_REQUEST_PARAMETER = "tenant";
-
- 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 tenantId =
httpServletRequest.getParameter(TENANT_REQUEST_PARAMETER);
- if (tenantId != null) {
- try {
- Tenant tenant =
m_tenantManagementService.getTenantById(tenantId);
- if (tenant != null) {
-
servletRequest.setAttribute(DispatcherService.TENANT_REQUESTCONTEXT_KEY,
tenant);
-
servletRequest.setAttribute(DispatcherService.TENANTID_REQUESTCONTEXT_KEY,
tenantId);
- }
- else {
- m_logService.log(LogService.LOG_WARNING, "Tenant parameter
did not resolve to a tenant: " + tenantId);
- }
- }
- catch (TenantException e) {}
- }
- filterChain.doFilter(servletRequest, servletResponse);
- }
-}
+
+/**
+ * Amdatu Web {@link DispatchExtenderFilter} that resolves the {@link Tenant}
by
+ * comparing the request parameter {@link TENANT_REQUEST_PARAMETER} against the
+ * id property of available tenants.
+ *
+ * @author <a href="mailto:[email protected]">Amdatu Project
Team</a>
+ *
+ */
+public final class ParameterTenantResolverExtenderFilter implements
DispatchExtenderFilter {
+
+ public final static String TENANT_REQUEST_PARAMETER = "tenant";
+
+ private volatile LogService m_logService;
+ private volatile BundleContext m_bundleContext;
+
+ public void init(FilterConfig filterConfig) throws ServletException {
+ }
+
+ public void destroy() {
+ }
+
+ public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain)
+ throws IOException, ServletException {
+
+ final HttpServletRequest httpServletRequest = (HttpServletRequest)
servletRequest;
+ final String tenantId =
httpServletRequest.getParameter(TENANT_REQUEST_PARAMETER);
+ boolean resolved = false;
+
+ // TODO should check value for a valid format to prevent invalid filter
+ if (tenantId != null) {
+ try {
+ ServiceReference[] refs =
+
m_bundleContext.getServiceReferences(Tenant.class.getName(), "(" +
Tenant.TENANT_ID_SERVICEPROPERTY
+ + "=" + tenantId + ")");
+ 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 request value: "
+ + tenantId);
+ }
+ filterChain.doFilter(servletRequest, servletResponse);
+ }
+}
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits