TAO::Synch_Oneway_Invocation Class Reference

All the action for a synchronous oneway invocation happen here. More...

#include <Synch_Invocation.h>

Inheritance diagram for TAO::Synch_Oneway_Invocation:

Inheritance graph
[legend]
Collaboration diagram for TAO::Synch_Oneway_Invocation:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 Synch_Oneway_Invocation (CORBA::Object_ptr otarget, Profile_Transport_Resolver &resolver, TAO_Operation_Details &detail)
 Constructor used by TAO::Invocation_Adapter.

Invocation_Status remote_oneway (ACE_Time_Value *max_wait_time) throw (CORBA::Exception)

Detailed Description

All the action for a synchronous oneway invocation happen here.

This class inherits from twoway invocation for the following reasons

Definition at line 150 of file Synch_Invocation.h.


Constructor & Destructor Documentation

TAO::Synch_Oneway_Invocation::Synch_Oneway_Invocation CORBA::Object_ptr  otarget,
Profile_Transport_Resolver resolver,
TAO_Operation_Details detail
 

Constructor used by TAO::Invocation_Adapter.

Parameters:
otarget The original target on which this invocation was started. This is there to be passed up to its parent class.
resolver The profile and transport holder.
detail Operation details of the invocation on the target

Definition at line 694 of file Synch_Invocation.cpp.

References CORBA::Object_ptr.

00698     : Synch_Twoway_Invocation (otarget, r, d, false)
00699   {
00700   }


Member Function Documentation

Invocation_Status TAO::Synch_Oneway_Invocation::remote_oneway ACE_Time_Value max_wait_time  )  throw (CORBA::Exception)
 

Method used by the adapter to kickstart an oneway invocation to the remote object.

Definition at line 703 of file Synch_Invocation.cpp.

References ACE_ANY_EXCEPTION, ACE_CATCHALL, ACE_CATCHANY, ACE_CHECK_RETURN, ACE_DEBUG, ACE_ENDTRY, ACE_ENV_ARG_PARAMETER, ACE_ENV_SINGLE_ARG_PARAMETER, ACE_RE_THROW, ACE_TRY, ACE_TRY_CHECK, TAO_Transport::format_queue_message(), TAO::Invocation_Status, TAO_Transport::is_connected(), LM_DEBUG, TAO_OutputCDR::message_attributes(), CORBA::Octet, TAO_Transport::out_stream(), PortableInterceptor::ReplyStatus, TAO_debug_level, TAO::TAO_INVOKE_FAILURE, TAO::TAO_INVOKE_RESTART, TAO::TAO_INVOKE_SUCCESS, and ACE_Countdown_Time::update().

Referenced by TAO::Invocation_Adapter::invoke_oneway().

00706   {
00707     ACE_Countdown_Time countdown (max_wait_time);
00708 
00709     const CORBA::Octet response_flags =
00710        this->details_.response_flags ();
00711 
00712     Invocation_Status s = TAO_INVOKE_FAILURE;
00713 
00714     if (response_flags == CORBA::Octet (Messaging::SYNC_WITH_SERVER) ||
00715         response_flags == CORBA::Octet (Messaging::SYNC_WITH_TARGET))
00716       {
00717         s = Synch_Twoway_Invocation::remote_twoway (max_wait_time
00718                                                     ACE_ENV_ARG_PARAMETER);
00719         ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
00720 
00721         return s;
00722       }
00723 
00724     TAO_Target_Specification tspec;
00725     this->init_target_spec (tspec ACE_ENV_ARG_PARAMETER);
00726     ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
00727 
00728 #if TAO_HAS_INTERCEPTORS == 1
00729     s = this->send_request_interception (ACE_ENV_SINGLE_ARG_PARAMETER);
00730     ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
00731 
00732     if (s != TAO_INVOKE_SUCCESS)
00733       return s;
00734 #endif /*TAO_HAS_INTERCEPTORS */
00735 
00736     TAO_Transport* transport =
00737       this->resolver_.transport ();
00738 
00739     TAO_OutputCDR &cdr = transport->out_stream ();
00740 
00741     ACE_TRY
00742       {
00743         cdr.message_attributes (this->details_.request_id (),
00744                                 this->resolver_.stub (),
00745                                 TAO_Transport::TAO_ONEWAY_REQUEST,
00746                                 max_wait_time);
00747 
00748         this->write_header (tspec,
00749                             cdr
00750                             ACE_ENV_ARG_PARAMETER);
00751         ACE_TRY_CHECK;
00752 
00753         this->marshal_data (cdr
00754                             ACE_ENV_ARG_PARAMETER);
00755         ACE_TRY_CHECK;
00756 
00757         countdown.update ();
00758 
00759         if (transport->is_connected())
00760           {
00761             // We have a connected transport so we can send the message
00762             s = this->send_message (cdr,
00763                                     TAO_Transport::TAO_ONEWAY_REQUEST,
00764                                     max_wait_time
00765                                     ACE_ENV_ARG_PARAMETER);
00766             ACE_TRY_CHECK;
00767           }
00768         else
00769           {
00770             if (TAO_debug_level > 4)
00771               ACE_DEBUG ((LM_DEBUG,
00772                           "TAO (%P|%t) - Synch_Oneway_Invocation::"
00773                           "remote_oneway, queueing message\n"));
00774 
00775             if (transport->format_queue_message (cdr) != 0)
00776               s = TAO_INVOKE_FAILURE;
00777           }
00778 
00779 #if TAO_HAS_INTERCEPTORS == 1
00780         s =
00781           this->receive_other_interception (ACE_ENV_SINGLE_ARG_PARAMETER);
00782         ACE_TRY_CHECK;
00783 #endif /*TAO_HAS_INTERCEPTORS */
00784       }
00785     ACE_CATCHANY
00786       {
00787 #if TAO_HAS_INTERCEPTORS == 1
00788         PortableInterceptor::ReplyStatus status =
00789           this->handle_any_exception (&ACE_ANY_EXCEPTION
00790                                       ACE_ENV_ARG_PARAMETER);
00791         ACE_TRY_CHECK;
00792 
00793         if (status == PortableInterceptor::LOCATION_FORWARD ||
00794             status == PortableInterceptor::TRANSPORT_RETRY)
00795           s = TAO_INVOKE_RESTART;
00796         else if (status == PortableInterceptor::SYSTEM_EXCEPTION
00797             || status == PortableInterceptor::USER_EXCEPTION)
00798 #endif /*TAO_HAS_INTERCEPTORS*/
00799           ACE_RE_THROW;
00800       }
00801 # if defined (ACE_HAS_EXCEPTIONS) \
00802      && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS)
00803     ACE_CATCHALL
00804       {
00805 #if TAO_HAS_INTERCEPTORS == 1
00806         PortableInterceptor::ReplyStatus st =
00807           this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
00808         ACE_TRY_CHECK;
00809 
00810         if (st == PortableInterceptor::LOCATION_FORWARD ||
00811             st == PortableInterceptor::TRANSPORT_RETRY)
00812           s = TAO_INVOKE_RESTART;
00813         else
00814 #endif /*TAO_HAS_INTERCEPTORS == 1*/
00815           ACE_RE_THROW;
00816       }
00817 # endif  /* ACE_HAS_EXCEPTIONS &&
00818             ACE_HAS_BROKEN_UNEXPECTED_EXCEPTION*/
00819     ACE_ENDTRY;
00820     ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
00821 
00822     return s;
00823   }


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 12:27:04 2006 for TAO by doxygen 1.3.6