Hi Jacopo,

when a request for a certain domain name comes in the tenant is selected and the login screen without tenant input field is shown when login is required. Otherwise the login screen is skipped.

A problem here is that only a single domain name can be specified, Here locally we already extended that and we should commit that...but it is an entity change which probably need a lot of discussion.....

Regards,
Hans

On 11/19/2012 08:31 PM, Jacopo Cappellato wrote:
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, hans...@apache.org 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