Author: hansbak
Date: Mon Nov 8 06:54:17 2010 New Revision: 1032472 URL: http://svn.apache.org/viewvc?rev=1032472&view=rev Log: next to setting of the tenent id, now also the initial mountpoint if entered also refactoring: - set delegator, dispatcher and security from session, servlet context or request's attribute to app context of birt engine before render and send email - add the initialPath field to Tenant entity - create the tenant context which as a default servlet using org.ofbiz.webapp.control.TenantServlet in the catalina container and check the multitenant property for initial the tenant context with root mount / - move the changing a multi tenant delegator statement from ControlServlet to ContextFilter that could apply to every servlets (implementation by Chattree Richard) Added: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/TenantServlet.java Modified: ofbiz/trunk/framework/birt/src/org/ofbiz/birt/BirtWorker.java ofbiz/trunk/framework/birt/src/org/ofbiz/birt/email/BirtEmailServices.java ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtEngineServlet.java ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtViewerServlet.java ofbiz/trunk/framework/birt/src/org/ofbiz/birt/webapp/view/BirtViewHandler.java ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java ofbiz/trunk/framework/common/webcommon/login.ftl ofbiz/trunk/framework/entity/entitydef/entitymodel.xml ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java Modified: ofbiz/trunk/framework/birt/src/org/ofbiz/birt/BirtWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/birt/src/org/ofbiz/birt/BirtWorker.java?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/birt/src/org/ofbiz/birt/BirtWorker.java (original) +++ ofbiz/trunk/framework/birt/src/org/ofbiz/birt/BirtWorker.java Mon Nov 8 06:54:17 2010 @@ -23,6 +23,11 @@ import java.sql.SQLException; import java.util.Locale; import java.util.Map; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + import org.eclipse.birt.report.engine.api.EXCELRenderOption; import org.eclipse.birt.report.engine.api.EngineException; import org.eclipse.birt.report.engine.api.HTMLRenderOption; @@ -36,7 +41,11 @@ import org.eclipse.birt.report.engine.ap import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.GeneralException; import org.ofbiz.base.util.UtilGenerics; +import org.ofbiz.base.util.UtilValidate; import org.ofbiz.birt.container.BirtContainer; +import org.ofbiz.entity.Delegator; +import org.ofbiz.security.Security; +import org.ofbiz.service.LocalDispatcher; public class BirtWorker { @@ -138,4 +147,45 @@ public class BirtWorker { task.run(); task.close(); } + + public static void setWebContextObjects(IReportEngine engine, HttpServletRequest request, HttpServletResponse response) { + HttpSession session = request.getSession(); + ServletContext servletContext = session.getServletContext(); + + // set delegator + Delegator delegator = (Delegator) session.getAttribute("delegator"); + if (UtilValidate.isEmpty(delegator)) { + delegator = (Delegator) servletContext.getAttribute("delegator"); + } + if (UtilValidate.isEmpty(delegator)) { + delegator = (Delegator) request.getAttribute("delegator"); + } + if (UtilValidate.isNotEmpty(delegator)) { + engine.getConfig().getAppContext().put("delegator", delegator); + } + + // set delegator + LocalDispatcher dispatcher = (LocalDispatcher) session.getAttribute("dispatcher"); + if (UtilValidate.isEmpty(dispatcher)) { + dispatcher = (LocalDispatcher) servletContext.getAttribute("dispatcher"); + } + if (UtilValidate.isEmpty(dispatcher)) { + dispatcher = (LocalDispatcher) request.getAttribute("dispatcher"); + } + if (UtilValidate.isNotEmpty(dispatcher)) { + engine.getConfig().getAppContext().put("dispatcher", dispatcher); + } + + // set security + Security security = (Security) session.getAttribute("security"); + if (UtilValidate.isEmpty(security)) { + security = (Security) servletContext.getAttribute("security"); + } + if (UtilValidate.isEmpty(security)) { + security = (Security) request.getAttribute("security"); + } + if (UtilValidate.isNotEmpty(security)) { + engine.getConfig().getAppContext().put("security", dispatcher); + } + } } Modified: ofbiz/trunk/framework/birt/src/org/ofbiz/birt/email/BirtEmailServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/birt/src/org/ofbiz/birt/email/BirtEmailServices.java?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/birt/src/org/ofbiz/birt/email/BirtEmailServices.java (original) +++ ofbiz/trunk/framework/birt/src/org/ofbiz/birt/email/BirtEmailServices.java Mon Nov 8 06:54:17 2010 @@ -46,6 +46,8 @@ import org.ofbiz.base.util.string.Flexib import org.ofbiz.birt.BirtWorker; import org.ofbiz.birt.container.BirtContainer; import org.ofbiz.common.email.NotificationServices; +import org.ofbiz.entity.Delegator; +import org.ofbiz.security.Security; import org.ofbiz.service.DispatchContext; import org.ofbiz.service.LocalDispatcher; import org.ofbiz.service.ServiceUtil; @@ -69,7 +71,10 @@ public class BirtEmailServices { */ public static Map<String, Object> sendBirtMail(DispatchContext ctx, Map<String, ? extends Object> context) { Map<String, Object> serviceContext = UtilMisc.makeMapWritable(context); + Delegator delegator = ctx.getDelegator(); LocalDispatcher dispatcher = ctx.getDispatcher(); + Security security = ctx.getSecurity(); + String webSiteId = (String) serviceContext.remove("webSiteId"); String bodyText = (String) serviceContext.remove("bodyText"); String bodyScreenUri = (String) serviceContext.remove("bodyScreenUri"); @@ -153,11 +158,14 @@ public class BirtEmailServices { birtContentType = "application/pdf"; } IReportEngine engine = BirtContainer.getReportEngine(); + engine.getConfig().getAppContext().put("delegator", delegator); + engine.getConfig().getAppContext().put("dispatcher", dispatcher); + engine.getConfig().getAppContext().put("security", security); + InputStream reportInputStream = BirtFactory.getReportInputStreamFromLocation(birtReportLocation); IReportRunnable design = engine.openReportDesign(reportInputStream); - Debug.logInfo("Export report as content type:" + birtContentType, module); - BirtWorker.exportReport(design, context, birtContentType, baos); - // and generate the PDF + Debug.logInfo("Export report as content type:" + birtContentType, module); + BirtWorker.exportReport(design, context, birtContentType, baos); baos.flush(); baos.close(); Modified: ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtEngineServlet.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtEngineServlet.java?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtEngineServlet.java (original) +++ ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtEngineServlet.java Mon Nov 8 06:54:17 2010 @@ -24,9 +24,12 @@ import javax.servlet.http.HttpServletRes import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.context.IContext; +import org.eclipse.birt.report.engine.api.IReportEngine; import org.eclipse.birt.report.presentation.aggregation.layout.EngineFragment; import org.eclipse.birt.report.presentation.aggregation.layout.RequesterFragment; import org.eclipse.birt.report.service.BirtReportServiceFactory; +import org.ofbiz.birt.BirtWorker; +import org.ofbiz.birt.container.BirtContainer; import org.ofbiz.birt.report.context.OFBizBirtContext; import org.ofbiz.birt.report.service.OFBizBirtViewerReportService; @@ -52,6 +55,9 @@ public class BirtEngineServlet extends o protected IContext __getContext( HttpServletRequest request, HttpServletResponse response ) throws BirtException { + IReportEngine reportEngine = BirtContainer.getReportEngine(); + BirtWorker.setWebContextObjects(reportEngine, request, response); + BirtReportServiceFactory.getReportService( ).setContext( getServletContext( ), null ); return new OFBizBirtContext( request, response ); Modified: ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtViewerServlet.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtViewerServlet.java?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtViewerServlet.java (original) +++ ofbiz/trunk/framework/birt/src/org/ofbiz/birt/report/servlet/BirtViewerServlet.java Mon Nov 8 06:54:17 2010 @@ -24,10 +24,13 @@ import javax.servlet.http.HttpServletRes import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.context.IContext; +import org.eclipse.birt.report.engine.api.IReportEngine; import org.eclipse.birt.report.presentation.aggregation.layout.FramesetFragment; import org.eclipse.birt.report.presentation.aggregation.layout.RunFragment; import org.eclipse.birt.report.service.BirtReportServiceFactory; import org.eclipse.birt.report.servlet.ViewerServlet; +import org.ofbiz.birt.BirtWorker; +import org.ofbiz.birt.container.BirtContainer; import org.ofbiz.birt.report.context.OFBizBirtContext; import org.ofbiz.birt.report.service.OFBizBirtViewerReportService; @@ -56,6 +59,9 @@ public class BirtViewerServlet extends V protected IContext __getContext( HttpServletRequest request, HttpServletResponse response ) throws BirtException { + IReportEngine reportEngine = BirtContainer.getReportEngine(); + BirtWorker.setWebContextObjects(reportEngine, request, response); + BirtReportServiceFactory.getReportService( ).setContext( getServletContext( ), null ); return new OFBizBirtContext( request, response ); Modified: ofbiz/trunk/framework/birt/src/org/ofbiz/birt/webapp/view/BirtViewHandler.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/birt/src/org/ofbiz/birt/webapp/view/BirtViewHandler.java?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/birt/src/org/ofbiz/birt/webapp/view/BirtViewHandler.java (original) +++ ofbiz/trunk/framework/birt/src/org/ofbiz/birt/webapp/view/BirtViewHandler.java Mon Nov 8 06:54:17 2010 @@ -70,6 +70,7 @@ public class BirtViewHandler implements public void render(String name, String page, String info, String contentType, String encoding, HttpServletRequest request, HttpServletResponse response) throws ViewHandlerException { + try { IReportEngine engine = BirtContainer.getReportEngine(); // open report design @@ -80,6 +81,8 @@ public class BirtViewHandler implements } else { design = engine.openReportDesign(servletContext.getRealPath(page)); } + + BirtWorker.setWebContextObjects(engine, request, response); Map<String, Object> context = FastMap.newInstance(); // set parameters from request Modified: ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java (original) +++ ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java Mon Nov 8 06:54:17 2010 @@ -67,6 +67,7 @@ import org.ofbiz.base.container.Containe import org.ofbiz.base.container.ContainerConfig.Container.Property; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.SSLUtil; +import org.ofbiz.base.util.UtilProperties; import org.ofbiz.base.util.UtilURL; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.UtilXml; @@ -620,6 +621,43 @@ public class CatalinaContainer implement return context; } + protected Context createTenantContext() throws ContainerException { + String server = "default-server"; + Engine engine = engines.get(server); + if (engine == null) { + Debug.logWarning("Server with name [" + server + "] not found;", module); + return null; + } + + // create the web application context + StandardContext context = (StandardContext) embedded.createContext("/", System.getProperty("ofbiz.home")); + context.setJ2EEApplication(J2EE_APP); + context.setJ2EEServer(J2EE_SERVER); + context.setLoader(embedded.createLoader(ClassLoaderContainer.getClassLoader())); + context.setReloadable(contextReloadable); + context.setDistributable(distribute); + context.setCrossContext(crossContext); + + + // create the Default Servlet instance to mount + StandardWrapper defaultServlet = new StandardWrapper(); + defaultServlet.setServletClass("org.ofbiz.webapp.control.TenantServlet"); + defaultServlet.setServletName("default"); + defaultServlet.setLoadOnStartup(1); + defaultServlet.addInitParameter("debug", "0"); + defaultServlet.addInitParameter("listing", "true"); + defaultServlet.addMapping("/"); + context.addChild(defaultServlet); + context.addServletMapping("/", "default"); + + Host host = hosts.get(engine.getName() + "._DEFAULT"); + context.setRealm(host.getRealm()); + host.addChild(context); + context.getMapper().setDefaultHostName(host.getName()); + + return context; + } + protected void loadComponents() throws ContainerException { if (embedded == null) { throw new ContainerException("Cannot load web applications without Embedded instance!"); @@ -641,6 +679,12 @@ public class CatalinaContainer implement } } } + + // if the multitenant is enabled then create the tenant context + String useMultitenant = UtilProperties.getPropertyValue("general.properties", "multitenant"); + if ("Y".equals(useMultitenant) && UtilValidate.isEmpty(delegator.getDelegatorTenantId())) { + createTenantContext(); + } } public void stop() throws ContainerException { Modified: ofbiz/trunk/framework/common/webcommon/login.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/webcommon/login.ftl?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/common/webcommon/login.ftl (original) +++ ofbiz/trunk/framework/common/webcommon/login.ftl Mon Nov 8 06:54:17 2010 @@ -42,13 +42,15 @@ under the License. <td class="label">${uiLabelMap.CommonPassword}</td> <td><input type="password" name="PASSWORD" value="" size="20"/></td> </tr> - <#if ("Y" == useMultitenant && !sessionAttributes.tenantId?exists) > - <tr> - <td class="label">${uiLabelMap.CommonTenantId}</td> - <td><input type="text" name="tenantId" value="${parameters.tenantId?if_exists}" size="20"/></td> - </tr> - <#elseif ("Y" == useMultitenant && sessionAttributes.tenantId?exists) > - <input type="hidden" name="tenantId" value="${sessionAttributes.tenantId?if_exists}"/> + <#if ("Y" == useMultitenant) > + <#if !requestAttributes.tenantId?exists> + <tr> + <td class="label">${uiLabelMap.CommonTenantId}</td> + <td><input type="text" name="tenantId" value="${parameters.tenantId?if_exists}" size="20"/></td> + </tr> + <#else> + <input type="hidden" name="tenantId" value="${requestAttributes.tenantId?if_exists}"/> + </#if> </#if> <tr> <td colspan="2" align="center"> Modified: ofbiz/trunk/framework/entity/entitydef/entitymodel.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/entitydef/entitymodel.xml?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/entitydef/entitymodel.xml (original) +++ ofbiz/trunk/framework/entity/entitydef/entitymodel.xml Mon Nov 8 06:54:17 2010 @@ -67,6 +67,7 @@ under the License. <field name="tenantId" type="id-ne"/> <field name="tenantName" type="name"/> <field name="domainName" type="long-varchar"/> + <field name="initialPath" type="value"/> <field name="disabled" type="indicator"><description>Disabled if 'Y', defaults to 'N' (not disabled).</description></field> <prim-key field="tenantId"/> </entity> Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java Mon Nov 8 06:54:17 2010 @@ -50,10 +50,16 @@ import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.StringUtil; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilHttp; +import org.ofbiz.base.util.UtilMisc; import org.ofbiz.base.util.UtilObject; +import org.ofbiz.base.util.UtilProperties; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.DelegatorFactory; +import org.ofbiz.entity.GenericEntityException; +import org.ofbiz.entity.GenericValue; +import org.ofbiz.entity.condition.EntityCondition; +import org.ofbiz.entity.util.EntityUtil; import org.ofbiz.security.Security; import org.ofbiz.security.SecurityConfigurationException; import org.ofbiz.security.SecurityFactory; @@ -266,6 +272,52 @@ public class ContextFilter implements Fi return; } } + + // check if multi tenant is enabled + String useMultitenant = UtilProperties.getPropertyValue("general.properties", "multitenant"); + if ("Y".equals(useMultitenant)) { + // get tenant delegator by domain name + String serverName = request.getServerName(); + try { + // if tenant was specified, replace delegator with the new per-tenant delegator and set tenantId to session attribute + Delegator delegator = getDelegator(config.getServletContext()); + List<EntityCondition> conds = FastList.newInstance(); + conds.add(EntityCondition.makeCondition("domainName", serverName)); + List<GenericValue> tenants = delegator.findList("Tenant", EntityCondition.makeCondition(conds), null, UtilMisc.toList("-createdStamp"), null, false); + if (UtilValidate.isNotEmpty(tenants)) { + GenericValue tenant = EntityUtil.getFirst(tenants); + String tenantId = tenant.getString("tenantId"); + + // make that tenant active, setup a new delegator and a new dispatcher + String tenantDelegatorName = delegator.getDelegatorBaseName() + "#" + tenantId; + httpRequest.getSession().setAttribute("delegatorName", tenantDelegatorName); + + // after this line the delegator is replaced with the new per-tenant delegator + delegator = DelegatorFactory.getDelegator(tenantDelegatorName); + config.getServletContext().setAttribute("delegator", delegator); + + // clear web context objects + config.getServletContext().setAttribute("authorization", null); + config.getServletContext().setAttribute("security", null); + config.getServletContext().setAttribute("dispatcher", null); + + // initialize authorizer + getAuthz(); + // initialize security + Security security = getSecurity(); + // initialize the services dispatcher + LocalDispatcher dispatcher = getDispatcher(config.getServletContext()); + + // set web context objects + httpRequest.getSession().setAttribute("dispatcher", dispatcher); + httpRequest.getSession().setAttribute("security", security); + + request.setAttribute("tenantId", tenantId); + } + } catch (GenericEntityException e) { + Debug.logWarning(e, "Unable to get Tenant", module); + } + } // we're done checking; continue on chain.doFilter(request, response); Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java?rev=1032472&r1=1032471&r2=1032472&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java Mon Nov 8 06:54:17 2010 @@ -226,39 +226,6 @@ public class ControlServlet extends Http String errorPage = null; try { - String useMultitenant = UtilProperties.getPropertyValue("general.properties", "multitenant"); - if ("Y".equals(useMultitenant) && UtilValidate.isEmpty(delegator.getDelegatorTenantId())) { - // get tenant delegator by domain name - try { - // if a domain name was specified for tenant, replace delegator with the new per-tenant delegator and set tenantId to session attribute - List<GenericValue> tenants = delegator.findList("Tenant", EntityCondition.makeCondition("domainName", request.getServerName()), null, UtilMisc.toList("-createdStamp"), null, false); - if (UtilValidate.isNotEmpty(tenants)) { - GenericValue tenant = EntityUtil.getFirst(tenants); - String tenantId = tenant.getString("tenantId"); - - // make that tenant active, setup a new delegator and a new dispatcher - String tenantDelegatorName = delegator.getDelegatorBaseName() + "#" + tenantId; - - // after this line the delegator is replaced with the new per-tenant delegator - delegator = DelegatorFactory.getDelegator(tenantDelegatorName); - session.setAttribute("tenantId", tenantId); - session.setAttribute("delegatorName", tenantDelegatorName); - } - } catch (GenericEntityException e) { - String errMsg = "Error getting tenant by domain name: " + request.getServerName(); - Debug.logError(e, errMsg, module); - throw new RequestHandlerException(errMsg, e); - } - } - if ("Y".equals(useMultitenant) && UtilValidate.isNotEmpty(delegator.getDelegatorTenantId())) { - // re-make dispatcher from tenant delegator and change delegator of security to use tanent delegator - dispatcher = ContextFilter.makeWebappDispatcher(session.getServletContext(), delegator); - security.setDelegator(delegator); - - request.setAttribute("delegator", delegator); - request.setAttribute("dispatcher", dispatcher); - } - // the ServerHitBin call for the event is done inside the doRequest method requestHandler.doRequest(request, response, null, userLogin, delegator); } catch (RequestHandlerException e) { Added: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/TenantServlet.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/TenantServlet.java?rev=1032472&view=auto ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/TenantServlet.java (added) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/TenantServlet.java Mon Nov 8 06:54:17 2010 @@ -0,0 +1,68 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.webapp.control; + +import java.io.IOException; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.entity.Delegator; +import org.ofbiz.entity.DelegatorFactory; +import org.ofbiz.entity.GenericEntityException; +import org.ofbiz.entity.GenericValue; +import org.ofbiz.entity.condition.EntityCondition; +import org.ofbiz.entity.util.EntityUtil; + + +/** + * TenantServlet.java - Tenant servlet for the web application. + */ +@SuppressWarnings("serial") +public class TenantServlet extends HttpServlet { + + public static String module = TenantServlet.class.getName(); + + @Override + public void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + // get default delegator + Delegator delegator = DelegatorFactory.getDelegator("default"); + try { + // if a domain name was specified for tenant, redirect to initial path + List<GenericValue> tenants = delegator.findList("Tenant", EntityCondition.makeCondition("domainName", request.getServerName()), null, UtilMisc.toList("-createdStamp"), null, false); + if (UtilValidate.isNotEmpty(tenants)) { + GenericValue tenant = EntityUtil.getFirst(tenants); + String initialPath = tenant.getString("initialPath"); + response.sendRedirect(initialPath); + } + } catch (GenericEntityException e) { + String errMsg = "Error getting tenant by domain name: " + request.getServerName(); + Debug.logError(e, errMsg, module); + throw new ServletException(errMsg, e); + } + } +} |
Free forum by Nabble | Edit this page |