Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
付録H ロードバランス機能のプログラミング | > H.3 ロードバランスオプションインタフェース |
ロードバランスオブジェクトグループにロードバランスオブジェクトを登録する方法について説明します。
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 );
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 ){ ... // エラー処理 }
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.NamingContext cos_naming = org.omg.CosNaming.NamingContextHelper.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 ){ ... // エラー処理 }
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".
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".
目次
索引
![]() ![]() |