[ 
https://issues.apache.org/jira/browse/CAY-2913?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18060050#comment-18060050
 ] 

Andrus Adamchik commented on CAY-2913:
--------------------------------------

I just pushed what I think is a pretty accurate unit test for this condition - 
{color:#000000}DataNodeQueryExceptionsIT{color}. Can't reproduce it. Even when 
the throwable is an Error (instead of an Exception), the connection is closed 
properly.

> 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
>            Priority: Major
>
> We are using VelocitySQLTemplateProcessor in some of the apps, running 
> LinkMove jobs. Due to 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)

Reply via email to