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