svn commit: r1643510 - in /ofbiz/trunk: ./ framework/common/src/org/ofbiz/common/ framework/entity/entitydef/ framework/resources/templates/ framework/webapp/src/org/ofbiz/webapp/control/

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

svn commit: r1643510 - in /ofbiz/trunk: ./ framework/common/src/org/ofbiz/common/ framework/entity/entitydef/ framework/resources/templates/ framework/webapp/src/org/ofbiz/webapp/control/

ashish-18
Author: ashish
Date: Sat Dec  6 09:22:23 2014
New Revision: 1643510

URL: http://svn.apache.org/r1643510
Log:
Applied patch from jira issue - OFBIZ-5898 - Tenant should run with specified domain name. Front store should support multi tenant feature. Thanks so much Arun for the contribution.

Modified:
    ofbiz/trunk/build.xml
    ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java
    ofbiz/trunk/framework/entity/entitydef/entitygroup.xml
    ofbiz/trunk/framework/entity/entitydef/entitymodel.xml
    ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Derby.xml
    ofbiz/trunk/framework/resources/templates/AdminNewTenantData-MySQL.xml
    ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Oracle.xml
    ofbiz/trunk/framework/resources/templates/AdminNewTenantData-PostgreSQL.xml
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java

Modified: ofbiz/trunk/build.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/build.xml?rev=1643510&r1=1643509&r2=1643510&view=diff
==============================================================================
--- ofbiz/trunk/build.xml (original)
+++ ofbiz/trunk/build.xml Sat Dec  6 09:22:23 2014
@@ -924,6 +924,7 @@ under the License.
     <target name="get-tenant-data">
         <input addproperty="tenantId" message="Enter Id for the tenant: "/>
         <input addproperty="tenantName" message="Enter name for tenant: "/>
+        <input addproperty="domainName" message="Enter domain name for tenant (Optional): "/>
         <input addproperty="data-readers" message="Enter data to install.
         Choices are e.g. seed,seed-initial,ext,demo.
         Multipe datasets must be separated with a comma: "/>
@@ -955,6 +956,7 @@ under the License.
             <filterset>
                 <filter token="tenantId" value="${tenantId}"/>
                 <filter token="tenantName" value="${tenantName}"/>
+                <filter token="domainName" value="${domainName}"/>
             </filterset>
         </copy>
         <antcall target="load-file">
@@ -975,6 +977,7 @@ under the License.
             <filterset>
                 <filter token="tenantId" value="${tenantId}"/>
                 <filter token="tenantName" value="${tenantName}"/>
+                <filter token="domainName" value="${domainName}"/>
                 <filter token="db-IP" value="${db-IP}"/>
                 <filter token="db-User" value="${db-User}"/>
                 <filter token="db-Password" value="${db-Password}"/>
@@ -998,6 +1001,7 @@ under the License.
             <filterset>
                 <filter token="tenantId" value="${tenantId}"/>
                 <filter token="tenantName" value="${tenantName}"/>
+                <filter token="domainName" value="${domainName}"/>
                 <filter token="db-IP" value="${db-IP}"/>
                 <filter token="db-User" value="${db-User}"/>
                 <filter token="db-Password" value="${db-Password}"/>
@@ -1021,6 +1025,7 @@ under the License.
             <filterset>
                 <filter token="tenantId" value="${tenantId}"/>
                 <filter token="tenantName" value="${tenantName}"/>
+                <filter token="domainName" value="${domainName}"/>
                 <filter token="db-IP" value="${db-IP}"/>
                 <filter token="db-User" value="${db-User}"/>
                 <filter token="db-Password" value="${db-Password}"/>
@@ -1041,6 +1046,7 @@ under the License.
         <echo>------------------------------------</echo>
         <echo message="tenantId = ${tenantId}"/>
         <echo>tenantName = ${tenantName}</echo>
