javax.sql.rowset.spi
Class SyncFactory

java.lang.Object sample code for java.lang.Object definition code for java.lang.Object 
  extended by javax.sql.rowset.spi.SyncFactory

public class SyncFactory
extends Object sample code for java.lang.Object definition code for java.lang.Object

The Service Provider Interface (SPI) mechanism that generates SyncProvider instances to be used by disconnected RowSet objects. The SyncProvider instances in turn provide the javax.sql.RowSetReader object the RowSet object needs to populate itself with data and the javax.sql.RowSetWriter object it needs to propagate changes to its data back to the underlying data source.

Because the methods in the SyncFactory class are all static, there is only one SyncFactory object per Java VM at any one time. This ensures that there is a single source from which a RowSet implementation can obtain its SyncProvider implementation.

1.0 Overview

The SyncFactory class provides an internal registry of available synchronization provider implementations (SyncProvider objects). This registry may be queried to determine which synchronization providers are available. The following line of code gets an enumeration of the providers currently registered.
     java.util.Enumeration e = SyncFactory.getRegisteredProviders();
 
All standard RowSet implementations must provide at least two providers: Note that the JDBC RowSet Implementations include the SyncProvider implemtations RIOptimisticProvider and RIXmlProvider, which satisfy this requirement.

The SyncFactory class provides accessor methods to assist applications in determining which synchronization providers are currently registered with the SyncFactory.

Other methods let RowSet persistence providers be registered or de-registered with the factory mechanism. This allows additional synchronization provider implementations to be made available to RowSet objects at run time.

Applications can apply a degree of filtering to determine the level of synchronization that a SyncProvider implementation offers. The following criteria determine whether a provider is made available to a RowSet object:

  1. If a particular provider is specified by a RowSet object, and the SyncFactory does not contain a reference to this provider, a SyncFactoryException is thrown stating that the synchronization provider could not be found.

  2. If a RowSet implementation is instantiated with a specified provider and the specified provider has been properly registered, the requested provider is supplied. Otherwise a SyncFactoryException is thrown.

  3. If a RowSet object does not specify a SyncProvider implementation and no additional SyncProvider implementations are available, the reference implementation providers are supplied.

2.0 Registering SyncProvider Implementations

Both vendors and developers can register SyncProvider implementations using one of the following mechanisms.

Next, an application will register the JNDI context with the SyncFactory instance. This allows the SyncFactory to browse within the JNDI context looking for SyncProvider implementations.
    Hashtable appEnv = new Hashtable();
    appEnv.put(Context.INITIAL_CONTEXT_FACTORY, "CosNaming");
    appEnv.put(Context.PROVIDER_URL, "iiop://hostname/providers");
    Context ctx = new InitialContext(appEnv);

    SyncFactory.registerJNDIContext(ctx);
 
If a RowSet object attempts to obtain a MyProvider object, the SyncFactory will try to locate it. First it searches for it in the system properties, then it looks in the resource files, and finally it checks the JNDI context that has been set. The SyncFactory instance verifies that the requested provider is a valid extension of the SyncProvider abstract class and then gives it to the RowSet object. In the following code fragment, a new CachedRowSet object is created and initialized with env, which contains the binding to MyProvider.
    Hashtable env = new Hashtable();
    env.put(SyncFactory.ROWSET_SYNC_PROVIDER, "com.fred.providers.MyProvider");
    CachedRowSet crs = new com.sun.rowset.CachedRowSetImpl(env); 
 
Further details on these mechanisms are available in the javax.sql.rowset.spi package specification.

See Also:
SyncProvider sample code for javax.sql.rowset.spi.SyncProvider definition code for javax.sql.rowset.spi.SyncProvider , SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException

Field Summary
static String sample code for java.lang.String definition code for java.lang.String ROWSET_SYNC_PROVIDER sample code for javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER definition code for javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER
          The standard property-id for a synchronization provider implementation name.
