Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第8章 アプリケーションの開発(OOCOBOL)> 8.8 データ型に対するマッピング

8.8.7 属性宣言(attribute)のマッピング

(1) IDLマッピング

 IDL言語で属性宣言(attribute)を指定した場合、オブジェクトデータの取得/設定を行うプロパティ(プロパティ名はIDLで定義された変数名)が定義されます。
 以降では、以下のIDL定義例をもとに説明します。

IDL言語

  module ODsample{
          interface       attrtest{
                  attribute long  para1; 
                  attribute string para2; 
                  readonly attribute long para3; 
          };
  };

OOCOBOL

   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.

(2)オブジェクトデータのプロパティ

 属性宣言により定義されるオブジェクトデータのプロパティを以下に示します。

プロパティ

機能

データプロパティ

オブジェクトデータの値の取得/設定を行います。

 プロパティの使用例を以下に示します。

  * データプロパティ(クラス以外のデータ型)
  *   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.

(3)クライアントアプリケーション例

 クライアントアプリケーション例を以下に示します。

   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".

(4)サーバアプリケーション例

 サーバアプリケーション例を以下に示します。

   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.

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005