ページの先頭行へ戻る
Interstage Application Server V13.0.0 アプリケーション作成ガイド(CORBAサービス編)
FUJITSU Software

10.4.4 インタフェースリポジトリサービスのプログラミング例

1OperationDefオブジェクトの情報の獲得

以下のIDL定義に対するOperationDefオブジェクトのパラメタ情報を獲得するプログラミングについて説明します。

module test1 {
    interface intf1  {
        long add(in long a,  in long b); 
        long sub(in long c,  in long d) ; 
    };  
};

上記のIDL定義の場合、以下のオブジェクトがインタフェースリポジトリサービスに格納されます。



(1)インタフェースリポジトリのオブジェクトリファレンスの獲得

システム提供サービスのオブジェクトリファレンスの取出しメソッドresolve_initial_references()により、ルートリポジトリのオブジェクトリファレンスを取り出します。


C言語
CORBA_Repository           intf_rep; 
/* インタフェースリポジトリのオブジェクトリファレンス獲得 */
intf_rep = CORBA_ORB_resolve_initial_references(
              orb,CORBA_ORB_ObjectId_InterfaceRepository, &env);

C++言語
CORBA::Object_ptr      obj; 
CORBA::Repository_ptr  intf_rep; 

// インタフェースリポジトリのオブジェクトリファレンス獲得
obj = orb->resolve_initial_references(
      CORBA_ORB_ObjectId_InterfaceRepository, *env ); 

// CORBA::Repositoryクラスに変換
intf_rep = CORBA::Repository::_narrow( obj );

Java言語
org.omg.CORBA.Object       Obj;
org.omg.CORBA.Repository   Rep;
// インタフェースリポジトリのオブジェクトリファレンス獲得
Obj = Orb.resolve_initial_references( "InterfaceRepository" );

// RepositoryHelperクラスに変換
Rep = org.omg.CORBA.RepositoryHelper.narrow( Obj );

COBOL
*########## インタフェースリポジトリのオブジェクトリファレンス獲得 ###########
   MOVE FUNCTION LENG (CORBA-ORB-OBJECTID-INTFREP) TO STRING-LENGTH. 
   CALL "CORBA-STRING-SET" USING
                TEMP-BUF
                STRING-LENGTH
                CORBA-ORB-OBJECTID-INTFREP. 
   CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
                ORB
                TEMP-BUF
                ENV
                OBJ.

(2)OperationDefオブジェクトのオブジェクトリファレンスの獲得

対象のOperationDefオブジェクトのリポジトリIDである“IDL:test1/intf1/add:1.0”とルートリポジトリのオブジェクトリファレンスを指定してlookup_id()を発行すると、OperationDefオブジェクトのオブジェクトリファレンスが獲得できます。


C言語
CORBA_Contained intfobj; 
/* オブジェクトの検索 */
intfobj = CORBA_Repository_lookup_id(intf_rep, "IDL:test1/intf1/add:1.0", &env);

C++言語
CORBA::Object_ptr intfobj; 
// オブジェクトの検索
intfobj = intf_rep->lookup_id( "IDL:test1/intf1/add:1.0", *env );

Java言語
org.omg.CORBA.Object      obj;

// オブジェクトの検索
obj = Rep.lookup_id( "IDL:test1/intf1/add:1.0" );

COBOL
*########## インタフェースリポジトリのオブジェクト検索 ##########
     MOVE FUNCTION LENG ("IDL:test1/intf1/add:1.0") TO STRING-LENGTH
     MOVE "IDL:test1/intf1/add:1.0" TO IN-BUF
     CALL "CORBA-STRING-SET" USING
                REPOSITORYID
                STRING-LENGTH
                IN-BUF. 
     CALL "CORBA-REPOSITORY-LOOKUP-ID" USING
                OBJ
                REPOSITORYID
                ENV
                INTF-INTF.

(3)パラメタ情報の獲得