static String sample code for java.lang.String definition code for java.lang.String ROWSET_SYNC_PROVIDER_VERSION sample code for javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER_VERSION definition code for javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER_VERSION
          The standard property-id for a synchronization provider implementation version tag.
static String sample code for java.lang.String definition code for java.lang.String ROWSET_SYNC_VENDOR sample code for javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_VENDOR definition code for javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_VENDOR
          The standard property-id for a synchronization provider implementation vendor name.
 
Method Summary
static SyncProvider sample code for javax.sql.rowset.spi.SyncProvider definition code for javax.sql.rowset.spi.SyncProvider getInstance sample code for javax.sql.rowset.spi.SyncFactory.getInstance(java.lang.String) definition code for javax.sql.rowset.spi.SyncFactory.getInstance(java.lang.String) (String sample code for java.lang.String definition code for java.lang.String  providerID)
          Returns the SyncProvider instance identified by providerID.
static Logger sample code for java.util.logging.Logger definition code for java.util.logging.Logger getLogger sample code for javax.sql.rowset.spi.SyncFactory.getLogger() definition code for javax.sql.rowset.spi.SyncFactory.getLogger() ()
          Returns the logging object for applications to retrieve synchronization events posted by SyncProvider implementations.
static Enumeration sample code for java.util.Enumeration definition code for java.util.Enumeration <SyncProvider sample code for javax.sql.rowset.spi.SyncProvider definition code for javax.sql.rowset.spi.SyncProvider > getRegisteredProviders sample code for javax.sql.rowset.spi.SyncFactory.getRegisteredProviders() definition code for javax.sql.rowset.spi.SyncFactory.getRegisteredProviders() ()
          Returns an Enumeration of currently registered synchronization providers.
static SyncFactory sample code for javax.sql.rowset.spi.SyncFactory definition code for javax.sql.rowset.spi.SyncFactory getSyncFactory sample code for javax.sql.rowset.spi.SyncFactory.getSyncFactory() definition code for javax.sql.rowset.spi.SyncFactory.getSyncFactory() ()
          Returns the SyncFactory singleton.
static void registerProvider sample code for javax.sql.rowset.spi.SyncFactory.registerProvider(java.lang.String) definition code for javax.sql.rowset.spi.SyncFactory.registerProvider(java.lang.String) (String sample code for java.lang.String definition code for java.lang.String  providerID)
          Adds the the given synchronization provider to the factory register.
static void setJNDIContext sample code for javax.sql.rowset.spi.SyncFactory.setJNDIContext(javax.naming.Context) definition code for javax.sql.rowset.spi.SyncFactory.setJNDIContext(javax.naming.Context) (Context sample code for javax.naming.Context definition code for javax.naming.Context  ctx)
          Sets the initial JNDI context from which SyncProvider implementations can be retrieved from a JNDI namespace
static void setLogger sample code for javax.sql.rowset.spi.SyncFactory.setLogger(java.util.logging.Logger) definition code for javax.sql.rowset.spi.SyncFactory.setLogger(java.util.logging.Logger) (Logger sample code for java.util.logging.Logger definition code for java.util.logging.Logger  logger)
          Sets the logging object to be used by the SyncProvider implementation provided by the SyncFactory.
static void setLogger sample code for javax.sql.rowset.spi.SyncFactory.setLogger(java.util.logging.Logger, java.util.logging.Level) definition code for javax.sql.rowset.spi.SyncFactory.setLogger(java.util.logging.Logger, java.util.logging.Level) (Logger sample code for java.util.logging.Logger definition code for java.util.logging.Logger  logger, Level sample code for java.util.logging.Level definition code for java.util.logging.Level  level)
          Sets the logging object that is used by SyncProvider implementations provided by the SyncFactory SPI.
static void unregisterProvider sample code for javax.sql.rowset.spi.SyncFactory.unregisterProvider(java.lang.String) definition code for javax.sql.rowset.spi.SyncFactory.unregisterProvider(java.lang.String) (String sample code for java.lang.String definition code for java.lang.String  providerID)
          Removes the designated currently registered synchronization provider from the Factory SPI register.
 
