| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第8章 アプリケーションの開発(OOCOBOL) | > 8.8 データ型に対するマッピング |
IDL言語で共用体unionを指定した場合、クラス(共用体クラス)でデータ宣言します。
以降では、以下のIDL定義例をもとに説明します。
[ファイル名: simple.idl]
module ODsample{
union samplefix switch(long){ // 共用体(固定長)
case 1: long para1;
case 2: long para2;
};
union samplevar switch(long){ // 共用体(可変長)
case 1: long para1;
case 2: string para2;
};
interface uniontest{
samplefix op2(
in samplefix uni1,
out samplefix uni2,
inout samplefix uni3
);
samplevar op1(
in samplevar uni1,
out samplevar uni2,
inout samplevar uni3
);
};
};
[ファイル名: ODSAMPLE-SAMPLEFIX.COB]
* 共用体クラス(共用体(固定長))
CLASS-ID. ODSAMPLE-SAMPLEFIX AS "ODSAMPLE-SAMPLEFIX"
INHERITS UNIONBASE.
*
OBJECT.
PROCEDURE DIVISION.
*
* DISCRIMINATOR PROPERTY : GET
METHOD-ID. GET PROPERTY DISCRIMINATOR.
DATA DIVISION.
LINKAGE SECTION.
01 0--RET-DISCRIMINATOR TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--RET-DISCRIMINATOR.
END METHOD.
*
* MEMBER PROPERTY : GET
METHOD-ID. GET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--VALUE
RAISING CORBA-BAD_PARAM.
END METHOD.
*
* MEMBER PROPERTY : SET
METHOD-ID. SET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION USING 0--VALUE.
END METHOD.
*
* MEMBER PROPERTY : GET
METHOD-ID. GET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--VALUE
RAISING CORBA-BAD_PARAM.
END METHOD.
*
* MEMBER PROPERTY : SET
METHOD-ID. SET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION USING 0--VALUE.
END METHOD.
*
* CLONE METHOD
METHOD-ID. CLONE AS "CLONE".
DATA DIVISION.
LINKAGE SECTION.
01 0--CLONE-OBJ OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
PROCEDURE DIVISION RETURNING 0--CLONE-OBJ.
END METHOD CLONE.
*
END OBJECT.
END CLASS ODSAMPLE-SAMPLEFIX.
[ファイル名: ODSAMPLE-SAMPLEVAR.COB]
* 共用体クラス(共用体(可変長)
CLASS-ID. ODSAMPLE-SAMPLEVAR AS "ODSAMPLE-SAMPLEVAR"
INHERITS UNIONBASE.
*
OBJECT.
PROCEDURE DIVISION.
*
* DISCRIMINATOR PROPERTY : GET
METHOD-ID. GET PROPERTY DISCRIMINATOR.
DATA DIVISION.
LINKAGE SECTION.
01 0--RET-DISCRIMINATOR TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--RET-DISCRIMINATOR.
END METHOD.
*
* MEMBER PROPERTY : GET
METHOD-ID. GET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION RETURNING 0--VALUE
RAISING CORBA-BAD_PARAM.
END METHOD.
*
* MEMBER PROPERTY : SET
METHOD-ID. SET PROPERTY PARA1.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE TYPE CORBA-LONG.
PROCEDURE DIVISION USING 0--VALUE.
END METHOD.
*
* MEMBER PROPERTY : GET
METHOD-ID. GET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE OBJECT REFERENCE CORBA-STRING.
PROCEDURE DIVISION RETURNING 0--VALUE
RAISING CORBA-BAD_PARAM.
END METHOD.
*
* MEMBER PROPERTY : SET
METHOD-ID. SET PROPERTY PARA2.
DATA DIVISION.
LINKAGE SECTION.
01 0--VALUE OBJECT REFERENCE CORBA-STRING.
PROCEDURE DIVISION USING 0--VALUE.
END METHOD.
*
* CLONE METHOD
METHOD-ID. CLONE AS "CLONE".
DATA DIVISION.
LINKAGE SECTION.
01 0--CLONE-OBJ OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
PROCEDURE DIVISION RETURNING 0--CLONE-OBJ.
END METHOD CLONE.
*
END OBJECT.
END CLASS ODSAMPLE-SAMPLEVAR.
共用体クラスで定義されているメソッド/プロパティを以下に示します。
|
メソッド/プロパティ |
機能 |
|
CLONEメソッド |
(オブジェクトメソッド)共用体クラスを複製します。 |
|
弁別子プロパティ |
弁別子情報を取得します。 |
|
メンバプロパティ |
メンバの値の取得/設定を行います。 |
メソッド/プロパティの使用例を以下に示します。
* CLONEメソッド * 共用体クラスをUNI-CLONとして複製 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-CLON USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. INVOKE UNI "CLONE" RETURNING UNI-CLON.
* 弁別子プロパティ * 弁別子(DISCRIMINATOR)の値をUNI-MEMTに取得 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-DISC TYPE CORBA-LONG. MOVE DISCRIMINATOR OF UNI TO UNI-DISC.
* メンバプロパティ(クラス以外のデータ型) * メンバPARA1の値をUNI-MEMTに取得 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-MEMT TYPE CORBA-LONG. MOVE PARA1 OF UNI TO UNI-MEMT. * メンバPARA1にUNI-MEMTを設定 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-MEMT TYPE CORBA-LONG. MOVE UNI-MEMT TO PARA1 OF UNI.
* メンバプロパティ(クラス) * メンバPARA2の値をUNI-MEMCに取得 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-MEMC USAGE OBJECT REFERENCE CORBA-STRING. SET UNI-MEMC TO PARA2 OF UNI. * メンバPARA2にUNI-MEMCを設定 01 UNI USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR. 01 UNI-MEMC USAGE OBJECT REFERENCE CORBA-STRING. SET PARA2 OF UNI TO UNI-MEMC.
クライアントアプリケーション例を以下に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "CLIENT-MAIN".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY COSNAMING--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY COSNAMING--CONST.
COPY SIMPLE--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY SIMPLE--COPY.
*
01 ORB USAGE OBJECT REFERENCE CORBA-ORB.
01 OBJ USAGE OBJECT REFERENCE CORBA-OBJECT.
01 NAMING-CONTEXT USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
01 NAME TYPE COSNAMING-NAME.
01 NAME-COMPONENT USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
01 NAME-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 NAME-KIND USAGE OBJECT REFERENCE CORBA-STRING.
*
01 EXCEPTION-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 EXCEPTION-ID-VALUE PIC X(50).
01 API-NAME PIC X(50).
*
01 TARGET-OBJ USAGE OBJECT REFERENCE ODSAMPLE-UNIONTEST.
01 FIX0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 FIX1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 FIX2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 FIX3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 VAR0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 VAR1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 VAR2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 VAR3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 STR-WORK USAGE OBJECT REFERENCE CORBA-STRING.
*
PROCEDURE DIVISION.
*
DECLARATIVES.
*
OTHER-ERROR SECTION.
USE EXCEPTION CORBA-EXCEPTION.
DISPLAY "CORBA::Exception: " API-NAME.
SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
DISPLAY " Exception-id: " EXCEPTION-ID-VALUE.
EXIT PROGRAM.
END-OTHER-ERR.
*
END DECLARATIVES.
*
MAIN SECTION.
*
MOVE "CORBA::ORB_init" TO API-NAME.
INVOKE CORBA "ORB_INIT"
USING "simple_c"
FJ-OM_ORBID
RETURNING ORB.
*
MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
USING CORBA-ORB-OBJECTID_NAMESERVICE
RETURNING OBJ.
*
INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
USING OBJ
RETURNING NAMING-CONTEXT.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING "ODsample::uniontest"
RETURNING NAME-ID.
*
INVOKE CORBA-STRING "NEW-WITH-VALUE"
USING " "
RETURNING NAME-KIND.
*
INVOKE COSNAMING-NAMECOMPONENT "NEW"
RETURNING NAME-COMPONENT.
*
SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
SET KIND OF NAME-COMPONENT TO NAME-KIND.
*
INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
USING 1
RETURNING NAME.
*
INVOKE NAME "SET-VALUE"
USING 1
NAME-COMPONENT.
*
MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
INVOKE NAMING-CONTEXT "RESOLVE"
USING NAME
RETURNING OBJ.
*
INVOKE ODSAMPLE-UNIONTEST "NARROW"
USING OBJ
RETURNING TARGET-OBJ.
*
* ODsample::samplefix
*
* SET IN PARAMETER
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING FIX1.
MOVE 10 TO PARA1 OF FIX1.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING FIX3.
MOVE 21 TO PARA2 OF FIX3.
*
MOVE "ODsample::uniontest::op2" TO API-NAME.
INVOKE TARGET-OBJ "OP2"
USING FIX1
FIX2
FIX3
RETURNING FIX0.
*
* ODsample::samplevar
*
* SET IN PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR1.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "Z".
SET PARA2 OF VAR1 TO STR-WORK.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR3.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "y".
SET PARA2 OF VAR3 TO STR-WORK.
*
MOVE "ODsample::uniontest::op1" TO API-NAME.
INVOKE TARGET-OBJ "OP1"
USING VAR1
VAR2
VAR3
RETURNING VAR0.
*
STOP RUN.
*
END-MAIN.
*
END PROGRAM "CLIENT-MAIN".
サーバアプリケーション例を以下に示します。
CLASS-ID. ODSAMPLE-UNIONTEST-IMPL
INHERITS ODSAMPLE-UNIONTEST.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY SIMPLE--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY SIMPLE--CONST.
.
*
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY SIMPLE--COPY.
*
PROCEDURE DIVISION.
*
METHOD-ID. OP1 OVERRIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STR-WORK USAGE OBJECT REFERENCE CORBA-STRING.
LINKAGE SECTION.
01 UNI1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 UNI2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 UNI3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
01 UNI0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
*
PROCEDURE DIVISION
USING UNI1
UNI2
UNI3
RETURNING UNI0
RAISING CORBA-SYSTEMEXCEPTION.
*
* SET OUT PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING UNI2.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "(*uni2)->para2".
SET PARA2 OF UNI2 TO STR-WORK.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING UNI3.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "(*uni3)->para2".
SET PARA2 OF UNI3 TO STR-WORK.
*
* SET RESULT
INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING UNI0.
INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
INVOKE STR-WORK "SET-VALUE" USING "(*uni0)->para2".
SET PARA2 OF UNI0 TO STR-WORK.
*
END METHOD OP1.
*
*
METHOD-ID. OP2 OVERRIDE.
DATA DIVISION.
LINKAGE SECTION.
01 UNI1 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 UNI2 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 UNI3 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
01 UNI0 USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
*
PROCEDURE DIVISION
USING UNI1
UNI2
UNI3
RETURNING UNI0
RAISING CORBA-SYSTEMEXCEPTION.
*
* SET OUT PARAMETER
*
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING UNI2.
MOVE 0 TO PARA1 OF UNI2.
*
* SET INOUT PARAMETER
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING UNI3.
MOVE 3 TO PARA2 OF UNI3.
*
* SET RESULT
INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING UNI0.
MOVE 4 TO PARA1 OF UNI0.
*
END METHOD OP2.
*
END OBJECT.
*
END CLASS ODSAMPLE-UNIONTEST-IMPL.
目次
索引
![]()
|