COBOLでのPushモデルのアプリケーションの開発について説明します。
(1)概要
サプライヤがコンシューマにイベントデータを送信する場合、イベントチャネル上のCOSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-PUSHメソッドを呼び出します。イベントチャネルは、ユーザがコンシューマ上に実装したSERVER-COSEVENTCOMM-PUSHCONSUMER-PUSHメソッドを呼び出します。
本概要を以下の図に示します。

(2)サプライヤの作成
サプライヤからイベントチャネルへイベントデータを送信する手続きの例、および処理の流れを以下に示します。
[COBOLによるPushモデルのサプライヤ]
PROGRAM-ID. "FUNC".
...
CALL "COSEVENTCHANNELADMIN-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
PROXYPUSH
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メソッドを呼び出します。
イベントチャネルと切断します。
サプライヤからイベントデータを送信するには、以下のメソッドを使用します。引数のEVDATAにイベントデータを指定して送信します。このCOSEVENTCHANNELADMIN-PROXYPUSHCONSUMERは、COSEVENTCOMM-PUSHCONSUMERを継承しています。
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY SYMBOL-CONST IN CORBA.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN COSEVENTCOMM.
01 COPY PUSHCONSUMER IN COSEVENTCOMM REPLACING
COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER BY OBJ.
COPY CONST IN CORBA.
01 COPY ANY IN CORBA REPLACING CORBA-ANY BY EVDATA.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
PROCEDURE DIVISION.
CALL "COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-PUSH" USING
OBJ
EVDATA
ENV.(3)コンシューマの作成
コンシューマは、イベントチャネルから送信されるイベントデータを受け取るために、SERVER-COSEVENTCOMM-PUSHCONSUMER-PUSHメソッドを実装します。
イベントチャネルは、コンシューマ上のSERVER-COSEVENTCOMM-PUSHCONSUMER-PUSHメソッドを呼び出し、コンシューマにイベントデータを送信します。
コンシューマがイベントデータを受け取る例、および処理の流れを以下に示します。
[COBOLによるPushモデルのコンシューマ]
PROGRAM-ID. "FUNC".
...
CALL "COSEVENTCHANNELADMIN-EVENTCHANNEL-FOR-CONSUMERS" USING
EVENTCHOBJ
ENV
CONSUMER. /* 1 */
CALL "COSEVENTCHANNELADMIN-CONSUMERADMIN-OBTAIN-PUSH-SUPPLIER" USING
CONSUMER
ENV
PROXYPUSH. /* 2 */
CALL "COSEVENTCHANNELADMIN-PROXYPUSHSUPPLIER-CONNECT-PUSH-CONSUMER" USING
PROXYPUSH
MY-OBJ
ENV. /* 3 */
...
END PROGRAM "FUNC".
PROGRAM-ID. "SERVER-COSEVENTCOMM-PUSHCONSUMER-PUSH". /* 4 */
...
LINKAGE SECTION.
01 COPY PROXYPUSHCONSUMER IN COSEVENTCOMM REPLACING COSEVENTCHANNELADMIN-PROXYP003
BY OBJ.
01 COPY ANY IN CORBA REPLACING CORBA-ANY BY EVDATA.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
PROCEDURE DIVISION USING
OBJ
EVDATA
ENV.
...
/* アプリケーションの処理 */
...
EXIT PROGRAM.
END PROGRAM "SERVER-COSEVENTCOMM-PUSHCONSUMER-PUSH".イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
ユーザがコンシューマ上に実装するSERVER-COSEVENTCOMM-PUSHCONSUMER-PUSHメソッドです。
注意
コンシューマ側のアプリケーションでは、アプリケーション終了時に、イベントチャネルに対して必ずCOSEVENTCHANNELADMIN-PROXYPUSHSUPPLIER-DISCONNECT-PUSH_SUPPLIERメソッドを発行してください。イベントチャネルに対してCOSEVENTCHANNELADMIN-PROXYPUSHSUPPLIER-DISCONNECT-PUSH_SUPPLIERメソッドを発行しないでアプリケーションを終了すると、アプリケーション終了後に再度アプリケーションを起動した場合に、同一のイベントデータが複数個配信されてしまいます。