JavaTM Platform
Standard Ed. 6

javax.sql.rowset.spi
クラス SyncProvider

java.lang.Object
  上位を拡張 javax.sql.rowset.spi.SyncProvider

public abstract class SyncProvider
extends Object

未接続の RowSet オブジェクトの読み取り/書き込み機能を提供する同期機構です。SyncProvider 実装は、SyncProvider abstract クラスを拡張するクラスです。  

SyncProvider 実装は、一意の ID (この実装の完全修飾クラス名) で識別されます。この名前を SyncFactory SPI に登録して、すべての RowSet 実装で使用できるようにする必要があります。このリファレンス実装のファクトリ機構は、この名前を使って実装をインスタンス化します。 これにより、RowSet オブジェクトとそのリーダー (javax.sql.RowSetReader オブジェクト) およびライター (javax.sql.RowSetWriter オブジェクト) を提供できます。  

JDBC RowSet 実装仕様では、SyncProvider abstract クラスの 2 つのリファレンス実装 (RIOptimisticProviderRIXMLProvider) を提供しています。RIOptimisticProvider は RowSetReader オブジェクトと RowSetWriter オブジェクトにより、すべての RowSet 実装を設定できます。ただし、XmlReader オブジェクトと XmlWriter オブジェクトを設定できるのは、RIXMLProvider 実装だけです。WebRowSet オブジェクトは XmlReader オブジェクトを使用して、XML 形式でデータを読み取り、データを自身に格納します。また、XmlWriter オブジェクトを使用して、自身を XML 形式でストリームまたは java.io.Writer オブジェクトに自身を書き込みます。  

1.0 実装の命名規則

SyncProvider 実装の命名時には、次の項目を考慮する必要があります。

たとえば、Fred, Inc. という名前のベンダーが提供する SyncProvider 実装の場合、次のようになります。

     Vendor name:Fred, Inc.     
     Domain name of vendor:  com.fred
     Package name:  com.fred.providers
     SyncProvider implementation class name:  HighAvailabilityProvider

     Fully qualified class name of SyncProvider implementation:
                        com.fred.providers.HighAvailabilityProvider 
 

次の例では、完全修飾名を使って、この実装を SyncFactory の静的インスタンスに登録します。

     SyncFactory.registerProvider(
                          "com.fred.providers.HighAvailabilityProvider");
 

リファレンス実装によって提供されるデフォルトの SyncProvider オブジェクトは、次の名前を使用します。

     com.sun.rowset.providers.RIOptimisticProvider 
 

SyncProvider 実装クラス名を Sun Microsystems, Inc. に登録したいベンダーは、jdbc@sun.com まで電子メールにてご連絡ください。 Sun は、RowSet 準拠実装で使用できる SyncProvider 実装の一覧をデータベースで管理しています。このデータベースは、使用可能な JDBC ドライバのデータベースとよく似ています。  

ベンダーは、リファレンス実装同期プロバイダを参照して、新しい SyncProvider 実装の実装方法の詳細を確認してください。

2.0RowSet オブジェクトがプロバイダを取得する手順

未接続の Rowset オブジェクトは、次のいずれかの方法で、SyncProvider オブジェクトのアクセスを取得できます。

Java プラットフォームでは、デフォルトで、RowSet 同期プロバイダのリファレンス実装を常に使用できます。その他のプラグイン可能な同期プロバイダが正常に登録されていない場合、SyncFactory は自動的にデフォルトの SyncProvider リファレンス実装のインスタンスを生成します。このため、上記のコードの抜粋では、SyncFactory インスタンスに com.fred.providers.HighAvailabilitySyncProvider という名前の実装が登録されていない場合、crs には、リファレンス実装内のデフォルトのプロバイダ com.sun.rowset.providers.RIOptimisticProvider が割り当てられます。  

3.0 違反と同期の問題

未接続の RowSet オブジェクトとデータソース間の更新が元のクエリーまたは配下のデータソースの制約に違反した場合、未接続のすべての RowSet 実装と指定された SyncProvider 実装の動作は予測不能になります。このように、違反があったときの動作を定義しないことで、SyncProvider 実装は、最善の対処方法を独自に決定することができます。  

