db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathey Marsden (JIRA)" <derby-...@db.apache.org>
Subject [jira] Created: (DERBY-1446) Derby can enter infinite loop and consume 100% cpu when loading class when running a stored procedure within Eclipse 3.2
Date Fri, 23 Jun 2006 16:14:29 GMT
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
        Type: Bug

  Components: JDBC  
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

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

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 

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 
The debugger will stop and you can see that when stmt.execute() 
 is executed, it never returns and your CPU utilization is at 
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:
For more information on JIRA, see:

View raw message