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
の呼び出しを拒否した場合LoggingPermission
- セキュリティーマネージャーが存在し、その checkPermission
メソッドが setLevel
の呼び出しを拒否した場合NullPointerException
- ロガーが null の場合SecurityManager.checkPermission(java.security.Permission)
、LoggingPermission
public static Logger getLogger() throws SyncFactoryException
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, 2013, Oracle and/or its affiliates. All rights reserved.