diff options
Diffstat (limited to 'TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp')
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp | 143 |
1 files changed, 72 insertions, 71 deletions
diff --git a/TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp b/TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp index 7337af511e9..991e1012870 100644 --- a/TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp +++ b/TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp @@ -33,24 +33,24 @@ ImR_Forwarder::ImR_Forwarder (ImR_Locator_i& imr_impl) } void -ImR_Forwarder::init (CORBA::ORB_ptr orb ACE_ENV_ARG_DECL) +ImR_Forwarder::init(CORBA::ORB_ptr orb ACE_ENV_ARG_DECL) { - ACE_ASSERT (! CORBA::is_nil(orb)); + ACE_ASSERT(! CORBA::is_nil(orb)); this->orb_ = orb; ACE_TRY_NEW_ENV - { - CORBA::Object_var tmp = - orb->resolve_initial_references ("POACurrent" ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - this->poa_current_var_ = - PortableServer::Current::_narrow (tmp.in () ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - } + { + CORBA::Object_var tmp = + orb->resolve_initial_references ("POACurrent" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + this->poa_current_var_ = + PortableServer::Current::_narrow (tmp.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } ACE_CATCHANY - { - ACE_DEBUG ((LM_DEBUG, "ImR_Forwarder::init() Exception ignored.\n")); - } + { + ACE_DEBUG((LM_DEBUG, "ImR_Forwarder::init() Exception ignored.\n")); + } ACE_ENDTRY; ACE_CHECK; ACE_ASSERT (!CORBA::is_nil (this->poa_current_var_.in ())); @@ -72,71 +72,71 @@ ImR_Forwarder::preinvoke (const PortableServer::ObjectId &, ACE_ENV_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException, PortableServer::ForwardRequest)) { - ACE_ASSERT (! CORBA::is_nil(poa)); + ACE_ASSERT(! CORBA::is_nil(poa)); CORBA::Object_var forward_obj; ACE_TRY + { + CORBA::String_var server_name = poa->the_name(); + + if (locator_.debug() > 1) + ACE_DEBUG ((LM_DEBUG, "ImR: Activating server <%s>.\n", server_name.in())); + + // The activator stores a partial ior with each server. We can + // just tack on the current ObjectKey to get a valid ior for + // the desired server. + CORBA::String_var pior = locator_.activate_server_by_name(server_name.in(), false ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + ACE_CString ior = pior.in(); + + // Check that the returned ior is the expected partial ior with + // missing ObjectKey. + if (ior.find("corbaloc:") != 0 || ior[ior.length() - 1] != '/') { - CORBA::String_var server_name = poa->the_name(); - - if (locator_.debug() > 1) - ACE_DEBUG ((LM_DEBUG, "ImR: Activating server <%s>.\n", server_name.in())); - - // The activator stores a partial ior with each server. We can - // just tack on the current ObjectKey to get a valid ior for - // the desired server. - CORBA::String_var pior = locator_.activate_server_by_name (server_name.in (), false ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - ACE_CString ior = pior.in (); - - // Check that the returned ior is the expected partial ior with - // missing ObjectKey. - if (ior.find ("corbaloc:") != 0 || ior[ior.length () - 1] != '/') - { - ACE_ERROR ((LM_ERROR, "ImR_Forwarder::preinvoke () Invalid corbaloc ior.\n\t<%s>\n", ior.c_str())); - ACE_TRY_THROW (CORBA::OBJECT_NOT_EXIST ( - CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0), - CORBA::COMPLETED_NO)); - } - - CORBA::String_var key_str; - // Unlike POA Current, this implementation cannot be cached. - TAO::Portable_Server::POA_Current* tao_current = - dynamic_cast <TAO::Portable_Server::POA_Current*> (this->poa_current_var_.in ()); - - ACE_ASSERT(tao_current != 0); - TAO::Portable_Server::POA_Current_Impl* impl = tao_current->implementation (); - TAO::ObjectKey::encode_sequence_to_string (key_str.out (), impl->object_key ()); - - ior += key_str.in(); - - if (locator_.debug() > 0) - ACE_DEBUG ((LM_DEBUG, "ImR: Forwarding invocation on <%s> to <%s>\n", server_name.in(), ior.c_str())); - - forward_obj = - this->orb_->string_to_object (ior.c_str () ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - } - ACE_CATCH (ImplementationRepository::CannotActivate, ex) - { - ACE_TRY_THROW (CORBA::TRANSIENT ( + ACE_ERROR((LM_ERROR, "ImR_Forwarder::preinvoke() Invalid corbaloc ior.\n\t<%s>\n", ior.c_str())); + ACE_TRY_THROW (CORBA::OBJECT_NOT_EXIST ( CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0), CORBA::COMPLETED_NO)); } + + CORBA::String_var key_str; + // Unlike POA Current, this implementation cannot be cached. + TAO::Portable_Server::POA_Current* tao_current = + dynamic_cast <TAO::Portable_Server::POA_Current*> (this->poa_current_var_.in ()); + + ACE_ASSERT(tao_current != 0); + TAO::Portable_Server::POA_Current_Impl* impl = tao_current->implementation (); + TAO::ObjectKey::encode_sequence_to_string (key_str.out(), impl->object_key ()); + + ior += key_str.in(); + + if (locator_.debug() > 0) + ACE_DEBUG ((LM_DEBUG, "ImR: Forwarding invocation on <%s> to <%s>\n", server_name.in(), ior.c_str())); + + forward_obj = + this->orb_->string_to_object (ior.c_str () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (ImplementationRepository::CannotActivate, ex) + { + ACE_TRY_THROW (CORBA::TRANSIENT ( + CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0), + CORBA::COMPLETED_NO)); + } ACE_CATCH (ImplementationRepository::NotFound, ex) - { - ACE_TRY_THROW (CORBA::TRANSIENT ( - CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0), - CORBA::COMPLETED_NO)); - } + { + ACE_TRY_THROW (CORBA::TRANSIENT ( + CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0), + CORBA::COMPLETED_NO)); + } ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Forwarder"); - ACE_TRY_THROW (CORBA::TRANSIENT ( - CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0), - CORBA::COMPLETED_NO)); - } + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Forwarder"); + ACE_TRY_THROW (CORBA::TRANSIENT ( + CORBA::SystemException::_tao_minor_code (TAO_IMPLREPO_MINOR_CODE, 0), + CORBA::COMPLETED_NO)); + } ACE_ENDTRY; ACE_CHECK_RETURN (0); @@ -150,7 +150,8 @@ ImR_Forwarder::preinvoke (const PortableServer::ObjectId &, } void -ImR_Forwarder::postinvoke (const PortableServer::ObjectId &, +ImR_Forwarder::postinvoke ( + const PortableServer::ObjectId &, PortableServer::POA_ptr, const char *, PortableServer::ServantLocator::Cookie, |