2.6.2 RegistrarおよびTellerオブジェクトのインスタンス化
Productionサンプル・アプリケーションほど高度でないUniversityサーバー・アプリケーションでは、RegistrarオブジェクトとTellerオブジェクトの実行時の振舞いは、より単純でした:
- 各オブジェクトは、プロセス・バウンドでした。つまり、最初に呼び出されたときにアクティブ化され、そのオブジェクトが実行されているサーバー・プロセスが停止されるまで、メモリー内に残っていました。
- Oracle Tuxedoドメインで実行されるサーバー・グループは1つしかなく、グループ内ではUniversityおよびBillingのサーバー・プロセスは1つしかなかったため、すべてのクライアント・リクエストは、同じオブジェクトに転送されました。複数のクライアント・リクエストがOracle Tuxedoドメインに到達する一方で、これらの各オブジェクトが処理するクライアントは一度に1つずつでした。
- 各オブジェクトのインスタンスは、それらが実行されているサーバー・プロセスに1つしかなかったため、どちらのオブジェクトにも一意のOIDは不要でした。各オブジェクトのOIDが指定するのは、インタフェース・リポジトリIDのみでした。
しかし、UniversityおよびBillingサーバー・プロセスがレプリケートされるようになったため、Oracle Tuxedo CORBAはRegistrarオブジェクトとTellerオブジェクトの複数インスタンスを区別できる必要があります。たとえば、グループ内で2つのUniversityサーバー・プロセスが実行されている場合、Oracle Tuxedo CORBAには、1つ目のUniversityサーバー・プロセスで実行されているRegistrarオブジェクトと、2つ目のUniversityサーバー・プロセスで実行されているRegistrarオブジェクトを区別する手段が必要です。これらのオブジェクトの複数のインスタンスを区別するには、各オブジェクト・インスタンスが一意であることが必要です。
各RegistrarおよびTellerオブジェクトを一意にするには、これらのオブジェクトのファクトリで、これらに対するオブジェクト参照を作成する方法を変更する必要があります。たとえばBasicサンプル・オブジェクトでは、RegistrarFactoryオブジェクトがRegistrarオブジェクトへのオブジェクト参照を作成すると、TP::create_object_reference()オペレーションが、文字列registrarのみからなるOIDを指定していました。しかし、Productionサンプル・アプリケーションでは、同じTP::create_object_reference()オペレーションが、生成されたユニークなOIDを使用します。
各RegistrarおよびTellerオブジェクトに一意のOIDを付与した結果、Oracle Tuxedoドメインではこれらのオブジェクトの複数のインスタンスが、同時に実行可能です。この特性は、ステートレス・オブジェクト・モデルでは一般的なものであり、Oracle Tuxedoドメインが、高い性能を提供しつつ、高度にスケーラブルであり得ることの一例です。
最後に、一意のRegistrarおよびTellerオブジェクトは、それらに対するクライアント・リクエストがあるたびにメモリーにロードする必要があるため、呼出しが完了したときにはこれらのオブジェクトを非アクティブ化し、関連するオブジェクト状態がアイドル状態のままメモリーに残存しないようにすることが重要です。Productionサーバー・アプリケーションは、実装構成ファイル(ICF)内のこれら2つのオブジェクトに、methodアクティブ化ポリシーを割り当てることによって、この問題に対処します。
親トピック: 設計に関するその他の考慮事項