Author: adrianc
Date: Sun Nov 10 16:43:20 2013
New Revision: 1540491

URL: http://svn.apache.org/r1540491
Log:
Merged revision(s) 1526276 from ofbiz/trunk:
Fixed a warning caused by a framework dependency on the Party component.

Merged revision(s) 1527626 from ofbiz/trunk:
Fixed a subtle flaw in the GenericDelegator.findOne method. When a database 
query returns no result, GenericValue.NULL_VALUE is put in the pk cache - so 
future findOne calls will know the entity value doesn't exist. But the findOne 
method never checked for GenericValue.NULL_VALUE in cache gets, so the database 
was queried again for an entity value we already know doesn't exist.

https://issues.apache.org/jira/browse/OFBIZ-5332

Merged revision(s) 1527609 from ofbiz/trunk:
Small change to GenericDelegator.findOne method - moved the primary key 
validation check to the beginning of the method.

I believe the original intention was to perform the validation check after the 
EV_VALIDATE ECAs were run, but the primary key was being used in three method 
calls before that happened - so those methods could have been passed an invalid 
primary key.

Merged revision(s) 1527212 from ofbiz/trunk:
Replaced HashSet with LinkedHashSet in UtilMisc.java to preserve original 
ordering. Suggested by Leon on the dev mailing list.

Merged revision(s) 1527810 from ofbiz/trunk:
Fixed a problem with bad try-catch-finally nesting and transaction handling in 
GenericDelegator.

1. The only exception caught was GenericEntityException, so any other thrown 
exception was missed - meaning the transaction was committed and 
GenericDelegator acted as if nothing was wrong.

2. The commit was performed in the finally block, so it was ALWAYS performed - 
even after an exception was thrown and the transaction was rolled back.

We managed to get away with this all along because typically there is a 
wrapping transaction that clears it all up. But still, the Delegator code needs 
to handle transactions correctly.

Merged revision(s) 1530976 from ofbiz/trunk:
Allow redefinition of view entities. XML schema change only - implementation 
exists already.

Merged revision(s) 1533542 from ofbiz/trunk:
Fixed a bug in the entity tests - JUnit expected and actual arguments were 
reversed in the testTransactionUtilRollback test.

Merged revision(s) 1536170 from ofbiz/trunk:
Small fix for StringUtil.toMap method - avoid array index exceptions when a Map 
element is missing a value.

Merged revision(s) 1539781 from ofbiz/trunk:
Fixed broken ModelInduceFromDb.jsp file.

Modified:
    ofbiz/branches/release13.07/   (props changed)
    
ofbiz/branches/release13.07/framework/base/src/org/ofbiz/base/util/StringUtil.java
    ofbiz/branches/release13.07/framework/common/servicedef/services.xml
    ofbiz/branches/release13.07/framework/entity/dtd/entitymodel.xsd
    
ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
    
ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java
    
ofbiz/branches/release13.07/framework/webtools/webapp/webtools/entity/ModelInduceFromDb.jsp

Propchange: ofbiz/branches/release13.07/
------------------------------------------------------------------------------
  Merged 
/ofbiz/trunk:r1526276,1527609,1527626,1527810,1530976,1533542,1536170,1539781

Modified: 
ofbiz/branches/release13.07/framework/base/src/org/ofbiz/base/util/StringUtil.java
URL: 
http://svn.apache.org/viewvc/ofbiz/branches/release13.07/framework/base/src/org/ofbiz/base/util/StringUtil.java?rev=1540491&r1=1540490&r2=1540491&view=diff
==============================================================================
--- 
ofbiz/branches/release13.07/framework/base/src/org/ofbiz/base/util/StringUtil.java
 (original)
+++ 
ofbiz/branches/release13.07/framework/base/src/org/ofbiz/base/util/StringUtil.java
 Sun Nov 10 16:43:20 2013
