[
https://issues.apache.org/jira/browse/DERBY-6496?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13922188#comment-13922188
]
Knut Anders Hatlen commented on DERBY-6496:
-------------------------------------------
I think I understand why the compiler context is sometimes available at
execution time. It shouldn't be available, but there is an optimization that
prevents the topmost compiler context from being removed from the stack when
it's popped. Instead, it just marks the context as unused so that it can be
reused later. See the methods firstOnStack(), isFirstOnStack(), setInUse(),
getInUse() in CompilerContext.
If the connection has done some compilation before the procedure is executed,
the compiler context will be available. (But its getInUse() method will return
false, so it's not in a valid state.) In the failing case, a fresh connection
has been opened, and the compiled statement is already available in the
statement cache, so no compilation happens before the procedure is executed,
and the compiler context won't be available.
> Optional tool registration may fail because the CompilerContext is not always
> available at execution time.
> ----------------------------------------------------------------------------------------------------------
>
> Key: DERBY-6496
> URL: https://issues.apache.org/jira/browse/DERBY-6496
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.11.0.0
> Reporter: Rick Hillegas
> Assignee: Rick Hillegas
> Attachments: derby-6496-01-aa-useClassFactoryContext.diff,
> derby-6496-01-ab-useClassFactoryContext.diff
>
>
> For reasons which elude me, the CompilerContext is sometimes available at
> execution time and sometimes not. When the CompilerContext is not available
> at execution time, optional tool loading fails on an NPE:
> Caused by: java.lang.NullPointerException
> at
> org.apache.derby.catalog.Java5SystemProcedures.SYSCS_REGISTER_TOOL(Java5SystemProcedures.java:104)
> at
> org.apache.derby.exe.ac4d3680a5x0144x93adx0136xffffe1d7aa3e0.g0(Unknown
> Source)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at
> org.apache.derby.impl.services.reflect.ReflectMethod.invoke(ReflectMethod.java:46)
> at
> org.apache.derby.impl.sql.execute.CallStatementResultSet.open(CallStatementResultSet.java:75)
> at
> org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:470)
> at
> org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:349)
> at
> org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1338)
--
This message was sent by Atlassian JIRA
(v6.2#6252)