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

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

6.2 Pushモデル

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

(1)概要

 サプライヤがコンシューマにイベントデータを送信する場合、イベントチャネル上のCosEventChannelAdmin::ProxyPushConsumerに接続指示を出します。この後、イベントチャネルにCosEventChannelAdmin::ProxyPushConsumer::pushメソッドを発行します。イベントチャネルはユーザがコンシューマ上に実装するCosEventComm::PushConsumer::pushメソッドを呼び出します。その概要を以下に示します。

(2)サプライヤの作成

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

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

  CORBA::Boolean func() {
      ... 
      try {
          supplier = EventCh->for_suppliers( env );                  /* 1 */
          proxy_push = supplier->obtain_push_consumer( env );        /* 2 */
          proxy_push->connect_push_supplier( my_obj, env );          /* 3 */
          proxy_push->push( data, env );                             /* 4 */
          proxy_push->disconnect_push_consumer( env );               /* 5 */
      } catch( CORBA::Exception &e ) {
              ... 
      }
      ... 
  }
  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
  2. イベントチャネルのオブジェクトリファレンスを獲得します。
  3. イベントチャネルと接続します。
  4. イベントチャネルにCosEventChannelAdmin::ProxyPushConsumer::pushメソッドを発行します。
  5. イベントチャネルと切断します。

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

  void  CosEventChannelAdmin::ProxyPushConsumer::push(
             CORBA::Any&                    data,
             CORBA::Environment&            env );

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

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

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

  CORBA::Boolean func() {
      ... 
      try {
          consumer = EventCh->for_consumers( env );                 /* 1 */
          proxy_push = consumer->obtain_push_supplier( env );       /* 2 */
          proxy_push->connect_push_consumer( my_obj, env );         /* 3 */
      } catch( CORBA::Exception &e ) {
                ... 
      }
      ... 
  }
  
  void
  CosEventComm_PushConsumer_impl::push(                              /* 4 */
      const CORBA::Any       &any_data, 
      CORBA::Environment     &env ) 
      throw( CORBA::Exception ) {
  
      ... 
      /* アプリケーションの処理 */
      ... 
      return; 
  }
  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
  2. イベントチャネルのオブジェクトリファレンスを獲得します。
  3. イベントチャネルと接続します。
  4. ユーザがコンシューマ上に実装するCosEventComm_PushConsumer_impl::pushメソッドです。


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


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

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