You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Andrus Adamchik (Jira)" <ji...@apache.org> on 2026/02/21 14:32:00 UTC

[jira] [Created] (CAY-2913) Suspected connection leak on SQLTemplateProcessor exceptions

Andrus Adamchik created CAY-2913:
------------------------------------

             Summary: Suspected connection leak on SQLTemplateProcessor exceptions
                 Key: CAY-2913
                 URL: https://issues.apache.org/jira/browse/CAY-2913
             Project: Cayenne
          Issue Type: Bug
    Affects Versions: 4.2.3
            Reporter: Andrus Adamchik
            Assignee: Andrus Adamchik


We are using VelocitySQLTemplateProcessor in some of the apps, running LinkMove jobs. Due to a Velocity version mismatch in the app we were getting exceptions like the one below.

That mismatch is NOT the issue here and is totally developer's fault, but its consequences seem to point to a resource leak in Cayenne (with a slight possibility that the issue is in LinkMove?). Each such exception would result in the JDBC connection not returned to the pool. So eventually the pool would run out of connections, resulting in app-wide failures.

Again, the exception below is not the problem by itself, but seems like it results in a connection leak:
{noformat}
java.lang.NoClassDefFoundError: org/apache/velocity/runtime/parser/node/StandardParserDefaultVisitor
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at org.apache.cayenne.velocity.VelocitySQLTemplateProcessor.processTemplate(VelocitySQLTemplateProcessor.java:142)
at org.apache.cayenne.access.jdbc.SQLTemplateAction.runWithPositionalParameters(SQLTemplateAction.java:141)
at org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:113)
at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:97)
at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:471)
at org.apache.cayenne.access.DataDomainQueryAction.lambda$runQueryInTransaction$1(DataDomainQueryAction.java:447)
at org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInTransaction(DefaultTransactionManager.java:180)
at org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInNewTransaction(DefaultTransactionManager.java:152)
at org.apache.cayenne.tx.DefaultTransactionManager$NestedTransactionHandler.handle(DefaultTransactionManager.java:95)
at org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:62)
at org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:40)
at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:446)
at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:129)
at org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:570)
at org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:819)
at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:562)
at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:406)
at org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:107)
at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:94)
at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:960)
at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:949)
at org.apache.cayenne.BaseContext.select(BaseContext.java:307)
at org.apache.cayenne.BaseContext.selectOne(BaseContext.java:315)
at org.apache.cayenne.query.SQLSelect.selectOne(SQLSelect.java:283)    Caused by: java.lang.ClassNotFoundException: org.apache.velocity.runtime.parser.node.StandardParserDefaultVisitorat java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
    ... 52 common frames omitted {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)