OperationDefオブジェクトのオブジェクトリファレンスを指定してdescribeメソッドを呼び出すことにより、サーバアプリケーションが持っているメソッドの情報をインタフェースリポジトリから検索します。その結果、パラメタの情報(パラメタの名前、個数、パラメタの型など)が返されます。


C言語
CORBA_Contained_Description       *ope_des; 
CORBA_OperationDescription        *o; 
CORBA_TCKind  kind; 
CORBA_ParDescriptionSeq           *parameters; 
CORBA_ParameterDescription        *prmp; 

/* OperationDefオブジェクトのインタフェース情報の獲得  */
ope_des = CORBA_OperationDef_describe(intfobj,&env); 
/* OperationDefオブジェクト固有情報構造体の取り出し    */
o = (CORBA_OperationDescription *)ope_des->value._value; 

parameters = &(o->parameters);  /* パラメタシーケンス情報を参照  */
/* パラメタ数の参照 */
printf("Parameter number = %d\n", parameters->_length ); 
for(k=0,prmp=parameters->_buffer; k<parameters->_length; k++){
      /* パラメタの名前の参照            */
      printf("Parameter Identifier(%d) = %s\n", k, prmp[k].name); 
      /* パラメタの型の参照              */
      kind = CORBA_TypeCode_kind(prmp[k].type,&env); 
      printf("TypeCode_kind(%d) = %d\n",k,kind); 
      /* パラメタのモード(IN/OUT/INOUT)  */
      printf("Parameter_mode(%d) = %d\n",k, prmp[k].mode); 
}

C++言語
CORBA::OperationDef_ptr opef; 
CORBA::Contained::Description  *desc; 
CORBA::OperationDescription    *c; 

// OperationDefオブジェクトのインタフェース情報の獲得
opef = CORBA::OperationDef::_narrow(intfobj); 
desc   = opef->describe(*env); 
// OperationDefオブジェクト固有情報構造体の取り出し
CORBA::Any *opeany = (CORBA::Any*)(desc->value); 
c = (CORBA::OperationDescription *)opeany->value();
// パラメタシーケンス情報を参照
CORBA::ParDescriptionSeq *parseq = (CORBA::ParDescriptionSeq*)c->parameters; 
// パラメタ数の参照
printf("Parameter number = %d\n", parseq->length() ); 
for( int n = 0;n < parseq->length(); n++) {   
      CORBA::ParameterDescription *parades =
               (CORBA::ParameterDescription*)(*parseq)[m]; 
      // パラメタの名前の参照
      printf("para name = %s \n", (char*)parades->name); 
      // パラメタの型の参照
      CORBA::TypeCode
      *typecode2 = (CORBA::TypeCode *)(parades->type); 
      kind = typecode2->kind(*env); 
      printf("TypeCode_kind = %d\n",kind); 

      // パラメタのモード(IN/OUT/INOUT) 
      printf("para mode = %d \n", parades->mode); 
}

Java言語
org.omg.CORBA.OperationDef                  opef;
org.omg.CORBA.ContainedPackage.Description  desc;
org.omg.CORBA.OperationDescription          c;
org.omg.CORBA.ParameterDescription          paraseq[];

// OperationDefオブジェクトのインタフェース情報の獲得
opef = org.omg.CORBA.OperationDefHelper.narrow( obj );
desc = opef.describe();
// OperationDefオブジェクト固有情報構造体の取り出し
org.omg.CORBA.Any opeany = desc.value;
c = ( org.omg.CORBA.OperationDescription )
          org.omg.CORBA.OperationDescriptionHelper.extract( opeany );
