Paul Foxworthy created OFBIZ-12836: -------------------------------------- Summary: Resource leaks in EntitySQLProcessor.groovy Key: OFBIZ-12836 URL: https://issues.apache.org/jira/browse/OFBIZ-12836 Project: OFBiz Issue Type: Bug Components: webtools Reporter: Paul Foxworthy Assignee: Paul Foxworthy
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. -- This message was sent by Atlassian Jira (v8.20.10#820010)