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

第4章 アプリケーションの開発(各機能)> 4.3 イベントファクトリのアプリケーション開発

4.3.1 イベントチャネルの生成と起動

 イベントファクトリを使用してイベントチャネルを作成するCプログラムの例(イベントサービスの場合ノーティフィケーションの場合)と処理の流れを以下に説明します。

イベントサービスの場合

[イベントファクトリによるイベントチャネルの生成(C言語の場合)]

  CORBA_Boolean func() {
      CORBA_ORB                                 orb;
      EventFactory                              factory;
      CosEventChannelAdmin_EventChannel         channel;
      CORBA_Environment                         env;
      EventFactory_Option                       opt;

      factory = CORBA_ORB_resolve_initial_references(
                orb, EventFactory_ObjectId_Factory, &env );        /* 1 */

      opt.max_queuing = 3000;
      opt.life_time   = 0;
      opt.model       = EventFactory_ModelAny;

      channel = EventFactory_create(
                factory, "keyword", &opt, &env );                 /* 2 */

      CosEventChannelAdmin_EventChannel_destroy(
                channel, &env );                                  /* 3 */
      .... 
  }
  1. イベントファクトリのオブジェクトリファレンスをイニシャルサービスから獲得します。イニシャルサービスには「EventFactory_ObjectId_Factory」を指定してください。
  2. EventFactory_create()メソッドでイベントファクトリにイベントチャネルの生成を指示します。複数のプロセス間で、同一のイベントチャネルのオブジェクトリファレンスを獲得するには、EventFactory_create()メソッドに同一キーワードを指定します。これにより、異なるプロセス間のイベント通信を行うことができます。このキーワードは動的生成したイベントチャネルの名前です。
  3. イベントチャネルが不要ならば、CosEventChannelAdmin_EventChannel_destroy()メソッドで、イベントチャネルを破壊します。

 アプリケーションとイベントチャネルの動的生成のシーケンスを以下に示します。

ノーティフィケーションサービスの場合

[イベントファクトリによるイベントチャネルの生成(C言語の場合)]

  CORBA_Boolean func() {
      CORBA_ORB                                     orb;
      CosNotifyChannelAdmin_EventChannelFactory     factory;
      CosNotifyChannelAdmin_EventChannel            channel;
      CosNotification_QoSProperties                 *initial_qos;
      CosNotification_AdminProperties               *initial_admin;
      CosNotifyChannelAdmin_ChannelID               channelID;
      CORBA_Environment                             env;

      factory = CORBA_ORB_resolve_initial_references(
                        orb, "NotificationService", &env );               /* 1 */

      channel = CosNotifyChannelAdmin_EventChannelFactory_create_channel(
                 factory, initial_qos, initial_admin, &channelID, &env ); /* 2 */

            .... 
      CosEventChannelAdmin_EventChannel_destroy(
                channel, &env )                                           /* 3 */
            .... 
  }
  1. イベントファクトリのオブジェクトリファレンスをイニシャルサービスから獲得します。イニシャルサービスには"NotificationService"を指定してください。
  2. CosNotifyChannelAdmin_EventChannelFactory_create_channel()メソッドでイベントファクトリにイベントチャネルの生成を指示します。イベントチャネルが生成されると、idにイベントチャネルの識別IDが指定されます。複数のプロセス間で同一のイベントチャネルのオブジェクトリファレンスを獲得するには、ノーティフィケーションサービスインタフェースのEventChannelFactoryインタフェースのget_event_channel()メソッドで同一の識別IDを指定して取得します。これにより、異なるプロセス間のイベント通信を行うことができます。
  3. イベントチャネルが不要ならば、CosEventChannelAdmin_EventChannel_destroy()メソッドで、イベントチャネルを破壊します。

 アプリケーションとイベントチャネルの動的生成のシーケンスを以下に示します。


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

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