buildbot exception in on ofbizTrunkFrameworkPlugins

2020-09-16 Thread buildbot
The Buildbot has detected a build exception on builder 
ofbizTrunkFrameworkPlugins while building ofbiz-plugins. Full details are 
available at:
https://ci.apache.org/builders/ofbizTrunkFrameworkPlugins/builds/1778

Buildbot URL: https://ci.apache.org/

Buildslave for this Build: asf945_ubuntu

Build Reason: The AnyBranchScheduler scheduler named 'onTrunkPluginsCommit' 
triggered this build
Build Source Stamp: [branch trunk] 6ac1f284915ff1de659bda944e26b90bdab2f75c
Blamelist: Girish Vasmatkar 

BUILD FAILED: exception javadoc upload test-results part 1

Sincerely,
 -The Buildbot





[ofbiz-plugins] branch trunk updated: Implemented: Add support to read and register resources defined in XML DSL(OFBIZ-11995)

2020-09-16 Thread grv
This is an automated email from the ASF dual-hosted git repository.

grv pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-plugins.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 6ac1f28  Implemented: Add support to read and register resources 
defined in XML DSL(OFBIZ-11995)
6ac1f28 is described below

commit 6ac1f284915ff1de659bda944e26b90bdab2f75c
Author: Girish Vasmatkar 
AuthorDate: Wed Sep 16 18:21:27 2020 +0530

Implemented: Add support to read and register resources defined in XML 
DSL(OFBIZ-11995)
---
 .../apache/ofbiz/ws/rs/core/OFBizApiConfig.java|  40 
 .../ofbiz/ws/rs/process/RestRequestHandler.java| 256 +
 .../ofbiz/ws/rs/process/ServiceRequestHandler.java | 102 
 3 files changed, 398 insertions(+)

diff --git 
a/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/core/OFBizApiConfig.java 
b/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/core/OFBizApiConfig.java
index 911c880..5a168fe 100644
--- 
a/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/core/OFBizApiConfig.java
+++ 
b/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/core/OFBizApiConfig.java
@@ -21,19 +21,29 @@ package org.apache.ofbiz.ws.rs.core;
 import java.io.File;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.ws.rs.core.MediaType;
+
 import org.apache.ofbiz.base.component.ComponentConfig;
 import org.apache.ofbiz.base.component.ComponentException;
 import org.apache.ofbiz.base.util.Debug;
+import org.apache.ofbiz.base.util.UtilValidate;
 import org.apache.ofbiz.ws.rs.model.ModelApi;
 import org.apache.ofbiz.ws.rs.model.ModelApiReader;
+import org.apache.ofbiz.ws.rs.model.ModelOperation;
+import org.apache.ofbiz.ws.rs.model.ModelResource;
+import org.apache.ofbiz.ws.rs.process.ServiceRequestHandler;
+import org.apache.ofbiz.ws.rs.security.Secured;
 import org.glassfish.jersey.jackson.JacksonFeature;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.server.model.Resource;
+import org.glassfish.jersey.server.model.ResourceMethod;
 
 public class OFBizApiConfig extends ResourceConfig {
 private static final String MODULE = OFBizApiConfig.class.getName();
@@ -58,6 +68,7 @@ public class OFBizApiConfig extends ResourceConfig {
 
 private void registerDSLResources() {
 loadApiDefinitions();
+traverseAndRegisterApiDefinitions();
 }
 
 private void loadApiDefinitions() {
@@ -78,4 +89,33 @@ public class OFBizApiConfig extends ResourceConfig {
 }
 });
 }
