203 CORBA::ORB_var
orb = CORBA::ORB_init(argc,argv);
207 bool needNameService =
false;
208 const char* channelName =
"EventChannel";
209 const char* factoryName =
"EventChannelFactory";
210 CosLifeCycle::Criteria criteria;
213 while ((c =
getopt(argc,argv,
"n:N:m:c:i:p:q:R:r:t:vh")) != EOF)
219 needNameService=
true;
272 needNameService=(needNameService ||
optind>=argc);
277 const char* action =
"start";
280 CORBA::Object_var obj;
284 CosNaming::NamingContext_var rootContext=CosNaming::NamingContext::_nil();
286 action=
"resolve initial reference 'NameService'";
287 obj=
orb->resolve_initial_references(
"NameService");
288 rootContext=CosNaming::NamingContext::_narrow(obj);
289 if(CORBA::is_nil(rootContext))
290 throw CORBA::OBJECT_NOT_EXIST();
292 catch (CORBA::Exception& ex) {
296 cerr<<
"Warning - failed to "<<action<<
"."<<endl;
304 action=
"convert URI from command line into object reference";
309 action=
"find Event Channel Factory in naming service";
310 obj=rootContext->resolve(
str2name(factoryName));
313 action=
"narrow object reference to event channel factory";
314 omniEvents::EventChannelFactory_var factory =
315 omniEvents::EventChannelFactory::_narrow(obj);
316 if(CORBA::is_nil(factory))
318 cerr <<
"Failed to narrow Event Channel Factory reference." << endl;
323 action=
"check factory supports EventChannel object interface";
324 CosLifeCycle::Key key;
326 key[0].id = CORBA::string_dup(
"EventChannel");
327 key[0].kind = CORBA::string_dup(
"object interface");
329 if(!factory->supports(key))
331 cerr <<
"Factory does not support Event Channel Interface! [\""
332 << factoryName <<
"\"]" << endl;
338 action=
"create EventChannel object";
339 CORBA::Object_var channelObj =factory->create_object(key, criteria);
340 if (CORBA::is_nil(channelObj))
342 cerr <<
"Channel Factory returned nil reference! [\""
343 << channelName <<
"\"]" << endl;
348 CosEventChannelAdmin::EventChannel_var channel =
349 CosEventChannelAdmin::EventChannel::_narrow(channelObj);
350 if (CORBA::is_nil(channel))
352 cerr <<
"Failed to narrow Event Channel! [\""
353 << channelName <<
"\"]" << endl;
360 CORBA::String_var sior =
orb->object_to_string(channel);
361 cout<<sior.in()<<endl;
366 if(!CORBA::is_nil(rootContext))
368 CosNaming::Name name =
str2name(channelName);
370 action=
"register (bind) EventChannel with the naming service";
371 rootContext->bind(name,channel.in());
373 catch(CosNaming::NamingContext::AlreadyBound& ex) {
374 action=
"register (rebind) EventChannel with the naming service";
375 rootContext->rebind(name,channel.in());
381 action=
"destroy orb";
389 catch (CosLifeCycle::NoFactory& ex) {
390 cerr<<
"Failed to create Event Channel: NoFactory"
391 " (interface not supported) "<<endl;
393 catch (CosLifeCycle::CannotMeetCriteria& ex) {
394 cerr<<
"Failed to create Event Channel: CannotMeetCriteria "<<endl;
396 catch (CosLifeCycle::InvalidCriteria& ex) {
397 cerr<<
"Failed to create Event Channel: InvalidCriteria "<<endl;
399 catch (CORBA::COMM_FAILURE& ex) {
400 cerr<<
"System exception, unable to "<<action<<
": COMM_FAILURE"<<endl;
402 catch (CORBA::SystemException& ex) {
403 cerr<<
"System exception, unable to "<<action;
404#if defined(HAVE_OMNIORB4)
405 cerr<<
" "<<ex._name();
406 if(ex.NP_minorString())
407 cerr<<
" ("<<ex.NP_minorString()<<
")";
411 catch (CORBA::Exception& ex) {
412 cerr<<
"CORBA exception, unable to "<<action
418 catch (omniORB::fatalException& ex) {
419 cerr<<
"Fatal Exception, unable to "<<action<<endl;
452 CosLifeCycle::Criteria& criteria,
457 CORBA::ULong criteriaLen =criteria.length();
459 criteria.length(criteriaLen);
460 criteria[criteriaLen-1].name=CORBA::string_dup(name);
461 criteria[criteriaLen-1].value<<=CORBA::ULong(atol(value));
465 CosLifeCycle::Criteria& criteria,
470 CORBA::ULong criteriaLen =criteria.length();
472 criteria.length(criteriaLen);
473 criteria[criteriaLen-1].name=CORBA::string_dup(name);
474 criteria[criteriaLen-1].value<<=value;