本文整理汇总了C++中portableserver::POAManager_var::activate方法的典型用法代码示例。如果您正苦于以下问题:C++ POAManager_var::activate方法的具体用法?C++ POAManager_var::activate怎么用?C++ POAManager_var::activate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类portableserver::POAManager_var
的用法示例。
在下文中一共展示了POAManager_var::activate方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
//-----------------------------------------------------------------------------
ORBHelper::ORBHelper() :
threadManager_mp(0),
orbRunYet_m(false)
{
//create a new ACE thread manager
threadManager_mp = ACE_Thread_Manager::instance();
//CORBA naming service corbaloc
ACE_CString nameService;
//get NameService Reference
nameService += acscommon::NAMING_SERVICE_NAME;
nameService +="=corbaloc::";
nameService += ACSPorts::getIP();
nameService += ":";
nameService += ACSPorts::getNamingServicePort().c_str();
nameService += "/";
nameService += acscommon::NAMING_SERVICE_NAME;
// initialize ORB
int argc = 5;
char* argv[] = { "",
"-ORBInitRef",
(char *)nameService.c_str(),
"-ORBDottedDecimalAddresses",
"1"};
//initialize the ORB
orb_mp = CORBA::ORB_init(argc, argv, "");
//ensure it's a real reference
ACE_ASSERT(!CORBA::is_nil(orb_mp));
//get the Root POA
CORBA::Object_var poaObject = orb_mp->resolve_initial_references("RootPOA");
//ensure it's a real reference
ACE_ASSERT(!CORBA::is_nil(poaObject.in()));
//narrow the Root POA
PortableServer::POA_var rootPOA = PortableServer::POA::_narrow(poaObject.in());
//ensure it's a real reference
ACE_ASSERT(!CORBA::is_nil(rootPOA.in()));
//get the POA manager
PortableServer::POAManager_var poaManager = rootPOA->the_POAManager();
//ensure it's a real reference
ACE_ASSERT(!CORBA::is_nil(poaManager.in()));
//finally activate the POA manager to start processing incoming and
//outgoing calls
poaManager->activate();
//spawn a separate thread to start the ORB in
ACE_ASSERT(threadManager_mp!=0);
threadManager_mp->spawn(ACE_THR_FUNC(ORBHelper::runOrbThread), static_cast<void *>(this));
//block until the ORB thread has really started!
while(orbRunYet_m==false)
{
ACE_OS::sleep(1);
}
ACE_OS::sleep(1);
}
示例2: run
void CORBAThread::run()
{
uint32 realCurrTime = 0;
uint32 realPrevTime = getMSTime();
uint32 prevSleepTime = 0; // used for balanced full tick time length near WORLD_SLEEP_CONST
CosNaming::NamingContext_var rootContext;
try
{
sLog.outBasic("Initializing CORBA...");
CORBA::ORB_ptr orb = CORBA::ORB_init(argnb,argtab,"omniORB4");
sLog.outBasic("Initializing CORBA POA...");
CORBA::Object_var obj = orb->resolve_initial_references("NameService");
rootContext = CosNaming::NamingContext::_narrow(obj);
PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
if( CORBA::is_nil(rootContext) ) {
sLog.outError("RootContext configuration failed !");
}
sLog.outBasic("Prepare FirstCallBack object...");
FirstCallBack_var v = FirstCallBack::_narrow(obj);
FirstCallBack_i* FCB = new FirstCallBack_i();
// Activate the object. This tells the POA that this object is
// ready to accept requests.
PortableServer::ObjectId_var FCBid = poa->activate_object(FCB);
// Obtain a reference to the object.
FirstCallBack_var FCBref = FCB->_this();
// Decrement the reference count of the object implementation, so
// that it will be properly cleaned up when the POA has determined
// that it is no longer needed.
FCB->_remove_ref();
/** TODO : activate objects there
*/
sLog.outBasic("Activate CORBA POA Manager...");
PortableServer::POAManager_var pman = poa->the_POAManager();
pman->activate();
if(CORBA::is_nil(v))
sLog.outError("Cannot Initialize FirstCallBack object");
else
{
CORBA::String_var src = (const char*) "Toto";
CORBA::String_var dest = v->nerzhulCB(src);
sLog.outError("String recv %s",dest);
}
sLog.outBasic("CORBA Thread launched successfuly !");
while(!MustStop())
{
// Updates
realCurrTime = getMSTime();
uint32 diff = getMSTimeDiff(realPrevTime,realCurrTime);
// Main update there if need
realPrevTime = realCurrTime;
if (diff <= CLUSTER_SLEEP_CONST+prevSleepTime)
{
prevSleepTime = CLUSTER_SLEEP_CONST+prevSleepTime-diff;
ACE_Based::Thread::Sleep(prevSleepTime);
}
else
prevSleepTime = 0;
}
sLog.outBasic("Destroy CORBA ORB...");
orb->destroy();
}
catch(CORBA::SystemException& ex)
{
sLog.outError("CORBA System Exception : %s",ex._name());
}
catch(CORBA::Exception& ex)
{
sLog.outError("CORBA Exception : %s",ex._name());
}
catch(omniORB::fatalException& ex)
{
sLog.outError("omniORB fatalException : file => %s / line => %d / error : %s",ex.file(),ex.line(),ex.errmsg());
}
sLog.outBasic("CORBA Thread finished successfuly !");
}
示例3: if
int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
try
{
int server_num = 0;
int die_on_ping = 1;
int ping_count = 0;
for (int i = 1; i < argc; i++)
{
ACE_TCHAR *c = argv[i];
if (ACE_OS::strcasecmp (ACE_TEXT ("-n"), c) == 0)
{
server_num = ACE_OS::atoi (argv[++i]);
}
else if (ACE_OS::strcasecmp (ACE_TEXT ("-?"),c) == 0)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("usage: %C ")
ACE_TEXT ("-n Number of the server\n"),
argv[0]));
return 1;
}
}
Server_ORBInitializer * temp_initializer;
ACE_NEW_RETURN (temp_initializer,
Server_ORBInitializer (&ping_count),
-1); // No exceptions yet!
PortableInterceptor::ORBInitializer_var initializer =
temp_initializer;
PortableInterceptor::register_orb_initializer (initializer.in ());
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj.in());
PortableServer::POAManager_var mgr = root_poa->the_POAManager();
ACE_CString poa_name_base = ACE_CString("TestObject_") + toStr (server_num);
PortableServer::POA_var test_poa;
test_poa = createPOA(root_poa.in (), true, poa_name_base.c_str ());
temp_initializer->set_poa (test_poa.in());
mgr->activate();
PortableServer::Servant_var<Test_i> test_servant =
new Test_i(server_num);
PortableServer::ObjectId_var object_id =
PortableServer::string_to_ObjectId("test_object");
//
// Activate the servant with the test POA,
// obtain its object reference, and get a
// stringified IOR.
//
test_poa->activate_object_with_id(object_id.in(), test_servant.in());
//
// Create binding between "TestService" and
// the test object reference in the IOR Table.
// Use a TAO extension to get the non imrified poa
// to avoid forwarding requests back to the ImR.
TAO_Root_POA* tpoa = dynamic_cast<TAO_Root_POA*>(test_poa.in());
obj = tpoa->id_to_reference_i(object_id.in(), false);
CORBA::String_var test_ior = orb->object_to_string(obj.in());
obj = orb->resolve_initial_references("IORTable");
IORTable::Table_var table = IORTable::Table::_narrow(obj.in());
table->bind(poa_name_base.c_str (), test_ior.in());
ACE_DEBUG ((LM_DEBUG, "Started Server %s \n",
poa_name_base.c_str()));
{
ACE_CString status_file = poa_name_base + ACE_CString(".status");
ofstream out(status_file.c_str ());
out << "started" << endl;
}
while (ping_count < die_on_ping)
{
orb->perform_work ();
}
root_poa->destroy(1,1);
orb->destroy();
}
catch(const CORBA::Exception& ex) {
ex._tao_print_exception ("Server main()");
return 1;
}
return 0;
//.........这里部分代码省略.........
示例4: get_opts
int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
int ec = 0;
try {
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
int max_run = 0;
int server_num = 0;
int init_delay_secs = 0;
const ACE_TCHAR *ior_file_name = ACE_TEXT ("");
ACE_Get_Opt get_opts (argc, argv, ACE_TEXT ("d:m:n:o:?"));
int c;
while ((c = get_opts ()) != -1)
switch (c)
{
case 'd':
init_delay_secs = ACE_OS::atoi (get_opts.opt_arg ());
break;
case 'm':
max_run = ACE_OS::atoi (get_opts.opt_arg ());
break;
case 'n':
server_num = ACE_OS::atoi (get_opts.opt_arg ());
break;
case 'o':
ior_file_name = get_opts.opt_arg ();
break;
case '?':
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("usage: %s ")
ACE_TEXT ("-d <seconds to delay before initializing POA> ")
ACE_TEXT ("-n Number of the server\n"),
argv[0]));
return 1;
break;
}
ACE_OS::sleep (init_delay_secs);
CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj.in());
PortableServer::POAManager_var mgr = root_poa->the_POAManager();
ACE_CString poa_name = ACE_CString("TestObject_") + toStr (server_num);
PortableServer::POA_var test_poa = createPOA(root_poa.in(), poa_name.c_str ());
Test_i *impl = new Test_i(orb.in());
PortableServer::Servant_var<Test_i> test_servant = impl;
PortableServer::ObjectId_var object_id =
PortableServer::string_to_ObjectId("test_object");
//
// Activate the servant with the test POA,
// obtain its object reference, and get a
// stringified IOR.
//
test_poa->activate_object_with_id(object_id.in(), test_servant.in());
//
// Create binding between "TestService" and
// the test object reference in the IOR Table.
// Use a TAO extension to get the non imrified poa
// to avoid forwarding requests back to the ImR.
TAO_Root_POA* tpoa = dynamic_cast<TAO_Root_POA*>(test_poa.in());
obj = tpoa->id_to_reference_i(object_id.in(), false);
CORBA::String_var test_ior = orb->object_to_string(obj.in());
obj = orb->resolve_initial_references("IORTable");
IORTable::Table_var table = IORTable::Table::_narrow(obj.in());
table->bind(poa_name.c_str (), test_ior.in());
if (ACE_OS::strlen (ior_file_name) > 0)
{
obj = test_poa->id_to_reference (object_id.in ());
test_ior = orb->object_to_string (obj.in ());
FILE *f = ACE_OS::fopen (ior_file_name, ACE_TEXT ("w"));
ACE_OS::fprintf (f, "%s", test_ior.in ());
ACE_OS::fclose (f);
}
//
// This server is now ready to run.
// This version does not create an IOR
// file as demonstrated in the
// Developer's Guide. It assumes that
// users create IORs for the client using
// the tao_imr utility.
//
//
// Stop discarding requests.
//
mgr->activate();
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Started Server <%C> pid = %d\n"),
//.........这里部分代码省略.........
示例5: catch
int
ACE_TMAIN (int argc,
ACE_TCHAR *argv[])
{
try
{
// Initialize the ORB first.
CORBA::ORB_var orb =
CORBA::ORB_init (argc, argv);
CORBA::Object_var obj
= orb->resolve_initial_references ("RootPOA");
// Get the POA_var object from Object_var.
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (obj.in ());
PortableServer::POAManager_var mgr
= root_poa->the_POAManager ();
mgr->activate ();
// Initialize the AVStreams components.
TAO_AV_CORE::instance ()->init (orb.in (),
root_poa.in ());
int result =
parse_args (argc,
argv);
if (result == -1)
return -1;
// Make sure we have a valid <output_file>
output_file = ACE_OS::fopen (output_file_name,
"w");
if (output_file == 0)
ACE_ERROR_RETURN ((LM_DEBUG,
"Cannot open output file %s\n",
output_file_name),
-1);
else
ACE_DEBUG ((LM_DEBUG,
"File Opened Successfully\n"));
Receiver receiver;
result =
receiver.init (argc,
argv);
if (result != 0)
return result;
orb->run ();
// Hack for now....
ACE_OS::sleep (1);
orb->destroy ();
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("receiver::init");
return -1;
}
ACE_OS::fclose (output_file);
return 0;
}
示例6: StructuredEventSupplier_i
Messenger_i::Messenger_i (CORBA::ORB_ptr orb)
: orb_ (CORBA::ORB::_duplicate (orb))
{
CORBA::Object_var naming_obj =
orb_->resolve_initial_references ("NameService");
CosNaming::NamingContext_var naming_context =
CosNaming::NamingContext::_narrow (naming_obj.in());
CosNaming::Name name;
name.length (1);
name[0].id = CORBA::string_dup ("NotifyEventChannelFactory");
CORBA::Object_var obj = naming_context->resolve (name);
CosNotifyChannelAdmin::EventChannelFactory_var notify_factory =
CosNotifyChannelAdmin::EventChannelFactory::_narrow (obj.in ());
CosNotifyChannelAdmin::ChannelID id;
CosNotification::QoSProperties initial_qos;
CosNotification::AdminProperties initial_admin;
CosNotifyChannelAdmin::EventChannel_var ec =
notify_factory->create_channel (initial_qos,
initial_admin,
id);
name[0].id = CORBA::string_dup ("MyEventChannel");
naming_context->rebind (name, ec.in());
CosNotifyChannelAdmin::AdminID adminid;
CosNotifyChannelAdmin::InterFilterGroupOperator ifgop =
CosNotifyChannelAdmin::OR_OP;
CosNotifyChannelAdmin::SupplierAdmin_var supplier_admin =
ec->new_for_suppliers (ifgop, adminid);
CosNotifyChannelAdmin::ProxyID supplieradmin_proxy_id;
CosNotifyChannelAdmin::ProxyConsumer_var proxy_consumer =
supplier_admin->obtain_notification_push_consumer(
CosNotifyChannelAdmin::STRUCTURED_EVENT,
supplieradmin_proxy_id);
StructuredEventSupplier_i *servant =
new StructuredEventSupplier_i(orb_.in());
CORBA::Object_var poa_obj = orb_->resolve_initial_references ("RootPOA");
PortableServer::POA_var poa = PortableServer::POA::_narrow (poa_obj.in ());
PortableServer::POAManager_var mgr = poa->the_POAManager ();
mgr->activate ();
PortableServer::ObjectId_var objectId = poa->activate_object (servant);
CORBA::Object_var supplier_obj = poa->id_to_reference (objectId.in ());
CosNotifyComm::StructuredPushSupplier_var supplier =
CosNotifyComm::StructuredPushSupplier::_narrow (supplier_obj.in ());
consumer_proxy_ =
CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow (proxy_consumer.in());
consumer_proxy_->
connect_structured_push_supplier (supplier.in());
}
示例7: if
//.........这里部分代码省略.........
return CORBA::Object::_nil ();
}
else
{
plan_nc = CosNaming::NamingContext::_duplicate (this->domain_nc_.in ());
}
}
// Parsing Node name and node manager ior file name
ACE_TString node_name = this->options_.node_managers_[0].c_str ();
ACE_TString node_file;
size_t npos = node_name.find ('=');
if (ACE_CString::npos != npos)
{
node_file = node_name.substring (npos + 1, node_name.length() - npos + 1);
node_name = node_name.substring (0, npos);
}
// load service modules for artifact installation service
load_artifact_installation_modules (argc, argv);
// Creating in process artifact installation service
DAnCE::ArtifactInstallation_Impl* installer = 0;
ACE_NEW_RETURN (installer,
DAnCE::ArtifactInstallation_Impl (),
CORBA::Object::_nil ());
PortableServer::Servant_var<DAnCE::ArtifactInstallation_Impl> safe_installer (installer);
ACE_CString installer_oid_str = ACE_TEXT_ALWAYS_CHAR ((node_name + ACE_TEXT (".ArtifactInstaller")).c_str ());
// Registering servant in poa
PortableServer::ObjectId_var installer_oid =
PortableServer::string_to_ObjectId (installer_oid_str.c_str());
this->nm_poa_->activate_object_with_id (installer_oid, safe_installer._retn ());
CORBA::Object_var installer_object = this->nm_poa_->id_to_reference (installer_oid.in ());
this->installer_ = DAnCE::ArtifactInstallation::_narrow (installer_object.in ());
// Getting node manager ior
CORBA::String_var installer_ior = orb->object_to_string (installer_object.in ());
// Binding ior to IOR Table
adapter->bind (installer_oid_str.c_str (), installer_ior.in ());
// Make sure that we have only one Node Manager
if (this->options_.node_managers_.size () != 1)
{
DANCE_ERROR (DANCE_LOG_EMERGENCY,
(LM_ERROR, DLINFO
ACE_TEXT ("DAnCE_NodeManager_Module::init - ")
ACE_TEXT ("For now only one node manager creation is supported.\n")));
return CORBA::Object::_nil ();
}
DANCE_DEBUG (DANCE_LOG_MINOR_EVENT,
(LM_DEBUG, DLINFO
ACE_TEXT ("DAnCE_NodeManager_Module::init - ")
ACE_TEXT ("DAnCE_NodeManager::run_main - creating NodeManager for node %C\n"),
this->options_.node_managers_[0].c_str()));
//Creating node manager servant
DAnCE::NodeManager_Impl * nm = 0;
if (this->nm_map_.find (node_name, nm) == -1)
{
DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
(LM_TRACE, DLINFO
示例8: safe_svt
//.........这里部分代码省略.........
ACE_TEXT("DomainNC context not found!\n")));
}
}
DANCE_TRACE_LOG (DANCE_LOG_TRACE,
(LM_TRACE, DLINFO ACE_TEXT("DAnCE_RepositoryManager_Module::init - ")
ACE_TEXT("Initializing the IOR Table\n")));
// Initialize IOR table
CORBA::Object_var table_object = orb->resolve_initial_references ("IORTable");
IORTable::Table_var adapter = IORTable::Table::_narrow (table_object.in ());
if (CORBA::is_nil (adapter.in ()))
{
DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR,
(LM_ERROR, DLINFO ACE_TEXT("DAnCE_RepositoryManager_Module::init - ")
ACE_TEXT("Unable to RIR the IORTable.\n")));
return CORBA::Object::_nil ();
}
//Creating repository manager servant
DAnCE::RepositoryManagerDaemon_i * rm = new DAnCE::RepositoryManagerDaemon_i (orb,
this->options_.server_address_,
this->options_.package_dir_);
PortableServer::ServantBase_var safe_svt (rm);
ACE_CString repository_manager_oid;
if (this->options_.name_ == 0)
repository_manager_oid = "RepositoryManager";
else
{
repository_manager_oid = this->options_.name_;
repository_manager_oid += ".RepositoryManager";
}
// Registering servant in poa
PortableServer::ObjectId_var oid =
PortableServer::string_to_ObjectId (repository_manager_oid.c_str());
this->rm_poa_->activate_object_with_id (oid, rm);
// Getting repository manager ior
CORBA::Object_var nm_obj = this->rm_poa_->id_to_reference (oid.in ());
CORBA::String_var ior = orb->object_to_string (nm_obj.in ());
// Binding ior to IOR Table
adapter->bind (repository_manager_oid.c_str (), ior.in ());
// Binding repository manager to DomainNC
if (!CORBA::is_nil (this->domain_nc_.in ()))
{
ACE_CString ns_name;
if (this->options_.name_ == 0)
ns_name = "RepositoryManager";
else ns_name = this->options_.name_;
DANCE_DEBUG (DANCE_LOG_MINOR_EVENT,
(LM_TRACE, DLINFO ACE_TEXT("DAnCE_RepositoryManager_Module::init - ")
ACE_TEXT("Registering NM in NC as \"%C\".\n"), ns_name.c_str ()));
CosNaming::Name name (1);
name.length (1);
name[0].id = CORBA::string_dup (ns_name.c_str ());
name[0].kind = CORBA::string_dup ("RepositoryManager");
this->domain_nc_->rebind (name, nm_obj.in ());
}
// Writing ior to file
if (0 != this->options_.ior_file_)
{
DANCE_TRACE_LOG (DANCE_LOG_TRACE, (LM_TRACE, DLINFO ACE_TEXT("DAnCE_RepositoryManager_Module::init - ")
ACE_TEXT("Writing RM IOR %C to file %C.\n"), this->options_.ior_file_, ior.in ()));
if (!DAnCE::Repository_Manager::write_IOR (this->options_.ior_file_, ior.in ()))
DANCE_ERROR (DANCE_LOG_ERROR, (LM_ERROR, DLINFO ACE_TEXT("DAnCE_RepositoryManager_Module::init - ")
ACE_TEXT("Error: Unable to write IOR to file %C\n"),
this->options_.ior_file_));
}
// Activate POA manager
PortableServer::POAManager_var mgr = this->root_poa_->the_POAManager ();
mgr->activate ();
// Finishing Deployment part
DANCE_DEBUG (DANCE_LOG_MAJOR_EVENT,
(LM_NOTICE, DLINFO ACE_TEXT("DAnCE_RepositoryManager_Module::init - ")
ACE_TEXT("DAnCE_RepositoryManager is running...\n")));
DANCE_DEBUG (DANCE_LOG_MAJOR_DEBUG_INFO,
(LM_DEBUG, DLINFO ACE_TEXT("DAnCE_RepositoryManager_Module::init - ")
ACE_TEXT("RepositoryManager IOR: %C\n"), ior.in ()));
return nm_obj._retn ();
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("DAnCE_RepositoryManager::main\t\n");
return CORBA::Object::_nil ();
}
}
示例9: ACE_TEXT
int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
DANCE_DISABLE_TRACE ();
int retval = 0;
try
{
DAnCE::Logger_Service * dlf =
ACE_Dynamic_Service<DAnCE::Logger_Service>::instance ("DAnCE_Logger");
if (dlf)
{
dlf->init (argc, argv);
}
DANCE_DEBUG (DANCE_LOG_EVENT_TRACE, (LM_TRACE, DLINFO
ACE_TEXT("SHS_Deamon - initializing ORB\n")));
CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
DANCE_DEBUG (DANCE_LOG_EVENT_TRACE, (LM_TRACE, DLINFO
ACE_TEXT("SHS_Deamon - initializing module instance\n")));
TAO::Utils::ORB_Destroyer safe_orb (orb);
CORBA::Object_var tmp = orb->resolve_initial_references ("NameService");
CosNaming::NamingContext_var domain_nc =
CosNaming::NamingContext::_narrow (tmp);
if (CORBA::is_nil (domain_nc.in ()))
{
ACE_ERROR ((LM_EMERGENCY,
"SHS_Daemon - Unable to register with the"\
" CORBA Naming Service\n"));
return -1;
}
CORBA::Object_var poa_obj
= orb->resolve_initial_references ("RootPOA");
PortableServer::POA_var poa
= PortableServer::POA::_narrow (poa_obj.in ());
PortableServer::POAManager_var mgr = poa->the_POAManager ();
PortableServer::POA_var persistent_poa;
TAO::Utils::PolicyList_Destroyer policies (2);
policies.length (2);
try
{
DANCE_DEBUG (DANCE_LOG_TRACE, (LM_TRACE,
DLINFO ACE_TEXT("SHS_Deamon - ")
ACE_TEXT("before creating the \"SHS\" POA.\n")));
policies[0] = poa->create_id_assignment_policy (
PortableServer::USER_ID);
policies[1] = poa->create_lifespan_policy (
PortableServer::PERSISTENT);
persistent_poa = poa->create_POA ("SHS",
mgr.in(),
policies);
}
catch (const PortableServer::POA::AdapterAlreadyExists &)
{
persistent_poa = poa->find_POA ("Managers", 0);
}
DAnCE::SHS_Daemon_i *shs_daemon (0);
ACE_NEW_RETURN (shs_daemon,
DAnCE::SHS_Daemon_i (orb.in ()),
0);
PortableServer::ServantBase_var safe_servant (shs_daemon);
PortableServer::ObjectId_var oid =
PortableServer::string_to_ObjectId ("SHS_Daemon");
persistent_poa->activate_object_with_id (oid, shs_daemon);
CORBA::Object_var shs_obj = persistent_poa->id_to_reference (oid.in ());
CORBA::String_var shs_ior = orb->object_to_string (shs_obj.in ());
DAnCE::Utility::write_IOR (ACE_TEXT ("SHS_Daemon.ior"),
shs_ior.in ());
CosNaming::Name name (1);
name.length (1);
name[0].id = "DAnCE.SystemHealthDaemon";
domain_nc->rebind (name, shs_obj.in ());
mgr->activate ();
orb->run ();
DANCE_DEBUG (DANCE_LOG_EVENT_TRACE, (LM_TRACE, DLINFO
ACE_TEXT("SHS_Daemon - destroying ORB\n")));
orb->destroy ();
//.........这里部分代码省略.........
示例10: createPersistentPOA
int
ImR_Activator_i::init_with_orb (CORBA::ORB_ptr orb, const Activator_Options& opts)
{
ACE_ASSERT(! CORBA::is_nil (orb));
orb_ = CORBA::ORB::_duplicate (orb);
debug_ = opts.debug ();
notify_imr_ = opts.notify_imr ();
induce_delay_ = opts.induce_delay ();
env_buf_len_ = opts.env_buf_len ();
max_env_vars_ = opts.max_env_vars ();
detach_child_ = opts.detach_child ();
if (opts.name ().length () > 0)
{
name_ = opts.name();
}
try
{
CORBA::Object_var obj = orb->resolve_initial_references ("RootPOA");
ACE_ASSERT (! CORBA::is_nil (obj.in ()));
this->root_poa_ = PortableServer::POA::_narrow (obj.in ());
ACE_ASSERT (! CORBA::is_nil(this->root_poa_.in ()));
// The activator must use a persistent POA so that it can be started before the
// locator in some scenarios, such as when the locator persists its database, and
// wants to reconnect to running activators to auto_start some servers.
this->imr_poa_ = createPersistentPOA (this->root_poa_.in (),
"ImR_Activator");
ACE_ASSERT (! CORBA::is_nil(this->imr_poa_.in ()));
obj = orb->resolve_initial_references ("POACurrent");
ACE_ASSERT (! CORBA::is_nil (obj.in ()));
this->current_ = PortableServer::Current::_narrow (obj.in ());
// Activate ourself
PortableServer::ObjectId_var id =
PortableServer::string_to_ObjectId ("ImR_Activator");
this->imr_poa_->activate_object_with_id (id.in (), this);
obj = this->imr_poa_->id_to_reference (id.in ());
ImplementationRepository::ActivatorExt_var activator =
ImplementationRepository::ActivatorExt::_narrow (obj.in ());
ACE_ASSERT(! CORBA::is_nil (activator.in ()));
CORBA::String_var ior = this->orb_->object_to_string (activator.in ());
if (this->debug_ > 0)
ORBSVCS_DEBUG((LM_DEBUG, "ImR Activator: Starting %C\n", name_.c_str ()));
// initialize our process manager.
// This requires a reactor that has signal handling.
ACE_Reactor *reactor = ACE_Reactor::instance ();
if (reactor != 0)
{
if (this->process_mgr_.open (ACE_Process_Manager::DEFAULT_SIZE, reactor) == -1)
{
ORBSVCS_ERROR_RETURN ((LM_ERROR,
"The ACE_Process_Manager didnt get initialized\n"), -1);
}
}
this->register_with_imr (activator.in ()); // no throw
PortableServer::POAManager_var poaman =
this->root_poa_->the_POAManager ();
poaman->activate ();
if (this->debug_ > 1)
{
ORBSVCS_DEBUG ((LM_DEBUG,
"ImR Activator: The Activator IOR is: <%C>\n", ior.in ()));
}
// The last thing we do is write out the ior so that a test program can assume
// that the activator is ready to go as soon as the ior is written.
if (opts.ior_filename ().length () > 0)
{
FILE* fp = ACE_OS::fopen (opts.ior_filename ().c_str (), "w");
if (fp == 0)
{
ORBSVCS_ERROR_RETURN ((LM_ERROR,
"ImR Activator: Could not open file: %s\n", opts.ior_filename ().c_str ()), -1);
}
ACE_OS::fprintf (fp, "%s", ior.in ());
ACE_OS::fclose (fp);
}
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception (
"ImR_Activator_i::init_with_orb");
throw;
}
return 0;
}