@@ -377,7 +377,9 @@ public class StringUtil {
     }
     
     /**
-     * Reads a String version of a Map (should contain only strings) and 
creates a new Map
+     * Reads a String version of a Map (should contain only strings) and 
creates a new Map.
+     * Partial Map elements are skipped: <code>{foo=fooValue, bar=}</code> 
will contain only
+     * the foo element.
      *
      * @param s String value of a Map ({n1=v1, n2=v2})
      * @return new Map
@@ -389,7 +391,9 @@ public class StringUtil {
             String[] entries = s.split("\\,\\s");
             for (String entry: entries) {
                 String[] nv = entry.split("\\=");
-                newMap.put(nv[0], nv[1]);
+                if (nv.length == 2) {
+                    newMap.put(nv[0], nv[1]);
+                }
             }
         } else {
             throw new IllegalArgumentException("String is not from 
Map.toString()");

Modified: ofbiz/branches/release13.07/framework/common/servicedef/services.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/branches/release13.07/framework/common/servicedef/services.xml?rev=1540491&r1=1540490&r2=1540491&view=diff
==============================================================================
--- ofbiz/branches/release13.07/framework/common/servicedef/services.xml 
(original)
+++ ofbiz/branches/release13.07/framework/common/servicedef/services.xml Sun 
Nov 10 16:43:20 2013
@@ -181,9 +181,9 @@ under the License.
         <description>Create a CustomTimePeriod record</description>
         <auto-attributes mode="OUT" include="pk" optional="false"/>
         <auto-attributes mode="IN" include="nonpk" optional="true"/>
+        <attribute name="organizationPartyId" type="String" mode="IN" 
optional="false"/><!-- FIXME: Framework dependency on Party component -->
         <override name="fromDate" optional="false"/>
         <override name="thruDate" optional="false"/>
-        <override name="organizationPartyId" optional="false"/>
         <override name="periodTypeId" optional="false"/>
     </service>
     <service name="updateCustomTimePeriod" 
default-entity-name="CustomTimePeriod" engine="simple"

Modified: ofbiz/branches/release13.07/framework/entity/dtd/entitymodel.xsd
URL: 
http://svn.apache.org/viewvc/ofbiz/branches/release13.07/framework/entity/dtd/entitymodel.xsd?rev=1540491&r1=1540490&r2=1540491&view=diff
==============================================================================
--- ofbiz/branches/release13.07/framework/entity/dtd/entitymodel.xsd (original)
+++ ofbiz/branches/release13.07/framework/entity/dtd/entitymodel.xsd Sun Nov 10 
16:43:20 2013
@@ -256,6 +256,15 @@ under the License.
         <xs:attribute name="copyright" type="xs:string"/>
         <xs:attribute name="author" type="xs:string"/>
         <xs:attribute name="version" type="xs:string"/>
+        <xs:attribute name="redefinition" type="boolean">
+            <xs:annotation>
+                <xs:documentation>
+                    Indicates if this entity redefines an existing entity.
+                    When set to "true" it will suppress "Entity is defined 
more than once" warnings.
+                    Defaults to "false".
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
     </xs:attributeGroup>
     <xs:element name="member-entity">
         <xs:complexType>

Modified: 
ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
URL: 
http://svn.apache.org/viewvc/ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/GenericDelegator.java?rev=1540491&r1=1540490&r2=1540491&view=diff
==============================================================================
--- 
ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
 (original)
+++ 
ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
 Sun Nov 10 16:43:20 2013
@@ -811,22 +811,13 @@ public class GenericDelegator implements
             }
 
             ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, 
EntityEcaHandler.OP_CREATE, value, false);
-
+            TransactionUtil.commit(beganTransaction);
             return value;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in createSetNextSeqId operation for 
entity [" + value.getEntityName() + "]: " + e.toString() + ". Rolling back 
transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -877,22 +868,13 @@ public class GenericDelegator implements
             }
 
             ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, 
EntityEcaHandler.OP_CREATE, value, false);
-
+            TransactionUtil.commit(beganTransaction);
             return value;
-        } catch (GenericEntityException e) {
-            String errMsg = "Failure in create operation for entity [" + 
(value != null ? value.getEntityName() : "null")  + "]: " + e.toString() + ". 
Rolling back transaction.";
+        } catch (Exception e) {
+            String errMsg = "Failure in create operation for entity [" + 
(value != null ? value.getEntityName() : "null") + "]: " + e.toString() + ". 
Rolling back transaction.";
             Debug.logError(errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -915,22 +897,13 @@ public class GenericDelegator implements
             if (value.lockEnabled()) {
                 this.refresh(value);
             }
-
+            TransactionUtil.commit(beganTransaction);
             return value;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in createOrStore operation for entity [" 
+ value.getEntityName() + "]: " + e.toString() + ". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1019,22 +992,13 @@ public class GenericDelegator implements
             }
 
             ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, 
EntityEcaHandler.OP_REMOVE, primaryKey, false);
-
+            TransactionUtil.commit(beganTransaction);
             return num;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in removeByPrimaryKey operation for 
entity [" + primaryKey.getEntityName() + "]: " + e.toString() + ". Rolling back 
transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1091,22 +1055,13 @@ public class GenericDelegator implements
             this.saveEntitySyncRemoveInfo(value.getPrimaryKey());
 
             ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, 
EntityEcaHandler.OP_REMOVE, value, false);
-
+            TransactionUtil.commit(beganTransaction);
             return num;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in removeValue operation for entity [" + 
value.getEntityName() + "]: " + e.toString() + ". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1175,22 +1130,13 @@ public class GenericDelegator implements
                     storeForTestRollback(new 
TestOperation(OperationType.DELETE, entity));
                 }
             }
-
+            TransactionUtil.commit(beganTransaction);
             return rowsAffected;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in removeByCondition operation for entity 
[" + entityName + "]: " + e.toString() + ". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1285,22 +1231,13 @@ public class GenericDelegator implements
                     storeForTestRollback(new 
TestOperation(OperationType.UPDATE, entity));
                 }
             }
-
+            TransactionUtil.commit(beganTransaction);
             return rowsAffected;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in storeByCondition operation for entity 
[" + entityName + "]: " + e.toString() + ". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1354,22 +1291,13 @@ public class GenericDelegator implements
             }
 
             ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, 
EntityEcaHandler.OP_STORE, value, false);
-
+            TransactionUtil.commit(beganTransaction);
             return retVal;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in store operation for entity [" + 
value.getEntityName() + "]: " + e.toString() + ". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1452,22 +1380,13 @@ public class GenericDelegator implements
                     }
                 }
             }
-
+            TransactionUtil.commit(beganTransaction);
             return numberChanged;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in storeAll operation: " + e.toString() + 
". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1504,22 +1423,13 @@ public class GenericDelegator implements
                     numRemoved += this.removeByAnd(value.getEntityName(), 
value.getAllFields(), doCacheClear);
                 }
             }
-
+            TransactionUtil.commit(beganTransaction);
             return numRemoved;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in removeAll operation: " + e.toString() 
+ ". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1539,11 +1449,16 @@ public class GenericDelegator implements
      */
     public GenericValue findOne(String entityName, Map<String, ? extends 
Object> fields, boolean useCache) throws GenericEntityException {
         GenericPK primaryKey = this.makePK(entityName, fields);
+        if (!primaryKey.isPrimaryKey()) {
+            throw new GenericModelException("[GenericDelegator.findOne] Passed 
primary key is not a valid primary key: " + primaryKey);
+        }
         EntityEcaRuleRunner<?> ecaRunner = this.getEcaRuleRunner(entityName);
         if (useCache) {
             ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CHECK, 
EntityEcaHandler.OP_FIND, primaryKey, false);
-
-            GenericValue value = this.getFromPrimaryKeyCache(primaryKey);
+            GenericValue value = cache.get(primaryKey);
+            if (value == GenericValue.NULL_VALUE) {
+                return null;
+            }
             if (value != null) {
                 return value;
             }
@@ -1560,9 +1475,6 @@ public class GenericDelegator implements
             GenericHelper helper = getEntityHelper(entityName);
             GenericValue value = null;
 
-            if (!primaryKey.isPrimaryKey()) {
-                throw new GenericModelException("[GenericDelegator.findOne] 
Passed primary key is not a valid primary key: " + primaryKey);
-            }
             ecaRunner.evalRules(EntityEcaHandler.EV_RUN, 
EntityEcaHandler.OP_FIND, primaryKey, false);
             try {
                 value = helper.findByPrimaryKey(primaryKey);
@@ -1583,21 +1495,13 @@ public class GenericDelegator implements
             }
 
             ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, 
EntityEcaHandler.OP_FIND, (value == null ? primaryKey : value), false);
+            TransactionUtil.commit(beganTransaction);
             return value;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in findOne operation for entity [" + 
entityName + "]: " + e.toString() + ". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1656,21 +1560,13 @@ public class GenericDelegator implements
             if (value != null) value.setDelegator(this);
 
             ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, 
EntityEcaHandler.OP_FIND, primaryKey, false);
+            TransactionUtil.commit(beganTransaction);
             return value;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in findByPrimaryKeyPartial operation for 
entity [" + primaryKey.getEntityName() + "]: " + e.toString() + ". Rolling back 
transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1800,21 +1696,13 @@ public class GenericDelegator implements
                 ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_PUT, 
EntityEcaHandler.OP_FIND, dummyValue, false);
                 this.cache.put(entityName, entityCondition, orderBy, list);
             }
