[
https://issues.apache.org/jira/browse/DERBY-6496?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13922675#comment-13922675
]
Knut Anders Hatlen commented on DERBY-6496:
-------------------------------------------
{quote}
> 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.)
Why is its usage allowed when it's not in a valid state, though? No check?
{quote}
That's right. ContextService.getContext(String) doesn't know about the
CompilerContext.getInUse() method, since it's not part of the Context
interface. The reuse is handled at a higher level. It would have been
more robust, I suppose, if it were handled inside of the
ContextManager, so that ContextService.getContext() had returned null
instead of an invalid context.
> 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,
> derby-6496-02-aa-optimizerTracer.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)