The jdbc support has been completely rewritten since 2.4 with the exception of the xa wrapper code.
Maybe I'm really missing something here, but I don't see how the code is wrong.
public LocalPreparedStatement(final LocalConnection lc, final PreparedStatement ps)
public LocalStatement(final LocalConnection lc, Statement s)
this.lc = lc;
this.s = s;
public void close() throws SQLException
This should execute the close method on the actual type of the Object referenced by s, which is presumably your Oracle PreparedStatement.
I'm not sure why your code wouldn't work. Are you getting any exceptions before you run out of cursors?
David, sorry you are right about close() method.
I'm not sure why the code has stopped working.
I'll further investigate it.
Is there a possibility for ResultSet not been closed (despite the fact of call rs.close() in the application)? I couldn't figure out where is the relevant connector code (like LocalPreparedStatement).
There are no exceptions whatsoever in the application until ORACLE generate the "opened cursor limit reached" error and subsequent exception.
All I did - I have changed version of jBoss from 2.4 to 3.0. .ear file is exactly same.
Sorry David, you are right about close() method.
I didn't get any exceptions until ORCALE has generated "opened cursor limit reached" error and subsequent SQL exception.
All I have changed is the version of jBoss: 2.4 -> 3.0. The .ear file is the same.
I'll investigate the issue further anyway. I was unable to find the JCA code, relevant to ResultSet.close(). ORACLE might expect this call in order to close cursor. Is there any proxy object between ResultSet of JDBC driver and ResultSet of the application?
There is no wrapper for ResultSet, despite some complaints. So if you are calling rs.close(), the Oracle result set is what is closed. I hope you can find out what is wrong!