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

第5章 アプリケーションの開発(C言語)

5.2 Pushモデル

 C言語でのPushモデルのアプリケーションの開発について説明します。

(1)概要

 サプライヤがコンシューマにイベントデータを送信する場合、イベントチャネル上のCosEventChannelAdmin_ProxyPushConsumer_pushメソッドを呼び出します。イベントチャネルはユーザがコンシューマ上に実装したserver_CosEventComm_PushConsumer_pushメソッドを呼び出します。その概要を以下に示します。

(2)サプライヤの作成

 サプライヤからイベントチャネルへイベントデータを送信する手続き例と処理の流れを以下に説明します。

[C言語によるPushモデルのサプライヤ]

  CORBA_Boolean func() {
      ... 
      supplier = CosEventChannelAdmin_EventChannel_for_suppliers(
                                     object, &env );                         /* 1 */
      proxy_push = CosEventChannelAdmin_SupplierAdmin_obtain_push_consumer(
                                     supplier, &env );                       /* 2 */
      CosEventChannelAdmin_ProxyPushConsumer_connect_push_supplier(
                                     proxy_push, my_obj, &env );             /* 3 */
      CosEventChannelAdmin_ProxyPushConsumer_push(
                                     proxy_push, data, &env );               /* 4 */
      CosEventChannelAdmin_ProxyPushConsumer_disconnect_push_consumer(
                                                   proxy_push, &env );       /* 5 */
      ... 
  }
  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
  2. イベントチャネルのオブジェクトリファレンスを獲得します。
  3. イベントチャネルと接続します。
  4. イベントチャネルのCosEventChannelAdmin_ProxyPushConsumer_pushメソッドを呼び出します。
  5. イベントチャネルと切断します。

 サプライヤからイベントデータを送信するには下記のメソッドを使用します。引数のdataにイベントデータを指定して送信します。このCosEventChannelAdmin_ProxyPushConsumerはCosEventComm_PushConsumerを継承しています。

  void  CosEventChannelAdmin_ProxyPushConsumer_push(
                  CosEventChannelAdmin_ProxyPushConsumer    obj,
                  CORBA_any                                *data,
                  CORBA_Environment                        *env );

(3)コンシューマの作成

 コンシューマはイベントチャネルから送信されるイベントデータを受け取るために、server_CosEventComm_PushConsumer_pushメソッドを実装します。
 イベントチャネルはコンシューマ上の、server_CosEventComm_PushConsumer_pushメソッドを呼び出し、コンシューマにイベントデータを送信します。コンシューマがイベントデータを受け取る例と処理の流れを以下に説明します。

[C言語によるPushモデルのコンシューマ]

  CORBA_Boolean func() {
      ...
      consumer = CosEventChannelAdmin_EventChannel_for_consumers(
                                                  object, &env );              /* 1 */
      proxy_push = CosEventChannelAdmin_ConsumerAdmin_obtain_push_supplier(
                                                  consumer, &env );            /* 2 */
      CosEventChannelAdmin_ProxyPushSupplier_connect_push_consumer(
                                                  proxy_push, my_obj, &env );  /* 3 */
      ... 
  }
  
  void
  server_CosEventComm_PushConsumer_push(                                      /* 4 */
               CosEventComm_PushConsumer        obj, 
               CORBA_any                       *any_data, 
               CORBA_Environment               *env ) {
  
      ... 
      /* アプリケーションの処理 */
      ... 
      return; 
  }
  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
  2. イベントチャネルのオブジェクトリファレンスを獲得します。
  3. イベントチャネルと接続します。
  4. ユーザがコンシューマ上に実装するserver_CosEventComm_PushConsumer_pushメソッドです。


 コンシューマ側のアプリケーションでイベントチャネルに対してCosEventChannelAdmin_ProxyPushSupplier_disconnect_push_supplierメソッドを発行しないで、アプリケーションを終了させ、その後、同一のアプリケーションを再起動した場合、同一イベントデータが複数個配信されます。コンシューマアプリケーションを終了する場合は、必ずイベントチャネルに対してCosEventChannelAdmin_ProxyPushSupplier_disconnect_push_supplierメソッドを発行してください。


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

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