3.6 並行オブジェクト
リリース8.0のOracle Tuxedo CORBAには、パフォーマンスの拡張を目的として並行オブジェクトのサポートが追加されています。並行オブジェクト機能を利用すると、特定アプリケーションのすべてのビジネス・オブジェクトをステートレス・オブジェクトとして指定できます。1つのドメインの1つのサーバーでしか実行できないステートフル・ビジネス・オブジェクトと異なり、ステートレス・ビジネス・オブジェクトは1つのドメインのすべてのサーバーで実行できます。パラレル・オブジェクトの利点は次のとおりです。
- 並行オブジェクトは、同じドメインの複数のサーバーで同時に実行できます。したがって、すべてのサーバーを利用して複数の同時リクエストを処理できるのでパフォーマンスが向上します。
- Oracle Tuxedoシステムで並行ビジネス・オブジェクトへのリクエストが処理されるときには、常に、ローカル・マシン上の利用可能なサーバーが最初にチェックされます。ローカル・マシン上のすべてのサーバーがリクエストされたビジネス・オブジェクトの処理で使用されている場合、Oracle Tuxedoシステムではローカル・ドメイン内のほかのマシンで利用可能なサーバーを探します。したがって、ローカル・マシンに複数のサーバーがある場合は、ネットワーク・トラフィックが削減され、パフォーマンスが向上します。
並行オブジェクトの詳細は、並行オブジェクトの使用に関する項を参照してください。
並行オブジェクトを実装するために、同時実行性ポリシー・オプションがICFファイルに追加されています。特定のアプリケーションに対して並行オブジェクトを選択するには、同時実行性ポリシー・オプションをユーザー制御に設定します。ユーザー制御の同時実行性を選択すると、ビジネス・オブジェクトはアクティブ・オブジェクト・マップ(AOM)に登録されないので状態を持たなくなり、同時に複数のサーバー上でアクティブ化されることができます。このため、こうしたオブジェクトは「並行オブジェクト」と呼ばれます。
ユーザー制御の同時実行性を選択した場合、サーバントの実装は以下のいずれかの記述に該当する必要があります:
- サーバントの実装では、共有リソースへの同時アクセスに関する要件はありません
- サーバントの実装は、リソースへの同時アクセス中に正しく動作するために、データベースやロッキング機能などのツールを利用する必要があります。
リリース8.0のOracle Tuxedoソフトウェアでは、実装構成ファイル(ICF)が変更されてユーザー制御の同時実行性をサポートするようになりました。次のリストでは、このサポートのための変更箇所が太字で強調されています。ICFの構文の説明については、「ICFの構文」 を参照してください。
[#pragma activation_policy method | transaction | process]
[#pragma transaction_policy never | ignore | optional | always]
[#pragma concurrency_policy user_controlled | system_controlled]
[Module module - name {
]
implementation[implementation - name] {
implements(module - name::interface - name);
[activation_policy(method | transaction | process);]
[transaction_policy(never | ignore | optional | always);]
[concurrency_policy(user_controlled | system_controlled);]
};
[
};
]ユーザー制御の同時実行性は、ファクトリ・ベース・ルーティング、すべてのアクティブ化ポリシー、およびすべてのトランザクション・ポリシーで使用できます。これらの機能との対話は次のとおりです。
- ファクトリ・ベース・ルーティング
オブジェクトの作成時にユーザーがファクトリ・ベース・ルーティングを指定すると、オブジェクトはそのグループ内のサーバーにルーティングされます。オブジェクト・キーにはファクトリ・ベース・ルーティングで選択されたグループが含まれていますが、クライアント・ルーティング・コードでは、インタフェースにユーザー制御の同時実行性が設定されていることを認識し、必要なグループを指定します。これは、Oracle Tuxedoの通常のルーティングを使用して行われます。
- アクティブ化ポリシー
TPフレームワークでは、ユーザー制御の同時実行性を設定されたアクティブ化されたオブジェクトは、システム制御の同時実行性を設定されたオブジェクトと同じように扱われます。TPフレームワークでは、オブジェクトに関する情報はローカルのAOMに格納され、必要に応じて
activate_objectおよびdeactivate_objectメソッドが呼び出されます。ただし、オブジェクトはAOM内にエントリを持たないので、TPフレームワークはAOMのルーチンを呼び出しません。たとえば、アクティブ化されたオブジェクトはAOMハンドルを持たないので、停止時にAOMからエントリを削除する呼出しは行われません。 - トランザクション・ポリシー
TPフレームワークでは、ユーザー制御の同時実行性を設定されたアクティブ化されたオブジェクトは、システム制御の同時実行性を設定されたオブジェクトと同じように扱われます。TPフレームワークがトランザクションのイベントに対してコールバックされると、トランザクションに関与するユーザー制御のオブジェクトに関する情報がAOMに格納されます。ステートフル・オブジェクトと比べて並行オブジェクトをトランザクションで使用する場合の主な違いは、AOMがGTRID情報を格納するために使用されず、AOMのルーチンがトランザクション情報を更新または取得するために呼び出されないことです。
ノート:
ユーザー制御の同時実行性に関して次の制約があります。TP::create_active_object_referenceは、ユーザー制御の同時実行性が設定されたインタフェースを渡されると、TobjS::IllegalOperation例外をスローします。AOMはユーザー制御の同時実行性が設定されている場合に使用されないので、TPフレームワークにはアクティブ化されたオブジェクトをこのサーバーに接続する方法がありません。
親トピック: TPフレームワーク