public class SyncFactory extends Object
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
- 関連項目:
SyncProvider、SyncFactoryException
-
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static StringROWSET_SYNC_PROVIDER同期プロバイダの実装名を表す標準プロパティIDです。static StringROWSET_SYNC_PROVIDER_VERSION同期プロバイダの実装のバージョン・タグを表す標準プロパティIDです。static StringROWSET_SYNC_VENDOR同期プロバイダのベンダー名を表す標準プロパティIDです。 -
メソッドのサマリー
修飾子と型 メソッド 説明 static SyncProvidergetInstance(String providerID)providerIDで識別されるSyncProviderインスタンスを返します。static LoggergetLogger()アプリケーションがSyncProvider実装によって表示された同期イベントを取得するために必要なログ・オブジェクトを返します。static Enumeration<SyncProvider>getRegisteredProviders()現在登録されている同期プロバイダを列挙します。static SyncFactorygetSyncFactory()SyncFactoryシングルトンを返します。static voidregisterProvider(String providerID)指定された同期プロバイダをファクトリ・レジスタに追加します。static voidsetJNDIContext(Context ctx)JNDI名前空間からSyncProvider実装を取得する初期JNDIコンテキストを設定します。static voidsetLogger(Logger logger)SyncFactoryが提供するSyncProvider実装によって使用されるログ・オブジェクトを設定します。static voidsetLogger(Logger logger, Level level)SyncFactorySPIが提供するSyncProvider実装によって使用されるログ・オブジェクトを設定します。static voidunregisterProvider(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名前空間にバインドします。
さらに、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のプロバイダ名を返す処理が試行された場合- 関連項目:
setJNDIContext(javax.naming.Context)
-
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 SyncFactoryExceptionproviderIDで識別される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の場合- 関連項目:
SecurityManager.checkPermission(java.security.Permission)
-
setLogger
SyncFactorySPIが提供するSyncProvider実装によって使用されるログ・オブジェクトを設定します。 すべてのSyncProvider実装は、このオブジェクトにイベントログを記録できます。アプリケーションは、getLoggerメソッドを使用してこのオブジェクトのハンドルを取得できます。このメソッドは、メソッドを正常に実行できるように、アクセス権
setSyncFactoryを付与するSQLPermissionオブジェクトがあるかどうかをチェックします。SecurityManagerが存在し、そのcheckPermissionメソッドがsetLoggerの呼出しを許可しない場合、このメソッドはjava.lang.SecurityExceptionをスローします。- パラメータ:
logger- Loggerオブジェクト・インスタンスlevel- 必要なログの段階を示すLevelオブジェクト・インスタンス- 例外:
SecurityException- セキュリティ・マネージャが存在し、そのcheckPermissionメソッドがsetLoggerの呼出しを拒否した場合NullPointerException- ロガーがnullの場合- 関連項目:
SecurityManager.checkPermission(java.security.Permission)、LoggingPermission
-
getLogger
public static Logger getLogger() throws SyncFactoryExceptionアプリケーションがSyncProvider実装によって表示された同期イベントを取得するために必要なログ・オブジェクトを返します。- 戻り値:
SyncProvider実装用として指定されたLogger- 例外:
SyncFactoryException- ログ・オブジェクトが設定されていない場合。
-
setJNDIContext
public static void setJNDIContext(Context ctx) throws SyncFactoryExceptionJNDI名前空間からSyncProvider実装を取得する初期JNDIコンテキストを設定します。このメソッドは、メソッドを正常に実行できるように、アクセス権
setSyncFactoryを付与するSQLPermissionオブジェクトがあるかどうかをチェックします。SecurityManagerが存在し、そのcheckPermissionメソッドがsetJNDIContextの呼出しを許可しない場合、このメソッドはjava.lang.SecurityExceptionをスローします。- パラメータ:
ctx- 有効なJNDIコンテキスト- 例外:
SyncFactoryException- 指定されたJNDIコンテキストがnullの場合SecurityException- セキュリティ・マネージャが存在し、そのcheckPermissionメソッドがsetJNDIContextの呼出しを拒否した場合- 関連項目:
SecurityManager.checkPermission(java.security.Permission)
-