+            TransactionUtil.commit(beganTransaction);
             return list;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in findByCondition operation for entity 
[" + entityName + "]: " + e.toString() + ". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1875,21 +1763,13 @@ public class GenericDelegator implements
             long count = helper.findCountByCondition(modelEntity, 
whereEntityCondition, havingEntityCondition, findOptions);
 
             ecaRunner.evalRules(EntityEcaHandler.EV_RETURN, 
EntityEcaHandler.OP_FIND, dummyValue, false);
+            TransactionUtil.commit(beganTransaction);
             return count;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in findListIteratorByCondition operation 
for entity [DynamicView]: " + e.toString() + ". Rolling back transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -1912,22 +1792,14 @@ public class GenericDelegator implements
             ModelEntity modelEntityTwo = 
getModelEntity(modelRelationTwo.getRelEntityName());
 
             GenericHelper helper = getEntityHelper(modelEntity);
-
-            return helper.findByMultiRelation(value, modelRelationOne, 
modelEntityOne, modelRelationTwo, modelEntityTwo, orderBy);
-        } catch (GenericEntityException e) {
+            List<GenericValue> result = helper.findByMultiRelation(value, 
modelRelationOne, modelEntityOne, modelRelationTwo, modelEntityTwo, orderBy);
+            TransactionUtil.commit(beganTransaction);
+            return result;
+        } catch (Exception e) {
             String errMsg = "Failure in getMultiRelation operation for entity 
[" + value.getEntityName() + "]: " + e.toString() + ". Rolling back 
transaction.";
             Debug.logError(e, errMsg, module);
-            try {
-                // only rollback the transaction if we started one...
-                TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // after rolling back, rethrow the exception
-            throw e;
-        } finally {
-            // only commit the transaction if we started one... this will 
throw an exception if it fails
-            TransactionUtil.commit(beganTransaction);
+            TransactionUtil.rollback(beganTransaction, errMsg, e);
+            throw new GenericEntityException(e);
         }
     }
 
