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