モジュール java.sql.rowset
パッケージ javax.sql.rowset.spi

クラスSyncFactory

java.lang.Object
javax.sql.rowset.spi.SyncFactory

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オブジェクトなど)
JDBC RowSet実装には、この要件を満たすSyncProvider実装RIOptimisticProviderおよびRIXmlProviderが含まれる点に注意してください。

SyncFactoryクラスは、アプリケーションが現在SyncFactoryに登録されている同期プロバイダを確認するために役立つアクセス用メソッドを提供します。

その他のメソッドにRowSet持続プロバイダをファクトリ・メカニズムに登録したり、登録を解除したりする働きがあります。 このため、RowSetオブジェクトは、実行時にその他の同期プロバイダ実装も使用することができます。

アプリケーションは、フィルタ・リングの段階を適用することで、SyncProvider実装が提供する同期のレベルを確定できます。 RowSetオブジェクトがプロバイダを使用できるかどうかは、次の基準で決定されます。

  1. RowSetオブジェクトによって指定された特定のプロバイダの参照が、SyncFactoryに含まれない場合、同期プロバイダが見つからないことを示すSyncFactoryExceptionがスローされる。
  2. RowSet実装が登録済みの特定のプロバイダによってインスタンス化される場合、要求されたプロバイダが提供される。 そうでない場合は、SyncFactoryExceptionがスローされます。
  3. 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);
     
次に、アプリケーションにより、JNDIコンテキストが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
関連項目: