Hi Hans, Chattree, I have a question about the changes to ContextFilter.java in this commit related to the selection of the Tenant record matching the domainname: does it mean that if a matching record is found then the tenant selected by the user at login is automatically overridden? Is this the intended behavior?
Thanks, Jacopo On Nov 8, 2010, at 7:54 AM, [email protected] wrote: > 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); > + } > + } > +} > >
