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);
> +        }
> +    }
> +}
> 
> 

Reply via email to