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

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

7.2 Pushモデル

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

(1)概要

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

(2)サプライヤの作成

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

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

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

[イベントデータの送信]

 イベントチャネルにイベントデータdataを送信します。(org.omg.CosEventChannelAdmin.ProxyPushConsumerはorg.omg.CosEventComm.PushConsumerを継承しています。)

  void  org.omg.CosEventChannelAdmin.ProxyPushConsumer.push(
            org.omg.CORBA.Any                      data );

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

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

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

  public boolean func() {
      ... 
      try {
          consumer = EventCh.for_consumer();             /* 1 */
          proxy_push = consumer.obtain_push_supplier();  /* 2 */
          proxy_push.connect_push_consumer( my_obj );    /* 3 */

          }catch( Exception e ){
                  ... 
          }
    ... 
  }

  class UserServant extends PushConsumerPOA
  {

      public void push( org.omg.CORBA.Any data )        /* 4 */
          throws CosEventComm.Disconnected {
              ... 
              /* アプリケーションの処理 */
              ... 
              return; 
          }

      public void disconnect_push_consumer() {
          return; 
      }
  }
  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
  2. イベントチャネルのオブジェクトリファレンスを獲得します。
  3. イベントチャネルと接続します。
  4. ユーザがコンシューマ上に実装するpushメソッドです。


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


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

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