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

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

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

(1)IDLマッピング

 IDL言語で属性宣言(attribute)を指定した場合、オブジェクトのデータ設定/取得を行う関数(関数名は"モジュール名-インタフェース名--set(get)-変数名"。以降、データ設定関数/データ設定関数と呼ぶ)がIDLコンパイラで生成されます。
 以降では、以下のIDL定義例をもとに説明します。

IDL言語

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

COBOL

   IDENTIFICATION DIVISION.
   PROGRAM-ID. " ODSAMPLE-ATTRTEST--SET-PARA1".
   ENVIRONMENT DIVISION. 
   DATA DIVISION. 
   WORKING-STORAGE SECTION. 
   COPY CONST IN CORBA. 
  *オブジェクトリファレンス
    01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 
  * 設定値
    01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM
  *例外情報
    01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.

(2)クライアントアプリケーションで扱うパラメタ

 データ設定関数でデータ設定に使用するデータ域はinパラメタと同様に扱われます。また、データ取得関数でデータ取得に使用するデータ域は復帰値と同様に扱われます。このため、可変長データでは、その領域が不要になった時点でCORBA-FREE関数で領域を解放する必要があります。

  .IDENTIFICATION DIVISION.
   PROGRAM-ID. " ODSAMPLE-ATTRTEST".
   ENVIRONMENT DIVISION. 
   DATA DIVISION. 
   WORKING-STORAGE SECTION. 
   COPY CONST IN CORBA. 
    01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 
    01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 
    01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM. 
    01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET-NUM. 
    01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE. 
    01 STR1 USAGE POINTER. 
    01 STR-WORK PIC X(30). 
    01 RET-STR1 USAGE POINTER. 
    01 ERR-MSG PIC X(30). 
    01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. 

  PROCEDURE DIVISION. 

   MAIN. 

    MOVE  2 TO NUM. 
    CALL "ODSAMPLE-ATTRTEST--SET-PARA1" USING
          OBJ
          NUM
          ENV. 
    CALL "ODSAMPLE-ATTRTEST--GET-PARA1" USING
          OBJ
          ENV
          RET-NUM. 
    DISPLAY "ODsample_attrtest_get_para1 returns " RET-NUM. 
  
    MOVE "test" TO STR-WORK. 
    MOVE 5 TO LSIZE. 
    CALL "CORBA-STRING-SET" USING
          STR1 
          LSIZE 
          STR-WORK. 
    CALL "ODSAMPLE-ATTRTEST--SET-PARA2" USING
          OBJ
          STR1
          ENV. 
    CALL "ODSAMPLE-ATTRTEST--GET-PARA2" USING
          OBJ
          ENV
          RET-STR1. 

    MOVE "ODsample_attrtest__get_para2" TO ERR-MSG. 
    PERFORM ENV-CHECK. 

    DISPLAY "ODsample_attrtest_get_para2 returns "RET-STR1. 

    CALL "CORBA-FREE" USING 
          RET-STR1. 
    CALL "ODSAMPLE-ATTRTEST--GET-PARA3" USING
          OBJ
          ENV
          RET-NUM. 
         
    DISPLAY "ODsample_attrtest_get_para3 returns " RET-NUM. 
    MAIN-END. 

    ENV-CHECK SECTION. 
        EVALUATE TRUE
            WHEN CORBA-NO-EXCEPTION OF MAJOR OF ENV
                 CONTINUE
            WHEN CORBA-USER-EXCEPTION OF MAJOR OF ENV
    DISPLAY "USER-EXCEPTION   : " MESS
    MOVE FUNCTION LENG (MESS) TO STRING-LENGTH
   CALL "CORBA-STRING-GET" USING
          IDL-ID OF ENV
          STRING-LENGTH
          MESS. 
    DISPLAY "ID : " MESS
    EXIT PROGRAM
    WHEN CORBA-SYSTEM-EXCEPTION OF MAJOR OF ENV
         DISPLAY "SYSTEM-EXCEPTION : " MESS
         MOVE FUNCTION LENG (MESS) TO STRING-LENGTH
         CALL "CORBA-STRING-GET" USING
               IDL-ID OF ENV
               STRING-LENGTH
               MESS
         DISPLAY "ID : " MESS
         EXIT PROGRAM
    END-EVALUATE. 
    ENV-CHECK-END. 
    EXIT.

