3.7.3.5.5 説明

このメソッドでは、オブジェクト参照を作成し、オブジェクトを事前アクティブ化します。作成されたオブジェクト参照は、オブジェクトへのアクセスで使用するクライアントに渡されます。

通常、アプリケーションではこのメソッドを次の2か所で呼び出します:

  • Server::initialize()内。最初の呼出しでアクティブ化しなくて済むように、プロセス・オブジェクトを事前アクティブ化します。
  • クライアントに返すオブジェクト参照を作成する任意のメソッド内。

このメソッドを使用すると、アプリケーションでは最初の呼出しの前にオブジェクトをアクティブ化できます。(この処理が有用となる理由については、「明示的なアクティブ化」を参照してください。)ユーザーはまずサーバントを作成し、状態を設定してから、create_active_object_referenceを呼び出します。TPフレームワークでは、サーバントおよびObjectId文字列をアクティブ・オブジェクト・マップに入れます。その結果、TPフレームワークですでにServer::create_servantを呼び出し、サーバント・ポインタを受け取ってから、servant::activate_objectを呼び出した場合とまったく同じ状態になります。

アクティブ化されたオブジェクトは、プロセス・アクティブ化ポリシーで宣言されたインタフェース用である必要があります。それ以外の場合、例外が発生します。

オブジェクトを非アクティブ化すると、クライアントで保持されていたオブジェクト参照によって、オブジェクトがほかのプロセスで再度アクティブ化される可能性があります。この処理が問題となる状況については、「明示的なアクティブ化」を参照してください。

ノート:

ユーザー制御の同時実行性ポリシー・オプションがICFファイルで設定されている場合、このメソッドに関する制約が1つあります(「パラレル・オブジェクト」を参照してください)。TP::create_active_object_referenceメソッドは、ユーザー制御の同時実行性が設定されたインタフェースを渡されると、TobjS::IllegalOperation例外をスローします。AOMはユーザー制御の同時実行性が設定されている場合に使用されないので、TPフレームワークにはアクティブ化されたオブジェクトをこのサーバーに接続する方法がありません。