Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.4.5
-
None
Description
All Sql.call(...) methods ultimately delegate to Sql.callWithRows(...) method where we have:
try { statement = connection.prepareCall(sql); // ... } finally { // ... closeResources(connection, statement); }
The problem is that statement is unconditionally parsed and compiled each time, but the closeResources() method only closes it when statement caching is disabled. So with statement caching enabled we end up allocating and leaking a new CallableStatement instance per Sql.call() invocation.