Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
-
None
Description
In 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.
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.