BankネーミングのサンプルではAccountManagerインタフェースを使用してAccountをオープンしたりアカウントの残高を問い合わせたりします。次に示すServerクラスは,名前をオブジェクトリファレンスにバインドするためのネーミングサービスの使い方を説明します。サーバは,ネーミングサーバのルートコンテキストにIORをバインド登録し,これは次にクライアントが検索します。
このサンプルでは,次の方法を理解できるようになります。
#include "CosNaming_c.hh"
#include "BankImpl.h"
// USE_STD_NS is a define setup by VisiBroker to use the std namespace
USE_STD_NS
int main(int argc, char* const* argv) {
try {
// Initialize the ORB.
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
// get a reference to the root POA
PortableServer::POA_var rootPOA = PortableServer::POA::_narrow(
orb->resolve_initial_references("RootPOA"));
// get a reference to the Naming Service root_context
CosNaming::NamingContext_var rootContext =
CosNaming::NamingContext::_narrow(
orb->resolve_initial_references("NameService"));
CORBA::PolicyList policies;
policies.length(1);
policies[(CORBA::ULong)0] =
rootPOA->create_lifespan_policy(PortableServer::PERSISTENT);
// get the POA Manager
PortableServer::POAManager_var poa_manager =
rootPOA->the_POAManager();
// Create myPOA with the right policies
PortableServer::POA_var myPOA =
rootPOA->create_POA("bank_agent_poa", poa_manager, policies);
// Create the servant
AccountManagerImpl managerServant;
// Decide on the ID for the servant
PortableServer::ObjectId_var managerId =
PortableServer::string_to_ObjectId("BankManager");
// Activate the servant with the ID on myPOA
myPOA->activate_object_with_id(managerId, &managerServant);
// Activate the POA Manager
poa_manager->activate();
CORBA::Object_var reference =
myPOA->servant_to_reference(&managerServant);
// Associate the bank manager with the name at the root context
CosNaming::Name name;
name.length(1);
name[0].id = (const char *) "BankManager";
name[0].kind = (const char *) "";
rootContext->rebind(name, reference);
cout << reference << " is ready" << endl;
// Wait for incoming requests
orb->run();
}
catch(const CORBA::Exception& e) {
cerr << e << endl;
return 1;
}
return 0;
}
import org.omg.PortableServer.*;
import org.omg.CosNaming.*;
public class Server {
public static void main(String[ ] args){
try {
// Initialize the ORB.
org.omg.CORBA.ORB orb =
org.omg.CORBA.ORB.init(args,null);
// get a reference to the rootPOA
POA rootPOA = POAHelper.narrow(
orb.resolve_initial_references("RootPOA"));
// get a reference to the Naming Service root
// context
org.omg.CORBA.Object rootObj =
orb.resolve_initial_references("NameService");
NamingContextExt root =
NamingContextExtHelper.narrow(rootObj);
// Create policies for our persistent POA
org.omg.CORBA.Policy[ ] policies = {
rootPOA.create_lifespan_policy(
LifespanPolicyValue.PERSISTENT)
};
// Create myPOA with the right policies
POA myPOA = rootPOA.create_POA(
"bank_agent_poa", rootPOA.the_POAManager(),
policies );
// Create the servant
AccountManagerImpl managerServant =
new AccountManagerImpl();
// Decide on the ID for the servant
byte[ ] managerId = "BankManager".getBytes();
// Activate the servant with the ID on myPOA
myPOA.activate_object_with_id(managerId,
managerServant);
// Activate the POA manager
rootPOA.the_POAManager().activate();
// Associate the bank manager with the name at
// the root context Note that casting is needed
// as a workaround for a JDK 1.1.x bug.
((NamingContext)root).bind(
root.to_name("BankManager"),
myPOA.servant_to_reference(managerServant));
System.out.println(
myPOA.servant_to_reference(managerServant)
+ " is ready.");
// Wait for incoming requests
orb.run();
}catch (Exception e){
e.printStackTrace();
}
}
}