[ http://issues.apache.org/jira/browse/DERBY-1446?page=all ]
Kathey Marsden closed DERBY-1446.
---------------------------------
Assignee: (was: Kathey Marsden)
> 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
> 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