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

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

6.3 Pullモデル

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

(1)概要

 イベントチャネル上のコンシューマがサプライヤからイベントデータを受信する場合、イベントチャネルのCosEventChannelAdmin::ProxyPullSupplierに接続指示を出します。イベントチャネルは、ユーザがサプライヤに実装したCosEventComm::PullSupplier::pull(またはtry_pull)メソッドを呼び出します。その概要を以下に示します。

(2)サプライヤの作成

 サプライヤはイベントチャネルからイベントデータの要求を受け取るために、CosEventComm_PullSupplier_impl::pullメソッドを実装します。イベントチャネルはサプライヤ上のCosEventComm::PullSupplier::pullメソッドを呼び出し、サプライヤにイベントデータを要求します。その手続き例と処理の流れを以下に説明します。

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

  CORBA::Boolean func() {
      ... 
      try {
          supplier = EventCh->for_suppliers( env );                /* 1 */
          proxy_pull = supplier->obtain_pull_consumer( env );      /* 2 */
          proxy_pull->connect_pull_supplier( my_obj, env );        /* 3 */
      } catch( CORBA::Exception &e ) {
              ... 
      }
      ... 
  }
  
  CORBA::Any *
  CosEventComm_PullSupplier_impl::pull(                             /* 4 */
      CORBA::Environment       &env ) 
      throw( CORBA::Exception ) {
      CORBA::Any              *any_data; 
  
      /* アプリケーションの処理 */
      ... 
      return( any_data ); 
  }
  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
  2. イベントチャネルのオブジェクトリファレンスを獲得します。
  3. イベントチャネルと接続します。
  4. ユーザがサプライヤ上に実装するCosEventComm_PullSupplier_impl::pullメソッドです。

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

 コンシューマからイベントチャネルにイベントデータを要求する手続き例と処理の流れを以下に説明します。

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

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

[ 待ち合わせる場合 ]

 コンシューマはサプライヤからイベントデータを待ち合わせて引き出すには下記のメソッドを使用します。イベントチャネルからイベントデータを取り出し、CORBA::Any型のreturn値を返します。イベントチャネルからイベントデータの取り出しが可能になるか、または例外が発生するまでブロックされます。CosEventChannelAdmin::ProxyPullSupplierはCosEventComm::PullSupplierを継承しています。

  CORBA::Any  *CosEventChannelAdmin::ProxyPullSupplier::pull(
           CORBA::Environment&           env );

[ 待ち合わせない場合 ]

 コンシューマはサプライヤからイベントデータを待ち合わせないで引き出すには下記のメソッドを使用します。イベントチャネルからイベントデータを取り出し、CORBA::Any型のreturn値を返します。イベントチャネルからイベントデータが取り出せない場合は即座に復帰します。イベントデータが取り出せた場合は、has_eventにCORBA_TRUEが設定されます。イベントデータが取り出せなかった場合はhas_eventにCORBA_FALSEが設定されます。CosEventChannelAdmin::ProxyPullSupplierはCosEventComm::PullSupplierを継承しています。

  CORBA::Any  *CosEventChannelAdmin::ProxyPullSupplier::try_pull(
          CORBA::Boolean&               has_event,
          CORBA::Environment&           env );

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

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