+        <echo>domainName = ${domainName}</echo>
         <echo>db-Platform = ${db-Platform}</echo>
         <echo>db-IP = ${db-IP}</echo>
         <echo>db-User = ${db-User}</echo>

Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java?rev=1643510&r1=1643509&r2=1643510&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java (original)
+++ ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java Sat Dec  6 09:22:23 2014
@@ -57,15 +57,17 @@ public class UrlServletHelper extends Co
             try {
                 // if tenant was specified, replace delegator with the new per-tenant delegator and set tenantId to session attribute
                 delegator = getDelegator(servletContext);
-                List<GenericValue> tenants = delegator.findList("Tenant", EntityCondition.makeCondition("domainName", serverName), null, UtilMisc.toList("-createdStamp"), null, false);
-                if (UtilValidate.isNotEmpty(tenants)) {
-                    GenericValue tenant = EntityUtil.getFirst(tenants);
-                    String tenantId = tenant.getString("tenantId");
-                    
+
+                //Use base delegator for fetching data from entity of entityGroup org.ofbiz.tenant
+                Delegator baseDelegator = DelegatorFactory.getDelegator(delegator.getDelegatorBaseName());
+                GenericValue tenantDomainName = baseDelegator.findOne("TenantDomainName", UtilMisc.toMap("domainName", serverName), false);
+
+                if (UtilValidate.isNotEmpty(tenantDomainName)) {
+                    String tenantId = tenantDomainName.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);
                     servletContext.setAttribute("delegator", delegator);

Modified: ofbiz/trunk/framework/entity/entitydef/entitygroup.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/entitydef/entitygroup.xml?rev=1643510&r1=1643509&r2=1643510&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/entitydef/entitygroup.xml (original)
+++ ofbiz/trunk/framework/entity/entitydef/entitygroup.xml Sat Dec  6 09:22:23 2014
@@ -29,4 +29,5 @@ under the License.
 <!--     <entity-group group="org.ofbiz.tenant" entity="TenantUserLogin"/> -->
     <entity-group group="org.ofbiz.tenant" entity="Component"/>
     <entity-group group="org.ofbiz.tenant" entity="TenantComponent"/>
+    <entity-group group="org.ofbiz.tenant" entity="TenantDomainName"/>
 </entitygroup>

Modified: ofbiz/trunk/framework/entity/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/entitydef/entitymodel.xml?rev=1643510&r1=1643509&r2=1643510&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/framework/entity/entitydef/entitymodel.xml Sat Dec  6 09:22:23 2014
@@ -66,7 +66,6 @@ under the License.
     <entity entity-name="Tenant" package-name="org.ofbiz.entity.tenant">
         <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"/>
@@ -153,4 +152,13 @@ under the License.
             <key-map field-name="componentName"/>
         </relation>
     </entity>
+    <entity entity-name="TenantDomainName" package-name="org.ofbiz.entity.tenant"
+            title="Tenant and its Domain Name">
+        <field name="tenantId" type="id-ne"></field>
+        <field name="domainName" type="long-varchar"></field>
+        <prim-key field="domainName"/>
+        <relation type="one" fk-name="TNNT_DMNAM" rel-entity-name="Tenant">
+            <key-map field-name="tenantId"/>
+        </relation>
+    </entity>
 </entitymodel>

Modified: ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Derby.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Derby.xml?rev=1643510&r1=1643509&r2=1643510&view=diff
==============================================================================
--- ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Derby.xml (original)
+++ ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Derby.xml Sat Dec  6 09:22:23 2014
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <entity-engine-xml>
     <Tenant tenantId="@tenantId@" tenantName="@tenantName@" />
+    <TenantDomainName tenantId="@tenantId@" domainName="@domainName@" />
     <TenantDataSource tenantId="@tenantId@" entityGroupName="org.ofbiz"
         jdbcUri="jdbc:derby:ofbiz_@tenantId@;create=true" jdbcUsername="ofbiz" jdbcPassword="ofbiz"/>
     <TenantDataSource tenantId="@tenantId@" entityGroupName="org.ofbiz.olap"

Modified: ofbiz/trunk/framework/resources/templates/AdminNewTenantData-MySQL.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/resources/templates/AdminNewTenantData-MySQL.xml?rev=1643510&r1=1643509&r2=1643510&view=diff
==============================================================================
--- ofbiz/trunk/framework/resources/templates/AdminNewTenantData-MySQL.xml (original)
+++ ofbiz/trunk/framework/resources/templates/AdminNewTenantData-MySQL.xml Sat Dec  6 09:22:23 2014
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <entity-engine-xml>
     <Tenant tenantId="@tenantId@" tenantName="@tenantName@"/>
+    <TenantDomainName tenantId="@tenantId@" domainName="@domainName@" />
     <TenantDataSource tenantId="@tenantId@" entityGroupName="org.ofbiz"
         jdbcUri="jdbc:mysql://@db-IP@/ofbiz_@tenantId@" jdbcUsername="@db-User@" jdbcPassword="@db-Password@"/>
     <TenantDataSource tenantId="@tenantId@" entityGroupName="org.ofbiz.olap"

Modified: ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Oracle.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Oracle.xml?rev=1643510&r1=1643509&r2=1643510&view=diff
==============================================================================
--- ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Oracle.xml (original)
+++ ofbiz/trunk/framework/resources/templates/AdminNewTenantData-Oracle.xml Sat Dec  6 09:22:23 2014
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <entity-engine-xml>
     <Tenant tenantId="@tenantId@" tenantName="@tenantName@"/>
+    <TenantDomainName tenantId="@tenantId@" domainName="@domainName@" />
     <TenantDataSource tenantId="@tenantId@" entityGroupName="org.ofbiz"
         jdbcUri="jdbc:oracle:thin:@@db-IP@:ofbiz_@tenantId@" jdbcUsername="@db-User@" jdbcPassword="@db-Password@"/>
     <TenantDataSource tenantId="@tenantId@" entityGroupName="org.ofbiz.olap"

Modified: ofbiz/trunk/framework/resources/templates/AdminNewTenantData-PostgreSQL.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/resources/templates/AdminNewTenantData-PostgreSQL.xml?rev=1643510&r1=1643509&r2=1643510&view=diff
==============================================================================
--- ofbiz/trunk/framework/resources/templates/AdminNewTenantData-PostgreSQL.xml (original)
+++ ofbiz/trunk/framework/resources/templates/AdminNewTenantData-PostgreSQL.xml Sat Dec  6 09:22:23 2014
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <entity-engine-xml>
     <Tenant tenantId="@tenantId@" tenantName="@tenantName@"/>
+    <TenantDomainName tenantId="@tenantId@" domainName="@domainName@" />
     <TenantDataSource tenantId="@tenantId@" entityGroupName="org.ofbiz"
         jdbcUri="jdbc:postgresql://@db-IP@/ofbiz_@tenantId@" jdbcUsername="@db-User@" jdbcPassword="@db-Password@"/>
     <TenantDataSource tenantId="@tenantId@" entityGroupName="org.ofbiz.olap"

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=1643510&r1=1643509&r2=1643510&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 Sat Dec  6 09:22:23 2014
@@ -255,13 +255,17 @@ public class ContextFilter implements Fi
             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<GenericValue> tenants = delegator.findList("Tenant", EntityCondition.makeCondition("domainName", serverName), null, UtilMisc.toList("-createdStamp"), null, false);
-                if (UtilValidate.isNotEmpty(tenants)) {
-                    GenericValue tenant = EntityUtil.getFirst(tenants);
-                    String tenantId = tenant.getString("tenantId");
+
+                //Use base delegator for fetching data from entity of entityGroup org.ofbiz.tenant
+                Delegator baseDelegator = DelegatorFactory.getDelegator(delegator.getDelegatorBaseName());
+                GenericValue tenantDomainName = baseDelegator.findOne("TenantDomainName", UtilMisc.toMap("domainName", serverName), false);
+
+                if (UtilValidate.isNotEmpty(tenantDomainName)) {
+                    String tenantId = tenantDomainName.getString("tenantId");
 
                     // if the request path is a root mount then redirect to the initial path
                     if (UtilValidate.isNotEmpty(requestPath) && requestPath.equals(contextUri)) {
+                        GenericValue tenant = baseDelegator.findOne("Tenant", UtilMisc.toMap("tenantId", tenantId), false);
                         String initialPath = tenant.getString("initialPath");
                         if (UtilValidate.isNotEmpty(initialPath) && !"/".equals(initialPath)) {
                             ((HttpServletResponse)response).sendRedirect(initialPath);
@@ -291,6 +295,30 @@ public class ContextFilter implements Fi
                     request.setAttribute("security", security);
                     
                     request.setAttribute("tenantId", tenantId);
+                } else if (delegator.getDelegatorBaseName() != delegator.getDelegatorName()) {
+                    
+                    // Set default delegator
+                    Debug.logInfo("No tenant found for requested domain name " + serverName, module);
+                    Debug.logInfo("Setting default delegator and dispatcher", module);
+                    String delegatorName = delegator.getDelegatorBaseName();
+                    httpRequest.getSession().setAttribute("delegatorName", delegatorName);
+
+                    // after this line the delegator is replaced with the new per-tenant delegator
+                    delegator = DelegatorFactory.getDelegator(delegatorName);
+                    config.getServletContext().setAttribute("delegator", delegator);
+
+                    // clear web context objects
+                    config.getServletContext().setAttribute("security", null);
+                    config.getServletContext().setAttribute("dispatcher", null);
+
+                    // initialize security
+                    Security security = getSecurity();
+                    // initialize the services dispatcher
+                    LocalDispatcher dispatcher = getDispatcher(config.getServletContext());
+
+                    // set web context objects
+                    request.setAttribute("dispatcher", dispatcher);
+                    request.setAttribute("security", security);
                 }
 
                 // NOTE DEJ20101130: do NOT always put the delegator name in the user's session because the user may

Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java?rev=1643510&r1=1643509&r2=1643510&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java Sat Dec  6 09:22:23 2014
@@ -394,9 +394,13 @@ public class LoginWorker {
 
         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
         Delegator delegator = (Delegator) request.getAttribute("delegator");
+        ServletContext servletContext = session.getServletContext();
 
         // if a tenantId was passed in, see if the userLoginId is associated with that tenantId (can use any delegator for this, entity is not tenant-specific)
         String tenantId = request.getParameter("tenantId");
+        if (UtilValidate.isEmpty(tenantId)) {
+            tenantId = (String) request.getAttribute("tenantId");
+        }
         if (UtilValidate.isNotEmpty(tenantId)) {
             // see if we need to activate a tenant delegator, only do if the current delegatorName has a hash symbol in it, and if the passed in tenantId doesn't match the one in the delegatorName
             String oldDelegatorName = delegator.getDelegatorName();
@@ -438,7 +442,6 @@ public class LoginWorker {
                 }
                 */
 
-                ServletContext servletContext = session.getServletContext();
 
                 // make that tenant active, setup a new delegator and a new dispatcher
                 String delegatorName = delegator.getDelegatorBaseName() + "#" + tenantId;
@@ -458,6 +461,22 @@ public class LoginWorker {
                 // NOTE: these will be local for now and set in the request and session later, after we've verified that the user
                 setupNewDelegatorEtc = true;
             }
+        } else {
+            // Set default delegator
+            Debug.logInfo("Setting default delegator", module);
+            String delegatorName = delegator.getDelegatorBaseName();
+            try {
+                // after this line the delegator is replaced with default delegator
+                delegator = DelegatorFactory.getDelegator(delegatorName);
+                dispatcher = ContextFilter.makeWebappDispatcher(servletContext, delegator);
+            } catch (NullPointerException e) {
+                Debug.logError(e, "Error getting default delegator", module);
+                Map<String, String> messageMap = UtilMisc.toMap("errorMessage", "Error getting default delegator");
+                String errMsg = UtilProperties.getMessage(resourceWebapp, "loginevents.following_error_occurred_during_login", messageMap, UtilHttp.getLocale(request));
+                request.setAttribute("_ERROR_MESSAGE_", errMsg);
+                return "error";
+            }
+            setupNewDelegatorEtc = true;
         }
 
         Map<String, Object> result = null;
@@ -514,7 +533,6 @@ public class LoginWorker {
                     }
                 }
             }
-
             if (setupNewDelegatorEtc) {
                 // now set the delegator and dispatcher in a bunch of places just in case they were changed
                 setWebContextObjects(request, response, delegator, dispatcher);
@@ -696,10 +714,11 @@ public class LoginWorker {
 
         if (currCatalog != null) session.setAttribute("CURRENT_CATALOG_ID", currCatalog);
         if (delegatorName != null) {
+            //Commented it as multi tenancy support is now available for front-store application as well.
             // if there is a tenantId in the delegatorName remove it now so that tenant selection doesn't last beyond logout
-            if (delegatorName.indexOf('#') > 0) {
+            /*if (delegatorName.indexOf('#') > 0) {
                 delegatorName = delegatorName.substring(0, delegatorName.indexOf('#'));
-            }
+            }*/
             session.setAttribute("delegatorName", delegatorName);
 
             delegator = DelegatorFactory.getDelegator(delegatorName);