Buggy code:
public void updateShort ( String columnName , short x ) throws SQLException { } public void updateInt ( String columnName , int x ) throws SQLException { } public void updateLong ( String columnName , long x ) throws SQLException { } public void updateFloat ( String columnName , float x ) throws SQLException { } public void updateDouble ( String columnName , double x ) throws SQLException { } public void updateBigDecimal ( String columnName , BigDecimal x ) throws SQLException { } public void updateDate ( String columnName , Date x ) throws SQLException { } public void updateTime ( String columnName , Time x ) throws SQLException { } public void updateTimestamp ( String columnName , Timestamp x ) throws SQLException { } public void updateString ( String columnName , String x ) throws SQLException { } public void updateBytes ( String columnName , byte [ ] x ) throws SQLException { } public void updateBinaryStream ( String columnName , InputStream x , int length ) throws SQLException { } public void updateAsciiStream ( String columnName , InputStream x , int length ) throws SQLException { } public void updateCharacterStream ( String columnName , Reader x , int length ) throws SQLException { } public void updateObject ( String columnName , Object x , int scale ) throws SQLException { } public void updateObject ( String columnName , Object x ) throws SQLException { } public void insertRow ( ) throws SQLException { } private void insertRowX ( ) throws SqlException { } public void updateRow ( ) throws SQLException { } private boolean updateRowX ( ) throws SqlException { } public void deleteRow ( ) throws SQLException { } private void deleteRowX ( ) throws SqlException { } public void refreshRow ( ) throws SQLException { } private void refreshRowX ( ) throws SqlException { } public void cancelRowUpdates ( ) throws SQLException { } public void moveToInsertRow ( ) throws SQLException { } public void moveToCurrentRow ( ) throws SQLException { } public java . sql . Statement getStatement ( ) throws SQLException { } public URL getURL ( int columnIndex ) throws SQLException { } public URL getURL ( String columnName ) throws SQLException { } public void updateRef ( int columnIndex , Ref x ) throws SQLException { } public void updateRef ( String columnName , Ref x ) throws SQLException { } public void updateBlob ( int columnIndex , Blob x ) throws SQLException { } public void updateBlob ( String columnName , Blob x ) throws SQLException { } public void updateClob ( int columnIndex , Clob x ) throws SQLException { } public void updateClob ( String columnName , Clob x ) throws SQLException { } public void updateArray ( int columnIndex , Array x ) throws SQLException { } public void updateArray ( String columnName , Array x ) throws SQLException { } public boolean repositionScrollableResultSetBeforeJDBC1PositionedUpdateDelete ( ) throws SqlException { } public void flowPositioningFetch ( int scrollOrientation , int rowToFetch ) throws DisconnectException { } protected void positionToCurrentRowAndUpdate ( ) throws SqlException { } protected void insert ( ) throws SqlException { } protected void update ( ) throws SqlException { } protected void positionToCurrentRowAndDelete ( ) throws SqlException { } protected void delete ( ) throws SqlException { } public void setRowsetAfterLastEvent ( ) throws SqlException { } public void setRowsetBeforeFirstEvent ( ) throws SqlException { } public void setRowsetNoRowsEvent ( ) { } private boolean isServersCursorPositionBeforeFirst ( ) throws SqlException { } private boolean isServerCursorPositionAfterLast ( ) throws SqlException { } public void setValidCursorPosition ( boolean isValidCursorPosition ) { } protected void moveToAfterLast ( ) throws DisconnectException { } protected void moveToBeforeFirst ( ) throws DisconnectException { } public void flowFetch ( ) throws DisconnectException , SqlException { } public void writeInsertRow ( boolean chainedWritesFollowingSetLob ) throws SQLException { } public void writeUpdateRow ( boolean chainedWritesFollowingSetLob ) throws SQLException { } public void writeDeleteRow ( ) throws SQLException { } public void readInsertRow ( ) throws DisconnectException , SqlException { } public void readUpdateRow ( ) throws DisconnectException , SqlException { } public void readDeleteRow ( ) throws DisconnectException , SqlException { } boolean listenToUnitOfWork_ = false ; public void listenToUnitOfWork ( ) { if ( ! ( listenToUnitOfWork_ ) ) { listenToUnitOfWork_ = true ; <START_BUG> connection_ . CommitAndRollbackListeners_ . add ( this ) ; <END_BUG> } } public void completeLocalCommit ( Iterator listenerIterator ) { } public void completeLocalRollback ( Iterator listenerIterator ) { } private void nullOutReferenceInStatement ( ) { } void markClosed ( ) { } void markClosed ( boolean removeListener ) { } public void markClosedOnServer ( ) { } void markAutoCommitted ( ) { } public void earlyCloseComplete ( Sqlca sqlca ) { } public int completeSqlca ( Sqlca sqlca ) { } public void setRowCountEvent ( long rowCount ) throws DisconnectException { } public void accumulateWarning ( SqlWarning e ) { } protected boolean rowCountIsUnknown ( ) { } protected boolean rowCountIsKnown ( ) { } private void updateColumn ( int column , Object value ) { } private String buildInsertString ( ) throws SqlException { } private String buildUpdateString ( ) throws SqlException { } private String buildDeleteString ( ) throws SqlException { } private String getTableName ( ) throws SqlException { } private String getServerCursorName ( ) throws SqlException { } private void getPreparedStatementForInsert ( ) throws SqlException { } private void getPreparedStatementForUpdate ( ) throws SqlException { } private void getPreparedStatementForDelete ( ) throws SqlException { } private final void resetUpdatedColumnsForInsert ( ) { } private final void resetUpdatedColumns ( ) { } private final long getRowUncast ( ) { } private final void checkGetterPreconditions ( int column ) throws SqlException { } private final void checkUpdatePreconditions ( int column ) throws SqlException { } final void checkForValidColumnIndex ( int column ) throws SqlException { } private void checkUpdatableCursor ( ) throws SqlException { }

Fix:
connection_ . CommitAndRollbackListeners_ . put ( this , null ) ;