ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(イベントサービス編)

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メソッドを発行しないでアプリケーションを終了すると、アプリケーション終了後に再度アプリケーションを起動した場合に、同一のイベントデータが複数個配信されてしまいます。