[ 
https://issues.apache.org/jira/browse/CAY-2913?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrus Adamchik updated CAY-2913:
---------------------------------
    Description: 
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}

  was:
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}


> 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