Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド

[目次][索引][前へ][次へ]

13.3.1 あるインタフェースのすべてのインスタンスの検索

コードサンプル13-1および13-2は,all_instances()メソッドを使用してAccountインタフェースのすべてのインスタンスを探します。スマートエージェントへの問い合わせは,ORB::resolve_initial_references()メソッド(C++)またはORB.resolve_initial_references()メソッド(Java)に「LocationService」を渡し,そのメソッドが返したオブジェクトをObjLocation::Agent(C++)またはObjLocation.Agent(Java)にナロウすることによって行われることに注意してください。またAccountリポジトリIDのフォーマットはIDL:Bank/Account:1.0であることにも注意してください。

コードサンプル13-1 AccountManagerインタフェースの要求を満たすすべてのインスタンスの検索(C++)
 
#include "corba.h"
#include "locate_c.hh"
 
// USE_STD_NS is a define setup by VisiBroker to use the std 
// namespace USE_STD_NS
 
int main(int argc, char** argv)
{
   try {
      // ORB initialization
      CORBA::ORB_var the_orb = CORBA::ORB_init(argc, argv);
      // Obtain a reference to the Location Service
      CORBA::Object_var obj = the_orb->
         resolve_initial_references("LocationService");
      if ( CORBA::is_nil(obj) ) {
         cout << "Unable to locate initial LocationService" 
               << endl;
         return 0;
      }
      ObjLocation::Agent_var the_agent = 
            ObjLocation::Agent::_narrow(obj);
      // Query the Location Service for all implementations of
      // the Account interface
      ObjLocation::ObjSeq_var accountRefs =
         the_agent->all_instances(
         "IDL:Bank/AccountManager:1.0");
      cout << "Obtained " << accountRefs->length() 
            << "Account objects" << endl;
      for (CORBA::ULong i=0; i < accountRefs->length(); i++) {
         cout << "Stringified IOR for account #"<< i << ":" 
               << endl;
         CORBA::String_var stringified_ior(
               the_orb->object_to_string(accountRefs[i]));
         cout << stringified_ior << endl;
         cout << endl;
      }
   } catch (const CORBA::Exception& e) {
      cout << "Caught exception: " << e << endl;
      return 0;
   }
   return 1;
}

コードサンプル13-2 AccountManagerインタフェースの要求を満たすすべてのインスタンスの検索(Java)
 
// AccountFinder.java
public class AccountFinder {
   public static void main(String[ ] args){
   try {
      // Initialize the ORB.
      org.omg.CORBA.ORB orb =
                          org.omg.CORBA.ORB.init(args,null);
      com.inprise.vbroker.ObjLocation.Agent the_agent = null;
      try {
         the_agent = 
             com.inprise.vbroker.ObjLocation.AgentHelper.narrow(
             orb.resolve_initial_references("LocationService"));
      } catch (org.omg.CORBA.ORBPackage.InvalidName e){
         System.out.println(
            "Not able to resolve references " + 
            "for LocationService");
         System.exit(1);
      } catch (Exception e){
         System.out.println(
            "Unable to locate LocationService!");
         System.out.println("Caught exception: " + e);
         System.exit(1);
      }
      org.omg.CORBA.Object[ ] accountRefs = 
         the_agent.all_instances(
                      "IDL:Bank/AccountManager:1.0");
      System.out.println("Agent returned " +
         accountRefs.length  + 
         "object references");
      for (int i=0; i <accountRefs.length; i++){
         System.out.println(
             "Stringified IOR for account #" + (i+1) + ":");
         System.out.println(orb.object_to_string(
                                           accountRefs[i]));
         System.out.println();
      }
   }catch (Exception e){
      System.out.println("Caught exception: " + e);
      System.exit(1);
   }
}
}