[ 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