[ http://issues.apache.org/jira/browse/DERBY-1446?page=all ]
Kathey Marsden resolved DERBY-1446.
-----------------------------------
Resolution: Fixed
Assignee: Kathey Marsden
The eclipse issue that the
ContextFinder can enter in infinite loop while delegating to other classloaders
has been resolved, so marking this fixed. I am not marking a fix version as
it is an eclipse fix for a regression 3.2.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=149754
Currently the fix is not available in an official release. When eclipse 3.2.1
is released, people encountering the problem can upgrade. In the interim
people could grab the osgi bundle from the build leading to 3.2.1.
> Derby can enter infinite loop and consume 100% cpu when loading class when
> running a stored procedure within Eclipse 3.2
> --------------------------------------------------------------------------------------------------------------------------
>
> Key: DERBY-1446
> URL: http://issues.apache.org/jira/browse/DERBY-1446
> Project: Derby
> Issue Type: Bug
> Components: JDBC
> Affects Versions: 10.1.2.5
> Environment:
> This problem was found on Windows XP. I haven't tried on
>
> Linux, so I don't know if the problem appears there.
> Reporter: Kathey Marsden
> Assigned To: Kathey Marsden
> Attachments: derbyspruntestx.zip, ReproScenario.zip, stacktrace.txt
>
>
> The problem occurs with the interaction between Derby and Eclipse
> 3.2 with WTP datatools.
>
> If you try to run a Derby stored procedure using the connection that WTP
> datatools establishes, the CallableStatement.execute() method never returns
> and the
> CPU utilization on your system goes to 100%. Simple SQL query
> (e.g. SELECT, etc) which use java.sql.Statement can be
> successfully executed using the connection that WTP obtains.
> Geting a driver manager connection directly the problem does not occur.
> Some change in eclipse 3.2 (perhaps related to the classloader context?)
> seems to trigger the issue, but in this context 1) Derby can't find the class
> and 2) It loops forever looking for it, which it shouldn't do. So I think
> there is a Derby bug here, even if it ends up there is an Eclipse/OSGI bug as
> well.
> Below are some details from the WTP expert looking at this.
> 1) I tested WTP 1.5 with both the Sun JRE 1.4.2 and IBM JRE 1.5 and the
> problem occurs
> 2) I tested WTP 1.0.3 and the problem does not occur
> 3) I tested WTP 1.0.3 but installed it into Eclipse 3.2 and the problem occurs
> Eclipse 3.2 seems to be the cause of the problem.
> When the hang occurs, I paused the debugger and always got the same stack
> trace which I have attached in its entirety. The top of the stack trace is
> as follows. Note that the driver is interacting with the OSGI engine of
> Eclipse. It looks like a defect in the OSGI runtime. It doesn't seem to
> find the jar holding the stored procedure and then proceeds to go into an
> infinite loop in filllnStackTrace(). I'll take this up with the Eclipse team
> and see what I can find out.
> Thread [main] (Suspended)
> Throwable.fillInStackTrace() line: not available [native method]
> ClassNotFoundException(Throwable).<init>(String, Throwable) line: not
> available
> ClassNotFoundException(Exception).<init>(String, Throwable) line: not
> available
> ClassNotFoundException.<init>(String) line: not available
> ClasspathManager.findLocalClassImpl(String, ClassLoadingStatsHook[])
> line: 442
> ClasspathManager.findLocalClass(String) line: 410
> DefaultClassLoader.findLocalClass(String) line: 188
> BundleLoader.findLocalClass(String) line: 339
> BundleLoader.findClass(String, boolean) line: 391
> BundleLoader.findClass(String) line: 352
> DefaultClassLoader.loadClass(String, boolean) line: 83
> URLClassLoader(ClassLoader).loadClass(String, boolean) line: not
> available
> URLClassLoader(ClassLoader).loadClass(String) line: not available
> ContextFinder.loadClass(String, boolean) line: 94
> ContextFinder(ClassLoader).loadClass(String) line: not available
> ReflectClassesJava2.loadClassNotInDatabaseJar(String) line: not
> available
> ReflectClassesJava2(DatabaseClasses).loadApplicationClass(String) line:
> not available
>
> REPRODUCTION INFO
> The full reproduction information with setup for eclipse and WTP has other
> components but should reproduce by isntalling Eclipse 3.2 with WTP and Derby.
> From the user:
> To reproduce the problem, you have to execute a stored
> procedure from within Eclipse, using the connection that WTP
> obtains.
> I've created a very simple plugin that adds a "RUN Stored Procedure" action
> to
> stored procedures in the Database Explorer view of WTP. This
> file contains a zipped Eclipse plugin development project.
> Unzip the file and import the project into an Eclipse
> workspace. You can then use the Eclipse debugger to run an
> Eclipse application that will have the function to run a stored
> procedure which has no parameters and returns a result set.
>
>
>
> To produce the problem, after you have imported the
>
> DerbySPRunTest project into your workspace,
> set a breakpoint in
> derbyspruntest.actions.RunRoutineAction.runRuntine() method
> before the stmt.execute()
>
> Start the Eclipse debugger on an Eclipse application.
>
> Open a Database Explorer view (Windows->Show
>
> view->Other->Data->Database Explorer) .
>
> Right-click on Connections and select New Connection to make a
>
> connection to a Derby database that contains a stored procedure
> which has no parameters and returns a result set.
>
> Expand the schemas and stored procedure folder to display the
> stored procedure that you want to run.
>
> Right click on the stored procedure and select "Run Stored
> Procedure"
>
>
> The debugger will stop and you can see that when stmt.execute()
> is executed, it never returns and your CPU utilization is at
> 100%.
>
>
> If I change the RunRoutineAction to use a connection that I
> obtained directly, instead of the connection obtained by WTP,
> (see commented out code), the stmt.execute() methods works
> correctly and the output is displayed in the OutputView. The
> DerbySPRunTest plugin contains the derby.jar only for this test
> situation. When a connection is made via WTP, WTP dynamically
> loads the driver specified on the connection dialog.
>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira