| 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.
目次
索引
![]()
|