@@ -2472,6 +2344,7 @@ public class GenericDelegator implements
                 beganTransaction = TransactionUtil.begin();
             }
 
+            // FIXME: Replace DCL code with AtomicReference
             if (sequencer == null) {
                 synchronized (this) {
                     if (sequencer == null) {
@@ -2485,25 +2358,17 @@ public class GenericDelegator implements
             ModelEntity seqModelEntity = this.getModelEntity(seqName);
 
             Long newSeqId = sequencer == null ? null : 
sequencer.getNextSeqId(seqName, staggerMax, seqModelEntity);
-
+            TransactionUtil.commit(beganTransaction);
             return newSeqId;
-        } catch (GenericEntityException e) {
+        } catch (Exception e) {
             String errMsg = "Failure in getNextSeqIdLong operation for seqName 
[" + seqName + "]: " + e.toString() + ". Rolling back transaction.";
+            Debug.logError(e, errMsg, module);
             try {
-                // only rollback the transaction if we started one...
                 TransactionUtil.rollback(beganTransaction, errMsg, e);
-            } catch (GenericEntityException e2) {
-                Debug.logError(e2, "[GenericDelegator] Could not rollback 
transaction: " + e2.toString(), module);
-            }
-            // rather than logging the problem and returning null, thus hiding 
the problem, throw an exception
-            throw new GeneralRuntimeException(errMsg, e);
-        } finally {
-            try {
-                // only commit the transaction if we started one...
-                TransactionUtil.commit(beganTransaction);
             } catch (GenericTransactionException e1) {
-                Debug.logError(e1, "[GenericDelegator] Could not commit 
transaction: " + e1.toString(), module);
+                Debug.logError(e1, "Exception thrown while rolling back 
transaction: ", module);
             }
+            throw new GeneralRuntimeException(errMsg, e);
         }
     }
 

Modified: 
ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java
URL: 
http://svn.apache.org/viewvc/ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java?rev=1540491&r1=1540490&r2=1540491&view=diff
==============================================================================
--- 
ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java
 (original)
+++ 
ofbiz/branches/release13.07/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java
 Sun Nov 10 16:43:20 2013
@@ -580,7 +580,7 @@ public class EntityTestSuite extends Ent
         delegator.create(testValue);
         TransactionUtil.rollback(transBegin, null, null);
         GenericValue testValueOut = delegator.findOne("Testing", false, 
"testingId", "rollback-test");
-        assertEquals("Test that transaction rollback removes value: ", 
testValueOut, null);
+        assertEquals("Test that transaction rollback removes value: ", null, 
testValueOut);
     }
 
     /*

Modified: 
ofbiz/branches/release13.07/framework/webtools/webapp/webtools/entity/ModelInduceFromDb.jsp
URL: 
http://svn.apache.org/viewvc/ofbiz/branches/release13.07/framework/webtools/webapp/webtools/entity/ModelInduceFromDb.jsp?rev=1540491&r1=1540490&r2=1540491&view=diff
==============================================================================
--- 
ofbiz/branches/release13.07/framework/webtools/webapp/webtools/entity/ModelInduceFromDb.jsp
 (original)
+++ 
ofbiz/branches/release13.07/framework/webtools/webapp/webtools/entity/ModelInduceFromDb.jsp
 Sun Nov 10 16:43:20 2013
@@ -66,7 +66,6 @@ ERRORS:
         String author = "None";
         String version = "1.0";
 %><?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE entitymodel PUBLIC "-//OFBiz//DTD Entity Model//EN" 
"http://ofbiz.apache.org/dtds/entitymodel.dtd";>
 <!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -86,7 +85,8 @@ specific language governing permissions 
 under the License.
 -->
 
-<entitymodel>
+<entitymodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+        
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/entitymodel.xsd";>
   <!-- ========================================================= -->
   <!-- ======================== Defaults ======================= -->
   <!-- ========================================================= -->
@@ -123,8 +123,7 @@ under the License.
     ModelField field = fieldIterator.next();%>
       <field 
name="<%=field.getName()%>"<%if(!field.getColName().equals(ModelUtil.javaNameToDbName(field.getName()))){
       %> col-name="<%=field.getColName()%>"<%}%> type="<%=field.getType()%>"><%
-    for (int v = 0; v<field.getValidatorsSize(); v++) {
-      String valName = (String) field.getValidator(v);
+    for (String valName : field.getValidators()) {
       %><validate name="<%=valName%>"/><%
     }%></field><%
   }
@@ -137,7 +136,7 @@ under the License.
     for (int r = 0; r < entity.getRelationsSize(); r++) {
       ModelRelation relation = entity.getRelation(r);%>
       <relation 
type="<%=relation.getType()%>"<%if(relation.getTitle().length() > 0){%> 
title="<%=relation.getTitle()%>"<%}
-              %> rel-entity-name="<%=relation.getRelEntityName()%>"><%for(int 
km=0; km<relation.getKeyMapsSize(); km++){ ModelKeyMap keyMap = 
relation.getKeyMap(km);%>
+              %> 
rel-entity-name="<%=relation.getRelEntityName()%>"><%for(ModelKeyMap keyMap : 
relation.getKeyMaps()){ %>
         <key-map 
field-name="<%=keyMap.getFieldName()%>"<%if(!keyMap.getFieldName().equals(keyMap.getRelFieldName())){%>
 rel-field-name="<%=keyMap.getRelFieldName()%>"<%}%> /><%}%>
       </relation><%
     }


Reply via email to