// パラメタシーケンス情報を参照
paraseq = c.parameters;
// パラメタ数の参照
inoutcc.output( "Parameter number = " + paraseq.length );
for( i = 0; i < paraseq.length; i++ ) {
    parades = paraseq[i];
    // パラメタの名前の参照
    inoutcc.output( "para name = " + parades.name );
    // パラメタの型の参照
    typecode = parades.type;
    kind = typecode.kind().value();
    inoutcc.output( "TypeCode_kind = " + kind );

    // パラメタのモード
    inoutcc.output( "para mode = " + parades.mode.value() );
}

COBOL
*########## OperationDefオブジェクトのインタフェース情報の獲得 ##########
   CALL "CORBA-OPERATIONDEF-DESCRIBE" USING
                OBJ
                ENV
                LINK-BUF. 
*--- OperationDefオブジェクト固有情報構造体の取り出し ---
   SET ADDRESS OF LINK-CONDES TO LINK-BUF. 
   MOVE IDL-VALUE OF LINK-CONDES TO TMP-ANY. 
   MOVE ANY-VALUE OF TMP-ANY TO TEMP-BUF. 
   SET ADDRESS OF TMP-OPR TO TEMP-BUF. 
   MOVE FUNCTION ADDR(PARAMETERS OF TMP-OPR) TO TEMP-BUF. 
   SET ADDRESS OF PARDESSEQ TO TEMP-BUF. 

*---- パラメタシーケンス情報を参照 ---
*---- パラメタ数の参照 ---
   IF SEQ-LENGTH OF PARDESSEQ = 0
        DISPLAY "PARA-LENGTH = 0"
   END-IF. 
   DISPLAY "PARAMETER NUMBER = "  SEQ-LENGTH OF PARDESSEQ. 
   PERFORM TEST BEFORE
           VARYING CNT FROM 1 BY 1
               UNTIL CNT > SEQ-LENGTH OF PARDESSEQ
           CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
                 TEMP-BUF
                 CNT
                 ELEMENT-TYPE
           SET  ADDRESS OF TMP-PARA TO ELEMENT-TYPE
*----        パラメタの名前の参照     ----
           MOVE FUNCTION LENG (DSP-BUF) TO STRING-LENGTH
           CALL "CORBA-STRING-GET" USING
               NAME OF TMP-PARA
               STRING-LENGTH
               DSP-BUF
           DISPLAY "NAME=" DSP-BUF
*----        パラメタの型の参照     ----
           CALL "CORBA-TYPECODE-KIND" USING
                IDL-TYPE OF TMP-PARA
                ENV
                TMP-KIND
           DISPLAY "TYPECODE KIND=" TMP-KIND
*----        パラメタのモード(IN/OUT/INOUT)    ----
           DISPLAY "PARA MODE=" IDL-MODE OF TMP-PARA
   END-PERFORM.

例2:StructDefオブジェクト、AliasDefオブジェクトの情報の獲得

以下のIDL定義に対するStructDefオブジェクト(構造体定義)、AliasDefオブジェクト(typedef定義情報)の情報を獲得するプログラミングについて説明します。

module test3 {
    struct  struct1{
        long  para1; 
        short para2; 
    };
    typedef  string<50>  string1; 
    interface intf1  {
        long  ope1(in  struct1  struct1_data, in string1 string1_data); 
    };
};

上記のIDL定義の場合、以下のオブジェクトがインタフェースリポジトリサービスに格納されます。



(1)オブジェクトリファレンスの獲得

OperationDefオブジェクトのパラメタ情報より、StructDefオブジェクト、AliasDefオブジェクトのオブジェクトリファレンスを獲得します。


C言語
CORBA_Repository               intf_rep; 
CORBA_Contained                intfobj; 
CORBA_Contained_Description    *ope_des; 
CORBA_OperationDescription     *o; 
CORBA_TCKind                   kind; 
CORBA_ParDescriptionSeq        *parameters; 
CORBA_ParameterDescription     *prmp; 
CORBA_StructDef                StructObj; 
CORBA_AliasDef                 AliasObj; 

