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

8.4 Mixedモデル

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


(1)概要

Mixedモデルは、Pushモデル、Pullモデルの2つの通信モデルを使用します。サプライヤはイベントチャネルにイベントデータを送信し、コンシューマはイベントチャネルにイベントデータを要求します。
本概要を以下の図に示します。



(2)サプライヤの作成

サプライヤは、イベントチャネルにイベントデータを送信します。Pushモデルのサプライヤと同様のインタフェースを使用します。
サプライヤからコンシューマにイベントデータを送信する処理の手続きの例、および処理の流れを以下に示します。


[COBOLによるMixedモデルのサプライヤ]

PROGRAM-ID. "FUNC".
    ... 
    CALL "COSEVENTADMIN-EVENTCHANNEL-FOR-SUPPLIERS" USING
          EVENTCHOBJ
          ENV
          SUPPLIER.                                              /* 1 */

    CALL "COSEVENTCHANNELADMIN-SUPPLIERADMIN-OBTAIN-PUSH-CONSUMER" USING
          SUPPLIER
          ENV
          PROXYPUSH.                                             /* 2 */

    CALL "COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-CONNECT-PUSH-SUPPLIER" USING
          PROXYPUSH
          CORBA-OBJECT-NIL
          ENV.                                                   /* 3 */

    CALL "COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-PUSH" USING
          PROXYPUSH
          EVDATA
          ENV.                                                   /* 4 */

    CALL "COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-DISCONNECT-PUSH-CONSU" USING
          PROXYPUSH
          ENV.                                                   /* 5 */
    ... 
END PROGRAM "FUNC".

  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。

  2. イベントチャネルのオブジェクトリファレンスを獲得します。

  3. イベントチャネルと接続します。

  4. イベントチャネルにCOSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-PUSHメソッドを発行します。

  5. イベントチャネルと切断します。


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

コンシューマは、イベントチャネルにイベントデータを要求します。Pullモデルのコンシューマと同様のインタフェースを使用します。
コンシューマがイベントチャネルにイベントデータを要求する手続きの例、および処理の流れを以下に示します。


[COBOLによるMixedモデルのコンシューマ]

PROGRAM-ID. "FUNC".
    ... 
    CALL "COSEVENTCHANNELADMIN-EVENTCHANNEL-FOR-CONSUMERS" USING
          EVENTXHOBJ
          ENV
          CONSUMER.                                       /* 1 */

    CALL "COSEVENTCHANNELADMIN-CONSUMERADMIN-OBTAIN-PULL-SUPPLIER" USING
          CONSUMER
          ENV
          PROXYPULL.                                      /* 2 */

    CALL "COSEVENTCHANNELADMIN-PROXYPULLSUPPLIER-CONNECT-PULL-CONSUMER" USING
          PROXYPULL
          CORBA-OBJECT-NIL
          ENV.                                            /* 3 */

    CALL "COSEVENTCHANNELADMIN-PROXYPULLSUPPLIER-PULL" USING
          PROXYPULL
          ENV
          EVDATA.                                         /* 4 */

    CALL "COSEVENTCHANNELADMIN-PROXYPULLSUPPLIER-DISCONNECT-PULL-SUPPL" USING
          PROXYPULL
          ENV.                                            /* 5 */
    ... 
END PROGRAM "FUNC".

  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。

  2. イベントチャネルのオブジェクトリファレンスを獲得します。

  3. イベントチャネルと接続します。

  4. イベントチャネルにCOSEVENTCHANNELADMIN-PROXYPULLSUPPLIER-PULLメソッドを発行します。

  5. イベントチャネルと切断します。


注意

PULLメソッド/PULL-WAITメソッドを発行してイベントデータを待ち合わせている状態で、DISCONNECTメソッドを発行してイベントチャネルと切断しないように注意してください。イベントデータを待ち合わせている場合は、PULL-CANCELメソッドを発行してイベントデータの待合せを解除させてからDISCONNECTメソッドを発行してください。

PULLメソッド/PULL-WAITメソッドを発行してイベントデータを待ち合わせている状態で、DISCONNECTメソッドを発行すると、トレースファイルに以下のメッセージが多量に出力されて、I/Oエラーが発生する可能性があります。

Exception information : method = pull()、pull_structured_event()、またはpull_wait()
 exception = COMM_FAILURE minor = 0x464a01c2 group =(グループ名), channel = (イベントチャネル名),
 ClientIP = (アプリケーションのIPアドレス) pid = (プロセスID) internalcode = (内部コード)