Additional top-level class in compilation unit: ProviderImpl.
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.
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:
CachedRowSet implementation
or an implementation derived from it
WebRowSet objects
SyncProvider
implementations 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:
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.
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.
RowSet object does not specify a
SyncProvider implementation and no additional
SyncProvider implementations are available, the reference
implementation providers are supplied.
SyncProvider Implementations
Both vendors and developers can register SyncProvider
implementations using one of the following mechanisms.
-Drowset.provider.classname=com.fred.providers.HighAvailabilityProvider
#Default JDBC RowSet sync providers listing # # Optimistic synchronization provider rowset.provider.classname.0=com.sun.rowset.providers.RIOptimisticProvider rowset.provider.vendor.0=Oracle Corporation rowset.provider.version.0=1.0 # XML Provider using standard XML schema rowset.provider.classname.1=com.sun.rowset.providers.RIXMLProvider rowset.provider.vendor.1=Oracle Corporation rowset.provider.version.1=1.0The
SyncFactory checks this file and registers the
SyncProvider implementations that it contains. A
developer or vendor can add other implementations to this file.
For example, here is a possible addition:
rowset.provider.classname.2=com.fred.providers.HighAvailabilityProvider
rowset.provider.vendor.2=Fred, Inc.
rowset.provider.version.2=1.0
SyncFactory will attempt to load
SyncProvider implementations from that JNDI context.
For example, the following code fragment registers a provider implementation
on a JNDI context. This is something a deployer would normally do. In this
example, MyProvider is being registered on a CosNaming
namespace, which is the namespace used by J2EE resources.
import javax.naming.*;
Hashtable svrEnv = new Hashtable();
srvEnv.put(Context.INITIAL_CONTEXT_FACTORY, "CosNaming");
Context ctx = new InitialContext(svrEnv);
com.fred.providers.MyProvider = new MyProvider();
ctx.rebind("providers/MyProvider", syncProvider);
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.
javax.sql.rowset.spi.SyncProvider , javax.sql.rowset.spi.SyncFactoryException
| Modifier and Type | Class and Description |
|---|---|
| private static class | SyncFactory.
Lazy initialization Holder class used by |
| Modifier and Type | Field and Description |
|---|---|
| private static String | |
| private static boolean | debug
The internal debug switch. |
| private static Context | ic
The initial JNDI context where |
| private static Hashtable | implementations
The registry of available |
| private static boolean | lazyJNDICtxRefresh
Internal switch indicating whether the JNDI namespace should be re-read. |
| private static int | providerImplIndex
Internal registry count for the number of providers contained in the registry. |
| private static String | ROWSET_PROPERTIES
The standard resource file name. |
| public static final String | ROWSET_SYNC_PROVIDER
The standard property-id for a synchronization provider implementation name. |
| public static final String | ROWSET_SYNC_PROVIDER_VERSION
The standard property-id for a synchronization provider implementation version tag. |
| public static final String | ROWSET_SYNC_VENDOR
The standard property-id for a synchronization provider implementation vendor name. |
| private static volatile Logger | rsLogger
The |
| private static String |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| private static void | enumerateBindings(NamingEnumeration<?> bindings, Properties properties)
Scans each binding on JNDI context and determines if any binding is an instance of SyncProvider, if so, add this to the registry and continue to scan the current context using a re-entrant call to this method until all bindings have been enumerated. |
| public static SyncProvider | Returns: aSyncProvider implementationthe unique identifier of the provider providerID)Returns the |
| public static Logger | Returns: TheLogger that has been specified for use by
SyncProvider implementationsReturns the logging object for applications to retrieve synchronization events posted by SyncProvider implementations. |
| private static String[] | getPropertyNames(boolean append)
Used by the parseProperties methods to disassemble each property tuple. |
| private static String[] | getPropertyNames(boolean append, String propertyIndex)
Disassembles each property and its associated value. |
| public static Enumeration | Returns: Enumeration A enumeration of available synchronization providers that are registered with this FactoryReturns an Enumeration of currently registered synchronization providers. |
| public static SyncFactory | |
| private static synchronized void | |
| private static synchronized void | |
| private static Properties | parseJNDIContext()
Parses the set JNDI Context and passes bindings to the enumerateBindings method when complete. |
| private static void | |
| public static synchronized void | registerProvider(String
A providerID)String object with the unique ID of the
synchronization provider being registeredAdds the given synchronization provider to the factory register. |
| public static synchronized void | setJNDIContext(Context
a valid JNDI context ctx)Sets the initial JNDI context from which SyncProvider implementations can be retrieved from a JNDI namespace |
| public static void | |
| public static void | |
| private static void | |
| public static synchronized void | unregisterProvider(String
The unique-id of the synchronization provider providerID)Removes the designated currently registered synchronization provider from the Factory SPI register. |
| colon | back to summary |
|---|---|
| private static String colon | |
| debug | back to summary |
|---|---|
| private static boolean debug The internal debug switch. | |
| ic | back to summary |
|---|---|
| private static Context ic The initial JNDI context where | |
| implementations | back to summary |
|---|---|
| private static Hashtable<String, SyncProvider> implementations The registry of available | |
| lazyJNDICtxRefresh | back to summary |
|---|---|
| private static boolean lazyJNDICtxRefresh Internal switch indicating whether the JNDI namespace should be re-read. | |
| providerImplIndex | back to summary |
|---|---|
| private static int providerImplIndex Internal registry count for the number of providers contained in the registry. | |
| ROWSET_PROPERTIES | back to summary |
|---|---|
| private static String ROWSET_PROPERTIES The standard resource file name. | |
| ROWSET_SYNC_PROVIDER | back to summary |
|---|---|
| public static final String ROWSET_SYNC_PROVIDER The standard property-id for a synchronization provider implementation name. | |
| ROWSET_SYNC_PROVIDER_VERSION | back to summary |
|---|---|
| public static final String ROWSET_SYNC_PROVIDER_VERSION The standard property-id for a synchronization provider implementation version tag. | |
| ROWSET_SYNC_VENDOR | back to summary |
|---|---|
| public static final String ROWSET_SYNC_VENDOR The standard property-id for a synchronization provider implementation vendor name. | |
| rsLogger | back to summary |
|---|---|
| private static volatile Logger rsLogger The | |
| strFileSep | back to summary |
|---|---|
| private static String strFileSep | |
| SyncFactory | back to summary |
|---|---|
| private SyncFactory() Creates a new | |
| enumerateBindings | back to summary |
|---|---|
| private static void enumerateBindings(NamingEnumeration<?> bindings, Properties properties) throws NamingException Scans each binding on JNDI context and determines if any binding is an instance of SyncProvider, if so, add this to the registry and continue to scan the current context using a re-entrant call to this method until all bindings have been enumerated. | |
| getInstance | back to summary |
|---|---|
| public static SyncProvider getInstance(String providerID) throws SyncFactoryException Returns the
| |
| getLogger | back to summary |
|---|---|
| public static Logger getLogger() throws SyncFactoryException Returns the logging object for applications to retrieve synchronization events posted by SyncProvider implementations.
| |
| getPropertyNames | back to summary |
|---|---|
| private static String[] getPropertyNames(boolean append) Used by the parseProperties methods to disassemble each property tuple. | |
| getPropertyNames | back to summary |
|---|---|
| private static String[] getPropertyNames(boolean append, String propertyIndex) Disassembles each property and its associated value. Also handles overloaded property names that contain indexes. | |
| getRegisteredProviders | back to summary |
|---|---|
| public static Enumeration Returns an Enumeration of currently registered synchronization
providers. A At a minimum, the reference synchronization provider allowing RowSet content data to be stored using a JDBC driver should be possible.
| |
| getSyncFactory | back to summary |
|---|---|
| public static SyncFactory getSyncFactory() Returns the
| |
| initJNDIContext | back to summary |
|---|---|
| private static synchronized void initJNDIContext() throws SyncFactoryException Controls JNDI context initialization.
| |
| initMapIfNecessary | back to summary |
|---|---|
| private static synchronized void initMapIfNecessary() throws SyncFactoryException | |
| parseJNDIContext | back to summary |
|---|---|
| private static Properties parseJNDIContext() throws NamingException Parses the set JNDI Context and passes bindings to the enumerateBindings method when complete. | |
| parseProperties | back to summary |
|---|---|
| private static void parseProperties(Properties p) Internal handler for all standard property parsing. Parses standard ROWSET properties and stores lazy references into the internal registry. | |
| registerProvider | back to summary |
|---|---|
| public static synchronized void registerProvider(String providerID) throws SyncFactoryException Adds the given synchronization provider to the factory register. Guidelines
are provided in the 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.
| |
| setJNDIContext | back to summary |
|---|---|
| public static synchronized void setJNDIContext(Context ctx) throws SyncFactoryException Sets the initial JNDI context from which SyncProvider implementations can be retrieved from a JNDI namespace
| |
| setLogger | back to summary |
|---|---|
| public static void setLogger(Logger logger) Sets the logging object to be used by the
| |
| setLogger | back to summary |
|---|---|
| public static void setLogger(Logger logger, Level level) Sets the logging object that is used by
| |
| showImpl | back to summary |
|---|---|
| private static void showImpl(ProviderImpl impl) Internal debug method that outputs the registry contents. | |
| unregisterProvider | back to summary |
|---|---|
| public static synchronized void unregisterProvider(String providerID) throws SyncFactoryException Removes the designated currently registered synchronization provider from the Factory SPI register.
| |
getSyncFactory
| Modifier and Type | Field and Description |
|---|---|
| pack-priv static final SyncFactory |
| Access | Constructor and Description |
|---|---|
| private |
| factory | back to summary |
|---|---|
| pack-priv static final SyncFactory factory | |
| SyncFactoryHolder | back to summary |
|---|---|
| private SyncFactoryHolder() | |