diff options
Diffstat (limited to 'TAO/tao/Invocation_Base.cpp')
-rw-r--r-- | TAO/tao/Invocation_Base.cpp | 215 |
1 files changed, 119 insertions, 96 deletions
diff --git a/TAO/tao/Invocation_Base.cpp b/TAO/tao/Invocation_Base.cpp index c3dc8aed96f..ac94484a0ca 100644 --- a/TAO/tao/Invocation_Base.cpp +++ b/TAO/tao/Invocation_Base.cpp @@ -5,14 +5,16 @@ #include "TypeCode.h" #include "DynamicC.h" #include "SystemException.h" +#include "PortableInterceptor.h" /* Must always be visible. */ + +#include "ace/Dynamic_Service.h" #if TAO_HAS_INTERCEPTORS == 1 # include "PortableInterceptorC.h" # include "RequestInfo_Util.h" +# include "ClientRequestInterceptor_Adapter_Factory.h" #endif /* TAO_HAS_INTERCEPTORS == 1*/ -#include "PortableInterceptor.h" /* Must always be visible. */ - #if !defined (__ACE_INLINE__) # include "Invocation_Base.inl" #endif /* __ACE_INLINE__ */ @@ -38,15 +40,16 @@ namespace TAO , orb_core_ (stub->orb_core ()) , stub_ (stub) #if TAO_HAS_INTERCEPTORS == 1 - , adapter_ (orb_core_->client_request_interceptors (), - this) + , adapter_ (orb_core_->clientrequestinterceptor_adapter ()) , req_info_ (this) + , stack_size_ (0) #endif /*TAO_HAS_INTERCEPTORS == 1*/ { } Invocation_Base::~Invocation_Base (void) { + adapter_ = 0; } void @@ -140,37 +143,41 @@ namespace TAO Invocation_Base::send_request_interception (ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { - ACE_TRY - { - this->adapter_.send_request (&this->req_info_ - ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - } - ACE_CATCHANY - { - (void) this->handle_any_exception (&ACE_ANY_EXCEPTION - ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - // This is a begin interception point - ACE_RE_THROW; - } -# if defined (ACE_HAS_EXCEPTIONS) \ - && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS) - ACE_CATCHALL + if (adapter_ != 0) { - (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_TRY_CHECK; - - // This is a begin interception point - ACE_RE_THROW; + ACE_TRY + { + this->adapter_->send_request (*this, + &this->req_info_ + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + (void) this->handle_any_exception (&ACE_ANY_EXCEPTION + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + // This is a begin interception point + ACE_RE_THROW; + } + # if defined (ACE_HAS_EXCEPTIONS) \ + && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS) + ACE_CATCHALL + { + (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + // This is a begin interception point + ACE_RE_THROW; + } + # endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */ + ACE_ENDTRY; + ACE_CHECK_RETURN (TAO_INVOKE_FAILURE); + + if (this->forwarded_to_.in ()) + return TAO_INVOKE_RESTART; } -# endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */ - ACE_ENDTRY; - ACE_CHECK_RETURN (TAO_INVOKE_FAILURE); - - if (this->forwarded_to_.in ()) - return TAO_INVOKE_RESTART; // What are the other cases?? return TAO_INVOKE_SUCCESS; @@ -180,40 +187,44 @@ namespace TAO Invocation_Base::receive_reply_interception (ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { - ACE_TRY - { - this->adapter_.receive_reply (&this->req_info_ - ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - } - ACE_CATCHANY + if (adapter_ != 0) { - (void) this->handle_any_exception (&ACE_ANY_EXCEPTION + ACE_TRY + { + this->adapter_->receive_reply (*this, + &this->req_info_ ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - ACE_RE_THROW; - } -# if defined (ACE_HAS_EXCEPTIONS) \ - && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS) - ACE_CATCHALL - { - (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_TRY_CHECK; - - ACE_RE_THROW; + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + (void) this->handle_any_exception (&ACE_ANY_EXCEPTION + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + ACE_RE_THROW; + } + # if defined (ACE_HAS_EXCEPTIONS) \ + && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS) + ACE_CATCHALL + { + (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + ACE_RE_THROW; + } + # endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */ + ACE_ENDTRY; + ACE_CHECK_RETURN (TAO_INVOKE_FAILURE); + + const PortableInterceptor::ReplyStatus status = + this->req_info_.reply_status (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (TAO_INVOKE_FAILURE); + + if (status == PortableInterceptor::LOCATION_FORWARD || + status == PortableInterceptor::TRANSPORT_RETRY) + return TAO_INVOKE_RESTART; } -# endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */ - ACE_ENDTRY; - ACE_CHECK_RETURN (TAO_INVOKE_FAILURE); - - const PortableInterceptor::ReplyStatus status = - this->req_info_.reply_status (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (TAO_INVOKE_FAILURE); - - if (status == PortableInterceptor::LOCATION_FORWARD || - status == PortableInterceptor::TRANSPORT_RETRY) - return TAO_INVOKE_RESTART; return TAO_INVOKE_SUCCESS; } @@ -223,35 +234,39 @@ namespace TAO Invocation_Base::receive_other_interception (ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) { - ACE_TRY + if (adapter_ != 0) { - this->adapter_.receive_other (&this->req_info_ - ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - } - ACE_CATCHANY - { - (void) this->handle_any_exception (&ACE_ANY_EXCEPTION + ACE_TRY + { + this->adapter_->receive_other (*this, + &this->req_info_ ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - ACE_RE_THROW; + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + (void) this->handle_any_exception (&ACE_ANY_EXCEPTION + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + ACE_RE_THROW; + } + # if defined (ACE_HAS_EXCEPTIONS) \ + && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS) + ACE_CATCHALL + { + (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + ACE_RE_THROW; + } + # endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */ + ACE_ENDTRY; + ACE_CHECK_RETURN (TAO_INVOKE_FAILURE); + + if (this->forwarded_to_.in ()) + return TAO_INVOKE_RESTART; } -# if defined (ACE_HAS_EXCEPTIONS) \ - && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS) - ACE_CATCHALL - { - (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_TRY_CHECK; - - ACE_RE_THROW; - } -# endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */ - ACE_ENDTRY; - ACE_CHECK_RETURN (TAO_INVOKE_FAILURE); - - if (this->forwarded_to_.in ()) - return TAO_INVOKE_RESTART; return TAO_INVOKE_SUCCESS; } @@ -262,9 +277,13 @@ namespace TAO { this->req_info_.exception (ex); - this->adapter_.receive_exception (&this->req_info_ - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (PortableInterceptor::UNKNOWN); + if (adapter_ != 0) + { + this->adapter_->receive_exception (*this, + &this->req_info_ + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (PortableInterceptor::UNKNOWN); + } const PortableInterceptor::ReplyStatus status = this->req_info_.reply_status (ACE_ENV_SINGLE_ARG_PARAMETER); @@ -280,9 +299,13 @@ namespace TAO this->req_info_.exception (&ex); - this->adapter_.receive_exception (&this->req_info_ - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (PortableInterceptor::UNKNOWN); + if (adapter_ != 0) + { + this->adapter_->receive_exception (*this, + &this->req_info_ + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (PortableInterceptor::UNKNOWN); + } const PortableInterceptor::ReplyStatus status = this->req_info_.reply_status (ACE_ENV_SINGLE_ARG_PARAMETER); |