RowSet
オブジェクトによって使用されるSyncProvider
インスタンスを生成するサービス・プロバイダ・インタフェース(Service Provider Interface、SPI)メカニズムです。 SyncProvider
インスタンスは、RowSet
オブジェクトが自身にデータを移植するために必要なjavax.sql.RowSetReader
オブジェクトと、変更されたデータを配下のデータ・ソースに渡すために必要なjavax.sql.RowSetWriter
オブジェクトを提供します。
SyncFactory
クラスのメソッドはすべてstaticなので、Java VMごとに同時に複数のSyncFactory
オブジェクトが存在することはできません。 このため、RowSet
実装は、常に単一のソースからSyncProvider
実装を取得することになります。
1.0 概要
SyncFactory
クラスは、使用可能な同期プロバイダ実装(SyncProvider
オブジェクト)の内部レジストリを提供します。 このレジストリを照会することで、使用可能な同期プロバイダを確認できます。 次に示すのは、現在登録されているプロバイダを列挙するコードです。
java.util.Enumeration e = SyncFactory.getRegisteredProviders();すべての標準
RowSet
実装は、少なくとも次の2つのプロバイダを提供する必要があります。
CachedRowSet
実装またはこの実装から派生した実装用の最適のプロバイダ- XMLの読取りと書込みに使用されるXMLプロバイダ(
WebRowSet
オブジェクトなど)
SyncProvider
実装RIOptimisticProvider
およびRIXmlProvider
が含まれる点に注意してください。
SyncFactory
クラスは、アプリケーションが現在SyncFactory
に登録されている同期プロバイダを確認するために役立つアクセス用メソッドを提供します。
その他のメソッドにRowSet
持続プロバイダをファクトリ・メカニズムに登録したり、登録を解除したりする働きがあります。 このため、RowSet
オブジェクトは、実行時にその他の同期プロバイダ実装も使用することができます。
アプリケーションは、フィルタ・リングの段階を適用することで、SyncProvider
実装が提供する同期のレベルを確定できます。 RowSet
オブジェクトがプロバイダを使用できるかどうかは、次の基準で決定されます。
RowSet
オブジェクトによって指定された特定のプロバイダの参照が、SyncFactory
に含まれない場合、同期プロバイダが見つからないことを示すSyncFactoryException
がスローされる。RowSet
実装が登録済みの特定のプロバイダによってインスタンス化される場合、要求されたプロバイダが提供される。 そうでない場合は、SyncFactoryException
がスローされます。RowSet
オブジェクトがSyncProvider
実装を指定せず、そのほかに利用可能なSyncProvider
実装が存在しない場合、リファレンス実装プロバイダが提供される。
2.0 SyncProvider
実装の登録
ベンダーも開発者も、次のいずれかのメカニズムを使ってSyncProvider
実装を登録できます。
- コマンド行の使用
コマンド行にプロバイダ名を指定して、システム・プロパティにプロバイダを追加することができます。 たとえば:-Drowset.provider.classname=com.fred.providers.HighAvailabilityProvider
- 標準プロパティ・ファイルの使用
リファレンス実装はJ2SE 5.0に付属して出荷されることになっています。これには、手動で編集可能な追加のリソース・ファイルも含まれます。 次に、リファレンス実装に含まれるプロパティ・ファイルの例を示します。#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.0
SyncFactory
は、このファイルをチェックし、そこに含まれるSyncProvider
実装を登録します。 開発者やベンダーは、このファイルにその他の実装を追加できます。 たとえば、可能な追加があります:rowset.provider.classname.2=com.fred.providers.HighAvailabilityProvider rowset.provider.vendor.2=Fred, Inc. rowset.provider.version.2=1.0
- JNDIコンテキストの使用
使用可能なプロバイダをJNDIコンテキストに登録すると、SyncFactory
は、このJNDIコンテキストからSyncProvider
実装をロードしようとします。 たとえば、次に、JNDIコンテキストにプロバイダ実装を1つ登録するコードの抜粋を示します。 通常、この処理はデプロイヤが行います。 この例では、J2EEリソースによって使用されるCosNamingネームスペースに、MyProvider
が登録されます。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
インスタンスに登録されます。 これにより、SyncFactory
は、JNDIコンテキスト内をブラウズして、SyncProvider
実装を検索できるようになります。
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);
RowSet
オブジェクトがMyProvider
オブジェクトの取得を試みる場合、SyncFactory
はこれを検出しようとします。 最初にシステム・プロパティ内を検索し、次にリソース・ファイル内を検索し、最終的には設定されているJNDIコンテキストをチェックします。 SyncFactory
インスタンスは、要求されたプロバイダがSyncProvider
abstractクラスの有効な拡張であることを確認して、RowSet
オブジェクトに渡します。 次のコードの抜粋では、新しいCachedRowSet
オブジェクトを作成し、MyProvider
のバインディングを含むenvで初期化します。
Hashtable env = new Hashtable(); env.put(SyncFactory.ROWSET_SYNC_PROVIDER, "com.fred.providers.MyProvider"); CachedRowSet crs = new com.sun.rowset.CachedRowSetImpl(env);これらのメカニズムの詳細については、
javax.sql.rowset.spi
パッケージの仕様を参照してください。- 導入されたバージョン:
- 1.5
- 関連項目:
-
フィールドのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明static SyncProvider
getInstance
(String providerID) providerIDで識別されるSyncProvider
インスタンスを返します。static Logger
アプリケーションがSyncProvider実装によって表示された同期イベントを取得するために必要なログ・オブジェクトを返します。static Enumeration<SyncProvider>
現在登録されている同期プロバイダを列挙します。static SyncFactory
SyncFactory
シングルトンを返します。static void
registerProvider
(String providerID) 指定された同期プロバイダをファクトリ・レジスタに追加します。static void
setJNDIContext
(Context ctx) JNDI名前空間からSyncProvider実装を取得する初期JNDIコンテキストを設定します。static void
SyncFactory
が提供するSyncProvider
実装によって使用されるログ・オブジェクトを設定します。static void
SyncFactory
SPIが提供するSyncProvider
実装によって使用されるログ・オブジェクトを設定します。static void
unregisterProvider
(String providerID) 現在登録されている指定の同期プロバイダをファクトリSPIレジスタから削除します。
-
フィールド詳細
-
ROWSET_SYNC_PROVIDER
public static final String ROWSET_SYNC_PROVIDER同期プロバイダの実装名を表す標準プロパティIDです。- 関連項目:
-
ROWSET_SYNC_VENDOR
public static final String ROWSET_SYNC_VENDOR同期プロバイダのベンダー名を表す標準プロパティIDです。- 関連項目:
-
ROWSET_SYNC_PROVIDER_VERSION
public static final String ROWSET_SYNC_PROVIDER_VERSION同期プロバイダの実装のバージョン・タグを表す標準プロパティIDです。- 関連項目:
-
-
メソッドの詳細
-
registerProvider
public static void registerProvider(String providerID) throws SyncFactoryException 指定された同期プロバイダをファクトリ・レジスタに追加します。SyncProvider
実装の必要とする命名規則のガイドラインについては、SyncProvider
仕様を参照してください。JNDIコンテキストにバインドされた同期プロバイダを登録するには、SyncProviderインスタンスをJNDI名前空間にバインドします。
SyncProvider p = new MySyncProvider(); InitialContext ic = new InitialContext(); ic.bind ("jdbc/rowset/MySyncProvider", p);
setJNDIContext
メソッドによりSyncFactory
に初期設定されます。SyncFactory
は、このコンテキストを利用して、JNDIコンテキストとその子ノードにバインドされた使用可能なSyncProvider
オブジェクトを検索します。- パラメータ:
providerID
- 登録される同期プロバイダの一意のIDを持つString
オブジェクト- 例外:
SyncFactoryException
- 空またはnullのプロバイダ名を返す処理が試行された場合- 関連項目:
-
getSyncFactory
public static SyncFactory getSyncFactory()SyncFactory
シングルトンを返します。- 戻り値:
SyncFactory
インスタンス
-
unregisterProvider
public static void unregisterProvider(String providerID) throws SyncFactoryException 現在登録されている指定の同期プロバイダをファクトリSPIレジスタから削除します。- パラメータ:
providerID
- 同期プロバイダの一意のID- 例外:
SyncFactoryException
- 未登録のSyncProvider実装の登録を解除する処理が試行された場合。
-
getInstance
public static SyncProvider getInstance(String providerID) throws SyncFactoryException providerIDで識別されるSyncProvider
インスタンスを返します。- パラメータ:
providerID
- 一意のプロバイダ識別子- 戻り値:
SyncProvider
実装- 例外:
SyncFactoryException
- SyncProviderが見つからない場合、providerIDがnull
の場合、またはこのプロバイダの呼出し時に何らかのエラーが発生した場合。
-
getRegisteredProviders
public static Enumeration<SyncProvider> getRegisteredProviders() throws SyncFactoryException現在登録されている同期プロバイダを列挙します。RowSet
実装は、列挙されたプロバイダのいずれかをSyncProvider
オブジェクトとして使用できます。最小限、JDBCドライバを使ってRowSetコンテンツ・データを格納できるようにする参照同期プロバイダを使用できます。
- 戻り値:
- Enumerationこのファクトリに登録されている使用可能な同期プロバイダの列挙
- 例外:
SyncFactoryException
- 登録されたプロバイダを取得する際にエラーが発生する場合
-
setLogger
public static void setLogger(Logger logger) SyncFactory
が提供するSyncProvider
実装によって使用されるログ・オブジェクトを設定します。 すべてのSyncProvider
実装は、このオブジェクトにイベントログを記録できます。アプリケーションは、getLogger
メソッドを使用してこのオブジェクトのハンドルを取得できます。このメソッドは、メソッドを正常に実行できるように、アクセス権
setSyncFactory
を付与するSQLPermission
オブジェクトがあるかどうかをチェックします。SecurityManager
が存在し、そのcheckPermission
メソッドがsetLogger
の呼出しを許可しない場合、このメソッドはjava.lang.SecurityException
をスローします。- パラメータ:
logger
- Loggerオブジェクト・インスタンス- 例外:
SecurityException
- セキュリティ・マネージャが存在し、そのcheckPermission
メソッドがsetLogger
の呼出しを拒否した場合NullPointerException
- ロガーがnullの場合- 関連項目:
-
setLogger
SyncFactory
SPIが提供するSyncProvider
実装によって使用されるログ・オブジェクトを設定します。 すべてのSyncProvider
実装は、このオブジェクトにイベントログを記録できます。アプリケーションは、getLogger
メソッドを使用してこのオブジェクトのハンドルを取得できます。このメソッドは、メソッドを正常に実行できるように、アクセス権
setSyncFactory
を付与するSQLPermission
オブジェクトがあるかどうかをチェックします。SecurityManager
が存在し、そのcheckPermission
メソッドがsetLogger
の呼出しを許可しない場合、このメソッドはjava.lang.SecurityException
をスローします。- パラメータ:
logger
- Loggerオブジェクト・インスタンスlevel
- 必要なログの段階を示すLevelオブジェクト・インスタンス- 例外:
SecurityException
- セキュリティ・マネージャが存在し、そのcheckPermission
メソッドがsetLogger
の呼出しを拒否した場合NullPointerException
- ロガーがnullの場合- 関連項目:
-
getLogger
public static Logger getLogger() throws SyncFactoryExceptionアプリケーションがSyncProvider実装によって表示された同期イベントを取得するために必要なログ・オブジェクトを返します。- 戻り値:
SyncProvider
実装用として指定されたLogger
- 例外:
SyncFactoryException
- ログ・オブジェクトが設定されていない場合。
-
setJNDIContext
public static void setJNDIContext(Context ctx) throws SyncFactoryException JNDI名前空間からSyncProvider実装を取得する初期JNDIコンテキストを設定します。このメソッドは、メソッドを正常に実行できるように、アクセス権
setSyncFactory
を付与するSQLPermission
オブジェクトがあるかどうかをチェックします。SecurityManager
が存在し、そのcheckPermission
メソッドがsetJNDIContext
の呼出しを許可しない場合、このメソッドはjava.lang.SecurityException
をスローします。- パラメータ:
ctx
- 有効なJNDIコンテキスト- 例外:
SyncFactoryException
- 指定されたJNDIコンテキストがnullの場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckPermission
メソッドがsetJNDIContext
の呼出しを拒否した場合- 関連項目:
-