(3)サーバアプリケーションで扱うパラメタ

 データ設定関数でデータ設定に使用するデータ域はinパラメタと同様に扱われ、スケルトンで自動的に獲得/解放されます。データ取得関数でデータ取得に使用するデータ域は復帰値と同様に扱われます。可変長データではデータ域獲得関数で領域獲得する必要があります。獲得した領域はスケルトンで自動的に解放されます。
 関数間でデータを受け渡すにはGLOBAL句で変数を定義します(以降の例では変数GNUM,GSTRを使用)。

  IDENTIFICATION DIVISION.
  PROGRAM-ID. "ODSAMPLE-ATTRTEST-GET-PARA1".
  ENVIRONMENT DIVISION. 
  DATA DIVISION. 
  WORKING-STORAGE SECTION. 
   COPY CONST IN CORBA. 

  LINKAGE SECTION. 
   01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 
   01 ENV. 
      03 MAJOR PIC 9(9) COMP-5. 
         88 CORBA-NO-EXCEPTION VALUE 0. 
         88 CORBA-USER-EXCEPTION VALUE 1. 
         88 CORBA-SYSTEM-EXCEPTION VALUE 2. 
      03 IDL-ID USAGE POINTER. 
      03 MINOR PIC 9(9) COMP-5. 
      03 IDL-STATUS PIC 9(9) COMP-5. 
      03 PARAM USAGE POINTER. 
      03 MAGIC PIC 9(9) COMP-5. 
   01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET-NUM. 

   PROCEDURE DIVISION DIVISION USING
       OBJ
       ENV. 

  MAIN. 

   MOVE  GNUM TO RET-NUM. 

  MAIN-END. 
  END PROGRAM "ODSAMPLE-ATTRTEST--GET-PARA1".

  IDENTIFICATION DIVISION. 
  PROGRAM-ID. "ODSAMPLE-ATTRTEST--SET-PARA1".
  ENVIRONMENT DIVISION. 
  DATA DIVISION. 
 WORKING-STORAGE SECTION. 
  COPY CONST IN CORBA. 

  LINKAGE SECTION. 
   01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 
   01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM. 
   01 ENV. 
      03 MAJOR PIC 9(9) COMP-5. 
         88 CORBA-NO-EXCEPTION VALUE 0. 
         88 CORBA-USER-EXCEPTION VALUE 1. 
         88 CORBA-SYSTEM-EXCEPTION VALUE 2. 
      03 IDL-ID USAGE POINTER. 
      03 MINOR PIC 9(9) COMP-5. 
      03 IDL-STATUS PIC 9(9) COMP-5. 
      03 PARAM USAGE POINTER. 
      03 MAGIC PIC 9(9) COMP-5. 

  PROCEDURE DIVISION DIVISION USING
       OBJ
       NUM
       ENV. 

  MAIN. 

       MOVE  NUM TO GNUM. 

  MAIN-END. 
  END PROGRAM "ODSAMPLE-ATTRTEST--SET-PARA1".

  IDENTIFICATION DIVISION. 
  PROGRAM-ID. "ODSAMPLE-ATTRTEST--GET-PARA2".
  ENVIRONMENT DIVISION. 
  DATA DIVISION. 
  WORKING-STORAGE SECTION. 
  COPY CONST IN CORBA. 
   01 WSTR USAGE IS POINTER. 
  LINKAGE SECTION. 
   01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 
   01 ENV. 
      03 MAJOR PIC 9(9) COMP-5. 
         88 CORBA-NO-EXCEPTION VALUE 0. 
         88 CORBA-USER-EXCEPTION VALUE 1. 
         88 CORBA-SYSTEM-EXCEPTION VALUE 2. 
      03 IDL-ID USAGE POINTER. 
      03 MINOR PIC 9(9) COMP-5. 
      03 IDL-STATUS PIC 9(9) COMP-5. 
      03 PARAM USAGE POINTER. 
      03 MAGIC PIC 9(9) COMP-5. 
   01 STR1 USAGE IS POINTER. 

  PROCEDURE DIVISION DIVISION USING
       OBJ
       ENV
       STR1. 

  MAIN. 

      MOVE GSTR TO STR1. 
  
  MAIN-END. 
  END PROGRAM "ODSAMPLE-ATTRTEST--GET-PARA2".

  IDENTIFICATION DIVISION. 
  PROGRAM-ID. "ODSAMPLE-ATTRTEST--SET-PARA2".
  ENVIRONMENT DIVISION. 
  DATA DIVISION. 
  WORKING-STORAGE SECTION. 
  COPY CONST IN CORBA. 
  LINKAGE SECTION. 
   01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 
   01 STR1 USAGE IS POINTER. 
   01 ENV. 
      03 MAJOR PIC 9(9) COMP-5. 
         88 CORBA-NO-EXCEPTION VALUE 0. 
         88 CORBA-USER-EXCEPTION VALUE 1. 
         88 CORBA-SYSTEM-EXCEPTION VALUE 2. 
      03 IDL-ID USAGE POINTER. 
      03 MINOR PIC 9(9) COMP-5. 
      03 IDL-STATUS PIC 9(9) COMP-5. 
      03 PARAM USAGE POINTER. 
      03 MAGIC PIC 9(9) COMP-5. 
  
  PROCEDURE DIVISION DIVISION USING 
       OBJ
       STR1
       ENV. 

  MOVE STR1 TO GSTR

  MAIN-END. 
  END PROGRAM "ODSAMPLE-ATTRTEST--SET-PARA2".

  IDENTIFICATION DIVISION. 
  PROGRAM-ID. "ODSAMPLE-ATTRTEST--GET-PARA3".
  ENVIRONMENT DIVISION. 
  DATA DIVISION. 
  WORKING-STORAGE SECTION. 
  COPY CONST IN CORBA. 
  LINKAGE SECTION. 
   01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 
   01 ENV. 
      03 MAJOR PIC 9(9) COMP-5. 
         88 CORBA-NO-EXCEPTION VALUE 0. 
         88 CORBA-USER-EXCEPTION VALUE 1. 
         88 CORBA-SYSTEM-EXCEPTION VALUE 2. 
      03 IDL-ID USAGE POINTER. 
      03 MINOR PIC 9(9) COMP-5. 
      03 IDL-STATUS PIC 9(9) COMP-5. 
      03 PARAM USAGE POINTER. 
      03 MAGIC PIC 9(9) COMP-5. 
   01 COPY LONG IN CORBA REPLACING CORBA-LONG BY RET-NUM. 

  PROCEDURE DIVISION DIVISION USING
       OBJ
       ENV
       RET-NUM. 

   MAIN. 

   MOVE GNUM TO RET-NUM. 

  MAIN-END. 
  END PROGRAM "ODSAMPLE-ATTRTEST--GET-PARA3".

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

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