#include <Collocated_Invocation.h>
Inheritance diagram for TAO::Collocated_Invocation:


Public Member Functions | |
| Collocated_Invocation (CORBA::Object_ptr t, CORBA::Object_ptr et, TAO_Stub *stub, TAO_Operation_Details &detail, bool response_expected=true) | |
| Constructor used by TAO::Invocation_Adapter. | |
| Invocation_Status | invoke (Collocation_Proxy_Broker *cpb, Collocation_Strategy strat) |
Private Member Functions | |
| Collocated_Invocation (void) | |
Definition at line 50 of file Collocated_Invocation.h.
|
||||||||||||||||||||||||
|
Constructor used by TAO::Invocation_Adapter.
Definition at line 24 of file Collocated_Invocation.cpp. References CORBA::Object_ptr.
00029 : Invocation_Base (t, 00030 et, 00031 stub, 00032 detail, 00033 response_expected, 00034 false /* request_is_remote */ ) 00035 { 00036 } |
|
|
|
|
||||||||||||
|
Practically this method is a place holder to do the following
Definition at line 39 of file Collocated_Invocation.cpp. References TAO_ORB_Core::_incr_refcnt(), CORBA::Object::_stubobj(), TAO_Operation_Details::args(), TAO_Operation_Details::args_num(), TAO::Collocation_Proxy_Broker::dispatch(), TAO_Request_Dispatcher::dispatch(), TAO::Invocation_Base::effective_target(), TAO::Invocation_Base::handle_all_exception(), TAO::Invocation_Base::handle_any_exception(), TAO_Operation_Details::has_exception(), TAO_Pseudo_Var_T< T >::in(), TAO::Invocation_Status, TAO_Operation_Details::opname(), TAO_Operation_Details::opname_len(), CORBA::ORB_var, TAO_Pseudo_Var_T< T >::out(), TAO::Invocation_Base::receive_other_interception(), TAO::Invocation_Base::receive_reply_interception(), TAO::Invocation_Base::reply_received(), PortableInterceptor::ReplyStatus, TAO_ORB_Core::request_dispatcher(), TAO::Invocation_Base::response_expected(), TAO::Invocation_Base::send_request_interception(), TAO_Stub::servant_orb_ptr(), TAO::TAO_CS_THRU_POA_STRATEGY, TAO_INTERCEPTOR, TAO::TAO_INVOKE_FAILURE, TAO::TAO_INVOKE_RESTART, and TAO::TAO_INVOKE_SUCCESS. Referenced by TAO::Invocation_Adapter::invoke_collocated_i().
00041 {
00042 Invocation_Status s = TAO_INVOKE_FAILURE;
00043
00044 /// Start the interception point
00045 #if TAO_HAS_INTERCEPTORS == 1
00046 s = this->send_request_interception ();
00047
00048 if (s != TAO_INVOKE_SUCCESS)
00049 return s;
00050 #endif /*TAO_HAS_INTERCEPTORS */
00051
00052 try
00053 {
00054 if (strat == TAO_CS_THRU_POA_STRATEGY)
00055 {
00056 // Perform invocations on the servant through the servant's ORB.
00057 CORBA::ORB_var servant_orb =
00058 this->effective_target ()->_stubobj ()->servant_orb_ptr ();
00059 TAO_ORB_Core * const orb_core = servant_orb->orb_core ();
00060
00061 TAO_ServerRequest request (orb_core,
00062 this->details_,
00063 this->effective_target ());
00064
00065 TAO_Request_Dispatcher * const dispatcher =
00066 orb_core->request_dispatcher ();
00067
00068 // Retain ownership of the servant's ORB_Core in case
00069 // another thread attempts to destroy it (e.g. via
00070 // CORBA::ORB::destroy()) before this thread complete the
00071 // invocation.
00072 orb_core->_incr_refcnt ();
00073 TAO_ORB_Core_Auto_Ptr my_orb_core (orb_core);
00074
00075 dispatcher->dispatch (orb_core,
00076 request,
00077 this->forwarded_to_.out ());
00078 }
00079 else
00080 {
00081 cpb->dispatch (this->effective_target (),
00082 this->forwarded_to_.out (),
00083 this->details_.args (),
00084 this->details_.args_num (),
00085 this->details_.opname (),
00086 this->details_.opname_len (),
00087 strat);
00088 }
00089
00090 // Invocation completed succesfully
00091 s = TAO_INVOKE_SUCCESS;
00092
00093 #if TAO_HAS_INTERCEPTORS == 1
00094 if (this->forwarded_to_.in () ||
00095 this->response_expected_ == false)
00096 {
00097 if (this->forwarded_to_.in ())
00098 this->reply_received (TAO_INVOKE_RESTART);
00099
00100 s = this->receive_other_interception ();
00101 }
00102 // NOTE: Any other condition that needs handling?
00103 else if (this->response_expected ())
00104 {
00105 this->reply_received (TAO_INVOKE_SUCCESS);
00106
00107 s = this->receive_reply_interception ();
00108 }
00109 if (s != TAO_INVOKE_SUCCESS)
00110 return s;
00111 #endif /*TAO_HAS_INTERCEPTORS */
00112 }
00113 catch ( ::CORBA::UserException& ex)
00114 {
00115 // Ignore CORBA exceptions for oneways
00116 if (this->response_expected_ == false)
00117 return TAO_INVOKE_SUCCESS;
00118
00119 #if TAO_HAS_INTERCEPTORS == 1
00120 PortableInterceptor::ReplyStatus const status =
00121 this->handle_any_exception (&ex);
00122
00123 if (status == PortableInterceptor::LOCATION_FORWARD ||
00124 status == PortableInterceptor::TRANSPORT_RETRY)
00125 s = TAO_INVOKE_RESTART;
00126 else
00127 #endif /* TAO_HAS_INTERCEPTORS */
00128 {
00129 // Check whether the user exception thrown matches the signature
00130 // list, if not, then throw an Unknown exception
00131 if (!this->details_.has_exception (ex))
00132 {
00133 throw ::CORBA::UNKNOWN (CORBA::OMGVMCID | 1,
00134 CORBA::COMPLETED_MAYBE);
00135 }
00136 else
00137 {
00138 throw;
00139 }
00140 }
00141 }
00142 catch ( ::CORBA::SystemException& TAO_INTERCEPTOR (ex))
00143 {
00144 // Ignore CORBA exceptions for oneways
00145 if (this->response_expected_ == false)
00146 return TAO_INVOKE_SUCCESS;
00147
00148 #if TAO_HAS_INTERCEPTORS == 1
00149 PortableInterceptor::ReplyStatus const status =
00150 this->handle_any_exception (&ex);
00151
00152 if (status == PortableInterceptor::LOCATION_FORWARD ||
00153 status == PortableInterceptor::TRANSPORT_RETRY)
00154 s = TAO_INVOKE_RESTART;
00155 else
00156 #endif /* TAO_HAS_INTERCEPTORS */
00157 throw;
00158 }
00159 #if TAO_HAS_INTERCEPTORS == 1
00160 catch (...)
00161 {
00162 // Notify interceptors of non-CORBA exception, and propagate
00163 // that exception to the caller.
00164 PortableInterceptor::ReplyStatus const st =
00165 this->handle_all_exception ();
00166
00167 if (st == PortableInterceptor::LOCATION_FORWARD ||
00168 st == PortableInterceptor::TRANSPORT_RETRY)
00169 s = TAO_INVOKE_RESTART;
00170 else
00171 throw;
00172 }
00173 #endif /* TAO_HAS_INTERCEPTORS == 1 */
00174
00175 if (this->forwarded_to_.in () != 0)
00176 s = TAO_INVOKE_RESTART;
00177
00178 return s;
00179 }
|
1.3.6