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

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

5.3.2.4 オブジェクトリファレンスの生成

 オブジェクトリファレンスは、以下の方法で生成することができます。

Servantオブジェクトの活性化前に作成する方法(直接作成)

 サーバアプリケーションは、直接オブジェクトリファレンスをPOAオブジェクトのcreate_reference()やcreate_reference_with_id()メソッドで作成することができます。この操作はオブジェクトリファレンスだけを作成します。実際のアクティブなServantオブジェクトは、後からServantManagerオブジェクトで生成される場合もあります。

【例】

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

  // オブジェクトリファレンスの生成
  CORBA::Object  _bind_obj = 
            Poa->create_reference( "IDL:Intfid11:1.0", env ); 
  // ID指定によるオブジェクトリファレンスの生成
  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 ); 
  CORBA::Object  _bind_obj = 
            Poa->create_reference_with_id( *userid, "IDL:Intfid11:1.0", env ); 

注)ソース内のPoaはPOAクラスのインスタンス
  IDL:Intfid11:1.0はインタフェースリポジトリID

Servantオブジェクトの活性化後に作成する方法(間接作成)

 サーバアプリケーションはServantオブジェクトを、activate_object()またはactivate_object_with_id()メソッドより活性化します。一度Servantオブジェクトが活性化されると、サーバアプリケーションはServantオブジェクトまたはオブジェクトIDを指定して、servant_to_reference()またはid_to_reference()メソッドを発行することにより容易にオブジェクトリファレンスを作成することができます。また、POAオブジェクトがIMPLICIT_ACTIVATIONポリシで作成されていれば、servant_to_reference()を使用してリファレンスを生成した場合、自動的にServantオブジェクトがactivateされ、リファレンスが有効になります。

【例】

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

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

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

 一度オブジェクトリファレンスがクライアントに通知されると、クライアントの側から見るとそのオブジェクトリファレンスはオブジェクトの身元を持っていることになります。クライアントプログラムがそのリファレンスを使う限り、そのオブジェクトリファレンスで作られるリクエストは同一のオブジェクトのインスタンスに送信されます。


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

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