Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第7章 アプリケーションの開発(COBOL) |
ユーザ例外を設定する場合は、CORBA-STRING-SET関数でユーザ例外を識別する文字列を設定する領域を獲得し、この領域に文字列をコピーします。続いて、IDLコンパイラで生成されたALLOC関数でユーザ例外を設定する領域を獲得します。ALLOC関数名はIDLで指定したインタフェース名、例外の識別名およびALLOCをハイフン("-")でつなげた形式で指定します。IDLで定義した例外情報はCOBOLでは構造体となるので、構造体のメンバ変数に値を設定します。最後にCORBA-BOA-SET-EXCEPTION関数でCORBA-ENVIRONMENT構造体に例外情報を設定します。
例外情報の設定例として、下記のIDL定義を使用します。
module ODdemo{ interface calculator{ exception ZEROPARAM { long err_code; }; struct result { long add_result; long subtract_result; long multiple_result; float divide_result; }; result calculate( in long a, in long b ) raises( ZEROPARAM ); }; };
例外情報の設定例は以下のようになります。
IDENTIFICATION DIVISION. PROGRAM-ID. "ODDEMO-CALCULATOR-CALCULATE". ENVIRONMENT DIVISION. CONFIGURATION SECTION. SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. INPUT-OUTPUT SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 COPY FLOAT IN CORBA REPLACING CORBA-FLOAT FY FA. 01 COPY FLOAT IN CORBA REPLACING CORBA-FLOAT BY FB. 01 ZEROPARAM-P USAGE POINTER. 01 COPY EXCEPTION-TYPE IN CORBA REPLACING CORBA-EXCEPTION-TYPE BY FLAGS. 01 USER-ID USAGE POINTER. 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY USER-ID-LENGTH. 01 EX-ODDEMO-CALCULATOR-ZEROPARAM PIC X(35) VALUE "IDL:ODdemo/calculator/ZEROPARAM:1.0". LINKAGE SECTION. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY A. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY B. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. 01 COPY FLOAT IN CORBA REPLACING CORBA-FLOAT BY FRET. 01 ZEROPARAM-V. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY ERROR-CODE. * PROCEDURE DIVISION USING OBJ A B ENV FRET. * MAIN. MOVE A TO FA. MOVE B TO FB. * エラーZEROPARAMをenvに設定します IF B = 0 SET CORBA-USER-EXCEPTION OF FLAGS TO TRUE MOVE FUNCTION LENG (EX-ODDEMO-CALCULATOR-ZEROPARAM) TO USER-ID-LENGTH CALL "CORBA-STRING-SET" USING USER-ID USER-ID-LENGTH EX-ODDEMO-CALCULATOR-ZEROPARAM CALL " ODDEMO-CALCULATOR-ZEROPARAM-ALLOC" USING ZEROPARAM-P SET ADDRESS OF ZEROPARAM-V TO ZEROPARAM-P MOVE 0 TO ERROR-CODE OF ZEROPARAM-V CALL "CORBA-BOA-SET-EXCEPTION" USING BOA FLAGS USER-ID ZEROPARAM-P ENV RET MOVE 0 TO FRET GO TO MAIN-END END-IF COMPUTE FRET = FA / FB. EXIT PROGRAM. MAIN-END. END PROGRAM "ODDEMO-CALCULATOR-CALCULATE"
サーバメソッドの引数に渡されるCORBA-ENVIRONMENT構造体を、サーバメソッド内部から他のメソッドを呼び出す場合の引数として使用しないでください。サーバメソッドの例外情報に、他のメソッドで発生したサーバメソッド内部の例外情報が設定されることになります。サーバメソッド内部から他のメソッドを呼び出す場合は、別のCORBA-ENVIRONMENT構造体を使用してください。
以下に正しいプログラム例、および誤ったプログラム例を示します。
[正しいプログラム例]
IDENTIFICATION DIVISION. PROGRAM-ID. "ODDEMO-CALCULATOR-CALCULATE". ENVIRONMENT DIVISION. CONFIGURATION SECTION. SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. INPUT-OUTPUT SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-A. 01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING COSNAMING-NAMINGCONTEXT BY COS-NAMING. 01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAM BY NAME. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY LOCAL-ENV. LINKAGE SECTION. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY A. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY B. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. 01 COPY FLOAT IN CORBA REPLACING CORBA-FLOAT BY FRET. * PROCEDURE DIVISION USING OBJ A B ENV FRET. * MAIN. : * * COSNAMING-NAMINGCONTEXT-BINDの例外情報は、LOCAL_ENVに設定されるため、 * ODDEMO-CALCULATOR-CALCULATEの例外情報として扱われることはない * CALL "COSNAMING-NAMINGCONTEXT-BIND" USING COS-NAMING NAME OBJ-A LOCAL-ENV. :
[誤ったプログラム例]
IDENTIFICATION DIVISION. PROGRAM-ID. "ODDEMO-CALCULATOR-CALCULATE". ENVIRONMENT DIVISION. CONFIGURATION SECTION. SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. INPUT-OUTPUT SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ-A. 01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING COSNAMING-NAMINGCONTEXT BY COS-NAMING. 01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAM BY NAME. LINKAGE SECTION. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY A. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY B. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. 01 COPY FLOAT IN CORBA REPLACING CORBA-FLOAT BY FRET. * PROCEDURE DIVISION USING OBJ A B ENV FRET. * MAIN. : * * COSNAMING-NAMINGCONTEXT-BINDが例外復帰した場合、COSNAMING-NAMINGCONTEXT-BIND * の例外情報がODDEMO-CALCULATOR-CALCULATEの例外情報として扱われてしまう * CALL "COSNAMING-NAMINGCONTEXT-BIND" USING COS-NAMING NAME OBJ-A ENV. :
サーバアプリケーションで例外を獲得する方法は、クライアントアプリケーションの例外処理と同様です。詳細については、“クライアントアプリケーションの例外処理”を参照してください。
目次
索引
![]() ![]() |