/*
 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package com.sun.rowset.providers;

import com.sun.rowset.JdbcRowSetResourceBundle;
import java.io.IOException;
import java.sql.*;
import javax.sql.*;

import javax.sql.rowset.spi.*;

A reference implementation of a JDBC RowSet synchronization provider with the ability to read and write rowsets in well formed XML using the standard WebRowSet schema.

1.0 Background

This synchronization provider is registered with the SyncFactory by default as the com.sun.rowset.providers.RIXMLProvider.

A WebRowSet object uses an RIXMLProvider implementation to read an XML data source or to write itself in XML format using the WebRowSet XML schema definition available at

    http://java.sun.com/xml/ns/jdbc/webrowset.xsd
The RIXMLProvider implementation has a synchronization level of GRADE_NONE, which means that it does no checking at all for conflicts. It simply writes a WebRowSet object to a file.

2.0 Usage

A WebRowSet implementation is created with an RIXMLProvider by default.
    WebRowSet wrs = new FooWebRowSetImpl();
The SyncFactory always provides an instance of RIOptimisticProvider when no provider is specified, but the implementation of the default constructor for WebRowSet sets the provider to be the RIXMLProvider implementation. Therefore, the following line of code is executed behind the scenes as part of the implementation of the default constructor.
    wrs.setSyncProvider("com.sun.rowset.providers.RIXMLProvider");
See the standard RowSet reference implementations in the com.sun.rowset package for more details.
Author: Jonathan Bruce
See Also:
/** * A reference implementation of a JDBC RowSet synchronization provider * with the ability to read and write rowsets in well formed XML using the * standard WebRowSet schema. * * <h3>1.0 Background</h3> * This synchronization provider is registered with the * <code>SyncFactory</code> by default as the * <code>com.sun.rowset.providers.RIXMLProvider</code>. * <P> * A <code>WebRowSet</code> object uses an <code>RIXMLProvider</code> implementation * to read an XML data source or to write itself in XML format using the * <code>WebRowSet</code> XML schema definition available at * <pre> * <a href="http://java.sun.com/xml/ns/jdbc/webrowset.xsd">http://java.sun.com/xml/ns/jdbc/webrowset.xsd</a> * </pre> * The <code>RIXMLProvider</code> implementation has a synchronization level of * GRADE_NONE, which means that it does no checking at all for conflicts. It * simply writes a <code>WebRowSet</code> object to a file. * <h3>2.0 Usage</h3> * A <code>WebRowSet</code> implementation is created with an <code>RIXMLProvider</code> * by default. * <pre> * WebRowSet wrs = new FooWebRowSetImpl(); * </pre> * The <code>SyncFactory</code> always provides an instance of * <code>RIOptimisticProvider</code> when no provider is specified, * but the implementation of the default constructor for <code>WebRowSet</code> sets the * provider to be the <code>RIXMLProvider</code> implementation. Therefore, * the following line of code is executed behind the scenes as part of the * implementation of the default constructor. * <pre> * wrs.setSyncProvider("com.sun.rowset.providers.RIXMLProvider"); * </pre> * See the standard <code>RowSet</code> reference implementations in the * <code>com.sun.rowset</code> package for more details. * * @author Jonathan Bruce * @see javax.sql.rowset.spi.SyncProvider * @see javax.sql.rowset.spi.SyncProviderException * @see javax.sql.rowset.spi.SyncFactory * @see javax.sql.rowset.spi.SyncFactoryException */
public final class RIXMLProvider extends SyncProvider {
The unique provider identifier.
/** * The unique provider identifier. */
private String providerID = "com.sun.rowset.providers.RIXMLProvider";
The vendor name of this SyncProvider implementation.
/** * The vendor name of this SyncProvider implementation. */
private String vendorName = "Oracle Corporation";
The version number of this SyncProvider implementation.
/** * The version number of this SyncProvider implementation. */
private String versionNumber = "1.0"; private JdbcRowSetResourceBundle resBundle; private XmlReader xmlReader; private XmlWriter xmlWriter;
This provider is available to all JDBC RowSet implementations as the default persistence provider.
/** * This provider is available to all JDBC <code>RowSet</code> implementations as the * default persistence provider. */
public RIXMLProvider() { providerID = this.getClass().getName(); try { resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) { throw new RuntimeException(ioe); } }
Returns "javax.sql.rowset.providers.RIXMLProvider", which is the fully qualified class name of this provider implementation.
Returns:a String object with the fully specified class name of this RIOptimisticProvider implementation
/** * Returns <code>"javax.sql.rowset.providers.RIXMLProvider"</code>, which is * the fully qualified class name of this provider implementation. * * @return a <code>String</code> object with the fully specified class name of * this <code>RIOptimisticProvider</code> implementation */
public String getProviderID() { return providerID; } // additional methods that sit on top of reader/writer methods back to // original datasource. Allow XML state to be written out and in
Sets this WebRowSet object's reader to the given XmlReader object.
Throws:
  • SQLException – if a database access error occurs
/** * Sets this <code>WebRowSet</code> object's reader to the given * <code>XmlReader</code> object. * * @throws SQLException if a database access error occurs */
public void setXmlReader(XmlReader reader) throws SQLException { xmlReader = reader; }
Sets this WebRowSet object's writer to the given XmlWriter object.
Throws:
  • SQLException – if a database access error occurs
/** * Sets this <code>WebRowSet</code> object's writer to the given * <code>XmlWriter</code> object. * * @throws SQLException if a database access error occurs */
public void setXmlWriter(XmlWriter writer) throws SQLException { xmlWriter = writer; }
Retrieves the reader that this WebRowSet object will call when its readXml method is called.
Throws:
Returns:the XmlReader object for this SyncProvider
/** * Retrieves the reader that this <code>WebRowSet</code> object * will call when its <code>readXml</code> method is called. * * @return the <code>XmlReader</code> object for this SyncProvider * @throws SQLException if a database access error occurs */
public XmlReader getXmlReader() throws SQLException { return xmlReader; }
Retrieves the writer that this WebRowSet object will call when its writeXml method is called.
Throws:
Returns:the XmlWriter for this SyncProvider
/** * Retrieves the writer that this <code>WebRowSet</code> object * will call when its <code>writeXml</code> method is called. * * @return the <code>XmlWriter</code> for this SyncProvider * @throws SQLException if a database access error occurs */
public XmlWriter getXmlWriter() throws SQLException { return xmlWriter; }
Returns the SyncProvider grade of syncrhonization that RowSet object instances can expect when using this implementation. As this implementation provides no synchonization facilities to the XML data source, the lowest grade is returned.
Returns:the SyncProvider syncronization grade of this provider; must be one of the following constants:
         SyncProvider.GRADE_NONE,
         SyncProvider.GRADE_MODIFIED_AT_COMMIT,
         SyncProvider.GRADE_CHECK_ALL_AT_COMMIT,
         SyncProvider.GRADE_LOCK_WHEN_MODIFIED,
         SyncProvider.GRADE_LOCK_WHEN_LOADED
      
/** * Returns the <code>SyncProvider</code> grade of syncrhonization that * <code>RowSet</code> object instances can expect when using this * implementation. As this implementation provides no synchonization * facilities to the XML data source, the lowest grade is returned. * * @return the <code>SyncProvider</code> syncronization grade of this * provider; must be one of the following constants: * <PRE> * SyncProvider.GRADE_NONE, * SyncProvider.GRADE_MODIFIED_AT_COMMIT, * SyncProvider.GRADE_CHECK_ALL_AT_COMMIT, * SyncProvider.GRADE_LOCK_WHEN_MODIFIED, * SyncProvider.GRADE_LOCK_WHEN_LOADED * </PRE> * */
public int getProviderGrade() { return SyncProvider.GRADE_NONE; }
Returns the default UPDATABLE_VIEW behavior of this reader
/** * Returns the default UPDATABLE_VIEW behavior of this reader * */
public int supportsUpdatableView() { return SyncProvider.NONUPDATABLE_VIEW_SYNC; }
Returns the default DATASOURCE_LOCK behavior of this reader
/** * Returns the default DATASOURCE_LOCK behavior of this reader */
public int getDataSourceLock() throws SyncProviderException { return SyncProvider.DATASOURCE_NO_LOCK; }
Throws an unsupported operation exception as this method does function with non-locking XML data sources.
/** * Throws an unsupported operation exception as this method does * function with non-locking XML data sources. */
public void setDataSourceLock(int lock) throws SyncProviderException { throw new UnsupportedOperationException(resBundle.handleGetObject("rixml.unsupp").toString()); }
Returns a null object as RowSetWriters are not returned by this SyncProvider
/** * Returns a null object as RowSetWriters are not returned by this SyncProvider */
public RowSetWriter getRowSetWriter() { return null; }
Returns a null object as RowSetWriter objects are not returned by this SyncProvider
/** * Returns a null object as RowSetWriter objects are not returned by this * SyncProvider */
public RowSetReader getRowSetReader() { return null; }
Returns the release version ID of the Reference Implementation Optimistic Synchronization Provider.
Returns:the String detailing the version number of this SyncProvider
/** * Returns the release version ID of the Reference Implementation Optimistic * Synchronization Provider. * * @return the <code>String</code> detailing the version number of this SyncProvider */
public String getVersion() { return this.versionNumber; }
Returns the vendor name of the Reference Implemntation Optimistic Syncchronication Provider
Returns:the String detailing the vendor name of this SyncProvider
/** * Returns the vendor name of the Reference Implemntation Optimistic * Syncchronication Provider * * @return the <code>String</code> detailing the vendor name of this * SyncProvider */
public String getVendor() { return this.vendorName; } }