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><% }