You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by Matthew Baird <Ma...@motiva.com> on 2003/07/28 03:16:29 UTC

RE: [Patch] o.a.o.b.util.batch.PreparedStatementInvocationHandler

i found this last week and have the fix in a changelist at work. I will update monday morning.

	-----Original Message----- 
	From: Ron Gallagher [mailto:rgallagh@bellsouth.net] 
	Sent: Sun 7/27/2003 6:17 PM 
	To: ojb-dev@db.apache.org 
	Cc: 
	Subject: [Patch] o.a.o.b.util.batch.PreparedStatementInvocationHandler
	
	

	All --
	
	I encountered a problem with the doExecute method in
	org.apache.ojb.broker.util.batch.PreparedStatementInvocationHandler. 
	
	The problem manifested itself in the following 'if' condition:
	
	if ((Method) _methods.get(i) == ADD_BATCH )
	{
	    /**
	     * we invoke on the platform and pass the stmt as an arg.
	     */
	    ((Method) _methods.get(i)).invoke(m_platform, new Object[] {stmt});
	}
	else
	{
	    ((Method) _methods.get(i)).invoke(stmt, (Object[]) _params.get(i));
	}
	
	When I ran this in my environment (jdk 1.3.1, oracle9i), the 'Method' object that was returned by '_method.get(i)' was indeed the 'ADD_BATCH' method.  However, the expression "((Method) _methods.get(i) == ADD_BATCH )" did not evaluate to true.  As a result, the 'Method' was invoked on the 'stmt' variable causing an exception.  I believe it was an IllegalAccessException.  The details are on my system at work.  I can provide the specifics once I get into the office on Monday.
	
	Changing the expression mentioned earlier to use the ".equals" method fixed the problem.  The updated code looks like this:
	if (((Method) _methods.get(i)).equals(ADD_BATCH))
	{
	    /**
	     * we invoke on the platform and pass the stmt as an arg.
	     */
	    ((Method) _methods.get(i)).invoke(m_platform, new Object[] {stmt});
	}
	else
	{
	    ((Method) _methods.get(i)).invoke(stmt, (Object[]) _params.get(i));
	}
	
	Attached is an update to o.a.o.b.util.batch.PreparedStatementInvocationHandler to fix this problem. I also changed the loop in which this code occurs to get the 'Method' from the _methods ArrayList once, at the beginning of the loop.