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 = (内部コード)