svn commit: r1032472 - in /ofbiz/trunk/framework: birt/src/org/ofbiz/birt/ birt/src/org/ofbiz/birt/email/ birt/src/org/ofbiz/birt/report/servlet/ birt/src/org/ofbiz/birt/webapp/view/ catalina/src/org/ofbiz/catalina/container/ common/webcommon/ entity/e...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1032472 - in /ofbiz/trunk/framework: birt/src/org/ofbiz/birt/ birt/src/org/ofbiz/birt/email/ birt/src/org/ofbiz/birt/report/servlet/ birt/src/org/ofbiz/birt/webapp/view/ catalina/src/org/ofbiz/catalina/container/ common/webcommon/ entity/e...

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