/* インタフェースリポジトリのオブジェクトリファレンス獲得 */
intf_rep = CORBA_ORB_resolve_initial_references(
              orb,CORBA_ORB_ObjectId_InterfaceRepository, &env); 

/* オブジェクトの検索 */
intfobj = CORBA_Repository_lookup_id(intf_rep, "IDL:test1/intf1/ope1:1.0", &env); 

/* OperationDefオブジェクトのインタフェース情報の獲得  */
ope_des = CORBA_OperationDef_describe(intfobj,&env); 
exception_check("CORBA_OperationDef_describe");
/* OperationDefオブジェクト固有情報構造体の取り出し    */
o = (CORBA_OperationDescription *)ope_des->value._value; 

parameters = &(o->parameters);  /* パラメタシーケンス情報を参照  */
for(k=0,prmp=parameters->_buffer; k<parameters->_length; k++){
      /* パラメタの型の参照              */
      kind = CORBA_IRObject__get_def_kind(prmp[k].type_def,&env); 
      if(kind == CORBA_dk_Struct) 
           /* StructObjにStructDefのオブジェクトリファレンス設定 */
           StructObj = (CORBA_StructDef)prmp[k].type_def; 
      else if(kind == CORBA_dk_Alias) 
             /* AliasObjにAliasDefのオブジェクトリファレンス設定 */
             AliasObj  = (CORBA_AliasDef)prmp[k].type_def; 
}

C++言語
CORBA::Object_ptr              obj; 
CORBA::Repository_ptr          intf_rep; 
CORBA::Contained_ptr           intfobj; 
CORBA::OperationDef_ptr        opef; 
CORBA::Contained::Description  *desc; 
CORBA::OperationDescription    *c; 
CORBA::IRObject_ptr            irobj; 
CORBA::StructDef_ptr           StructObj; 
CORBA::AliasDef_ptr            AliasObj; 
CORBA::IDLType_ptr             idltypep; 

// インタフェースリポジトリのオブジェクトリファレンス獲得
obj = orb->resolve_initial_references(
        CORBA_ORB_ObjectId_InterfaceRepository, *env ); 
// CORBA::Repositoryクラスに変換
intf_rep = CORBA::Repository::_narrow( obj ); 

// オブジェクトの検索
intfobj = intf_rep->lookup_id( "IDL:test3/intf1/ope1:1.0", *env ); 
if(intfobj == CORBA_OBJECT_NIL){ 
      /* オブジェクトが存在しない  */
      printf("Not Found Object\n");
      exit(1); 
}

// OperationDefオブジェクトのインタフェース情報の獲得
opef = CORBA::OperationDef::_narrow(intfobj); 
desc   = opef->describe(*env); 

// OperationDefオブジェクト固有情報構造体の取り出し
CORBA::Any *opeany = (CORBA::Any*)(desc->value); 
c = (CORBA::OperationDescription *)opeany->value();

// パラメタシーケンス情報を参照
CORBA::ParDescriptionSeq *parseq = (CORBA::ParDescriptionSeq*)c->parameters; 
for( int n = 0;n < parseq->length(); n++){ 
      CORBA::ParameterDescription *parades = 
                  (CORBA::ParameterDescription*)(*parseq)[n]; 
      // パラメタの型の参照
      objvar = (CORBA::Object_var*)&(parades->type_def); 
      idlobj = (CORBA::Object_ptr)(*objvar); 
      idltypep = CORBA::IDLType::_narrow( idlobj ); 
      kind  = idltypep->def_kind(*env); 
      if(kind == CORBA::dk_Struct) 
            // StructObjにStructDefのオブジェクトリファレンス設定
            StructObj = CORBA::StructDef::_narrow(idltypep); 
      else if(kind == CORBA::dk_Alias) 
            // AliasObjにAliasDefのオブジェクトリファレンス設定
            AliasObj  = CORBA::AliasDef::_narrow(idltypep); 
}

