Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第8章 アプリケーションの開発(OOCOBOL) | > 8.9 データ型に対するマッピング |
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.
目次
索引
![]() ![]() |