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".イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
イベントチャネルにCOSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-PUSHメソッドを発行します。
イベントチャネルと切断します。
(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".イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
イベントチャネルにCOSEVENTCHANNELADMIN-PROXYPULLSUPPLIER-PULLメソッドを発行します。
イベントチャネルと切断します。
注意
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 = (内部コード)