Java言語
org.omg.CORBA.Object                        Obj;
org.omg.CORBA.Repository                    Rep;
org.omg.CORBA.Object                        obj;
org.omg.CORBA.OperationDef                  opef;
org.omg.CORBA.ContainedPackage.Description  desc;
org.omg.CORBA.OperationDescription          c;
org.omg.CORBA.ParameterDescription          paraseq[];
org.omg.CORBA.ParameterDescription          parades;
int                                         kind;
org.omg.CORBA.IDLType                       idltype;
org.omg.CORBA.AliasDef                      AliasObj;
org.omg.CORBA.StructDef                     StructObj;

// インタフェースリポジトリのオブジェクトリファレンス獲得
Obj = Orb.resolve_initial_references( "InterfaceRepository" );
// RepositoryHelperクラスに変換
Rep = org.omg.CORBA.RepositoryHelper.narrow( Obj );
// オブジェクトの検索
obj = Rep.lookup_id( "IDL:test3/intf1/ope1:1.0" );
// OperationDefオブジェクトのインタフェース情報の獲得
opef = org.omg.CORBA.OperationDefHelper.narrow( obj );
desc = opef.describe();

// OperationDefオブジェクト固有情報構造体の取り出し
org.omg.CORBA.Any opeany = desc.value;
c = ( org.omg.CORBA.OperationDescription )
    org.omg.CORBA.OperationDescriptionHelper.extract( opeany );
// パラメタシーケンス情報を参照
paraseq = c.parameters;
for( i = 0; i < paraseq.length; i++ ) {
    // パラメタの型の参照
    parades = paraseq[i];
    idltype = org.omg.CORBA.IDLTypeHelper.narrow( parades.type_def );
    kind = idltype.def_kind();
    if( kind == org.omg.CORBA.DefinitionKind.dk_Struct.value() ) {
        // StructObjにStructDefのオブジェクトリファレンス設定
        StructObj = org.omg.CORBA.StructDefHelper.narrow( obj );
    } else if( kind == org.omg.CORBA.DefinitionKind.dk_Alias.value() ) {
        // AliasObjにAliasDefのオブジェクトリファレンス設定
        AliasObj = org.omg.CORBA.AliasDefHelper.narrow(stcf);
    }
}

COBOL
*########## インタフェースリポジトリのオブジェクト検索 ##########
     MOVE FUNCTION LENG ("IDL:test3/intf1/ope1:1.0") TO STRING-LENGTH. 
     MOVE "IDL:test3/intf1/ope1:1.0" TO REP-BUF. 
     CALL "CORBA-STRING-SET" USING
                REPOSITORYID
                STRING-LENGTH
                REP-BUF. 
     CALL "CORBA-REPOSITORY-LOOKUP-ID" USING
                OBJ
                REPOSITORYID
                ENV
                INTF-INTF. 
     CALL "CORBA-FREE" USING REPOSITORYID. 
*--- オブジェクトが存在するかのチェック ---
     CALL "CORBA-OBJECT-IS-NIL" USING
                INTF-INTF
                ENV
                TMP-RESULT. 
     IF TMP-RESULT = CORBA-TRUE
*--- オブジェクトは存在しない ---
          DISPLAY "Null Object Reference"
          GO TO MAIN-END
     END-IF. 

*########## OperationDefオブジェクトのインタフェース情報の獲得 ##########
   MOVE INTF-INTF TO OBJ. 
   CALL "CORBA-OPERATIONDEF-DESCRIBE" USING
                OBJ
                ENV
                LINK-BUF. 
   MOVE "CORBA-OPERATIONDEF--DESCRIBE" TO MESS. 
   PERFORM ENV-CHECK. 
