Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第6章 アプリケーションの開発(COBOL) |
ユーザ例外を設定する場合は、CORBA-STRING-SET関数でユーザ例外を識別する文字列を設定する領域を獲得し、この領域に文字列をコピーします。続いて、IDLコンパイラで生成されたALLOC関数でユーザ例外を設定する領域を獲得します。ALLOC関数名はIDLで指定したインタフェース名、例外の識別名およびALLOCをハイフン("-")でつなげた形式で指定します。IDLで定義した例外情報はCOBOLでは構造体となるので、構造体のメンバ変数に値を設定します。なお、今回使用した例では、ユーザ例外の識別情報を設定していません。最後にCORBA-BOA-SET-EXCEPTION関数で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 FLOAT IN CORBA REPLACING CORBA-FLOAT FY FA. 01 COPY FLOAT IN CORBA REPLACING CORBA-FLOAT BY FB. 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. MOVE A TO FA. MOVE B TO FB. * エラーZEROPARAMをenvに設定します IF B = 0 MOVE CORBA-USER-EXCEPTION OF FLAG TO TRUE MOVE EX-ODDEMO-CALCULATOR-ZEROPARAM OF USER-EX TO TRUE CALL "CORBA-BOA-SET-EXCEPTION" USING BOA FLAG USER-EX NULL 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. :
サーバアプリケーションで例外を獲得する方法は、クライアントアプリケーションの例外処理と同様です。詳細については、“クライアントアプリケーションの例外処理”を参照してください。
目次
索引
![]() ![]() |