SyncProvider 実装は、クエリー違反のサブセットを処理するハンドラを実装することができます。しかし、SyncProvider 実装で元のクエリー違反またはより一般的なデータソース制約違反が処理されない場合、すべての SyncProvider オブジェクトは SyncProviderException をスローする必要があります。  

4.0 更新可能な SQL ビュー

未接続または接続済みのすべての RowSet オブジェクトは、SQL VIEW を基に作成された SQL クエリーから移植可能です。しかし、多くの場合、更新は配下のビューに対して実行されるので、追加として各種メタデータが必要になります。SyncProvider クラスは、実装が SQL VIEW の更新をサポートするかどうかを示す 2 つの定数を提供します。

SQL VIEW のデータを移植された場合、デフォルトで、RowSet オブジェクトは更新不能になります。  

5.0 SyncProvider 定数

SyncProvider クラスは、SyncProvider メソッドの戻り値またはパラメータとして使用される 3 つの定数を提供します。SyncProvider オブジェクトを実装して、RowSet オブジェクトとその配下のデータソースをさまざまなレベルで同期することができます。最初の定数グループは、同期の処理方法を示します。たとえば、GRADE_NONE は、SyncProvider オブジェクトが有効なデータかを確認せず、単純に RowSet データをデータソースへ書き込むことを示します。GRADE_MODIFIED_AT_COMMIT は、プロバイダにより、変更されたデータのみを対象に妥当性検査が行われることを示します。このほか、すべてのデータの妥当性検査を行うグレードや、データが変更またはロードされたときロックを適用するグレードがあります。
  1. SyncProvider オブジェクトの同期のグレードを示す定数
  2. データソースに設定するロックを示す定数
  3. SyncProvider オブジェクトが SQL VIEW の更新を実行できるかどうかを示す定数
    これらの定数については、セクション 4.0 を参照

関連項目:
SyncFactory, SyncFactoryException

フィールドの概要
static int DATASOURCE_DB_LOCK
          この SyncProvider オブジェクトを使用している RowSet オブジェクトのデータソースになっているデータ全体にロックが設定されることを示します。
static int DATASOURCE_NO_LOCK
          元々のデータソース上にロックが保持されないことを示します。
static int DATASOURCE_ROW_LOCK
          この SyncProvider オブジェクトを使用している RowSet オブジェクトの移植に使用された元の SQL 文の影響を受ける行にロックが設定されることを示します。
static int DATASOURCE_TABLE_LOCK
          この SyncProvider オブジェクトを使用している RowSet オブジェクトの移植に使用された元の SQL 文の影響を受けるすべてのテーブルにロックが設定されることを示します。
static int GRADE_CHECK_ALL_AT_COMMIT
          元々のデータソースの高レベルのオプティミスティック並行同期のグレードを示します。
static int GRADE_CHECK_MODIFIED_AT_COMMIT
          元々のデータソースの低レベルのオプティミスティック並行同期のグレードを示します。
static int GRADE_LOCK_WHEN_LOADED
          元々のデータソースのペシミスティック並行同期のグレードを示します。
static int GRADE_LOCK_WHEN_MODIFIED
          元々のデータソースのペシミスティック並行同期のグレードを示します。
static int GRADE_NONE
          元のデータソースとの同期が一切行われないことを示します。
static int NONUPDATABLE_VIEW_SYNC
          SyncProvider 実装が RowSet オブジェクトとその移植に使用された SQL VIEW 間の同期をサポートしないことを示します。
static int UPDATABLE_VIEW_SYNC
          SyncProvider 実装が RowSet オブジェクトとその移植に使用された SQL VIEW 間の同期をサポートすることを示します。
 
コンストラクタの概要
SyncProvider()
          デフォルトの SyncProvider オブジェクトを作成します。
 
メソッドの概要
abstract  int getDataSourceLock()
          この SyncProvider 実装内で現在使用されているデータソースロックのレベルを返します。