*--- OperationDefオブジェクト固有情報構造体の取り出し ---
   SET ADDRESS OF LINK-CONDES TO LINK-BUF. 
   MOVE IDL-VALUE OF LINK-CONDES TO TMP-ANY. 
   MOVE ANY-VALUE OF TMP-ANY TO TEMP-BUF. 
   SET ADDRESS OF TMP-OPR TO TEMP-BUF. 
   MOVE FUNCTION ADDR(PARAMETERS OF TMP-OPR) TO TEMP-BUF. 
   SET ADDRESS OF PARDESSEQ TO TEMP-BUF. 
*---- パラメタシーケンス情報を参照 ---
   IF SEQ-LENGTH OF PARDESSEQ = 0
*---- パラメタがない ---
        DISPLAY "PARA-LENGTH = 0"
   END-IF. 
   PERFORM TEST BEFORE
           VARYING CNT FROM 1 BY 1
               UNTIL CNT > SEQ-LENGTH OF PARDESSEQ
           CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
                 TEMP-BUF
                 CNT
                 ELEMENT-TYPE
           SET  ADDRESS OF TMP-PARA TO ELEMENT-TYPE
           MOVE FUNCTION LENG (DSP-BUF) TO STRING-LENGTH
*---         パラメタの型の参照  ----
           CALL "CORBA-TYPECODE-KIND" USING
                IDL-TYPE OF TMP-PARA
                ENV
                TMP-KIND
           MOVE TMP-KIND TO TYPE-KIND
           IF  CORBA-TK-STRUCT OF  TYPE-KIND
*---              STRUCT-OBJにSTRUCTDEFのオブジェクトリファレンス設定
                MOVE TYPE-DEF OF TMP-PARA TO STRUCT-OBJ
           ELSE
                IF  CORBA-TK-ALIAS OF TYPE-KIND
*---                    ALIAS-OBJにALIASDEFのオブジェクトリファレンス設定
                      MOVE TYPE-DEF OF TMP-PARA TO  ALIAS-OBJ
                END-IF
           END-IF
   END-PERFORM.

(2)StructDefオブジェクトのメンバ情報の獲得

StructDefオブジェクトのオブジェクトリファレンスを指定してmembersメソッドを発行すると、構造体のメンバ情報(識別名、タイプコード)がリスト形式で返されます。


C言語
CORBA_StructMemberSeq          *members; 
CORBA_StructMember             *str; 

/* 構造体のメンバ情報がリスト形式で返されます */
members = CORBA_StructDef__get_members(StructObj,&env); 

/* 構造体メンバの解析                         */
for(i=0,str=members->_buffer; i<members->_length;i++){
      /* 識別名の参照                       */
      printf("Identifier     : %s\n",str[i].name); 
      /* タイプコードの参照                 */
      printf("TypeCode_kind  : %d\n",CORBA_TypeCode_kind(str[i].type, &env)); 
}

C++言語
CORBA::StructDef_ptr          strobj; 
CORBA::StructMemberSeq        *structseq; 
CORBA::StructMember           *structmem; 
// 構造体のメンバ情報がリスト形式で返されます
strobj = CORBA::StructDef::_narrow(StructObj); 
structseq = strobj->members(*env); 
for(int y=0; y < structseq->length(); y++) {
      /* 識別名の参照                       */
      structmem = (CORBA::StructMember*)(*structseq)[y]; 
      printf( "name = %s\n", (char *)structmem->name ); 
      /* タイプコードの参照                 */
      CORBA::TypeCode
      *typecode2 = (CORBA::TypeCode *)(structmem->type); 
      kind = typecode2->kind(*env); 
      printf("TypeCode_kind = %d\n",kind); 
}

Java言語
org.omg.CORBA.StructDef     strobj;
org.omg.CORBA.StructMember  structseq[];
org.omg.CORBA.StructMember  structmem;
org.omg.CORBA.TypeCode      typecode;
int                         tkind;

