/*
* 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: - SQLException – if a database access error occurs
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: - SQLException – if a database access error occurs
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;
}
}