abstract  int getProviderGrade()
          この SyncProvider オブジェクトが RowSet オブジェクトに提供できる同期のグレードを示す定数を返します。
abstract  String getProviderID()
          この SyncProvider オブジェクトを表す一意の識別子を返します。
abstract  RowSetReader getRowSetReader()
          javax.sql.RowSetReader オブジェクトを返します。
abstract  RowSetWriter getRowSetWriter()
          javax.sql.RowSetWriter オブジェクトを返します。
abstract  String getVendor()
          この SyncProvider インスタンスのベンダー名を返します。
abstract  String getVersion()
          この SyncProvider インスタンスのリリースバージョンを返します。
abstract  void setDataSourceLock(int datasource_lock)
          配下のデータソースに、datasource_lock で指定されたレベルのロックを設定します。
abstract  int supportsUpdatableView()
          この SyncProvider 実装が RowSet オブジェクトと、この RowSet オブジェクトがデータの取得先として使用するデータソース内の SQL VIEW の同期の実行が可能かどうかを返します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

GRADE_NONE

public static int GRADE_NONE
元のデータソースとの同期が一切行われないことを示します。このグレードを返す SyncProvider 実装は、RowSet オブジェクト内の更新内容を、データの妥当性検査を行わずに配下のデータソースへ書き込みます。


GRADE_CHECK_MODIFIED_AT_COMMIT

public static int GRADE_CHECK_MODIFIED_AT_COMMIT
元々のデータソースの低レベルのオプティミスティック並行同期のグレードを示します。 このグレードを返す SyncProvider 実装は、変更された行だけをチェックします。


GRADE_CHECK_ALL_AT_COMMIT

public static int GRADE_CHECK_ALL_AT_COMMIT
元々のデータソースの高レベルのオプティミスティック並行同期のグレードを示します。 このグレードを返す SyncProvider 実装は、変更されていないものも含めてすべての行をチェックします。


GRADE_LOCK_WHEN_MODIFIED

public static int GRADE_LOCK_WHEN_MODIFIED
元々のデータソースのペシミスティック並行同期のグレードを示します。 このグレードを返す SyncProvider 実装は、元々のデータソース内の行をロックします。


GRADE_LOCK_WHEN_LOADED

public static int GRADE_LOCK_WHEN_LOADED
元々のデータソースのペシミスティック並行同期のグレードを示します。 もっともペシミスティック (悲観的) なグレードです。このグレードを返す SyncProvider 実装は、RowSet オブジェクトの移植に使用された元の文の影響を受けるビューおよびテーブル、またはそのいずれか全体をロックします。


DATASOURCE_NO_LOCK

public static int DATASOURCE_NO_LOCK
元々のデータソース上にロックが保持されないことを示します。RowSet オブジェクトの管理下にあるものを除くすべての SyncProvider 実装のデフォルトのロック設定です。


DATASOURCE_ROW_LOCK

public static int DATASOURCE_ROW_LOCK
この SyncProvider オブジェクトを使用している RowSet オブジェクトの移植に使用された元の SQL 文の影響を受ける行にロックが設定されることを示します。


DATASOURCE_TABLE_LOCK

public static int DATASOURCE_TABLE_LOCK
この SyncProvider オブジェクトを使用している RowSet オブジェクトの移植に使用された元の SQL 文の影響を受けるすべてのテーブルにロックが設定されることを示します。


DATASOURCE_DB_LOCK

public static int DATASOURCE_DB_LOCK
この SyncProvider オブジェクトを使用している RowSet オブジェクトのデータソースになっているデータ全体にロックが設定されることを示します。


UPDATABLE_VIEW_SYNC

public static int UPDATABLE_VIEW_SYNC
SyncProvider 実装が RowSet オブジェクトとその移植に使用された SQL VIEW 間の同期をサポートすることを示します。


NONUPDATABLE_VIEW_SYNC

public static int NONUPDATABLE_VIEW_SYNC
SyncProvider 実装が RowSet オブジェクトとその移植に使用された SQL VIEW 間の同期をサポートしないことを示します。

