This is an automated email from the ASF dual-hosted git repository.

dixitdeepak 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 732d4627ef Improve XmlDsDump performance and resource handling using 
EntityQuery and auto-closing iterators (#1164)
732d4627ef is described below

commit 732d4627ef59f879831319d72f446fb9d400a5c5
Author: Deepak Dixit <[email protected]>
AuthorDate: Tue May 5 19:04:40 2026 +0530

    Improve XmlDsDump performance and resource handling using EntityQuery and 
auto-closing iterators (#1164)
---
 .../apache/ofbiz/webtools/entity/XmlDsDump.groovy  | 99 ++++++++++------------
 1 file changed, 47 insertions(+), 52 deletions(-)

diff --git 
a/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/XmlDsDump.groovy
 
b/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/XmlDsDump.groovy
index 59d8367fe8..861d871c77 100644
--- 
a/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/XmlDsDump.groovy
+++ 
b/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/XmlDsDump.groovy
@@ -25,7 +25,7 @@ import org.apache.ofbiz.entity.condition.EntityCondition
 import org.apache.ofbiz.entity.condition.EntityJoinOperator
 import org.apache.ofbiz.entity.model.ModelViewEntity
 import org.apache.ofbiz.entity.transaction.TransactionUtil
-import org.apache.ofbiz.entity.util.EntityFindOptions
+import org.apache.ofbiz.entity.util.EntityQuery
 
 outpath = parameters.outpath
 filename = parameters.filename
@@ -188,7 +188,6 @@ if (passedEntityNames) {
         session.setAttribute('xmlrawdump_entitylist', passedEntityNames)
         session.setAttribute('entityDateCond', entityDateCond)
     } else {
-        efo = new EntityFindOptions(true, 
EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, 
false)
         numberOfEntities = passedEntityNames?.size() ?: 0
         context.numberOfEntities = numberOfEntities
         numberWritten = 0
@@ -213,22 +212,22 @@ if (passedEntityNames) {
                 beganTransaction = TransactionUtil.begin(3600)
                 try {
                     me = reader.getModelEntity(curEntityName)
-                    if (me.getNoAutoStamp() || me instanceof ModelViewEntity) {
-                        values = delegator.find(curEntityName, null, null, 
null, null, efo)
-                    } else {
-                        values = delegator.find(curEntityName, entityDateCond, 
null, null, null, efo)
+                    entityQuery = 
EntityQuery.use(delegator).from(curEntityName).cursorScrollInsensitive()
+                    if (!me.getNoAutoStamp() && !(me instanceof 
ModelViewEntity) && entityDateCond) {
+                        entityQuery.where(entityDateCond)
                     }
 
                     curNumberWritten = 0
-                    while ((value = values.next()) != null) {
-                        value.writeXmlText(writer, '')
-                        numberWritten++
-                        curNumberWritten++
-                        if (curNumberWritten % 500 == 0 || curNumberWritten == 
1) {
-                            Debug.log("Records written [$curEntityName]: 
$curNumberWritten Total: $numberWritten")
+                    entityQuery.queryIterator().withCloseable { values ->
+                        while ((value = values.next()) != null) {
+                            value.writeXmlText(writer, '')
+                            numberWritten++
+                            curNumberWritten++
+                            if (curNumberWritten % 500 == 0 || 
curNumberWritten == 1) {
+                                Debug.log("Records written [$curEntityName]: 
$curNumberWritten Total: $numberWritten")
+                            }
                         }
                     }
-                    values.close()
                     Debug.log("Wrote [$curNumberWritten] from entity : 
$curEntityName")
                     TransactionUtil.commit(beganTransaction)
                 } catch (Exception e) {
@@ -258,7 +257,6 @@ if (passedEntityNames) {
                     fileName = preConfiguredSetName ? 
UtilFormatOut.formatPaddedNumber((long) fileNumber, 3) + '_' : ''
                     fileName = fileName + curEntityName
 
-                    values = null
                     beganTransaction = false
                     try {
                         beganTransaction = TransactionUtil.begin(3600)
@@ -268,47 +266,48 @@ if (passedEntityNames) {
                             results.add("[$fileNumber] [vvv] $curEntityName 
skipping view entity")
                             return
                         }
-                        if (me.getNoAutoStamp() || me instanceof 
ModelViewEntity) {
-                            values = delegator.find(curEntityName, null, null, 
null, null, efo)
-                        } else {
-                            values = delegator.find(curEntityName, 
entityDateCond, null, null, null, efo)
+                        entityQuery = 
EntityQuery.use(delegator).from(curEntityName).cursorScrollInsensitive()
+                        if (!me.getNoAutoStamp() && !(me instanceof 
ModelViewEntity) && entityDateCond) {
+                            entityQuery.where(entityDateCond)
                         }
                         isFirst = true
                         writer = null
                         fileSplitNumber = 1
-                        while ((value = values.next()) != null) {
-                            //Don't bother writing the file if there's nothing
-                            //to put into it
-                            if (isFirst) {
-                                writer = new PrintWriter(
-                                            new BufferedWriter(
-                                                new OutputStreamWriter(new 
FileOutputStream(new File(outdir, fileName + '.xml')), 'UTF-8')))
-                                writer.println('<?xml version="1.0" 
encoding="UTF-8"?>')
-                                writer.println('<entity-engine-xml>')
-                                isFirst = false
-                            }
-                            value.writeXmlText(writer, '')
-                            numberWritten++
+                        entityQuery.queryIterator().withCloseable { values ->
+                            while ((value = values.next()) != null) {
+                                //Don't bother writing the file if there's 
nothing
+                                //to put into it
+                                if (isFirst) {
+                                    writer = new PrintWriter(
+                                                new BufferedWriter(
+                                                    new OutputStreamWriter(new 
FileOutputStream(new File(outdir, fileName + '.xml')), 'UTF-8')))
+                                    writer.println('<?xml version="1.0" 
encoding="UTF-8"?>')
+                                    writer.println('<entity-engine-xml>')
+                                    isFirst = false
+                                }
+                                value.writeXmlText(writer, '')
+                                numberWritten++
 
-                            // split into small files
-                            if (maxRecordsPerFile > 0 && (numberWritten % 
maxRecordsPerFile == 0)) {
-                                fileSplitNumber++
-                                // close the file
-                                writer.println('</entity-engine-xml>')
-                                writer.close()
+                                // split into small files
+                                if (maxRecordsPerFile > 0 && (numberWritten % 
maxRecordsPerFile == 0)) {
+                                    fileSplitNumber++
+                                    // close the file
+                                    writer.println('</entity-engine-xml>')
+                                    writer.close()
 
-                                // create a new file
-                                splitNumStr = 
UtilFormatOut.formatPaddedNumber((long) fileSplitNumber, 3)
-                                writer = new PrintWriter(
-                                            new BufferedWriter(
-                                                new OutputStreamWriter(
-                                                        new 
FileOutputStream(new File(outdir, fileName + '_' + splitNumStr + '.xml')), 
'UTF-8')))
-                                writer.println('<?xml version="1.0" 
encoding="UTF-8"?>')
-                                writer.println('<entity-engine-xml>')
-                            }
+                                    // create a new file
+                                    splitNumStr = 
UtilFormatOut.formatPaddedNumber((long) fileSplitNumber, 3)
+                                    writer = new PrintWriter(
+                                                new BufferedWriter(
+                                                    new OutputStreamWriter(
+                                                            new 
FileOutputStream(new File(outdir, fileName + '_' + splitNumStr + '.xml')), 
'UTF-8')))
+                                    writer.println('<?xml version="1.0" 
encoding="UTF-8"?>')
+                                    writer.println('<entity-engine-xml>')
+                                }
 
-                            if (numberWritten % 500 == 0 || numberWritten == 
1) {
-                                Debug.log("Records written [$curEntityName]: 
$numberWritten")
+                                if (numberWritten % 500 == 0 || numberWritten 
== 1) {
+                                    Debug.log("Records written 
[$curEntityName]: $numberWritten")
+                                }
                             }
                         }
                         if (writer) {
@@ -322,11 +321,7 @@ if (passedEntityNames) {
                             Debug.log(thisResult)
                             results.add(thisResult)
                         }
-                        values.close()
                     } catch (Exception ex) {
-                        if (values != null) {
-                            values.close()
-                        }
                         thisResult = "[$fileNumber] [xxx] Error when writing 
$curEntityName: $ex"
                         Debug.log(thisResult)
                         results.add(thisResult)

Reply via email to