+
+private void traverseAndRegisterApiDefinitions() {
+if (UtilValidate.isEmpty(MICRO_APIS)) {
+Debug.logInfo("No API defintion to process", MODULE);
+return;
+}
+MICRO_APIS.forEach((k, v) -> {
+Debug.logInfo("Registring Resource Definitions from API - " + k, 
MODULE);
+List resources = v.getResources();
+resources.forEach(modelResource -> {
+Resource.Builder resourceBuilder = 
Resource.builder(modelResource.getPath()).name(modelResource.getName());
+for (ModelOperation op : modelResource.getOperations()) {
+if (UtilValidate.isEmpty(op.getPath())) { // Add the 
method to the parent resource
+ResourceMethod.Builder methodBuilder = 
resourceBuilder.addMethod(op.getVerb().toUpperCase());
+
methodBuilder.produces(MediaType.APPLICATION_JSON).nameBindings(Secured.class);
+String serviceName = op.getService();
+methodBuilder.handledBy(new 
ServiceRequestHandler(serviceName));
+} else {
+Resource.Builder childResourceBuilder = 
resourceBuilder.addChildResource(op.getPath());
+ResourceMethod.Builder childResourceMethodBuilder = 
childResourceBuilder.addMethod(op.getVerb().toUpperCase());
+
childResourceMethodBuilder.produces(MediaType.APPLICATION_JSON).nameBindings(Secured.class);
+String serviceName = op.getService();
+childResourceMethodBuilder.handledBy(new 
ServiceRequestHandler(serviceName));
+}
+}
+registerResources(resourceBuilder.build());
+});
+});
+}
 }
diff --git 
a/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/process/RestRequestHandler.java
 
b/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/process/RestRequestHandler.java
new file mode 100644
index 000..0309cdf
--- /dev/null
+++ 

buildbot success in on ofbizTrunkFramework

2020-09-16 Thread buildbot
The Buildbot has detected a restored build on builder ofbizTrunkFramework while 
building . Full details are available at:
https://ci.apache.org/builders/ofbizTrunkFramework/builds/1905

Buildbot URL: https://ci.apache.org/

Buildslave for this Build: asf947_ubuntu

Build Reason: forced: by IRC user  (privmsg): forces manual build 
after supposed BuildBot error
Build Source Stamp: HEAD
Blamelist: 

Build succeeded!

Sincerely,
 -The Buildbot





buildbot failure in on ofbizTrunkFramework

2020-09-16 Thread buildbot
The Buildbot has detected a new failure on builder ofbizTrunkFramework while 
building ofbiz-framework. Full details are available at:
https://ci.apache.org/builders/ofbizTrunkFramework/builds/1904

Buildbot URL: https://ci.apache.org/

Buildslave for this Build: asf946_ubuntu

Build Reason: The AnyBranchScheduler scheduler named 'onTrunkFrameworkCommit' 
triggered this build
Build Source Stamp: [branch trunk] ae8b2d89b047d039382d555250b73161c2c2b438
Blamelist: Jacques Le Roux 

BUILD FAILED: failed testIntegration

Sincerely,
 -The Buildbot





[ofbiz-framework] branch trunk updated: Improved: Checkstyle: Variable name must match pattern (OFBIZ-11926)

2020-09-16 Thread jleroux
This is an automated email from the ASF dual-hosted git repository.

jleroux pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
 new ae8b2d8  Improved: Checkstyle: Variable name must match pattern 
(OFBIZ-11926)
ae8b2d8 is described below

commit ae8b2d89b047d039382d555250b73161c2c2b438
Author: Jacques Le Roux 
AuthorDate: Wed Sep 16 10:13:37 2020 +0200

Improved: Checkstyle: Variable name must match pattern (OFBIZ-11926)

Removes last remaining "Must have at least one statement" issues by using
Debug.logVerbose

Decreases tasks.checkstyleMain.maxErrors from 543 to 535

