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
実装を取得することになります。
SyncFactory
クラスは、使用可能な同期プロバイダ実装(SyncProvider
オブジェクト)の内部レジストリを提供します。このレジストリを照会することで、使用可能な同期プロバイダを確認できます。次に示すのは、現在登録されているプロバイダを列挙するコードです。
java.util.Enumeration e = SyncFactory.getRegisteredProviders();すべての標準
RowSet
実装は、少なくとも次の2つのプロバイダを提供する必要があります。
CachedRowSet
実装またはこの実装から派生した実装用の最適のプロバイダ
WebRowSet
オブジェクトなど)
SyncProvider
実装RIOptimisticProvider
およびRIXmlProvider
が含まれる点に注意してください。
SyncFactory
クラスは、アプリケーションが現在SyncFactory
に登録されている同期プロバイダを確認するために役立つアクセス用メソッドを提供します。
その他のメソッドにRowSet
持続プロバイダをファクトリ・メカニズムに登録したり、登録を解除したりする働きがあります。このため、RowSet
オブジェクトは、実行時にその他の同期プロバイダ実装も使用することができます。
アプリケーションは、フィルタ・リングの段階を適用することで、SyncProvider
実装が提供する同期のレベルを確定できます。RowSet
オブジェクトがプロバイダを使用できるかどうかは、次の基準で決定されます。
RowSet
オブジェクトによって指定された特定のプロバイダの参照が、SyncFactory
に含まれない場合、同期プロバイダが見つからないことを示すSyncFactoryException
がスローされる。
RowSet
実装が登録済みの特定のプロバイダによってインスタンス化される場合、要求されたプロバイダが提供される。そうでない場合は、SyncFactoryException
がスローされます。
RowSet
オブジェクトがSyncProvider
実装を指定せず、そのほかに利用可能なSyncProvider
実装が存在しない場合、リファレンス実装プロバイダが提供される。
SyncProvider
実装の登録
ベンダーも開発者も、次のいずれかのメカニズムを使ってSyncProvider
実装を登録できます。
-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.0
SyncFactory
は、このファイルをチェックし、そこに含まれるSyncProvider
実装を登録します。開発者やベンダーは、このファイルにその他の実装を追加できます。次に例を示します。
rowset.provider.classname.2=com.fred.providers.HighAvailabilityProvider rowset.provider.vendor.2=Fred, Inc. rowset.provider.version.2=1.0
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
パッケージの仕様を参照してください。修飾子と型 | フィールドと説明 |
---|---|
static String |
ROWSET_SYNC_PROVIDER
同期プロバイダの実装名を表す標準プロパティIDです。
|
static String |
ROWSET_SYNC_PROVIDER_VERSION
同期プロバイダの実装のバージョン・タグを表す標準プロパティIDです。
|
static String |
ROWSET_SYNC_VENDOR
同期プロバイダのベンダー名を表す標準プロパティIDです。
|
修飾子と型 | メソッドと説明 |
---|---|
static SyncProvider |
getInstance(String providerID)
providerIDで識別される
SyncProvider インスタンスを返します。 |
static Logger |
getLogger()
アプリケーションがSyncProvider実装によって表示された同期イベントを取得するために必要なログ・オブジェクトを返します。
|
static Enumeration<SyncProvider> |
getRegisteredProviders()
現在登録されている同期プロバイダを列挙します。
|
static SyncFactory |
getSyncFactory()
SyncFactory シングルトンを返します。 |
static void |
registerProvider(String providerID)
指定された同期プロバイダをファクトリ・レジスタへ追加します。
|
static void |
setJNDIContext(Context ctx)
JNDI名前空間からSyncProvider実装を取得する初期JNDIコンテキストを設定します。
|
static void |
setLogger(Logger logger)
SyncFactory が提供するSyncProvider 実装によって使用されるログ・オブジェクトを設定します。 |
static void |
setLogger(Logger logger, Level level)
SyncFactory SPIが提供するSyncProvider 実装によって使用されるログ・オブジェクトを設定します。 |
static void |
unregisterProvider(String providerID)
現在登録されている指定の同期プロバイダをファクトリSPIレジスタから削除します。
|
public static final String ROWSET_SYNC_PROVIDER
public static final String ROWSET_SYNC_VENDOR
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);
さらに、JNDIコンテキストは、setJNDIContext
メソッドによりSyncFactory
に初期設定されます。SyncFactory
は、このコンテキストを利用して、JNDIコンテキストとその子ノードにバインドされた使用可能なSyncProvider
オブジェクトを検索します。providerID
- 登録される同期プロバイダの一意のIDを持つString
オブジェクトSyncFactoryException
- 空またはnullのプロバイダ名を返す処理が試行された場合setJNDIContext(javax.naming.Context)
public static SyncFactory getSyncFactory()
SyncFactory
シングルトンを返します。SyncFactory
インスタンスpublic static void unregisterProvider(String providerID) throws SyncFactoryException
providerID
- 同期プロバイダの一意のIDSyncFactoryException
- 未登録のSyncProvider実装の登録を解除する処理が試行された場合。public static SyncProvider getInstance(String providerID) throws SyncFactoryException
SyncProvider
インスタンスを返します。providerID
- 一意のプロバイダ識別子SyncProvider
実装SyncFactoryException
- SyncProviderが見つからない場合、providerIDがnull
の場合、またはこのプロバイダの呼出し時に何らかのエラーが発生した場合。public static Enumeration<SyncProvider> getRegisteredProviders() throws SyncFactoryException
RowSet
実装は、列挙されたプロバイダのいずれかをSyncProvider
オブジェクトとして使用できます。
最小限、JDBCドライバを使ってRowSetコンテンツ・データを格納できるようにする参照同期プロバイダを使用できます。
SyncFactoryException
- 登録されたプロバイダを取得する際にエラーが発生する場合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)
public static void setLogger(Logger logger, Level level)
SyncFactory
SPIが提供する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
public static Logger getLogger() throws SyncFactoryException
SyncProvider
実装用として指定されたLogger
SyncFactoryException
- ログ・オブジェクトが設定されていない場合。public static void setJNDIContext(Context ctx) throws SyncFactoryException
このメソッドは、メソッドを正常に実行できるように、アクセス権setSyncFactory
を付与するSQLPermission
オブジェクトがあるかどうかをチェックします。SecurityManager
が存在し、そのcheckPermission
メソッドがsetJNDIContext
の呼出しを許可しない場合、このメソッドはjava.lang.SecurityException
をスローします。
ctx
- 有効なJNDIコンテキストSyncFactoryException
- 指定されたJNDIコンテキストがnullの場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckPermission
メソッドがsetJNDIContext
の呼出しを拒否した場合SecurityManager.checkPermission(java.security.Permission)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.