Client Data Cachingデザイン・パターン
この章では、CORBA Client Data Cachingデザイン・パターンについて説明します。このデザイン・パターンの目的は、サーバーからの永続的な状態情報をクライアントがローカルでデータ集中型の処理に利用できるようにすることです。このようにすれば、CORBAクライアント・アプリケーションでデータを取り出すために何度もサーバー・アプリケーションに呼出しを行う必要がなくなります。
このデザイン・パターンでは、分散クライアント/サーバー・アプリケーションのスケーラビリティと性能が改善されます。CORBAオブジェクトの属性を取り出すリモート呼出しのオーバーヘッドは、システムのロードや他の要素によっては非常に大きくなる場合があります。また、永続的なデータ・レコードをCORBAオブジェクトとして公開する場合は、非常に多くの同時アクティブ・オブジェクトをシステムで管理しなければならなくなる可能性があるのでアプリケーションの規模を適切に調整できなくなります。クライアント・アプリケーションのデータが集中する処理、またはユーザー入力を必要とする処理(フィールドの編集など)は、データの取得に複数のリモート呼出しを要する場合はクライアント・アプリケーションとシステムの両方の速度を低下させる可能性があります。
このデザイン・パターンは、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デザイン・パターンのしくみを示しています。
1.
|
DataObjectコンストラクタでは、 DataManager CORBAオブジェクトの readRecord()オペレーションが呼び出され、返されたデータ構造を使用してローカルの状態が初期化されます。
|
2.
|
クライアント・アプリケーションでは、 DataObjectインスタンスのローカルの状態を変更する場合があります。
|
3.
|
変更された状態を DataManager CORBAオブジェクトに渡すために、クライアント・アプリケーションでは DataObject::writeData()オペレーションを呼び出し、変更されたデータを格納するデータ構造を渡します。
|
DataObjectのメソッドでは、
DataManager CORBAオブジェクトのオペレーションを呼び出してデータを読み書きします。
クライアント・アプリケーションに渡されるデータ構造は、必要最小限のデータを提供するように設計されていなければなりません。大量のデータが伴う場合は、必要なフィールドのサブセットを格納する複数のデータ構造を使用した方が効率的になる場合があります。CORBAプロセス・オブジェクトのオペレーションは、必要とされるデータのサブセットのみが操作に関与するように設計します。そうすれば、ネットワーク・トラフィックが削減されます。