Methods inherited from class java.lang.Object sample code for java.lang.Object definition code for java.lang.Object
clone sample code for java.lang.Object.clone() definition code for java.lang.Object.clone() , equals sample code for java.lang.Object.equals(java.lang.Object) definition code for java.lang.Object.equals(java.lang.Object) , finalize sample code for java.lang.Object.finalize() definition code for java.lang.Object.finalize() , getClass sample code for java.lang.Object.getClass() definition code for java.lang.Object.getClass() , hashCode sample code for java.lang.Object.hashCode() definition code for java.lang.Object.hashCode() , notify sample code for java.lang.Object.notify() definition code for java.lang.Object.notify() , notifyAll sample code for java.lang.Object.notifyAll() definition code for java.lang.Object.notifyAll() , toString sample code for java.lang.Object.toString() definition code for java.lang.Object.toString() , wait sample code for java.lang.Object.wait() definition code for java.lang.Object.wait() , wait sample code for java.lang.Object.wait(long) definition code for java.lang.Object.wait(long) , wait sample code for java.lang.Object.wait(long, int) definition code for java.lang.Object.wait(long, int)
 

Field Detail

ROWSET_SYNC_PROVIDER sample code for javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER

public static String sample code for java.lang.String definition code for java.lang.String  ROWSET_SYNC_PROVIDER
The standard property-id for a synchronization provider implementation name.


ROWSET_SYNC_VENDOR sample code for javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_VENDOR

public static String sample code for java.lang.String definition code for java.lang.String  ROWSET_SYNC_VENDOR
The standard property-id for a synchronization provider implementation vendor name.


ROWSET_SYNC_PROVIDER_VERSION sample code for javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER_VERSION

public static String sample code for java.lang.String definition code for java.lang.String  ROWSET_SYNC_PROVIDER_VERSION
The standard property-id for a synchronization provider implementation version tag.

Method Detail

registerProvider sample code for javax.sql.rowset.spi.SyncFactory.registerProvider(java.lang.String) definition code for javax.sql.rowset.spi.SyncFactory.registerProvider(java.lang.String)

public static void registerProvider(String sample code for java.lang.String definition code for java.lang.String  providerID)
                             throws SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException 
Adds the the given synchronization provider to the factory register. Guidelines are provided in the SyncProvider specification for the required naming conventions for SyncProvider implementations.

Synchronization providers bound to a JNDI context can be registered by binding a SyncProvider instance to a JNDI namespace.

Furthermore, an initial JNDI context should be set with the SyncFactory using the setJNDIContext method. The SyncFactory leverages this context to search for available SyncProvider objects bound to the JNDI context and its child nodes.

Parameters:
providerID - A String object with the unique ID of the synchronization provider being registered
Throws:
SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException - if an attempt is made to supply an empty or null provider name
See Also:
setJNDIContext(javax.naming.Context) sample code for javax.sql.rowset.spi.SyncFactory.setJNDIContext(javax.naming.Context) definition code for javax.sql.rowset.spi.SyncFactory.setJNDIContext(javax.naming.Context)

getSyncFactory sample code for javax.sql.rowset.spi.SyncFactory.getSyncFactory() definition code for javax.sql.rowset.spi.SyncFactory.getSyncFactory()

public static SyncFactory sample code for javax.sql.rowset.spi.SyncFactory definition code for javax.sql.rowset.spi.SyncFactory  getSyncFactory()
Returns the SyncFactory singleton.

Returns:
the SyncFactory instance

unregisterProvider sample code for javax.sql.rowset.spi.SyncFactory.unregisterProvider(java.lang.String) definition code for javax.sql.rowset.spi.SyncFactory.unregisterProvider(java.lang.String)

public static void unregisterProvider(String sample code for java.lang.String definition code for java.lang.String  providerID)
                               throws SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException 
Removes the designated currently registered synchronization provider from the Factory SPI register.

