ロードバランスオブジェクトグループにロードバランスオブジェクトを登録する方法について説明します。
![]()
ロードバランスオブジェクトを登録するには、事前にロードバランスオプションの環境を設定する必要があります。設定方法については、“高信頼性システム運用ガイド”(Enterprise Editionで提供)の“ロードバランス機能を利用した場合の設計”を参照してください。
(1) C言語のプログラミング例
ORBインタフェースのオブジェクトリファレンスを取り出すCORBA_ORB_resolve_initial_references()により、ロードバランスオプションとネーミングサービスのオブジェクトリファレンスを取り出します。パラメタとして、LBO_ObjectId_LoadBalancingOption, CORBA_ORB_ObjectId_NameServiceを指定します。
次に、シーケンスCosNaming_NameのバッファポインタにCosNaming_NameComponentの配列のポインタを設定し、次に取り出したいロードバランスオブジェクトグループ名を指定します。今回の例では、ルートネーミングコンテキスト配下に登録されたロードバランスオブジェクトグループ名“LBG_A”にオブジェクトを登録する例を示します。
次に、ロードバランスオプションのISOD_LBO_resolve_LBG()を用いて、ロードバランスオブジェクトグループのオブジェクトリファレンスを取り出します。
最後にロードバランスオブジェクトグループに登録したいオブジェクトリファレンスを指定して、ISOD_LBG_bind()を用いて、ロードバランスオブジェクトグループにオブジェクトリファレンスを登録します。
CORBA_ORB orb;
CosNaming_NamingContext cos_naming;
ISOD_LBO lbo;
ISOD_LBG lbg;
CosNaming_Name name;
CosNaming_NameComponent name_component[1];
CORBA_Environment env;
CORBA_Object obj;
orb = CORBA_ORB_init(¤t_argc, argv, FJ_OM_ORBid, &env );
/* ネーミングサービスのオブジェクトリファレンス獲得 */
cos_naming = CORBA_ORB_resolve_initial_references(
orb,
CORBA_ORB_ObjectId_NameService,
&env );
/* ロードバランスオプションのオブジェクトリファレンス獲得 */
lbo = CORBA_ORB_resolve_initial_references(
orb,
LBO_ObjectId_LoadBalancingOption,
&env );
/* LBG_Aのシーケンス領域の設定 */
name._length = name._maximum = 1;
name._buffer = name_component;
name_component[0].id = "LBG_A";
name_component[0].kind = "";
/* ロードバランスオブジェクトグループの取得 */
lbg = ISOD_LBO_resolve_LBG(
lbo,
cos_naming,
&name,
&env );
obj = ...; /* 何らかの方法でObjectを作成し、取得します。*/
/* ロードバランスオブジェクトグループにオブジェクトリファレンスを登録 */
ISOD_LBG_bind(
lbg,
obj,
&env ); (2)C++言語のプログラミング例
ORBインタフェースのオブジェクトリファレンスを取り出すCORBA::ORB::resolve_initial_references()によりロードバランスオプションとネーミングサービスのオブジェクトリファレンスを取り出します。パラメタとして、LBO_ObjectId_LoadBalancingOption, CORBA_ORB_ObjectId_NameServiceを指定します。
次に、シーケンスCosNaming::Nameのバッファポインタ(CosNaming::NameComponent_varの配列)の領域をCosNaming::Name::allocbuf()を使って獲得し、次に取り出したいロードバランスオブジェクトグループ名前指定します。その後、上記ポインタをパラメタに指定し、演算子newを使ってシーケンスを作成します。今回の例では、ルートネーミングコンテキスト配下に登録されたロードバランスオブジェクトグループ名“LBG_A”にオブジェクトを登録する例を示します。
次に、ロードバランスオプションのISOD::LBO::resolve_LBG()を用いて、ロードバランスオブジェクトグループのオブジェクトリファレンスを取り出します。
最後にロードバランスオブジェクトグループに登録したいオブジェクトリファレンスを指定して、ISOD::LBG::bind()を用いて、ロードバランスオブジェクトグループにオブジェクトリファレンスを登録します。
CORBA::ORB_ptr orb;
CosNaming::Name_ptr name;
CosNaming::NameComponent_var *name_component;
CORBA::Environment env;
CORBA::Object_ptr obj;
try {
orb = CORBA::ORB_init( current_argc, argv, FJ_OM_ORBid, env );
// ネーミングサービスのオブジェクトリファレンス獲得
CORBA::Object_ptr
obj = orb->resolve_initial_references(
CORBA_ORB_ObjectId_NameService, env );
CosNaming::NamingContext_ptr
NamingContext_obj = CosNaming::NamingContext::_narrow( obj );
CORBA::release( obj );
// ロードバランスオプションのオブジェクトリファレンス獲得
obj = orb->resolve_initial_references(
LBO_ObjectId_LoadBalancingOption, env );
ISOD::LBO_ptr
LBO_obj = ISOD::LBO::_narrow( obj );
CORBA::release( obj );
// LBG_Aのシーケンス領域の設定
name_component = CosNaming::Name::allocbuf(1);
name_component[0]->id = (const CORBA::Char *)"LBG_A";
name_component[0]->kind = (const CORBA::Char *)"";
name = new CosNaming::Name(1, 1, name_component,CORBA_TRUE);
// ロードバランスオブジェクトグループの取得
ISOD::LBG_ptr
LBG_obj = LBO_obj->resolve_LBG( NamingContext_obj, *name, env );
delete name;
obj = ...; // 何らかの方法でObjectを作成し、取得します。
// ロードバランスオブジェクトグループにオブジェクトリファレンスを登録
LBG_obj->bind( obj, env );
CORBA::release( NamingContext_obj );
CORBA::release( LBO_obj );
CORBA::release( LBG_obj );
}
catch ( CORBA::Exception &e ){
... // エラー処理
}(3)Java言語のプログラム例
ORBインタフェースのオブジェクトリファレンスを取り出すorg.omg.CORBA.ORB.resolve_initial_references()によりロードバランスオプションとネーミングサービスのオブジェクトリファレンスを取り出します。パラメタとして、“FJ_LoadBalancingOption”,“NameService”を指定します。
次に、org.omg.CosNaming.NameComponentに取り出したいロードバランスオブジェクトグループ名を指定します。今回の例では、ルートネーミングコンテキスト配下に登録されたロードバランスオブジェクトグループ名“LBG_A”にオブジェクトを登録する例を示します。
次に、ロードバランスオプションのcom.fujitsu.ObjectDirector.ISOD.LBO.resolve_LBG()を用いて、ロードバランスオブジェクトグループのオブジェクトリファレンスを取り出します。
最後にロードバランスオブジェクトグループに登録したいオブジェクトリファレンスを指定して、com.fujitsu.ObjectDirector.ISOD.LBG.bind()を用いて、ロードバランスオブジェクトグループにオブジェクトリファレンスを登録します。
try {
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
// ネーミングサービスのオブジェクトリファレンス獲得
org.omg.CORBA.Object obj =
orb.resolve_initial_references("NameService");
org.omg.CosNaming.NamingContextExt cos_naming =
org.omg.CosNaming.NamingContextExtHelper.narrow(obj);
// ロードバランスオプションのオブジェクトリファレンス獲得
obj = orb.resolve_initial_references("FJ_LoadBalancingOption");
com.fujitsu.ObjectDirector.ISOD.LBO lbo =
com.fujitsu.ObjectDirector.ISOD.LBOHelper.narrow(obj);
// LBG_Aのシーケンス領域の設定
org.omg.CosNaming.NameComponent [] name =
new org.omg.CosNaming.NameComponent[1];
name[0] = new org.omg.CosNaming.NameComponent("LBG_A", "");
// ロードバランスオブジェクトグループの取得
com.fujitsu.ObjectDirector.ISOD.LBG lbg = lbo.resolve_LBG(cos_naming, name);
obj = ...; // 何らかの方法でObjectを作成し、取得します。
// ロードバランスオブジェクトグループにオブジェクトリファレンスを登録
lbg.bind(obj);
}
catch( Exception e ){
... // エラー処理
}(4)COBOL言語のプログラミング例
ORBインタフェースのオブジェクトリファレンスを取り出すCORBA-ORB-RESOLVE-INITIAL-REFERENCESにより、ロードバランスオプションとネーミングサービスのオブジェクトリファレンスを取り出します。パラメタとして、LBO-OBJECTID、CORBA-ORB-OBJECTID-NAMESERVICEを指定します。
次に、COSNAMING-NAMEおよびCOSNAMING-NAMECOMPONENTに取り出したいロードバランスオブジェクトグループ名を指定します。今回の例では、ルートネーミングコンテキスト配下に登録されたロードバランスオブジェクトグループ名“LBG_A”にオブジェクトを登録する例を示します。
次に、ロードバランスオプションのISOD-LBO-RESOLVE-LBGを用いて、ロードバランスオブジェクトグループのオブジェクトリファレンスを取り出します。
最後にロードバランスオブジェクトグループに登録したいオブジェクトリファレンスを指定して、ISOD-LBG-BINDを用いて、ロードバランスオブジェクトグループにオブジェクトリファレンスを登録します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "BIND".
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.
COPY CONST-LBO 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-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 COPY ISOD-LBO IN CORBA REPLACING ISOD-LBO BY LBO.
01 COPY ISOD-LBG IN CORBA REPLACING ISOD-LBG BY LBG.
*########## 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 TMP-STRING USAGE POINTER.
01 TMP-STRING-BUF PIC X(50).
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY ELEMENT-NUMBER.
*
PROCEDURE DIVISION.
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.
* ネーミングサービスのオブジェクトリファレンス獲得
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.
* ロードバランスオプションのオブジェクトリファレンス獲得
MOVE FUNCTION LENG ( LBO-OBJECTID ) TO STRING-LENGTH.
CALL "CORBA-STRING-SET" USING
TMP-STRING
STRING-LENGTH
LBO-OBJECTID.
CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
ORB
TMP-STRING
ENV
LBO.
CALL "CORBA-FREE" USING TMP-STRING.
* LBG_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 "LBG_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 "ISOD-LBO-RESOLVE-LBG" USING
LBO
COS-NAMING
NAME
ENV
LBG.
* 何らかの方法でObjectを作成し、取得します。
MOVE ... TO OBJ.
* ロードバランスオブジェクトグループにオブジェクトリファレンスを登録
CALL "ISOD-LBG-BIND" USING
LBG
OBJ
ENV.
EXIT PROGRAM.
END PROGRAM "BIND".(5)OOCOBOL言語のプログラミング例
ORBインタフェースのオブジェクトリファレンスを取り出すCORBA-ORB-RESOLVE-INITIAL-REFERENCESにより、ロードバランスオプションとネーミングサービスのオブジェクトリファレンスを取り出します。パラメタとして、“FJ_LoadBalancingOption”、CORBA-ORB-OBJECTID-NAMESERVICEを指定します。
次に、COSNAMING-NAMEおよびCOSNAMING-NAMECOMPONENTに取り出したいロードバランスオブジェクトグループ名を指定します。今回の例では、ルートネーミングコンテキスト配下に登録されたロードバランスオブジェクトグループ名“LBG_A”にオブジェクトを登録する例を示します。
次に、ロードバランスオプションのISOD-LBO-RESOLVE-LBGを用いて、ロードバランスオブジェクトグループのオブジェクトリファレンスを取り出します。
最後にロードバランスオブジェクトグループに登録したいオブジェクトリファレンスを指定して、ISOD-LBG-BINDを用いて、ロードバランスオブジェクトグループにオブジェクトリファレンスを登録します。
IDENTIFICATION DIVISION.
PROGRAM-ID. "BIND".
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
COPY CORBA--REP.
COPY COSNAMING--REP.
COPY NSLBO--REP.
.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY CORBA--CONST.
COPY COSNAMING--CONST.
COPY NSLBO--CONST.
.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CORBA--COPY.
COPY COSNAMING--COPY.
COPY NSLBO--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 LBO USAGE OBJECT REFERENCE ISOD-LBO.
01 LBG USAGE OBJECT REFERENCE ISOD-LBG.
*
PROCEDURE DIVISION.
*
DECLARATIVES.
*
OTHER-ERROR SECTION.
USE EXCEPTION CORBA-EXCEPTION.
* エラー処理
...
END-OTHER-ERR.
*
END DECLARATIVES.
*
MAIN SECTION.
INVOKE CORBA "ORB_INIT"
USING "simple_c"
FJ-OM_ORBID
RETURNING ORB.
* ネーミングサービスのオブジェクトリファレンス獲得
INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
USING CORBA-ORB-OBJECTID_NAMESERVICE
RETURNING OBJ.
INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
USING OBJ
RETURNING NAMING-CONTEXT.
*ロードバランスオプションのオブジェクトリファレンス獲得
INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
USING "FJ_LoadBalancingOption"
RETURNING OBJ.
INVOKE ISOD-LBO "NARROW"
USING OBJ
RETURNING LBO.
* LBG_Aのシーケンス領域の設定
INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH" USING 1 RETURNING NAME.
INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "LBG_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
* ロードバランスオブジェクトグループの取得
INVOKE LBO "RESOLVE_LBG"
USING NAMING-CONTEXT
NAME
RETURNING OBJ.
INVOKE ISOD-LBG "NARROW"
USING OBJ
RETURNING LBG.
* 何らかの方法でObjectを作成し、取得します。
MOVE ... TO OBJ.
* ロードバランスオブジェクトグループにオブジェクトリファレンスを登録
INVOKE LBG "BIND"
USING OBJ.
*
STOP RUN.
*
END-MAIN.
*
END PROGRAM "BIND".