Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第8章 アプリケーションの開発(OOCOBOL) | > 8.8 データ型に対するマッピング |
IDL言語で属性宣言(attribute)を指定した場合、オブジェクトデータの取得/設定を行うプロパティ(プロパティ名はIDLで定義された変数名)が定義されます。
以降では、以下のIDL定義例をもとに説明します。
module ODsample{ interface attrtest{ attribute long para1; attribute string para2; readonly attribute long para3; }; };
CLASS-ID. ODSAMPLE-ATTRTEST AS "ODSAMPLE-ATTRTEST" INHERITS CORBA-OBJECT . * FACTORY. PROCEDURE DIVISION. METHOD-ID. NARROW AS "NARROW" PROTOTYPE. DATA DIVISION. LINKAGE SECTION. 01 0--PARAM OBJECT REFERENCE CORBA-OBJECT. 01 0--RESULT OBJECT REFERENCE SELF. PROCEDURE DIVISION USING 0--PARAM RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION. END METHOD NARROW. END FACTORY. * OBJECT. PROCEDURE DIVISION. * METHOD-ID. GET PROPERTY PARA1. DATA DIVISION. LINKAGE SECTION. 01 0--RESULT TYPE CORBA-LONG. PROCEDURE DIVISION RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION. END METHOD. * METHOD-ID. SET PROPERTY PARA1. DATA DIVISION. LINKAGE SECTION. 01 0--PARAM TYPE CORBA-LONG. PROCEDURE DIVISION USING 0--PARAM RAISING CORBA-SYSTEMEXCEPTION. END METHOD. * METHOD-ID. GET PROPERTY PARA2. DATA DIVISION. LINKAGE SECTION. 01 0--RESULT OBJECT REFERENCE CORBA-STRING. PROCEDURE DIVISION RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION. END METHOD. * METHOD-ID. SET PROPERTY PARA2. DATA DIVISION. LINKAGE SECTION. 01 0--PARAM OBJECT REFERENCE CORBA-STRING. PROCEDURE DIVISION USING 0--PARAM RAISING CORBA-SYSTEMEXCEPTION. END METHOD. * METHOD-ID. GET PROPERTY PARA3. DATA DIVISION. LINKAGE SECTION. 01 0--RESULT TYPE CORBA-LONG. PROCEDURE DIVISION RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION. END METHOD. * END OBJECT. END CLASS ODSAMPLE-ATTRTEST.
属性宣言により定義されるオブジェクトデータのプロパティを以下に示します。
プロパティ |
機能 |
データプロパティ |
オブジェクトデータの値の取得/設定を行います。 |
プロパティの使用例を以下に示します。
* データプロパティ(クラス以外のデータ型) * PARA1の値をATTR-LONGへ取得 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-LONG TYPE CORBA-LONG. MOVE PARA1 OF ATTR TO ATTR-LONG. * PARA1にATTR-LONGを設定 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-LONG TYPE CORBA-LONG. MOVE ATTR-LONG TO PARA1 OF ATTR.
* データプロパティ(クラス) * PARA2の値をATTR-STRへ取得 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-STR USAGE OBJECT REFERENCE CORBA-STRING. SET ATTR-STR TO PARA2 OF ATTR. * PARA2にATTR-STRを設定 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-STR USAGE OBJECT REFERENCE CORBA-STRING. SET PARA2 OF ATTR TO ATTR-STR.
* データプロパティ(readonly) * PARA3の値をATTR-LONGへ取得 01 ATTR USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST. 01 ATTR-LONG TYPE CORBA-LONG. MOVE PARA3 OF ATTR TO ATTR-LONG.
クライアントアプリケーション例を以下に示します。
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-ATTRTEST. 01 NUM TYPE CORBA-LONG. 01 RET-NUM TYPE CORBA-LONG. 01 STR1 USAGE OBJECT REFERENCE CORBA-STRING. 01 RET-STR1 USAGE OBJECT REFERENCE CORBA-STRING. 01 RET-STR1-VALUE PIC X(30). * 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::attrtest" 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-ATTRTEST "NARROW" USING OBJ RETURNING TARGET-OBJ. * * para1(SET) MOVE 2 TO NUM. MOVE "ODsample::attrtest::para1(set)" TO API-NAME. MOVE NUM TO PARA1 OF TARGET-OBJ. * * para1(GET) MOVE "ODsample::attrtest::para1(get)" TO API-NAME. MOVE PARA1 OF TARGET-OBJ TO RET-NUM. DISPLAY "ODsample::attrtest::para1 returns " RET-NUM. * * para2(SET) INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "test" RETURNING STR1. MOVE "ODsample::attrtest::para2(set)" TO API-NAME. SET PARA2 OF TARGET-OBJ TO STR1. * * para2(GET) MOVE "ODsample::attrtest::para2(get)" TO API-NAME. SET RET-STR1 TO PARA2 OF TARGET-OBJ. INVOKE RET-STR1 "GET-VALUE" RETURNING RET-STR1-VALUE. DISPLAY "ODsample::attrtest::para2 returns " RET-STR1-VALUE. * * para3(GET) MOVE "ODsample::attrtest::para3(get)" TO API-NAME. MOVE PARA3 OF TARGET-OBJ TO RET-NUM. DISPLAY "ODsample::attrtest::para3 returns " RET-NUM. * STOP RUN. * END-MAIN. * END PROGRAM "CLIENT-MAIN".
サーバアプリケーション例を以下に示します。
CLASS-ID. ODSAMPLE-ATTRTEST-IMPL INHERITS ODSAMPLE-ATTRTEST. * 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. 01 PARA1-VALUE TYPE CORBA-LONG VALUE ZERO. 01 PARA2-VALUE USAGE OBJECT REFERENCE CORBA-STRING. 01 PARA3-VALUE TYPE CORBA-LONG VALUE 10000. * PROCEDURE DIVISION. * METHOD-ID. GET PROPERTY PARA1 OVERRIDE. DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 PARAM TYPE CORBA-LONG. * PROCEDURE DIVISION RETURNING PARAM RAISING CORBA-SYSTEMEXCEPTION. * MOVE PARA1-VALUE TO PARAM. * END METHOD. * METHOD-ID. SET PROPERTY PARA1 OVERRIDE. DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 PARAM TYPE CORBA-LONG. * PROCEDURE DIVISION USING PARAM RAISING CORBA-SYSTEMEXCEPTION. * MOVE PARAM TO PARA1-VALUE. * END METHOD. * METHOD-ID. GET PROPERTY PARA2 OVERRIDE. DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 PARAM USAGE OBJECT REFERENCE CORBA-STRING. * PROCEDURE DIVISION RETURNING PARAM RAISING CORBA-SYSTEMEXCEPTION. * SET PARAM TO PARA2-VALUE. * END METHOD. * METHOD-ID. SET PROPERTY PARA2 OVERRIDE. DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 PARAM USAGE OBJECT REFERENCE CORBA-STRING. * PROCEDURE DIVISION USING PARAM RAISING CORBA-SYSTEMEXCEPTION. * SET PARA2-VALUE TO PARAM. * END METHOD. * METHOD-ID. GET PROPERTY PARA3 OVERRIDE. DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 PARAM TYPE CORBA-LONG. * PROCEDURE DIVISION RETURNING PARAM RAISING CORBA-SYSTEMEXCEPTION. * MOVE PARA3-VALUE TO PARAM. * END METHOD. * END OBJECT. * END CLASS ODSAMPLE-ATTRTEST-IMPL.
目次
索引
![]() ![]() |