Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第5章 アプリケーションの開発(C++言語)> 5.3 サーバアプリケーションのプログラミング(Portable Object Adapter:POA)> 5.3.2 POA概要

5.3.2.6 オブジェクトの活性化

 オブジェクトが活性状態とは、POAオブジェクトの管理するAOM(Active Object Map)に、あるServantオブジェクトがオブジェクトIDと関連付けられて登録されている状態のことを指します。
 Servantオブジェクトは、インスタンスとして生成されただけでは、POAオブジェクトに認識されないため、activate_object()やactivate_object_with_id()メソッドを使用して、オブジェクトIDとの関連付けをPOAオブジェクトに登録する必要があります。Servantオブジェクトを活性化する方法を以下に示します。

明示的にServantオブジェクトを活性化する方法

 Servantオブジェクトの作成(new)後に、activate_object()またはactivate_object_with_id()メソッドでAOMに登録できます。

【例】

  CORBA::Environment  env;  // 例外情報

  // Servantの生成
  ODsample_intf_impl*  svt = new ODsample_intf_impl();

  // Servantの活性化
  Poa->activate_object ( svt, env ); 

  // ID指定によるServantの活性化
  long  len = strlen( "USERID" ); 
  CORBA::Octet*  buf = PortableServer::ObjectId::allocbuf( len ); 
  memcpy( buf, "USERID", len ); 
  PortableServer::ObjectId_var  userid =
            new PortableServer::ObjectId( len, len, buf, CORBA_TRUE ); 
  Poa->activate_object_with_id( *userid, svt, env ); 

注) ソース内のPoaオブジェクトはPOAクラスのインスタンス

 なお、活性化の際にはオブジェクトIDが必要になりますが、オブジェクトIDの割り付けは、IdAssignmentPolicyに従って処理されます。

暗黙的にServantオブジェクトを活性化する方法

 POAオブジェクトがIMPLICIT_ACTIVATIONポリシを持っている場合、servant_to_reference()メソッドを使用してリファレンスを生成すると、自動的にServantオブジェクトが活性化され、オブジェクトリファレンスが通知されます。暗黙的活性化については、“暗黙的活性化(Implicit Activation)”を参照してください。

【例】

  CORBA::Environment  env;  // 例外情報

  // Servantの生成
  ODsample_intf_impl* svt = new ODsample_intf_impl();

  // IMPLICIT_ACTIVATIONポリシを指定している場合自動的にactivateされる
  CORBA::Object Obj =  Poa->servant_to_reference( svt, env ); 

注) ソース内のPoaオブジェクトはPOAクラスのインスタンス

 なお、暗黙的活性化の場合は、オブジェクトIDはPOAオブジェクトによって自動的に割り付けます。このため、IdAssignmentPolicyはSYSTEM_IDに設定しておく必要があります。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005