コンストラクタの詳細

SyncProvider

public SyncProvider()
デフォルトの SyncProvider オブジェクトを作成します。

メソッドの詳細

getProviderID

public abstract String getProviderID()
この SyncProvider オブジェクトを表す一意の識別子を返します。

戻り値:
この SyncProvider オブジェクトの 完全修飾クラス名を持つ String オブジェクト

getRowSetReader

public abstract RowSetReader getRowSetReader()
javax.sql.RowSetReader オブジェクトを返します。 このオブジェクトは、RowSet オブジェクトにデータを移植するために使用できます。

戻り値:
javax.sql.RowSetReader オブジェクト

getRowSetWriter

public abstract RowSetWriter getRowSetWriter()
javax.sql.RowSetWriter オブジェクトを返します。 このオブジェクトは、RowSet オブジェクトのデータを配下のデータソースへ再度書き込むために使用できます。

戻り値:
javax.sql.RowSetWriter オブジェクト

getProviderGrade

public abstract int getProviderGrade()
この SyncProvider オブジェクトが RowSet オブジェクトに提供できる同期のグレードを示す定数を返します。

戻り値:
次の int 定数のいずれか。 SyncProvider.GRADE_NONE、 SyncProvider.GRADE_CHECK_MODIFIED_AT_COMMIT、 SyncProvider.GRADE_CHECK_ALL_AT_COMMIT、 SyncProvider.GRADE_LOCK_WHEN_MODIFIED、 SyncProvider.GRADE_LOCK_WHEN_LOADED

setDataSourceLock

public abstract void setDataSourceLock(int datasource_lock)
                                throws SyncProviderException
配下のデータソースに、datasource_lock で指定されたレベルのロックを設定します。これにより、SyncProvider は、同期処理を正常に完了できるようにオプティミスティックなレベル (楽観度) を調節して、その動作を調整します。

パラメータ:
datasource_lock - 必要なデータソースロックの重要度レベルを示す 次のいずれかの定数。
           SyncProvider.DATASOURCE_NO_LOCK、
           SyncProvider.DATASOURCE_ROW_LOCK、
           SyncProvider.DATASOURCE_TABLE_LOCK、
           SyncProvider.DATASOURCE_DB_LOCK
 
例外:
SyncProviderException - 設定されたデータソースロックのレベルがサポートされていない場合
関連項目:
getDataSourceLock()

getDataSourceLock

public abstract int getDataSourceLock()
                               throws SyncProviderException
この SyncProvider 実装内で現在使用されているデータソースロックのレベルを返します。

戻り値:
この SyncProvider オブジェクトで現在使用されている データソースロックのレベルを示す定数。 次のいずれかとなる。
           SyncProvider.DATASOURCE_NO_LOCK、
           SyncProvider.DATASOURCE_ROW_LOCK、
           SyncProvider.DATASOURCE_TABLE_LOCK、
           SyncProvider.DATASOURCE_DB_LOCK     
 
例外:
SyncProviderExceptiom - データソースロックのレベルの決定時にエラーが発生した場合
SyncProviderException
関連項目:
setDataSourceLock(int)

supportsUpdatableView

public abstract int supportsUpdatableView()
この SyncProvider 実装が RowSet オブジェクトと、この RowSet オブジェクトがデータの取得先として使用するデータソース内の SQL VIEW の同期の実行が可能かどうかを返します。

戻り値:
この SyncProvider オブジェクトが SQL VIEW の更新を サポートするかどうかを示す int。 次のいずれかとなる。 SyncProvider.UPDATABLE_VIEW_SYNC, SyncProvider.NONUPDATABLE_VIEW_SYNC

getVersion

public abstract String getVersion()
この SyncProvider インスタンスのリリースバージョンを返します。

戻り値:
SyncProvider 実装の リリースバージョンを示す String

getVendor

public abstract String getVendor()
この SyncProvider インスタンスのベンダー名を返します。

戻り値:
SyncProvider 実装の ベンダー名を示す String

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。