| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第9章 ネーミングサービスのプログラミング | > 9.7 ネーミングサービスのプログラミング例 |
ネーミングサービスで、以下のようにネーミングコンテキスト配下にオブジェクトが格納されている場合に、ネーミングコンテキスト配下のオブジェクトリファレンスのリストをどのように取得するかについて説明します。

CONTEXT_Aのリストを取得するプログラムの例を以下に示します。
まず、オブジェクトリファレンスの検索と同じ方法で、リストを取得したいネーミングコンテキストのオブジェクトリファレンスを取得します。
次に、CosNaming_NamingContext_list()を使ってリストを取得します。結果は、第3パラメタCosNaming_BindingListに第2パラメタで指定して個数設定されます。もし、第2パラメタで指定した個数より、含まれるリストの数が多い場合には、残りの検索のためのオブジェクトCosNaming_BindingIteratorにオブジェクトリファレンスが設定されます。第2パラメタで指定した数より含まれるリストの数が少ない場合には、CosNaming_BindingIteratorにはCORBA_OBJECT_NILが、また、CosNaming_BindingListには、そのリストの個数分のデータが設定されます。
CosNaming_BindingIteratorを使って残りのリストを取得するには、CosNaming_BindingIterator_next_one()かCosNaming_BindingIterator_next_n()を使用します。以下のプログラムではまずCosNaming_BindingIterator_next_n()を使って最初の40個のオブジェクトリファレンスを検索し、次に_length 0のシーケンスが返るまで、CosNaming_BindingIterator_next_one()で残りのオブジェクトリファレンスのリストを検索しています。
検索終了後、CosNaming_BindingIterator_destroy()を呼び出してサーバ側の領域を解放する必要があります(クライアント側の領域はCORBA_Object_release()を使用します)。
CosNaming_NamingContext cos_naming, context_obj;
CosNaming_Name name;
CosNaming_NameComponent name_component;
CORBA_ORB orb;
CORBA_Environment env;
CORBA_Object obj;
CosNaming_BindingList *bl, *bl2;
CosNaming_BindingIterator bi;
CORBA_long how_many;
/* ルート(CORBA_ORB_ObjectId_NameService)オブジェクトの取得 */
cos_naming = CORBA_ORB_resolve_initial_references(
orb,
CORBA_ORB_ObjectId_NameService,
&env );
/* "CONTEXT_A"のネーミングコンテキストの取り出し */
name._length = name._maximum = 1;
name._buffer = &name_component;
name._buffer[0].id = "CONTEXT_A";
name._buffer[0].kind = "";
context_obj = CosNaming_NamingContext_resolve(
cos_naming,
&name,
&env );
/* CONTEXT_A下のオブジェクトリファレンスのリストの取り出し */
name._length = name._maximum = 1;
name._buffer = &name_component;
name._buffer[0].id = "CONTEXT_A";
name._buffer[0].kind = "";
how_many = 40;
CosNaming_NamingContext_list(
cos_naming,
how_many,
&bl,
&bi,
&env );
/* CONTEXT_A下の残りのオブジェクトリファレンスの取り出し */
if( bi != CORBA_OBJECT_NIL ){
CORBA_free(bl);
CosNaming_BindingIterator_next_n( bi, how_many, &bl2, &env );
do {
CosNaming_BindingIterator_next_one(
bi, &b, &env );
... /* 結果を処理する処理 */
CORBA_free(b);
}
while( env._major != CORBA_NO_EXCEPTION &&
b->binding_name._length != 0 );
CosNaming_BindingIterator_destroy( bi, &env );
}
まず、オブジェクトリファレンスの検索と同じ方法で、リストを取得したいネーミングコンテキストのオブジェクトリファレンスを取得します。
次に、CosNaming::NamingContext::list()を使ってリストを取得します。結果は、第2パラメタCosNaming::BindingListに第1パラメタで指定して個数設定されます。もし、第1パラメタで指定した個数より、含まれるリストの数が多い場合には、残りの検索のためのオブジェクトCosNaming::BindingIteratorにオブジェクトリファレンスが設定されます。第2パラメタで指定した数より含まれるリストの数が少ない場合には、CosNaming::BindingIteratorにはNILオブジェクトが、また、CosNaming::BindingListには、そのリストの個数分のデータが設定されます。
CosNaming::BindingIteratorを使って残りのリストを取得するには、CosNaming::BindingIterator::next_one()かCosNaming::BindingIterator::next_n()を使用します。以下のプログラムではまずCosNaming::BindingIterator::next_n()を使って最初の40個のオブジェクトリファレンスを検索し、次に_length 0のシーケンスが返るまで、CosNaming::BindingIterator::next_one()で残りのオブジェクトリファレンスのリストを検索しています。
検索終了後、CosNaming::BindingIterator::destroy()を呼び出してサーバ側の領域を解放する必要があります(クライアント側の領域はCORBA::release()を使用します)。
CORBA::ORB_ptr orb;
CosNaming::NamingContext_ptr cos_naming;
CosNaming::Name_ptr name;
CosNaming::NameComponent_var *name_component;
CosNaming::BindingList_ptr bl;
CosNaming::BindingIterator bi;
CosNaming::Binding_ptr b;
CORBA::Object_ptr obj;
CosNaming::NamingContext_ptr cos_naming, new_context;
CORBA::Long how_many;
CORBA::Environment env;
CORBA::Long len;
try {
// ルート(CORBA_ORB_ObjectId_NameService)オブジェクトの取得
orb = CORBA::ORB_init( argc, argv, FJ_OM_ORBid, env );
obj = orb->resolve_initial_references(
CORBA_ORB_ObjectId_NameService,
env );
cos_naming = CosNaming::NamingContext::_narrow(obj);
CORBA::release(obj);
// ルートからCONTEXT_Aを取得
CosNaming::NameComponent_var *name_component_var =
CosNaming::Name::allocbuf(1);
name_component[0]->id = (const CORBA::Char *)"CONTEXT_A";
name_component[0]->kind = (const CORBA::Char *)"";
name = new CosNaming::Name(1,1,name_component_var,CORBA_TRUE);
obj = cos_naming->resolve( *name, env );
delete name;
new_context = CosNaming::NamingContext::_narrow(obj);
CORBA::release(obj);
// CONTEXT_A下のオブジェクトリファレンスのリストの取り出し
how_many = 40;
cos_naming->list( how_many, bl, bi, env );
... // 結果を処理する処理
delete bl;
// CONTEXT_A下の残りのオブジェクトリファレンスの取り出し
if( bi->is_nil(env) != CORBA_TRUE ){
bi->next_n( how_many, bl, env );
... // 結果を処理する処理
do {
bi->next_one(b,env);
// 結果を処理する処理
len = b->binding_name->length();
delete b;
}
while( len != 0 );
}
bi->destroy(env);
CORBA::release(bi);
}
catch ( CORBA::Exception &e ){
... // エラー処理
}
まず、オブジェクトリファレンスの検索と同じ方法で、リストを取得したいネーミングコンテキストのオブジェクトリファレンスを取得します。
次に、org.omg.CosNaming.NamingContext.list()を使ってリストを取得します。結果は、第2パラメタorg.omg.CosNaming.BindingListHolder.valueに第1パラメタで指定した個数だけorg.omg.CosNaming.Bindingの配列が設定されます。もし、第1パラメタで指定した個数より、含まれるリストの数が多い場合には、残りの検索のためのオブジェクトorg.omg.CosNaming.BindingIteratorHolder.valueにorg.omg.CosNaming.BindingIteratorのオブジェクトリファレンスが設定されます。第2パラメタで指定した数より含まれるリストの数が少ない場合には、org.omg.CosNaming.BindingIterator.valueにはnullが、またorg.omg.CosNaming.BindingListHolder.valueには、そのリストの個数分のデータが設定されます。
org.omg.CosNaming.BindingIteratorを使って残りのリストを取得するには、org.omg.CosNaming.BindingIterator.next_one()かorg.omg.CosNaming.BindingIterator.next_n()を使用します。以下のプログラムではまずorg.omg.CosNaming.BindingIterator.next_n()を使って最初の40個のオブジェクトリファレンスを検索し、次にlength 0のシーケンスが返るまで、org.omg.CosNaming.BindingIterator.next_one()で残りのオブジェクトリファレンスのリストを検索しています。
public class List {
public static void main(String args[]){
try {
int i, j;
// ルート(CORBA_ORB_ObjectId_NameService)オブジェクトの取得
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(arg,null);
org.omg.CORBA.Object obj = orb.resolve_initial_references("NameService");
org.omg.CosNaming.NamingContextExt con_obj =
org.omg.CosNaming.NamingContextExtHelper.narrow(obj);
// ルートからCONTEXT_Aを取得
org.omg.CosNaming.NameComponent [] name =
new org.omg.CosNaming.NameComponent[1];
name[0] = new org.omg.CosNaming.NameComponent("CONTEXT_A", "");
org.omg.CORBA.Object tmp_obj = con_obj.resolve( name );
org.omg.CosNaming.NamingContextExt new_context =
org.omg.CosNaming.NamingContextExtHelper.narrow(tmp_obj);
// CONTEXT_A下のオブジェクトリファレンスのリストの取り出し
int how_many = 40;
org.omg.CosNaming.BindingListHolder bl_var =
new org.omg.CosNaming.BindingListHolder();
org.omg.CosNaming.BindingIteratorHolder bi_var =
new org.omg.CosNaming.BindingIteratorHolder();
new_context.list( how_many, bl_var, bi_var );
... // 結果を処理する処理
// CONTEXT_A下の残りのオブジェクトリファレンスの取り出し
if( bi_var.value != null)) {
org.omg.CosNaming.BindingIterator bi_obj = bi_var.value;
bi_obj.next_n( how_many, bl_var );
... // 結果を処理する処理
org.omg.CosNaming.BindingHolder b_var =
new org.omg.CosNaming.BindingHolder();
do {
bi_obj.next_one( b_var );
... // 結果を処理する処理
}
while( b_var.value.binding_name.length != 0 );
}
}
catch( Exception e ){
... // エラー処理
}
}
}
まず、オブジェクトリファレンスの検索と同じ方法で、リストを取得したいネーミングコンテキストのオブジェクトリファレンスを取得します。
次に、COSNAMING-NAMINGCONTEXT-LISTを使ってリストを取得します。結果は、BLで指定されたCOSNAMING-BINDINGLISTにHOW-MANYで指定された個数分設定されます。もし、HOW-MANYで指定された個数より、含まれるリストの数が多い場合、残りの検索のためのオブジェクトCOSNAMING-BINDINGITERATORにオブジェクトリファレンスが設定されます。
COSNAMING-BINDINGITERATORを使って残りのリストを取得するには、COSNAMING-BINDINGITERATOR-NEXT-ONEかCOSNAMING-BINDINGITERATOR-NEXT-Nを使用します。以下のプログラムではまずCOSNAMING-BINDINGITERATOR-NEXT-Nを使って最初の40個のオブジェクトリファレンスを検索し、次にCOSNAMING-BINDINGITERATOR-NEXT-ONEで残りのオブジェクトリファレンスのリストを検索しています。
IDENTIFICATION DIVISION.
PROGRAM-ID. "LIST-TEST".
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
ARGUMENT-NUMBER IS ARG-C
ARGUMENT-VALUE IS ARG-V
SYMBOLIC CONSTANT
COPY SYMBOL-CONST IN CORBA.
.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
*########## NAMING SETTING PARAMETER #########
01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING COSNAMING-NAMINGCONTEXT
BY COS-NAMING.
01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING COSNAMING-NAMINGCONTEXT
BY CONTEXT-OBJ.
01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAME BY NAME.
01 NAME-A USAGE POINTER.
01 COPY COSNAMING-NAMECOMPONENT IN CORBA REPLACING COSNAMING-NAMECOMPONENT
BY NAME-COMPONENT.
01 NAME-COMPONENT-A USAGE POINTER.
01 BL USAGE POINTER.
01 BL2 USAGE POINTER.
01 COPY COSNAMING-BINDINGITERATOR IN CORBA REPLACING COSNAMING-BINDINGITERATOR
BY BI.
01 B USAGE POINTER.
*########## ORB SETTING PARAMETER #########
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY CURRENT-ARG-C.
01 CURRENT-ARG-V.
02 FILLER OCCURS 6.
03 CURRENT-ARG-V-VALUE USAGE POINTER.
01 APLI-NAME PIC X(8) VALUE "simple_c".
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY ARG-COUNT.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM.
01 TMP-STRING USAGE POINTER.
01 TMP-STRING-BUF PIC X(20).
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY ELEMENT-NUMBER.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY HOW-MANY.
01 COPY BOOLEAN IN CORBA REPLACING CORBA-BOOLEAN BY ROOP-FLAG.
01 COPY BOOLEAN IN CORBA REPLACING CORBA-BOOLEAN BY RET.
*
LINKAGE SECTION.
01 COPY COSNAMING-BINDING IN CORBA REPLACING COSNAMING-BINDING
BY B-VALUE.
PROCEDURE DIVISION.
* ObjectDirector初期化
ACCEPT CURRENT-ARG-C FROM ARG-C.
COMPUTE CURRENT-ARG-C = CURRENT-ARG-C + 1.
PERFORM VARYING ARG-COUNT FROM 1 BY 1 UNTIL ARG-COUNT > CURRENT-ARG-C
IF ARG-COUNT = 1
MOVE APLI-NAME TO TMP-STRING-BUF
ELSE
ACCEPT TMP-STRING-BUF FROM ARG-V
END-IF
MOVE FUNCTION LENG (TMP-STRING-BUF) TO STRING-LENGTH
CALL "CORBA-STRING-SET" USING
CURRENT-ARG-V-VALUE (ARG-COUNT)
STRING-LENGTH
TMP-STRING-BUF
END-PERFORM.
SET CURRENT-ARG-V-VALUE (ARG-COUNT) TO NULL.
MOVE FUNCTION LENG(FJ-OM-ORB-ID) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TMP-STRING
STRING-LENGTH
FJ-OM-ORB-ID.
CALL "CORBA-ORB-INIT" USING
CURRENT-ARG-C
CURRENT-ARG-V
TMP-STRING
ENV
ORB.
CALL "CORBA-FREE" USING TMP-STRING.
* ルート(CORBA-ORB-OBJECTID-NAMESERVICE)オブジェクトの取得
MOVE FUNCTION LENG ( CORBA-ORB-OBJECTID-NAMESERVICE ) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TMP-STRING
STRING-LENGTH
CORBA-ORB-OBJECTID-NAMESERVICE.
CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
ORB
TMP-STRING
ENV
COS-NAMING.
CALL "CORBA-FREE" USING TMP-STRING.
* "CONTEXT_A"のネーミングコンテキストの取り出し
MOVE 1 TO SEQ-LENGTH OF NAME.
MOVE 1 TO SEQ-MAXIMUM OF NAME.
CALL "CORBA-SEQUENCE-COSNAMING-NAMECOMPONENT-ALLOCBUF" USING
SEQ-MAXIMUM OF NAME
SEQ-BUFFER OF NAME.
MOVE "CONTEXT_A" TO TMP-STRING-BUF.
MOVE FUNCTION LENG (TMP-STRING-BUF) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
IDL-ID OF NAME-COMPONENT
STRING-LENGTH
TMP-STRING-BUF.
MOVE " " TO TMP-STRING-BUF.
CALL "CORBA-STRING-SET" USING
KIND OF NAME-COMPONENT
STRING-LENGTH
TMP-STRING-BUF.
MOVE FUNCTION ADDR ( NAME ) TO NAME-A.
MOVE 1 TO ELEMENT-NUMBER.
MOVE FUNCTION ADDR ( NAME-COMPONENT ) TO NAME-COMPONENT-A.
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
NAME-A
ELEMENT-NUMBER
NAME-COMPONENT-A.
CALL "COSNAMING-NAMINGCONTEXT-RESOLVE" USING
COS-NAMING
NAME
ENV
CONTEXT-OBJ.
* CONTEXT_A下のオブジェクトリファレンスのリストの取り出し
MOVE 40 TO HOW-MANY.
CALL "COSNAMING-NAMINGCONTEXT-LIST" USING
CONTEXT-OBJ
HOW-MANY
BL
BI
ENV.
* CONTEXT_A下の残りのオブジェクトリファレンスの取り出し
IF NOT BI = CORBA-OBJECT-NIL THEN
CALL "CORBA-FREE" USING BL
CALL "COSNAMING-BINDINGITERATOR-NEXT-N" USING
BI
HOW-MANY
BL2
ENV
RET
MOVE CORBA-TRUE TO ROOP-FLAG
PERFORM UNTIL ROOP-FLAG = CORBA-FALSE
CALL "COSNAMING-BINDINGITERATOR-NEXT-ONE" USING
BI
B
ENV
RET
* 結果を処理する処理
EVALUATE TRUE
WHEN CORBA-NO-EXCEPTION OF ENV
CONTINUE
WHEN CORBA-USER-EXCEPTION OF ENV
WHEN CORBA-USER-EXCEPTION OF ENV
EXIT PROGRAM
END-EVALUATE
SET ADDRESS OF B-VALUE TO B
IF SEQ-LENGTH OF B-VALUE = 0
MOVE CORBA-FALSE TO ROOP-FLAG
ELSE
CALL "CORBA-FREE" USING B
END-IF
END-PERFORM
CALL "COSNAMING-BINDINGITERATOR-DESTROY" USING
BI
ENV
RET
CALL "CORBA-OBJECT-RELEASE" USING
BI
ENV
END-IF.
EXIT PROGRAM.
END PROGRAM "LIST-TEST".
まず、オブジェクトリファレンスの検索と同じ方法で、リストを取得したいネーミングコンテキストのオブジェクトリファレンスを取得します。
次に、COSNAMING-NAMINGCONTEXT-LISTを使ってリストを取得します。結果は、BLで指定されたCOSNAMING-BINDINGLISTにHOW-MANYで指定された個数分設定されます。もし、HOW-MANYで指定された個数より、含まれるリストの数が多い場合、残りの検索のためのオブジェクトCOSNAMING-BINDINGITERATORにオブジェクトリファレンスが設定されます。
COSNAMING-BINDINGITERATORを使って残りのリストを取得するには、COSNAMING-BINDINGITERATOR-NEXT_ONEかCOSNAMING-BINDINGITERATOR-NEXT_Nを使用します。以下のプログラムではまずCOSNAMING-BINDINGITERATOR-NEXT_Nを使って最初の40個のオブジェクトリファレンスを検索し、次にCOSNAMING-BINDINGITERATOR-NEXT_ONEで残りのオブジェクトリファレンスのリストを検索しています。
IDENTIFICATION DIVISION.
PROGRAM-ID. "CLIENT-MAIN".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY COSNAMING--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY COSNAMING--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
*
01 ORB USAGE OBJECT REFERENCE CORBA-ORB.
01 BOA USAGE OBJECT REFERENCE CORBA-BOA.
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 NEW-CONTEXT USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
01 BL TYPE COSNAMING-BINDINGLIST.
01 BI USAGE OBJECT REFERENCE COSNAMING-BINDINGITERATOR.
01 NAME-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 NAME-KIND USAGE OBJECT REFERENCE CORBA-STRING.
01 HOW-MANY TYPE CORBA-UNSIGNED-LONG.
01 B USAGE OBJECT REFERENCE COSNAMING-BINDING.
01 LEN TYPE CORBA-UNSIGNED-LONG.
*
01 EXCEPTION-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 EXCEPTION-ID-VALUE PIC X(50).
01 API-NAME PIC X(50).
*
01 I TYPE CORBA-UNSIGNED-LONG.
*
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 "Naming"
FJ-OM_ORBID
RETURNING ORB.
*
MOVE "CORBA::ORB::BOA_init" TO API-NAME.
INVOKE ORB "BOA_INIT"
USING "Naming"
CORBA-BOA_OAID
RETURNING BOA.
*
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 SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH" USING 1 RETURNING NAME.
INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "CONTEXT_A" 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 NAME "SET-VALUE" USING 1 NAME-COMPONENT.
*
MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
INVOKE NAMING-CONTEXT "RESOLVE"
USING NAME
RETURNING OBJ.
INVOKE COSNAMING-NAMINGCONTEXT "NARROW" USING OBJ RETURNING NEW-CONTEXT.
*
MOVE 40 TO HOW-MANY.
MOVE "CosNaming::NamingContext::list" TO API-NAME.
INVOKE NEW-CONTEXT "LIST" USING HOW-MANY BL BI.
*
IF BI NOT = NULL
MOVE "CosNaming::BindingIterator::next_n" TO API-NAME
INVOKE BI "NEXT_N" USING HOW-MANY BL
MOVE "CosNaming::BindingIterator::next_one" TO API-NAME
SET NAME TO BINDING_NAME OF B
MOVE SEQ-LENGTH OF NAME TO LEN
PERFORM UNTIL LEN = 0
MOVE "CosNaming::BindingIterator::next_one" TO API-NAME
SET NAME TO BINDING_NAME OF B
MOVE SEQ-LENGTH OF NAME TO LEN
END-PERFORM
MOVE "CosNaming::BindingIterator::destroy" TO API-NAME
INVOKE BI "DESTROY"
END-IF.
*
STOP RUN.
*
END-MAIN.
*
END PROGRAM "CLIENT-MAIN".
目次
索引
![]()
|