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

付録G ロードバランス機能のプログラミング> G.3 ロードバランスオプションインタフェース

G.3.1 ロードバランスオブジェクトグループへのオブジェクトの登録

 ロードバランスオブジェクトグループにロードバランスオブジェクトを登録する方法について説明します。


 ロードバランスオブジェクトを登録するには、事前にロードバランスオプションの環境を設定する必要があります。設定方法については、“高信頼性システム運用ガイド”(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(&current_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".

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

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