Echo * POA_Echo::_this (void) { TAO_Stub *stub = this->_create_stub (); TAO_Stub_Auto_Ptr safe_stub (stub); ::CORBA::Object_ptr tmp = CORBA::Object_ptr (); ::CORBA::Boolean const _tao_opt_colloc = stub->servant_orb_var ()->orb_core ()->optimize_collocation_objects (); ACE_NEW_RETURN ( tmp, ::CORBA::Object (stub, _tao_opt_colloc, this), 0 ); ::CORBA::Object_var obj = tmp; (void) safe_stub.release (); typedef ::Echo STUB_SCOPED_NAME; return TAO::Narrow_Utils<STUB_SCOPED_NAME>::unchecked_narrow ( obj.in (), _TAO_Echo_Proxy_Broker_Factory_function_pointer ); }
template<typename T> T * AbstractBase_Narrow_Utils<T>::unchecked_narrow (CORBA::AbstractBase_ptr obj) { if (CORBA::is_nil (obj)) { return T::_nil (); } T_ptr proxy = T::_nil (); try { if (obj->_is_objref ()) { TAO_Stub* stub = obj->_stubobj (); bool const collocated = !CORBA::is_nil (stub->servant_orb_var ().in ()) && stub->optimize_collocation_objects () && obj->_is_collocated (); ACE_NEW_RETURN (proxy, T (obj->_stubobj (), collocated, obj->_servant ()), T::_nil ()); } else { proxy = dynamic_cast<T *> (obj); if (proxy) proxy->_add_ref (); } } catch (const ::CORBA::Exception&) { } return proxy; }
Test::Roundtrip * POA_Test::Roundtrip::_this (void) { TAO_Stub *stub = this->_create_stub (); TAO_Stub_Auto_Ptr safe_stub (stub); ::CORBA::Object_ptr tmp = CORBA::Object_ptr (); ::CORBA::Boolean const _tao_opt_colloc = stub->servant_orb_var ()->orb_core ()->optimize_collocation_objects (); ACE_NEW_RETURN ( tmp, ::CORBA::Object (stub, _tao_opt_colloc, this), 0); ::CORBA::Object_var obj = tmp; (void) safe_stub.release (); typedef ::Test::Roundtrip STUB_SCOPED_NAME; return TAO::Narrow_Utils<STUB_SCOPED_NAME>::unchecked_narrow ( obj.in ()); }
TAO::Collocation_Strategy Invocation_Adapter::collocation_strategy (CORBA::Object_ptr object) { TAO::Collocation_Strategy strategy = TAO::TAO_CS_REMOTE_STRATEGY; TAO_Stub *stub = object->_stubobj (); if (!CORBA::is_nil (stub->servant_orb_var ().in ()) && stub->servant_orb_var ()->orb_core () != 0) { TAO_ORB_Core *orb_core = stub->servant_orb_var ()->orb_core (); if (orb_core->collocation_resolver ().is_collocated (object)) { switch (orb_core->get_collocation_strategy ()) { case TAO_ORB_Core::TAO_COLLOCATION_THRU_POA: { // check opportunity if (ACE_BIT_ENABLED (this->collocation_opportunity_, TAO::TAO_CO_THRU_POA_STRATEGY)) { strategy = TAO::TAO_CS_THRU_POA_STRATEGY; } else { if (TAO_debug_level > 0) { TAOLIB_ERROR ((LM_ERROR, ACE_TEXT ("Invocation_Adapter::collocation_strategy, ") ACE_TEXT ("request for through poa collocation ") ACE_TEXT ("without needed collocation opportunity.\n"))); } // collocation object, but no collocation_opportunity for Thru_poa throw ::CORBA::INTERNAL ( CORBA::SystemException::_tao_minor_code ( TAO::VMCID, EINVAL), CORBA::COMPLETED_NO); } break; } case TAO_ORB_Core::TAO_COLLOCATION_DIRECT: { if (ACE_BIT_ENABLED (this->collocation_opportunity_, TAO::TAO_CO_DIRECT_STRATEGY) && (object->_servant () != 0)) { strategy = TAO::TAO_CS_DIRECT_STRATEGY; } else { if (TAO_debug_level > 0) { TAOLIB_ERROR ((LM_ERROR, ACE_TEXT ("Invocation_Adapter::collocation_strategy, ") ACE_TEXT ("request for direct collocation ") ACE_TEXT ("without needed collocation opportunity.\n"))); } // collocation object, but no collocation_opportunity for Direct // or servant() == 0 throw ::CORBA::INTERNAL ( CORBA::SystemException::_tao_minor_code ( TAO::VMCID, EINVAL), CORBA::COMPLETED_NO); } break; } case TAO_ORB_Core::TAO_COLLOCATION_BEST: { if (ACE_BIT_ENABLED (this->collocation_opportunity_, TAO::TAO_CO_DIRECT_STRATEGY) && (object->_servant () != 0)) { strategy = TAO::TAO_CS_DIRECT_STRATEGY; } else if (ACE_BIT_ENABLED (this->collocation_opportunity_, TAO::TAO_CO_THRU_POA_STRATEGY)) { strategy = TAO::TAO_CS_THRU_POA_STRATEGY; } else { strategy = TAO::TAO_CS_REMOTE_STRATEGY; } break; } } } } return strategy; }