Hi all,

I want to check in case I'm missing something, but I think there are some
problems with

framework/webtools/groovyScripts/entity/EntitySQLProcessor.groovy

At line 35
https://github.com/apache/ofbiz-framework/blob/e080f0bfa657b8b6ffd4cbf5629e0c648440b5f0/framework/webtools/groovyScripts/entity/EntitySQLProcessor.groovy#L35

it creates an SQLProcessor. SQLProcessor has a Close method and implements
AutoCloseable, but we're not using try-with-resources, nor directly calling
the Close method. I'm thinking there should be a try-with-resources. Any
reason why not?

Similarly,

https://github.com/apache/ofbiz-framework/blob/e080f0bfa657b8b6ffd4cbf5629e0c648440b5f0/framework/webtools/groovyScripts/entity/EntitySQLProcessor.groovy#L38

obtains a java.sql.Resultset, which will be closed when everything works,
but would leak if there was an exception. Again, we should be using
try-with-resources.

Note that according to

https://docs.oracle.com/en/java/javase/20/docs/api/java.sql/java/sql/ResultSet.html#close()

"Calling the method close on a ResultSet object that is already closed is a
no-op.", if you obtain a ResultSet from the SQLProcessor and directly close
that ResultSet, it's not a problem when the SQLProcessor.close also
attempts to close the ResultSet.

The problem is minor, most of the time. The groovy script is in the
webtools, so used for developer tinkering and not production use.

When you're doing a SELECT, the script is closing the ResultSet, so the
important resources are cleaned up (assuming no exception occurred).

However, if you are doing INSERT, UPDATE or DELETE, the script creates a
prepared statement that is not closed, so there's a resource leak.

Am I missing anything? I'll create a Jira if necessary.

Thanks

Paul Foxworthy

-- 
Coherent Software Australia Pty Ltd
PO Box 2773
Cheltenham Vic 3192
Australia

Phone: +61 3 9585 6788
Web: http://www.coherentsoftware.com.au/
Email: i...@coherentsoftware.com.au

Reply via email to