4.2 適用性

このデザイン・パターンは、CORBAプロセス・オブジェクトからクライアント・アプリケーションに大量のデータを渡さなければならない状況で使用するのが適しています。クライアント・アプリケーションのローカル言語オブジェクトはデータのコンテナになり、そのコンストラクタはローカル・オブジェクトの状態を設定するために使用します。

このデザイン・パターンは、ローカル言語オブジェクト(この章ではDataObjectと呼ぶ)を作成するクライアント・アプリケーションで実装します。サーバー・アプリケーションでは、永続ストレージのエンティティとやり取りするCORBAプロセス・オブジェクトを実装します。このCORBAオブジェクトは、この章ではDataManagerオブジェクトと呼びます。

DataManager CORBAオブジェクトのOMG IDLでは、クライアント・アプリケーションとサーバー・アプリケーションの間でデータを転送する際に使用するデータ構造を定義します。このデザイン・パターンでは、「楽観的ロック」が採用されています。つまり、クライアント・アプリケーションでローカル・コピーが使用されている間はほかのサーバー・プロセスによってデータが変更されることはないと想定し、サーバー・アプリケーションで管理されるデータが更新用にロックされることはありません。

クライアント・アプリケーションでローカルのDataObjectがインスタンス化されると、そのオブジェクトのコンストラクタから(DataObjectにデータ構造を渡す) DataManager CORBAオブジェクトのオペレーションが呼び出されます。DataObjectでは、渡されたデータを利用してクラス変数を設定します。

クライアント・アプリケーションからサーバー・マシンに変更された状態を渡す必要がある場合、クライアント・アプリケーションではDataObject::writeData()メソッドを呼び出します。このメソッドでは、今度はDataManager CORBAオブジェクトのwriteRecord()オペレーションが呼び出されます。この呼出しでは、データ構造がwriteRecord()オペレーションにパラメータとして渡されます。 DataManager CORBAオブジェクトでは、永続ストレージを適切に更新します。

次の図は、CORBA Client Data Cachingデザイン・パターンの仕組みを示しています。

図4-1 CORBA Client Data Cachingデザイン・パターンの仕組み

CORBA Client Data Cachingデザイン・パターンの仕組みを説明します。

次に、この図の意味を説明します。

  1. DataObjectコンストラクタでは、DataManager CORBAオブジェクトのreadRecord()オペレーションが呼び出され、返されたデータ構造を使用してローカルの状態が初期化されます。
  2. クライアント・アプリケーションでは、DataObjectインスタンスのローカルの状態を変更する場合があります。
  3. 変更された状態をDataManager CORBAオブジェクトに渡すために、クライアント・アプリケーションではDataObject::writeData()オペレーションを呼び出し、変更されたデータを格納するデータ構造を渡します。