Thanks: Suraj for report
---
 .../org/apache/ofbiz/accounting/tax/TaxAuthorityServices.java  | 10 --
 build.gradle   |  2 +-
 .../src/main/java/org/apache/ofbiz/base/util/KeyStoreUtil.java |  2 +-
 .../main/java/org/apache/ofbiz/entity/jdbc/DatabaseUtil.java   |  2 +-
 .../main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java|  2 +-
 .../main/java/org/apache/ofbiz/entity/model/ModelReader.java   |  5 ++---
 .../src/main/java/org/apache/ofbiz/minilang/SimpleMethod.java  |  1 +
 .../java/org/apache/ofbiz/widget/renderer/FormRenderer.java|  1 +
 .../main/java/org/apache/ofbiz/widget/renderer/Paginator.java  |  1 +
 9 files changed, 13 insertions(+), 13 deletions(-)

diff --git 
a/applications/accounting/src/main/java/org/apache/ofbiz/accounting/tax/TaxAuthorityServices.java
 
b/applications/accounting/src/main/java/org/apache/ofbiz/accounting/tax/TaxAuthorityServices.java
index 1cfd26f..7691d60 100644
--- 
a/applications/accounting/src/main/java/org/apache/ofbiz/accounting/tax/TaxAuthorityServices.java
+++ 
b/applications/accounting/src/main/java/org/apache/ofbiz/accounting/tax/TaxAuthorityServices.java
@@ -428,8 +428,7 @@ public class TaxAuthorityServices {
 .where(mainCondition).orderBy("minItemPrice", 
"minPurchase", "fromDate").filterByDate().queryList();
 
 if (lookupList.isEmpty()) {
-Debug.logWarning("In TaxAuthority Product Rate no records were 
found for condition:" + mainCondition
-.toString(), MODULE);
+Debug.logWarning("In TaxAuthority Product Rate no records were 
found for condition:" + mainCondition.toString(), MODULE);
 return adjustments;
 }
 
@@ -471,14 +470,13 @@ public class TaxAuthorityServices {
 // get glAccountId from TaxAuthorityGlAccount entity using the 
payToPartyId as
 // the organizationPartyId
 GenericValue taxAuthorityGlAccount = 
EntityQuery.use(delegator).from("TaxAuthorityGlAccount")
-.where("taxAuthPartyId", taxAuthPartyId, 
"taxAuthGeoId", taxAuthGeoId, "organizationPartyId",
-payToPartyId).queryOne();
+.where("taxAuthPartyId", taxAuthPartyId, 
"taxAuthGeoId", taxAuthGeoId, "organizationPartyId", payToPartyId).queryOne();
 String taxAuthGlAccountId = null;
 if (taxAuthorityGlAccount != null) {
 taxAuthGlAccountId = 
taxAuthorityGlAccount.getString("glAccountId");
 } else {
-// TODO: what to do if no TaxAuthorityGlAccount found? Use 
some default, or is
-// that done elsewhere later on?
+// TODO: what to do if no TaxAuthorityGlAccount found? Use 
some default, or is that done elsewhere later on?
+Debug.logVerbose("what to do if no TaxAuthorityGlAccount 
found?", MODULE);
 }
 
 GenericValue productPrice = null;
diff --git a/build.gradle b/build.gradle
index c8e92d6..398b283 100644
--- a/build.gradle
+++ b/build.gradle
@@ -289,7 +289,7 @@ checkstyle {
 // the sum of errors found last time it was changed after using the
 // ‘checkstyle’ tool present in the framework and in the official
 // plugins.
-tasks.checkstyleMain.maxErrors = 543
+tasks.checkstyleMain.maxErrors = 535
 // Currently there are a lot of errors so we need to temporarily
 // hide them to avoid polluting the terminal output.
 showViolations = false
diff --git 
a/framework/base/src/main/java/org/apache/ofbiz/base/util/KeyStoreUtil.java 
b/framework/base/src/main/java/org/apache/ofbiz/base/util/KeyStoreUtil.java
index 3ae3eed..796058d 100755
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/KeyStoreUtil.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/KeyStoreUtil.java
@@ -206,8 +206,8 @@ public final class KeyStoreUtil {
 String line;
 
 // ignore up to the header
-//TODO: Correct it for checkstyle
 while ((line = reader.readLine()) != null && !line.equals(header)) {
+Debug.logVerbose("Ignore up to the 

[ofbiz-plugins] branch trunk updated: Implemented: OpenAPI generation for resources configured using XML DSL(OFBIZ-11995)

2020-09-16 Thread grv
This is an automated email from the ASF dual-hosted git repository.

grv pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-plugins.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 85e76a3  Implemented: OpenAPI generation for resources configured 
using XML DSL(OFBIZ-11995)
85e76a3 is described below

commit 85e76a3997d3d7df32e166f154da484abff85434
Author: Girish Vasmatkar 
AuthorDate: Wed Sep 16 13:10:46 2020 +0530

Implemented: OpenAPI generation for resources configured using XML 
DSL(OFBIZ-11995)
---
 .../ofbiz/ws/rs/openapi/OFBizOpenApiReader.java| 60 +-
 1 file changed, 59 insertions(+), 1 deletion(-)

diff --git 
a/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/openapi/OFBizOpenApiReader.java
 
b/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/openapi/OFBizOpenApiReader.java
index 480aa2a..182347a 100644
--- 
a/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/openapi/OFBizOpenApiReader.java
+++ 
b/ofbiz-rest-impl/src/main/java/org/apache/ofbiz/ws/rs/openapi/OFBizOpenApiReader.java
@@ -21,6 +21,7 @@ package org.apache.ofbiz.ws.rs.openapi;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -34,7 +35,11 @@ import org.apache.ofbiz.service.GenericServiceException;
 import org.apache.ofbiz.service.LocalDispatcher;
 import org.apache.ofbiz.service.ModelService;
 import org.apache.ofbiz.webapp.WebAppUtil;
+import org.apache.ofbiz.ws.rs.core.OFBizApiConfig;
 import org.apache.ofbiz.ws.rs.listener.ApiContextListener;
+import org.apache.ofbiz.ws.rs.model.ModelApi;
+import org.apache.ofbiz.ws.rs.model.ModelOperation;
+import org.apache.ofbiz.ws.rs.model.ModelResource;
 import org.apache.ofbiz.ws.rs.util.OpenApiUtil;
 
 import io.swagger.v3.jaxrs2.Reader;
@@ -89,8 +94,61 @@ public final class OFBizOpenApiReader extends Reader 
implements OpenApiReader {
 return openApi;
 }
 
-// TODO - Add method contents
 private void addApiResources() {
+Map apis = OFBizApiConfig.getModelApis();
+SecurityRequirement security = new SecurityRequirement();
+security.addList("jwtToken");
+apis.forEach((k, v) -> {
+List resources = v.getResources();
+resources.forEach(modelResource -> {
+Tag resourceTab = new 
Tag().name(modelResource.getDisplayName()).description(modelResource.getDescription());
+openApiTags.add(resourceTab);
+String basePath = modelResource.getPath();
+for (ModelOperation op : modelResource.getOperations()) {
+String uri = basePath + op.getPath();
+boolean pathExists = false;
+PathItem pathItemObject = paths.get(uri);
+if (UtilValidate.isEmpty(pathItemObject)) {
+pathItemObject = new PathItem();
+} else {
+pathExists = true;
+}
+String serviceName = op.getService();
+final Operation operation = new 
Operation().summary(op.getDescription())
+
.description(op.getDescription()).addTagsItem(modelResource.getDisplayName())
+
.operationId(serviceName).deprecated(false).addSecurityItem(security);
+String verb = op.getVerb().toUpperCase();
+ModelService service = null;
+try {
+service = context.getModelService(serviceName);
+} catch (GenericServiceException e) {
+e.printStackTrace();
+}
+if (verb.equalsIgnoreCase(HttpMethod.GET)) {
+final QueryParameter serviceInParam = (QueryParameter) 
new QueryParameter().required(true)
+.description("Operation Input Parameters in 
JSON").name("input");
+Schema refSchema = new Schema<>();
+refSchema.$ref("#/components/schemas/" + 
"api.request." + service.getName());
+serviceInParam.schema(refSchema);
+operation.addParametersItem(serviceInParam);
+} else if (verb.matches(HttpMethod.POST + "|" + 
HttpMethod.PUT + "|" + HttpMethod.PATCH)) {
+RequestBody request = new RequestBody()
+.description("Request Body for operation " + 
op.getDescription())
+.content(new 
Content().addMediaType(javax.ws.rs.core.MediaType.APPLICATION_JSON,
+new MediaType().schema(new Schema<>()
+.$ref("#/components/schemas/" 
+ "api.request." + service.getName();
+

[ofbiz-framework] branch trunk updated: Improved: Convert ProductStoreServices.xml file from mini-lang to groovy DSL (OFBIZ-11449)

2020-09-16 Thread nmalin
This is an automated email from the ASF dual-hosted git repository.

nmalin pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
 new c0054e9  Improved: Convert ProductStoreServices.xml file from 
mini-lang to groovy DSL (OFBIZ-11449)
c0054e9 is described below

commit c0054e97ea8d5baf09fc10613c96a7bb3381640a
Author: Nicolas Malin 
AuthorDate: Wed Sep 16 09:34:22 2020 +0200

Improved: Convert ProductStoreServices.xml file from mini-lang to groovy DSL
(OFBIZ-11449)

Thanks to Sebastian Berg for this patch
---
 .../product/store/ProductStoreServices.groovy  | 464 ++
 .../product/store/ProductStoreServices.xml | 542 -
 applications/product/servicedef/services_store.xml |  32 +-
 3 files changed, 480 insertions(+), 558 deletions(-)

diff --git 
a/applications/product/groovyScripts/product/store/ProductStoreServices.groovy 
b/applications/product/groovyScripts/product/store/ProductStoreServices.groovy
new file mode 100644
index 000..9f05ebb
--- /dev/null
+++ 
b/applications/product/groovyScripts/product/store/ProductStoreServices.groovy
@@ -0,0 +1,464 @@
+/*
+ * 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.
+ */
+
+
+import org.apache.ofbiz.base.util.Debug
+import org.apache.ofbiz.entity.condition.EntityCondition
+import org.apache.ofbiz.entity.condition.EntityConditionBuilder
+
+import java.sql.Timestamp
+
+import org.apache.ofbiz.base.util.UtilDateTime
+import org.apache.ofbiz.base.util.UtilProperties
+import org.apache.ofbiz.entity.GenericValue
+import org.apache.ofbiz.entity.util.EntityTypeUtil
+import org.apache.ofbiz.entity.util.EntityUtil
+import org.apache.ofbiz.service.ServiceUtil
+
+
+/**
+ * Create a Product Store
+ * @return
+ */
+def createProductStore() {
+Map result = success()
+if (!security.hasEntityPermission("CATALOG", "_CREATE", 
parameters.userLogin)) {
+return error(UtilProperties.getMessage("ProductUiLabels", 
"ProductCatalogCreatePermissionError", parameters.locale))
+}
+if ("Y" == parameters.oneInventoryFacility
+&& !parameters.inventoryFacilityId) {
+return error(UtilProperties.getMessage("ProductUiLabels", 
"InventoryFacilityIdRequired", parameters.locale))
+}
+if ("Y" == parameters.showPriceWithVatTax) {
+if (!parameters.vatTaxAuthGeoId) {
+return error(UtilProperties.getMessage("ProductUiLabels", 
"ProductVatTaxAuthGeoNotSet", parameters.locale))
+}
+if (!parameters.vatTaxAuthPartyId) {
+return error(UtilProperties.getMessage("ProductUiLabels", 
"ProductVatTaxAuthPartyNotSet", parameters.locale))
+}
+}
+GenericValue newEntity = makeValue("ProductStore")
+newEntity.setNonPKFields(parameters)
+String productStoreId = delegator.getNextSeqId("ProductStore")
+newEntity.productStoreId = productStoreId
+newEntity.create()
+
+// create the ProductStoreFacility record
+if (newEntity.inventoryFacilityId) {
+makeValue("ProductStoreFacility", [
+facilityId: newEntity.inventoryFacilityId,
+productStoreId: newEntity.productStoreId,
+fromDate: UtilDateTime.nowTimestamp()])
+.create()
+}
+result.productStoreId = productStoreId
+return result
+}
+
+/**
+ * Update a Product Store
+ * @return
+ */
+def updateProductStore() {
+if (!security.hasEntityPermission("CATALOG", "_UPDATE", 
parameters.userLogin)) {
+return error(UtilProperties.getMessage("ProductUiLabels", 
"ProductCatalogUpdatePermissionError", parameters.locale))
+}
+if ("Y" == parameters.oneInventoryFacility
+&& !parameters.inventoryFacilityId) {
+return error(UtilProperties.getMessage("ProductUiLabels", 
"InventoryFacilityIdRequired", parameters.locale))
+}
+GenericValue store = from("ProductStore").where(productStoreId: 
parameters.productStoreId).queryOne()
+String oldFacilityId = store.inventoryFacilityId
+store.setNonPKFields(parameters)
+
+// visualThemeId must be replaced by ecomThemeId because of Entity.field 

[ofbiz-framework] branch trunk updated: Improved: Demo Data in conflict with Entity Unique Index when loading data during creation (OFBIZ-11998)

2020-09-16 Thread jleroux
This is an automated email from the ASF dual-hosted git repository.

jleroux pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
 new 231f97f  Improved: Demo Data in conflict with Entity Unique Index when 
loading data during creation (OFBIZ-11998)
231f97f is described below

commit 231f97f030ad14b04542f6214ef48a8b74b551b4
Author: Jacques Le Roux 
AuthorDate: Wed Sep 16 09:09:06 2020 +0200

Improved: Demo Data in conflict with Entity Unique Index when loading data 
during creation (OFBIZ-11998)

This is a known issue with MsSQL since

http://ofbiz.135035.n4.nabble.com/Unique-constraint-on-Person-cardId-breaks-ofbiz-on-SQL-Server-td4656840.html
The problem does not exist with Derby, nor with the mostly open source DBMS
used with OFBiz: Postres, MySQL, MariaDB, etc.
So we will not change the current OOTB setting and suggest to simply change
your own configuration

Thanks: Schumann Ye for report
---
 framework/entity/config/entityengine.xml | 4 
 1 file changed, 4 insertions(+)

diff --git a/framework/entity/config/entityengine.xml 
b/framework/entity/config/entityengine.xml
index 8e4301c..1dd11c1 100644
--- a/framework/entity/config/entityengine.xml
+++ b/framework/entity/config/entityengine.xml
@@ -722,6 +722,10 @@ access. For a detailed description see the 
core/docs/entityconfig.html file.
   http://forum.java.sun.com/thread.jspa?forumID=48=184797
  b. If using an old version of the driver, beware of this resource leak:
   http://support.microsoft.com/kb/820773/
+ c. Demo data are in conflict with Entity Unique Index when loading data
+  This is a known issue with MsSQL since 
http://ofbiz.135035.n4.nabble.com/Unique-constraint-on-Person-cardId-breaks-ofbiz-on-SQL-Server-td4656840.html
+  The problem does not exist with Derby, nor with the mostly open source 
DBMS used with OFBiz: Postres, MySQL, MariaDB, etc.
+  So we will not change the current OOTB setting and suggest to simply 
change your own configuration. See OFBIZ-11998 for more.
 -->