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

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

7.3 Pullモデル

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

(1)概要

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

(2)サプライヤの作成

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

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

  public boolean func() {
      ... 
      try {
          supplier = EventCh.for_suppliers();            /* 1 */
          proxy_pull = supplier.obtain_pull_consumer();  /* 2 */
          proxy_pull.connect_pull_supplier( my_obj );    /* 3 */
      } catch( Exception e ) {
          ... 
      }
      ... 
  }
  
  class UserServant extends PullSupplierPOA
  {
  
      public org.omg.CORBA.Any pull()                    /* 4 */
          throws CosEventComm.Disconnected {
              ... 
              /* アプリケーションの処理 */
              ... 
              return( rtn_value ); 
          }
  
      public void disconnect_pull_supplier() {
          return; 
      }
}
  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
  2. イベントチャネルのオブジェクトリファレンスを獲得します。
  3. イベントチャネルと接続します。
  4. ユーザがサプライヤ上に実装するpullメソッドです。

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

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

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

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

[イベントデータの受信(待ち合わせる)]

 イベントチャネルからイベントデータを取り出し、CORBA.Any型のreturn値を返します。イベントチャネルからイベントデータの取り出しが可能になるか、または例外が発生するまでブロックされます。(org.omg.CosEventChannelAdmin.ProxyPullSupplierはorg.omg.CosEventComm.PullSupplierを継承しています。)

  org.omg.CORBA.Any  org.omg.CosEventChannelAdmin.ProxyPullSupplier.pull();

[イベントデータの受信(待ち合わせない)]

 イベントチャネルからイベントデータを取り出し、CORBA.Any型のreturn値を返します。イベントチャネルからイベントデータが取り出せない場合は即座に復帰します。イベントデータが取り出せた場合は、has_eventにtrueが設定されます。イベントデータが取り出せなかった場合はhas_eventにfalseが設定されます(org.omg.CosEventChannelAdmin.ProxyPullSupplierはorg.omg.CosEventComm.PullSupplierを継承しています)。

  org.omg.CORBA.Any  org.omg.CosEventChannelAdmin.ProxyPullSupplier.try_pull(
                   org.omg.CORBA.Boolean_var                has_event );

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

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