Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
付録G 旧互換機能 | > G.4 動的スケルトンインタフェースのプログラミング | > G.4.4 COBOLの開発 |
ゲートウェイでは、以下に示す処理を行います。
・メソッドの解析
・パラメタの組立て
・パラメタの解析
・処理部の起動
・復帰情報の設定
・例外情報の設定
ゲートウェイの実装例を以下に示します。
IDENTIFICATION DIVISION. PROGRAM-ID. "ODDEMO-CALCULATOR". ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ARGUMENT-NUMBER IS ARG-C ARGUMENT-VALUE IS ARG-V SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. . DATA DIVISION. * WORKING-STORAGE SECTION. 01 COPY REPOSITORYID IN CORBA REPLACING CORBA-REPOSITORYID BY DSI-OP-NAME. 01 TMP-BUF USAGE POINTER. 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH. 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY RET-VAL. 01 STR-BUF PIC X(20). 01 COPY SERVERREQUEST IN CORBA REPLACING CORBA-SERVERREQUEST BY REQUEST-V. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY W-ENV. 01 COPY BOOLEAN IN CORBA REPLACING CORBA-BOOLEAN BY RET. * LINKAGE SECTION. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 COPY SERVERREQUEST IN CORBA REPLACING CORBA-SERVERREQUEST BY REQUEST. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. * PROCEDURE DIVISION USING OBJ REQUEST ENV. MAIN. *(1)メソッドの解析 CALL "CORBA-SERVERREQUEST-OP-NAME" USING REQUEST ENV DSI-OP-NAME. MOVE FUNCTION LENG (STR-BUF) TO STRING-LENGTH. CALL "CORBA-STRING-GET" USING DSI-OP-NAME STRING-LENGTH STR-BUF. IF STR-BUF = "calculate" CALL "ODDEMO-CALCULATOR-CALCULATE" USING REQUEST ENV MOVE "CORBA-SERVERREQUEST-OP-NAME" TO MESS END-IF. CALL "CORBA-FREE" USING TMP-BUF. EXIT PROGRAM. MAIN-END. END PROGRAM "ODDEMO-CALCULATOR". IDENTIFICATION DIVISION. PROGRAM-ID. "ODDEMO-CALCULATOR-CALCULATE". ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ARGUMENT-NUMBER IS ARG-C ARGUMENT-VALUE IS ARG-V SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. . DATA DIVISION. * WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 MESS PIC X(30). 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH. 01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 01 COPY BOA IN CORBA REPLACING CORBA-BOA BY BOA. 01 ARG-LIST USAGE POINTER. 01 COPY TYPECODE IN CORBA REPLACING CORBA-TYPECODE BY TC-TYPE. 01 COPY FLAGS IN CORBA REPLACING CORBA-FLAGS BY FLAG. 01 STRING-POINTER USAGE POINTER. 01 PARAM-POINTER USAGE POINTER. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM. 01 STRING-TMP PIC X(10). 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY FLAGS. 01 TEMP-BUF USAGE POINTER. 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY RET-VAL. 01 EXC-POINTER USAGE POINTER. 01 COPY EXCEPTION-TYPE IN CORBA REPLACING CORBA-EXCEPTION-TYPE BY ENV-FLAGS. 01 USER-ID USAGE POINTER. 01 EX-ODDEMO-CALCULATOR-ZEROPARAM PIC X(35) VALUE "IDL:ODdemo/calculator/ZEROPARAM:1.0". 01 TC-ODDEMO-CALCULATOR-RESULT. 03 MEMBER1 PIC X(100) VALUE "131,131,0,0,0,0,15,4,0,16,0,33,73,68,76,58,79,68,100,101,109,111,47,99,97,108,99,117,108,97,116,111,". 03 MEMBER2 PIC X(100) VALUE "114,47,114,101,115,117,108,116,58,49,46,48,0,0,7,114,101,115,117,108,116,0,0,4,0,11,97,100,100,95,11". 03 MEMBER3 PIC X(100) VALUE "4,101,115,117,108,116,0,0,1,3,0,16,115,117,98,116,114,97,99,116,95,114,101,115,117,108,116,0,0,1,3,0". 03 MEMBER4 PIC X(100) VALUE ",16,109,117,108,116,105,112,108,101,95,114,101,115,117,108,116,0,0,1,3,0,14,100,105,118,105,100,101,". 03 MEMBER5 PIC X(100) VALUE "95,114,101,115,117,108,116,0,0,1,6". 01 TC-ODDEMO-CALCULATOR-ZEROPARAM. 03 MEMBER1 PIC X(100) VALUE "73,73,0,0,0,0,22,4,0,4,0,36,73,68,76,58,79,68,100,101,109,111,47,99,97,108,99,117,108,97,116,111,114". 03 MEMBER2 PIC X(100) VALUE ",47,90,69,82,79,80,65,82,65,77,58,49,46,48,0,0,10,90,69,82,79,80,65,82,65,77,0,0,1,0,8,101,120,99,10". 03 MEMBER3 PIC X(100) VALUE "1,112,95,108,0,0,1,3". 01 COPY EXCEPTION-TYPE IN CORBA REPLACING CORBA-EXCEPTION-TYPE BY EX-STATUS. 01 COPY ANY IN CORBA REPLACING CORBA-ANY BY RESULT. 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY C-ARG-C. 01 C-ARG-V. 02 FILLER OCCURS 2. 03 ARG-V-VALUE USAGE POINTER. 01 APLI-NAME PIC X(8) VALUE "simple_s". 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY P1. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY P2. LINKAGE SECTION. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARAM1. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARAM2. 01 A-RESULT. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY ADD-RESULT. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SUBTRACT-RESULT. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY MULTIPLE-RESULT. 02 COPY FLOAT IN CORBA REPLACING CORBA-FLOAT BY DEVIDE-RESULT. 01 LIST-VALUE. 03 FILLER OCCURS 2. 05 COPY NAMEDVALUE IN CORBA REPLACING CORBA-NAMEDVALUE BY TMP-NAMVAL. 01 EXCEP. 03 COPY LONG IN CORBA REPLACING CORBA-LONG BY EXCEP-L. 01 COPY ANY IN CORBA REPLACING CORBA-ANY BY EXC-VALUE. 01 COPY SERVERREQUEST IN CORBA REPLACING CORBA-SERVERREQUEST BY REQUEST. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. * PROCEDURE DIVISION USING REQUEST ENV. * MAIN. COMPUTE C-ARG-C = 1. MOVE FUNCTION LENG (APLI-NAME) TO STRING-LENGTH. CALL "CORBA-STRING-SET" USING ARG-V-VALUE (1) STRING-LENGTH APLI-NAME. SET ARG-V-VALUE(2) TO NULL. MOVE12 TO STRING-LENGTH. CALL"CORBA-STRING-SET"USING TEMP-BUF STRING-LENGTH FJ-OM-ORB-ID. CALL "CORBA-ORB-INIT" USING C-ARG-C C-ARG-V TEMP-BUF ENV ORB. MOVE "CORBA-ORB-INIT" TO MESS. PERFORM ENV-CHECK CALL "CORBA-FREE" USING TEMP-BUF. MOVE 15 TO STRING-LENGTH. CALL"CORBA-STRING-SET" USING TEMP-BUF STRING-LENGTH CORBA-BOA-OA-ID. CALL "CORBA-ORB-BOA-INIT" USING ORB C-ARG-C C-ARG-V TEMP-BUF ENV BOA. MOVE "CORBA-ORB-BOA-INIT" TO MESS. PERFORM ENV-CHECK. *(2)パラメタの組み立て * パラメタリストの生成 MOVE 2 TO NUM. CALL "CORBA-ORB-CREATE-LIST" USING ORB NUM ARG-LIST ENV RET-VAL. MOVE "CORBA-ORB-CREATE-LIST" TO MESS. PERFORM ENV-CHECK. * パラメタ情報の登録 MOVE "a" TO STRING-TMP. MOVE FUNCTION LENG (STRING-TMP) TO STRING-LENGTH. CALL "CORBA-STRING-SET" USING STRING-POINTER STRING-LENGTH STRING-TMP. MOVE FUNCTION LENG (TC-LONG) TO STRING-LENGTH. CALL "CORBA-STRING-SET" USING TEMP-BUF STRING-LENGTH TC-LONG. CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING TEMP-BUF TC-TYPE. CALL "CORBA-FREE" USING TEMP-BUF. MOVE FUNCTION ADDR( P1 ) TO PARAM-POINTER. MOVE 0 TO NUM. SET CORBA-ARG-IN OF FLAG TO TRUE. CALL "CORBA-NVLIST-ADD-ITEM" USING ARG-LIST STRING-POINTER TC-TYPE PARAM-POINTER NUM FLAG ENV RET-VAL. MOVE "CORBA-NVLIST-ADD-ITEM" TO MESS. PERFORM ENV-CHECK. MOVE "b" TO STRING-TMP. MOVE FUNCTION LENG (STRING-TMP) TO STRING-LENGTH. CALL "CORBA-STRING-SET" USING STRING-POINTER STRING-LENGTH STRING-TMP. MOVE FUNCTION LENG (TC-LONG) TO STRING-LENGTH. CALL "CORBA-STRING-SET" USING TEMP-BUF STRING-LENGTH TC-LONG. CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING TEMP-BUF TC-TYPE. CALL "CORBA-FREE" USING TEMP-BUF. MOVE FUNCTION ADDR( P2 ) TO PARAM-POINTER. MOVE 0 TO NUM. SET CORBA-ARG-IN OF FLAG TO TRUE. CALL "CORBA-NVLIST-ADD-ITEM" USING ARG-LIST STRING-POINTER TC-TYPE PARAM-POINTER NUM FLAG ENV RET-VAL. MOVE "CORBA-NVLIST-ADD-ITEM" TO MESS. PERFORM ENV-CHECK. *(3)パラメタの解析 CALL "CORBA-SERVERREQUEST-PARAMS" USING REQUEST ARG-LIST ENV. MOVE "CORBA-SERVERREQUEST-PARAMS" TO MESS. PERFORM ENV-CHECK. SET ADDRESS OF LIST-VALUE TO ARG-LIST. SET ADDRESS OF PARAM1 TO ANY-VALUE OF LIST-VALUE(1). SET ADDRESS OF PARAM2 TO ANY-VALUE OF LIST-VALUE(2). * 例外判定 IF PARAM2 = 0 * (5)例外情報の設定 SET CORBA-USER-EXCEPTION OF ENV-FLAGS TO TRUE MOVE FUNCTION LENG ( EX-ODDEMO-CALCULATOR-ZEROPARAM ) TO STRING-LENGTH CALL "CORBA-STRING-SET" USING USER-ID STRING-LENGTH EX-ODDEMO-CALCULATOR-ZEROPARAM CALL "CORBA-ANY-ALLOC" USING EXC-POINTER SET ADDRESS OF EXC-VALUE TO EXC-POINTER MOVE FUNCTION LENG (TC-ODDEMO-CALCULATOR-ZEROPARAM) TO STRING-LENGTH CALL "CORBA-STRING-SET" USING TEMP-BUF STRING-LENGTH TC-ODDEMO-CALCULATOR-ZEROPARAM CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING TEMP-BUF ANY-TYPE OF EXC-VALUE CALL "ODDEMO-CALCULATOR-ZEROPARAM-ALLOC" USING ANY-VALUE OF EXC-VALUE SET ADDRESS OF EXCEP TO ANY-VALUE OF EXC-VALUE MOVE 0 TO EXCEP-L OF EXCEP CALL "CORBA-SERVERREQUEST-EXCEPTION" USING REQUEST ENV-FLAGS USER-ID EXC-POINTER ENV MOVE "CORBA-SERVERREQUEST-EXCEPTION" TO MESS PERFORM ENV-CHECK ELSE * (4)復帰情報の設定 MOVE FUNCTION LENG (TC-ODDEMO-CALCULATOR-RESULT) TO STRING-LENGTH CALL "CORBA-STRING-SET" USING TEMP-BUF STRING-LENGTH TC-ODDEMO-CALCULATOR-RESULT CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING TEMP-BUF ANY-TYPE OF RESULT CALL "ODDEMO-CALCULATOR-RESULT-ALLOC" USING ANY-VALUE OF RESULT SET ADDRESS OF A-RESULT TO ANY-VALUE OF RESULT COMPUTE ADD-RESULT OF A-RESULT = PARAM1 + PARAM2 COMPUTE SUBTRACT-RESULT OF A-RESULT = PARAM1 - PARAM2 COMPUTE MULTIPLE-RESULT OF A-RESULT = PARAM1 * PARAM2 COMPUTE DEVIDE-RESULT OF A-RESULT = PARAM1 / PARAM2 CALL "CORBA-SERVERREQUEST-RESULT" USING REQUEST RESULT ENV MOVE "CORBA-SERVERREQUEST-PARAMS" TO MESS PERFORM ENV-CHECK END-IF. EXIT PROGRAM. MAIN-END. ENV-CHECK SECTION. EVALUATE TRUE WHEN CORBA-NO-EXCEPTION OF MAJOR OF ENV CONTINUE WHEN CORBA-USER-EXCEPTION OF MAJOR OF ENV EXIT PROGRAM WHEN CORBA-SYSTEM-EXCEPTION OF MAJOR OF ENV EXIT PROGRAM END-EVALUATE. ENV-CHECK-END. EXIT. * END PROGRAM "ODDEMO-CALCULATOR-CALCULATE".
CORBA-SERVERREQUEST-OP-NAMEメソッドを発行して、メソッド名の解析を行います。
CORBA-SERVERREQUEST-PARAMSメソッドを発行して、パラメタの解析を行います。
CORBA-SERVERREQUEST-RESULTメソッドを発行して、復帰情報の設定を行います。
CORBA-SERVERREQUEST-EXCEPTIONメソッドを発行して例外情報の設定を行います。
サーバアプリケーションのメソッドが発生するユーザ例外を設定し、クライアントへ通知します(メソッドが発生するユーザ例外は、IDLのオペレーション定義で記述されます)。
目次
索引
![]() ![]() |