Index: src/com/sun/data/provider/impl/CachedRowSetDataProvider.java =================================================================== RCS file: /cvs/visualweb/dataprovider/runtime/library/src/com/sun/data/provider/impl/CachedRowSetDataProvider.java,v retrieving revision 1.6 diff -u -r1.6 CachedRowSetDataProvider.java --- src/com/sun/data/provider/impl/CachedRowSetDataProvider.java 2 Oct 2007 07:16:03 -0000 1.6 +++ src/com/sun/data/provider/impl/CachedRowSetDataProvider.java 21 Oct 2007 05:03:32 -0000 @@ -58,7 +58,6 @@ import java.sql.Types; import java.text.MessageFormat; import java.util.ArrayList; -import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -78,19 +77,17 @@ import javax.sql.rowset.spi.SyncProviderException; import com.sun.data.provider.DataProviderException; import com.sun.data.provider.FieldKey; -import com.sun.data.provider.FilterCriteria; import com.sun.data.provider.RowKey; import com.sun.data.provider.RefreshableDataProvider; import com.sun.data.provider.RefreshableDataListener; -import com.sun.data.provider.SortCriteria; import com.sun.data.provider.TableCursorVetoException; -import com.sun.data.provider.TableDataFilter; import com.sun.data.provider.TableDataProvider; -import com.sun.data.provider.TableDataSorter; import com.sun.data.provider.TransactionalDataListener; import com.sun.data.provider.TransactionalDataProvider; import com.sun.sql.rowset.CachedRowSetX; import com.sun.sql.rowset.SyncResolverX; +import java.util.logging.Level; +import java.util.logging.Logger; /** *

{@link TableDataProvider} implementation that wraps a CachedRowSet. @@ -105,6 +102,9 @@ */ public class CachedRowSetDataProvider extends AbstractTableDataProvider implements TableDataProvider, TransactionalDataProvider, RefreshableDataProvider { + + private static Logger LOGGER = + Logger.getLogger(CachedRowSetDataProvider.class.getName()); // ----------------------------------------------------------- Constructors @@ -176,6 +176,11 @@ * method to detect this, but I don't see it.

*/ private boolean onInsertRow = false; + + /** + * Set to true if the rowset has been executed + */ + private boolean executed = false; /** @@ -231,7 +236,24 @@ if (cachedRowSet != null && cachedRowSet instanceof CachedRowSetX) { propertyChangeListener = new RowSetPropertyChangeListener(); ((CachedRowSetX)cachedRowSet).addPropertyChangeListener(propertyChangeListener); + + if ( ! Beans.isDesignTime() ) { + try { + executed = ((CachedRowSetX)cachedRowSet).isExecuted(); + } catch ( SQLException e ){ + LOGGER.log(Level.WARNING, null, e); + executed = false; + } + } else { + // Assume the row set has not yet been executed yet. The worse + // that could happen is the row set was executed before it was + // passed in to the data provider, and we end up executing it + // one more time. Note that this particular branch of logic + // is unlikely because almost always the rowset is a CachedRowSetX + executed = false; + } } + if (cachedRowSet != null) { rowSetListener = new CachedRowSetListener(); cachedRowSet.addRowSetListener(rowSetListener); @@ -1318,13 +1340,10 @@ *

Check if rowset, if so, execute if necessary.

*/ protected void checkExecute() throws SQLException { - if (!Beans.isDesignTime() && getCachedRowSet() != null) { - try { - getCachedRowSet().isBeforeFirst(); - } catch (SQLException e) { - getCachedRowSet().execute(); - getCachedRowSet().first(); - } + if ( !Beans.isDesignTime() && ! executed ) { + getCachedRowSet().execute(); + getCachedRowSet().first(); + executed = true; } }