Parameters:
providerID - The unique-id of the synchronization provider
Throws:
SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException - If an attempt is made to unregister a SyncProvider implementation that was not registered.

getInstance sample code for javax.sql.rowset.spi.SyncFactory.getInstance(java.lang.String) definition code for javax.sql.rowset.spi.SyncFactory.getInstance(java.lang.String)

public static SyncProvider sample code for javax.sql.rowset.spi.SyncProvider definition code for javax.sql.rowset.spi.SyncProvider  getInstance(String sample code for java.lang.String definition code for java.lang.String  providerID)
                                throws SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException 
Returns the SyncProvider instance identified by providerID.

Parameters:
providerID - the unique identifier of the provider
Returns:
a SyncProvider implementation
Throws:
SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException - If the SyncProvider cannot be found or some error was encountered when trying to invoke this provider.

getRegisteredProviders sample code for javax.sql.rowset.spi.SyncFactory.getRegisteredProviders() definition code for javax.sql.rowset.spi.SyncFactory.getRegisteredProviders()

public static Enumeration sample code for java.util.Enumeration definition code for java.util.Enumeration <SyncProvider sample code for javax.sql.rowset.spi.SyncProvider definition code for javax.sql.rowset.spi.SyncProvider > getRegisteredProviders()
                                                        throws SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException 
Returns an Enumeration of currently registered synchronization providers. A RowSet implementation may use any provider in the enumeration as its SyncProvider object.

At a minimum, the reference synchronization provider allowing RowSet content data to be stored using a JDBC driver should be possible.

Returns:
Enumeration A enumeration of available synchronization providers that are registered with this Factory
Throws:
SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException

setLogger sample code for javax.sql.rowset.spi.SyncFactory.setLogger(java.util.logging.Logger) definition code for javax.sql.rowset.spi.SyncFactory.setLogger(java.util.logging.Logger)

public static void setLogger(Logger sample code for java.util.logging.Logger definition code for java.util.logging.Logger  logger)
Sets the logging object to be used by the SyncProvider implementation provided by the SyncFactory. All SyncProvider implementations can log their events to this object and the application can retrieve a handle to this object using the getLogger method.

Parameters:
logger - A Logger object instance

setLogger sample code for javax.sql.rowset.spi.SyncFactory.setLogger(java.util.logging.Logger, java.util.logging.Level) definition code for javax.sql.rowset.spi.SyncFactory.setLogger(java.util.logging.Logger, java.util.logging.Level)

public static void setLogger(Logger sample code for java.util.logging.Logger definition code for java.util.logging.Logger  logger,
                             Level sample code for java.util.logging.Level definition code for java.util.logging.Level  level)
Sets the logging object that is used by SyncProvider implementations provided by the SyncFactory SPI. All SyncProvider implementations can log their events to this object and the application can retrieve a handle to this object using the getLogger method.

Parameters:
logger - a Logger object instance
level - a Level object instance indicating the degree of logging required

getLogger sample code for javax.sql.rowset.spi.SyncFactory.getLogger() definition code for javax.sql.rowset.spi.SyncFactory.getLogger()

public static Logger sample code for java.util.logging.Logger definition code for java.util.logging.Logger  getLogger()
                        throws SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException 
Returns the logging object for applications to retrieve synchronization events posted by SyncProvider implementations.

Throws:
SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException - if no logging object has been set.

setJNDIContext sample code for javax.sql.rowset.spi.SyncFactory.setJNDIContext(javax.naming.Context) definition code for javax.sql.rowset.spi.SyncFactory.setJNDIContext(javax.naming.Context)

public static void setJNDIContext(Context sample code for javax.naming.Context definition code for javax.naming.Context  ctx)
                           throws SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException 
Sets the initial JNDI context from which SyncProvider implementations can be retrieved from a JNDI namespace

Parameters:
ctx - a valid JNDI context
Throws:
SyncFactoryException sample code for javax.sql.rowset.spi.SyncFactoryException definition code for javax.sql.rowset.spi.SyncFactoryException - if the supplied JNDI context is null