Hello I have run into a problem using SQLTransformer in Cocoon 2.0 with Oracle 8. 1.7 and Tomcat 4.0.1 on Windows NT4 Service Pack 5.
Here is the datasource as defined in cocoon.xconf: <jdbc name="gtu-bridge"> <pool-controller min="5" max="10" oradb="true"/> <dburl>jdbc:oracle:thin:@172.16.1.5:1521:gtu</dburl> <user>gtu</user> <password>gtu</password> </jdbc> The system generates an SQL on the database which returns a number of rows. Then it does a second query for each row returned using the values returned in the first query through the <ancestor-value> tag. All the SQL statements are correct, in that they return the expected results when they run. The problem is that if the pipeline is run two or three times, the database crashes with a NullPointerException. Here is an extract from the log. I have omitted the actual SQL statements and some of the level 1 queries. SQLTransformer: SQLTransformer executing query nr 0 SQLTransformer$Query: EXECUTING SELECT .... DefaultPool: Retrieving a org.apache.avalon.excalibur.datasource.JdbcConnection from the pool DefaultPool: Returning a org.apache.avalon.excalibur.datasource.JdbcConnection to the pool SQLTransformer: SQLTransformer executing query nr 1 SQLTransformer$Query: EXECUTING SELECT .... DefaultPool: Retrieving a org.apache.avalon.excalibur.datasource.JdbcConnection from the pool DefaultPool: Returning a org.apache.avalon.excalibur.datasource.JdbcConnection to the pool ........ SQLTransformer: SQLTransformer executing query nr 1 SQLTransformer$Query: EXECUTING SELECT .... DefaultPool: Retrieving a org.apache.avalon.excalibur.datasource.JdbcConnection from the pool DefaultPool: Returning a org.apache.avalon.excalibur.datasource.JdbcConnection to the pool SQLTransformer: SQLTransformer executing query nr 1 SQLTransformer$Query: EXECUTING SELECT .... DefaultPool: Retrieving a org.apache.avalon.excalibur.datasource.JdbcConnection from the pool JdbcConnectionPool: JdbcConnection was closed, creating one to take its place JdbcConnectionFactory: JdbcConnection object created DefaultPool: Returning a org.apache.avalon.excalibur.datasource.JdbcConnection to the pool SQLTransformer$Query: NullPointer while closing the resultset. java.lang.NullPointerException at oracle.jdbc.driver.ScrollableResultSet.close(ScrollableResultSet. java:143) at org.apache.cocoon.transformation.SQLTransformer$Query.close(SQLTransformer. java:1009) at org.apache.cocoon.transformation.SQLTransformer.executeQuery (SQLTransformer.java:294) at org.apache.cocoon.transformation.SQLTransformer.endExecuteQueryElement (SQLTransformer.java:398) Sometimes the "JdbcConnection was closed" message appears several times and the error does not occur, sometimes it appears several times and the error does occur. In this case it appeared once and the error occured. I have not seen the error occurring unless that message has appeared at least once. It looks to me like the SQLTransformer is checking if the ResultSet is null, finding it is not null so trying to close it, but by the time it tries to close it, something else has already removed it so it gets a NullPointerException. The SQLTransformer successfully catches the exception, but the Oracle ScrollableResultSet does not catch it and does not throw it, so the whole thing crashes. I have modified the source of SQLTransformer to synchronize on the ResultSet like this: Original code: if ( rs != null ) try { //getTheLogger().debug("Trying to close resultset "+rs.toString()) ; rs.close(); rs = null; // This prevents us from using the resultset again. //250getTheLogger().debug("Really closed the resultset now."); } catch ( NullPointerException e ) { getTheLogger().debug( "NullPointer while closing the resultset.", e ); } Modified code: if ( rs != null ) try { synchronized (rs) { //getTheLogger().debug("Trying to close resultset "+rs.toString( )); rs.close(); rs = null; // This prevents us from using the resultset again. //250getTheLogger().debug("Really closed the resultset now."); } } catch ( NullPointerException e ) { getTheLogger().debug( "NullPointer while closing the resultset.", e ); } I am now waiting for my client to tell me if this fixes the problem (I do not have access to an environment where I can make the error occur). Meanwhile, please can someone tell me what is happening here? Is my fix likely to work? Do I have an incorrect setting somewhere? What else can I try? Thank you William --------------------------------------------------------------------- Please check that your question has not already been answered in the FAQ before posting. <http://xml.apache.org/cocoon/faqs.html> To unsubscribe, e-mail: <[EMAIL PROTECTED]> For additional commands, e-mail: <[EMAIL PROTECTED]>