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)