// 構造体のメンバ情報がリスト形式で返されます
strobj = org.omg.CORBA.StructDefHelper.narrow( StructObj );
structseq = strobj.members();
for( i = 0; i < structseq.length; i++ ) {
    // 識別名の参照
    structmem = structseq[i];
    inoutcc.output( "name = " + structmem.name );
    // タイプコードの参照
    typecode = structmem.type;
    tkind = typecode.kind().value();
    inoutcc.output( "TypeCode_kind = " + tkind );
}

COBOL
*##########  構造体のメンバ情報がリスト形式で返されます ##########
   CALL "CORBA-STRUCTDEF--GET-MEMBERS" USING
                STRUCT-OBJ
                ENV
                LINK-BUF. 
   SET ADDRESS OF STRMEMSEQ TO LINK-BUF. 
   IF SEQ-LENGTH OF STRMEMSEQ = 0
        DISPLAY "STRMEM-LENGTH = 0"
   END-IF. 
   PERFORM TEST BEFORE
           VARYING CNT FROM 1 BY 1
               UNTIL CNT > SEQ-LENGTH OF STRMEMSEQ
           CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
                 LINK-BUF
                 CNT
                 ELEMENT-TYPE

           SET  ADDRESS OF STRMEM TO ELEMENT-TYPE
*---         識別名の参照      ---
           MOVE FUNCTION LENG (DSP-BUF) TO STRING-LENGTH
           CALL "CORBA-STRING-GET" USING
               NAME OF STRMEM
               STRING-LENGTH
               DSP-BUF
           DISPLAY "NAME=" DSP-BUF
*---         タイプコードの参照   ---
           CALL "CORBA-TYPECODE-KIND" USING
                IDL-TYPE OF STRMEM
                ENV
                TMP-KIND
           DISPLAY "TYPECODE KIND=" TMP-KIND
   END-PERFORM.

(3)StringDefオブジェクトのオブジェクトリファレンスの獲得

AliasDefオブジェクトのオブジェクトリファレンスを指定してoriginal_type_defメソッドを発行すると、StringDefオブジェクトのオブジェクトリファレンスが返されます。


C言語
CORBA_IDLType  originalobj; 
/* StringDefオブジェクトのオブジェクトの獲得 */
originalobj = CORBA_AliasDef__get_original_type_def(AliasObj,&env);

C++言語
CORBA::IDLType_ptr  originalobj; 
// StringDefオブジェクトのオブジェクトの獲得
originalobj = AliasObj->original_type_def(*env);

Java言語
CORBA.IDLType         originalobj; 
// StringDefオブジェクトのオブジェクトの獲得
originalobj = AliasObj.original_type_def();

COBOL
*########## StringDefオブジェクトのオブジェクトの獲得 ##########
   CALL "CORBA-ALIASDEF--GET-ORIGINAL-TYPE-DEF" USING
                ALIAS-OBJ
                ENV
                IDLTYPE.

(4)StringDefオブジェクトの情報獲得

StringDefオブジェクトのオブジェクトリファレンスを指定してboundメソッドを発行すると、最大文字列長が返されます。


C言語
CORBA_unsigned_long bound; 
/* StringDefオブジェクトの最大文字列長の獲得 */
bound = CORBA_StringDef__get_bound(originalobj,&env);

C++言語
CORBA::ULong          len; 
CORBA::StringDef_ptr  stringobj; 
// StringDefオブジェクトの最大文字列長の獲得
stringobj = CORBA::StringDef::_narrow(originalobj); 
len = stringobj->bound(*env);

Java言語
org.omg.CORBA.StringDef     stringobj;
int                         len;
// StringDefオブジェクトの最大文字列長の獲得
stringobj = org.omg.CORBA.StringDefHelper.narrow( originalobj );
len = stringobj.bound();

COBOL
*--- StringDefオブジェクトの最大文字列長の獲得 ---
   MOVE IDLTYPE TO TMP-OBJ. 
   CALL "CORBA-STRINGDEF--GET-BOUND" USING
                TMP-OBJ
                ENV
                BOUND.