You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2022/12/05 11:35:34 UTC

[ofbiz-framework] branch trunk updated: Fixed: EntityListIterator closed but not in case of exception (OFBIZ-9385)

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 688142c5d3 Fixed: EntityListIterator closed but not in case of exception (OFBIZ-9385)
688142c5d3 is described below

commit 688142c5d3fc72c36ffd585fa2b08a9ac3d62df4
Author: Jacques Le Roux <ja...@les7arts.com>
AuthorDate: Mon Dec 5 11:17:04 2022 +0100

    Fixed: EntityListIterator closed but not in case of exception (OFBIZ-9385)
    
    Following discussion
    https://lists.apache.org/thread/37vo721s7d5no0k73ym4959m8wtgtl95
    reverts "This fixes a bug introduced with r1797097"
    commit d9a24d5a347e28f241e73af9c4d9ea4bb55aeb16.
    Conflicts handled by hand in ListFinder.java
    
    Also as suggested by Deepak Dixit removes explicit eli.close call from
    handleOutput(), else we will get unnecessary console warning from
    EntityListIterator.close() method:
      Debug.logWarning("This EntityListIterator for Entity [" +
      modelEntityName + "] has already been closed, not closing again.",
      module);
    
    Thanks: Deepak Dixit for spotting the issue and discussion
---
 .../main/java/org/apache/ofbiz/entity/finder/EntityFinderUtil.java | 1 -
 .../src/main/java/org/apache/ofbiz/entity/finder/ListFinder.java   | 7 ++-----
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/framework/entity/src/main/java/org/apache/ofbiz/entity/finder/EntityFinderUtil.java b/framework/entity/src/main/java/org/apache/ofbiz/entity/finder/EntityFinderUtil.java
index 121ad09e1a..79f7727b96 100644
--- a/framework/entity/src/main/java/org/apache/ofbiz/entity/finder/EntityFinderUtil.java
+++ b/framework/entity/src/main/java/org/apache/ofbiz/entity/finder/EntityFinderUtil.java
@@ -394,7 +394,6 @@ public final class EntityFinderUtil {
             int size = getSize(context);
             try {
                 listAcsr.put(context, eli.getPartialList(start, size));
-                eli.close();
             } catch (GenericEntityException e) {
                 String errMsg = "Error getting partial list in limit-range with start=" + start + " and size=" + size + ": " + e.toString();
                 Debug.logError(e, errMsg, MODULE);
diff --git a/framework/entity/src/main/java/org/apache/ofbiz/entity/finder/ListFinder.java b/framework/entity/src/main/java/org/apache/ofbiz/entity/finder/ListFinder.java
index f869aae029..c9ea06705d 100644
--- a/framework/entity/src/main/java/org/apache/ofbiz/entity/finder/ListFinder.java
+++ b/framework/entity/src/main/java/org/apache/ofbiz/entity/finder/ListFinder.java
@@ -215,15 +215,12 @@ public abstract class ListFinder extends Finder {
                     options.setMaxRows(size * (index + 1));
                 }
                 boolean beganTransaction = false;
-                try {
+                try (EntityListIterator eli = delegator.find(entityName, whereEntityCondition, havingEntityCondition, fieldsToSelect, orderByFields,
+                        options)) {
                     if (useTransaction) {
                         beganTransaction = TransactionUtil.begin();
                     }
-                    EntityListIterator eli = delegator.find(entityName, whereEntityCondition, havingEntityCondition, fieldsToSelect, orderByFields,
-                            options);
                     this.outputHandler.handleOutput(eli, context, listAcsr);
-                    // NOTE: the eli EntityListIterator is not closed here. It SHOULD be closed later after the returned list will be used (eg see
-                    // EntityAnd.getChildren() in ModelTree.java)
                 } catch (GenericEntityException e) {
                     String errMsg = "Failure in by " + label + " find operation, rolling back transaction";
                     Debug.logError(e, errMsg, MODULE);