Interstage Application Server アプリケーション作成ガイド (データベース連携サービス編)
|
目次
索引
|
3.3.2.3 静的起動インタフェース
静的起動インタフェースでサーバアプリケーションを呼び出す場合の、クライアントアプリケーションの記述例について説明します。
初期化
初期化処理として、ORBのオブジェクトリファレンスを取得します。オブジェクトリファレンスを取得するには、初期化メソッドを呼び出します。記述例を以下に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "CLIENT-MAIN".
AUTHOR. OD/IDLCOMPILER VER.2.0.
INSTALLATION. IDL FILE NAME IS COBSAMPLE.IDL.
SECURITY. THIS SOURCE CODE WAS GENERATED BASE ON YOUR IDL FILE.
WHEN THIS STUB/SKELETON SOURCE CODE IS CHANGED, THE OPERATION.
GURANTEED IS NOT DONE.
DATE-WRITTEN. TUE MAY 6 11:03:40 1999
*
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.
COPY CONST IN COSTRANSACTIONS.
01 COPY CURRENT IN COSTRANSACTIONS REPLACING
COSTRANSACTIONS-CURRENT BY CURRENT-OBJ.
01 COPY BOOLEAN IN CORBA REPLACING CORBA-BOOLEAN BY REPORT-HEURISTICS.
01 COPY FLAGS IN CORBA REPLACING CORBA-FLAGS BY FLAG.
01 TEMP-BUF USAGE POINTER.
01 MESS PIC X(30).
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB.
01 COPY BOA IN CORBA REPLACING CORBA-BOA BY BOA.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM.
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 COPY BOOLEAN IN CORBA REPLACING CORBA-BOOLEAN BY RET.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY I.
01 BUFFER USAGE POINTER.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY BUF-LENGTH.
01 STR-BUF PIC X(30).
01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING COSNAMING-NAMINGCONTEXT BY
COS-NAMING.
01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAME BY NAME.
01 NAME-A USAGE POINTER.
01 COPY COSNAMING-NAMECOMPONENT IN CORBA REPLACING COSNAMING-NAMECOMPONENT BY
NAME-COMPONENT.
01 NAME-COMPONENT-A USAGE POINTER.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY INTF-INTF.
01 COPY DEFINITIONKIND IN CORBA REPLACING CORBA-DEFINITIONKIND BY DK-FLAG.
01 INTF-OPR USAGE POINTER.
01 DESCRIPTION USAGE POINTER.
*########## ORB SETTING PARAMETER #########
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY CURRENT-ARG-C.
01 CURRENT-ARG-V.
02 FILLER OCCURS 6.
03 CURRENT-ARG-V-VALUE USAGE POINTER.
01 APLI-NAME PIC X(8) VALUE "simple_c".
01 TMP-STRING-BUF PIC X(20).
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY ARG-COUNT.
*
PROCEDURE DIVISION.
MAIN.
* ODのObjectIDを設定
DISPLAY "CLIENT START!!".
* argument set : CURRENT-ARG-V-VALUE
ACCEPT CURRENT-ARG-C FROM ARG-C.
COMPUTE CURRENT-ARG-C = CURRENT-ARG-C + 1.
PERFORM VARYING ARG-COUNT FROM 1 BY 1 UNTIL ARG-COUNT > CURRENT-ARG-C
IF ARG-COUNT = 1
MOVE APLI-NAME TO TMP-STRING-BUF
ELSE
ACCEPT TMP-STRING-BUF FROM ARG-V
END-IF
MOVE FUNCTION LENG (TMP-STRING-BUF) TO STRING-LENGTH
CALL "CORBA-STRING-SET" USING
CURRENT-ARG-V-VALUE (ARG-COUNT)
STRING-LENGTH
TMP-STRING-BUF
END-PERFORM.
SET CURRENT-ARG-V-VALUE (ARG-COUNT) TO NULL.
* OD初期化
MOVE 12 TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
FJ-OM-ORB-ID.
CALL "CORBA-ORB-INIT" USING
CURRENT-ARG-C
CURRENT-ARG-V
TEMP-BUF
ENV
ORB.
* ORBIDに格納した領域を解放する
CALL "CORBA-FREE" USING TEMP-BUF.
MOVE "CORBA-ORB-INIT" TO MESS.
PERFORM ENV-CHECK |
ネーミングサービスのオブジェクトリファレンスの獲得
実行するオブジェクトをネーミングサービスから検索するために、ネーミングサービスのオブジェクトリファレンスを取得します。ネーミングサービスのオブジェクトリファレンスには、CORBAインタフェースのオブジェクトリファレンスの取り出しメソッドを使用します。処理の記述例を以下に示します。
* NamingServiceのObjectIDの設定
MOVE FUNCTION LENG ( CORBA-ORB-OBJECTID-NAMESERVICE ) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
CORBA-ORB-OBJECTID-NAMESERVICE.
* NamingServiceのオブジェクトリファレンス獲得
CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
ORB
TEMP-BUF
ENV
COS-NAMING.
* NAMESERVICEIDに格納した領域を解放する
CALL "CORBA-FREE" USING TEMP-BUF.
MOVE "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" TO MESS.
PERFORM ENV-CHECK. |
サーバアプリケーションのオブジェクトリファレンスの獲得
ネーミングサービスから、実行したいサーバアプリケーションの情報を検索します。サーバアプリケーションの情報を取り出すには、実行したいサーバアプリケーションのオブジェクト名をパラメタとしてメソッドを起動し、オブジェクトリファレンス情報が格納されているネーミングコンテキストを取得します。処理の記述例を以下に示します。
* オブジェクト名
MOVE FUNCTION LENG (STR-BUF) TO STRING-LENGTH.
MOVE "ODdemo::calculator" TO STR-BUF.
CALL "CORBA-STRING-SET" USING
IDL-ID OF NAME-COMPONENT
STRING-LENGTH
STR-BUF.
* オブジェクトのタイプ
MOVE " " TO STR-BUF.
CALL "CORBA-STRING-SET" USING
KIND OF NAME-COMPONENT
STRING-LENGTH
STR-BUF.
* オブジェクト名の数
MOVE 1 TO SEQ-LENGTH OF NAME.
MOVE 1 TO SEQ-MAXIMUM OF NAME.
* sequenceの要素数
MOVE 1 TO NUM.
* CosNamingのアクセス情報格納用のsequence領域獲得
CALL "CORBA-SEQUENCE-COSNAMING-NAMECOMPONENT-ALLOCBUF" USING
SEQ-MAXIMUM OF NAME
SEQ-BUFFER OF NAME.
MOVE FUNCTION ADDR ( NAME ) TO NAME-A.
MOVE FUNCTION ADDR ( NAME-COMPONENT ) TO NAME-COMPONENT-A.
* CoSNamingの要素設定
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
NAME-A
NUM
NAME-COMPONENT-A.
* サーバアプリケーションのオブジェクトリファレンスを獲得
CALL "COSNAMING-NAMINGCONTEXT-RESOLVE" USING
COS-NAMING
NAME
ENV
OBJ.
MOVE "COSNAMING-NAMINGCONTEXT-RESOLVE" TO MESS.
PERFORM ENV-CHECK. |
トランザクションの開始
トランザクションを開始するために、Currentインタフェースのオブジェクトリファレンスを取得し、COSTRANSACTIONS-CURRENT-BEGINメソッドを呼び出します。処理の記述例を以下に示します。
MOVE FUNCTION LENG (CORBA-ORB-OBJECTID-TRANCURRENT) TO STRING-LENGTH.
*トランザクション開始インタフェースのオブジェクトリファレンスを獲得
CALL "CORBA-STRING-SET" USING
TEMP-BUF
STRING-LENGTH
CORBA-ORB-OBJECTID-TRANCURRENT.
CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
ORB
TEMP-BUF
ENV
CURRENT-OBJ.
*トランザクション開始
CALL "COSTRANSACTIONS-CURRENT-BEGIN" USING
CURRENT-OBJ
ENV
MOVE "COSTRANSACTIONS-CURRENT-BEGIN" TO MESS.
PERFORM ENV-CHECK. |
サーバオブジェクトのメソッド起動
メソッド名はIDLで指定したモジュール名、インタフェース名およびオペレーション名を"-"(ハイフン)でつなげた形式で指定します。この例では、ODDEMO,CALCULATOR,CALCULATEが該当します。なお、メソッドを呼び出す際にネーミングサービスから取得したサーバアプリケーションのオブジェクトリファレンスとサーバプログラムで例外が発生した場合、例外情報を獲得するためにCORBA-ENVIRONMENT構造体を指定します。処理の記述例を以下に示します。
MOVE 100 TO PARAM1.
MOVE 20 TO PARAM2.
CALL "ODDEMO-CALCULATOR-CALCULATE" USING
OBJ
PARAM1
PARAM2
ENV
A-RESULT.
MOVE "ODDEMO-CALCULATOR-CALCULATE" TO MESS.
PERFORM ENV-CHECK. |
トランザクションの完了
サーバアプリケーションのメソッド呼び出しの結果を復帰状態から判断し、トランザクションの状態を決定します。トランザクションを正常に終了させる場合には、COSTRANSACTIONS-CURRENT-COMMITメソッドを呼び出し、トランザクションをコミットさせます。トランザクションを異常で終了させる場合には、COSTRANSACTIONS-CURRENT-ROLLBACKメソッドを呼び出し、トランザクションをロールバックさせます。処理の記述例を以下に示します。
*サーバアプリケーションのメソッド呼び出しの復帰状態を確認
EVALUATE TRUE
WHEN CORBA-NO-EXCEPTION OF MAJOR OF ENV
MOVE CORBA-TRUE TO REPORT-HEURISTICS
CALL "COSTRANSACTIONS-CURRENT-COMMIT" USING
CURRENT-OBJ
REPORT-HEURISTICS
ENV
WHEN CORBA-SYSTEM-EXCEPTION OF MAJOR OF ENV
CALL "COSTRANSACTIONS-CURRENT-ROLLBACK" USING
CURRENT-OBJ
ENV. |
Copyright 2008 FUJITSU LIMITED