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

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

8.8.4 構造体

(1)IDLマッピング

 IDL言語で構造体structを指定した場合、以下のデータ型で宣言します。

  構造体(固定長):  集団項目
  構造体(可変長):  クラス(構造体クラス)

 以降では、以下のIDL定義例をもとに説明します。

IDL言語

[ファイル名: simple.idl]

  module ODsample{
      struct samplefix {    // 構造体(固定長) 
          long   para1; 
          long   para2; 
      };
      struct samplevar {    // 構造体(可変長) 
          long   para1; 
          string para2; 
      };
      interface  structtest{
          samplefix  op2(
             in samplefix str1, 
             out samplefix str2, 
             inout samplefix str3 
          ); 
          samplevar  op1(
              in samplevar str1, 
              out samplevar str2, 
              inout samplevar str3 
          ); 
      };
  };

OOCOBOL

[ファイル名: simple--copy.cbl]

  * 集団項目(構造体(固定長)) 
   01  ODSAMPLE-SAMPLEFIX TYPEDEF.
       02  PARA1 TYPE CORBA-LONG.
       02  PARA2 TYPE CORBA-LONG.

[ファイル名: ODSAMPLE-SAMPLEVAR.COB]

  * 構造体クラス(構造体(可変長)) 
   CLASS-ID. ODSAMPLE-SAMPLEVAR AS "ODSAMPLE-SAMPLEVAR"
       INHERITS STRUCTBASE.
  *
   OBJECT.
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    COPY CORBA--COPY.
  *
  * PROPERTY
    01  PARA1 TYPE CORBA-LONG PROPERTY.
    01  PARA2 OBJECT REFERENCE CORBA-STRING PROPERTY.
  *
    PROCEDURE DIVISION.
  *
  * 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.

(2)構造体クラスのメソッド/プロパティ

 構造体クラスで定義されているメソッド/プロパティを以下に示します。

メソッド/プロパティ

機能

CLONEメソッド

(オブジェクトメソッド)構造体クラスを複製します。

メンバプロパティ

メンバの値の取得/設定を行います。

 メソッド/プロパティの使用例を以下に示します。

  * CLONEメソッド
  *   構造体クラスをSTV-CLONとして複製
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-CLON  USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   INVOKE STV "CLONE"  RETURNING STV-CLON.
  * メンバプロパティ(クラス以外のデータ型)
  *   メンバPARA1の値をSTV-MEMTに取得
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-MEMT  TYPE  CORBA-LONG.
   MOVE PARA1 OF STV  TO STV-MEMT.

  *   メンバPARA1にSTV-MEMTを設定
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-MEMT  TYPE  CORBA-LONG.
   MOVE STV-MEMT  TO PARA1 OF STV.
  * メンバプロパティ(クラス)
  *   メンバPARA2の値をSTV-MEMCに取得
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-MEMC  USAGE OBJECT REFERENCE CORBA-STRING.
   SET STV-MEMC  TO PARA2 OF STV.

  *   メンバPARA2にSTV-MEMCを設定
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-MEMC  USAGE OBJECT REFERENCE CORBA-STRING.
   SET PARA2 OF STV  TO STV-MEMC.

(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-STRUCTTEST.
   01 FIX0                TYPE                   ODSAMPLE-SAMPLEFIX.
   01 FIX1                TYPE                   ODSAMPLE-SAMPLEFIX.
   01 FIX2                TYPE                   ODSAMPLE-SAMPLEFIX.
   01 FIX3                TYPE                   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::structtest"
                          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-STRUCTTEST "NARROW"
                          USING     OBJ
                          RETURNING TARGET-OBJ.
  *
  *  ODsample::samplefix
  *
  *  SET IN PARAMETER
       MOVE 10 TO PARA1 OF FIX1.
       MOVE 11 TO PARA2 OF FIX1.
  *
  *  SET INOUT PARAMETER
       MOVE 20 TO PARA1 OF FIX3.
       MOVE 21 TO PARA1 OF FIX3.
  *
       MOVE "ODdemo::structtest::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.
       MOVE 5 TO PARA1 OF VAR1.
       INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
       INVOKE STR-WORK "SET-VALUE" USING "test".
       SET PARA2 OF VAR1 TO STR-WORK.
  *
  *  SET INOUT PARAMETER
       INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR3.
       MOVE 4 TO PARA1 OF VAR1.
       INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
       INVOKE STR-WORK "SET-VALUE" USING "pro".
       SET PARA2 OF VAR3 TO STR-WORK.
  *
       MOVE "ODdemo::structtest::op1" TO API-NAME.
       INVOKE TARGET-OBJ "OP1"
                          USING     VAR1
                                    VAR2
                                    VAR3
                          RETURNING VAR0.
  *
       STOP RUN.
  *
   END-MAIN.
  *
   END PROGRAM "CLIENT-MAIN".

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

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

   CLASS-ID.              ODSAMPLE-STRUCTTEST-IMPL
       INHERITS           ODSAMPLE-STRUCTTEST.
  *
   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 STR1              USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
     01 STR2              USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
     01 STR3              USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
     01 STR0              USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
  *
     PROCEDURE            DIVISION
                          USING     STR1
                                    STR2
                                    STR3
                          RETURNING STR0
                          RAISING   CORBA-SYSTEMEXCEPTION.
  *
  *  SET OUT PARAMETER
       INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING STR2.
       MOVE 12 TO PARA1 OF STR2.
       INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
       INVOKE STR-WORK "SET-VALUE" USING "(*str2)->para2".
       SET PARA2 OF STR2 TO STR-WORK.
  *
  *  SET INOUT PARAMETER
       INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING STR3.
       MOVE 16 TO PARA1 OF STR3.
       INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
       INVOKE STR-WORK "SET-VALUE" USING "(*str3)->para2".
       SET PARA2 OF STR3 TO STR-WORK.
  *
  *  SET RESULT
       INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING STR0.
       MOVE 11 TO PARA1 OF STR0.
       INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
       INVOKE STR-WORK "SET-VALUE" USING "(*str0)->para2".
       SET PARA2 OF STR0 TO STR-WORK.
  *
     END METHOD OP1.
  *
  *
     METHOD-ID.           OP2 OVERRIDE.
     DATA                 DIVISION.
     LINKAGE              SECTION.
     01 STR1              TYPE                   ODSAMPLE-SAMPLEFIX.
     01 STR2              TYPE                   ODSAMPLE-SAMPLEFIX.
     01 STR3              TYPE                   ODSAMPLE-SAMPLEFIX.
     01 STR0              TYPE                   ODSAMPLE-SAMPLEFIX.
  *
     PROCEDURE            DIVISION
                          USING     STR1
                                    STR2
                                    STR3
                          RETURNING STR0
                          RAISING   CORBA-SYSTEMEXCEPTION.
  *
  *  SET OUT PARAMETER
  *
       MOVE 0 TO PARA1 OF STR3.
       MOVE 1 TO PARA2 OF STR3.
  *  SET INOUT PARAMETER
       MOVE 2 TO PARA1 OF STR2.
       MOVE 3 TO PARA2 OF STR2.
  *
  *  SET RESULT
       MOVE 4 TO PARA1 OF STR0.
       MOVE 5 TO PARA2 OF STR0.
  *
     END METHOD OP2.
  *
   END OBJECT.
  *
   END CLASS ODSAMPLE-STRUCTTEST-IMPL.

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

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