クラス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
関連項目:
  • フィールドのサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final String
    同期プロバイダの実装名を表す標準プロパティIDです。
    static final String
    同期プロバイダの実装のバージョン・タグを表す標準プロパティIDです。
    static final String
    同期プロバイダのベンダー名を表す標準プロパティIDです。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    getInstance(String providerID)
    providerIDで識別されるSyncProviderインスタンスを返します。
    static Logger
    アプリケーションがSyncProvider実装によって表示された同期イベントを取得するために必要なログ・オブジェクトを返します。
    現在登録されている同期プロバイダを列挙します。
    SyncFactoryシングルトンを返します。
    static void
    指定された同期プロバイダをファクトリ・レジスタに追加します。
    static void
    JNDI名前空間からSyncProvider実装を取得する初期JNDIコンテキストを設定します。
    static void
    setLogger(Logger logger)
    SyncFactoryが提供するSyncProvider実装によって使用されるログ・オブジェクトを設定します。
    static void
    setLogger(Logger logger, Level level)
    SyncFactory SPIが提供するSyncProvider実装によって使用されるログ・オブジェクトを設定します。
    static void
    現在登録されている指定の同期プロバイダをファクトリSPIレジスタから削除します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • フィールド詳細

    • 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);
       
      さらに、JNDIコンテキストは、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メソッドを使用してこのオブジェクトのハンドルを取得できます。
      パラメータ:
      logger - Loggerオブジェクト・インスタンス
      スロー:
      NullPointerException - ロガーがnullの場合
    • setLogger

      public static void setLogger(Logger logger, Level level)
      SyncFactory SPIが提供するSyncProvider実装によって使用されるログ・オブジェクトを設定します。 すべてのSyncProvider実装は、このオブジェクトにイベントログを記録できます。アプリケーションは、getLoggerメソッドを使用してこのオブジェクトのハンドルを取得できます。
      パラメータ:
      logger - Loggerオブジェクト・インスタンス
      level - 必要なログの段階を示すLevelオブジェクト・インスタンス
      スロー:
      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コンテキストを設定します。
      パラメータ:
      ctx - 有効なJNDIコンテキスト
      スロー:
      SyncFactoryException - 指定されたJNDIコンテキストがnullの場合