package org.omg.PortableInterceptor;


/**
* org/omg/PortableInterceptor/ClientRequestInterceptorOperations.java .
* Generated by the IDL-to-Java compiler (portable), version "3.1"
* from ../../../../src/share/classes/org/omg/PortableInterceptor/Interceptors.idl
* Wednesday, January 30, 2002 4:01:47 AM GMT-08:00
*/


/**
   * Client-side request interceptor.
   * <p>
   * A request Interceptor is designed to intercept the flow of a 
   * request/reply sequence through the ORB at specific points so that 
   * services can query the request information and manipulate the service 
   * contexts which are propagated between clients and servers. The primary 
   * use of request Interceptors is to enable ORB services to transfer 
   * context information between clients and servers. There are two types 
   * of request Interceptors: client-side and server-side. 
   * <p>
   * To write a client-side Interceptor, implement the 
   * <code>ClientRequestInterceptor</code> interface. 
   *
   * @see ClientRequestInfo
   */
public interface ClientRequestInterceptorOperations  extends org.omg.PortableInterceptor.InterceptorOperations
{

  /**
       * Allows an Interceptor to query request information and modify the 
       * service context before the request is sent to the server.
       * <p>
       * This interception point may throw a system exception. If it does, 
       * no other Interceptors' <code>send_request</code> operations are called. 
       * Those Interceptors on the Flow Stack are popped and their 
       * <code>receive_exception</code> interception points are called. This 
       * interception point may also throw a <code>ForwardRequest</code> 
       * exception. If an Interceptor throws this exception, no other 
       * Interceptors' <code>send_request</code> operations are 
       * called. Those Interceptors on the Flow Stack are popped and their 
       * <code>receive_other</code> interception points are called. 
       * <p>
       * Compliant Interceptors shall properly follow completion_status 
       * semantics if they throw a system exception from this interception 
       * point. The <code>completion_status</code> shall be 
       * <code>COMPLETED_NO</code>.
       *
       * @param ri Information about the current request being intercepted.
       * @exception ForwardRequest If thrown, indicates to the ORB that a
       *     retry of the request should occur with the new object given in
       *     the exception.
       */
  void send_request (org.omg.PortableInterceptor.ClientRequestInfo ri) throws org.omg.PortableInterceptor.ForwardRequest;

  /**
       * Allows an Interceptor to query information during a Time-Independent 
       * Invocation (TII) polling get reply sequence. 
       * <p>
       * With TII, an application may poll for a response to a request sent 
       * previously by the polling client or some other client. This poll is 
       * reported to Interceptors through the <code>send_poll</code> 
       * interception point and the response is returned through the 
       * <code>receive_reply</code> or <code>receive_exception</code> 
       * interception points.  If the response is not available before the
       * poll time-out expires, the system exception <code>TIMEOUT</code> is
       * thrown and <code>receive_exception</code> is called with this 
       * exception. 
       * <p>
       * This interception point may throw a system exception. If it does, 
       * no other Interceptors' <code>send_poll</code> operations are 
       * called. Those Interceptors on the Flow Stack are popped and their 
       * <code>receive_exception</code> interception points are called. 
       * <p>
       * Compliant Interceptors shall properly follow 
       * <code>completion_status</code> semantics if they throw a system 
       * exception from this interception point. The completion_status shall be 
       * <code>COMPLETED_NO</code>.
       * 
       * @param ri Information about the current request being intercepted.
       * @exception TIMEOUT thrown if the response is not available before 
       *     the poll time-out expires
       */
  void send_poll (org.omg.PortableInterceptor.ClientRequestInfo ri);

  /**
       * Allows an Interceptor to query the information on a reply after it 
       * is returned from the server and before control is returned to the 
       * client. 
       * <p>
       * This interception point may throw a system exception. If it does, 
       * no other Interceptors' <code>receive_reply</code> operations are 
       * called. The remaining Interceptors in the Flow Stack shall have 
       * their <code>receive_exception</code> interception point called. 
       * <p>
       * Compliant Interceptors shall properly follow 
       * <code>completion_status</code> semantics if they throw a system 
       * exception from this interception point. The 
       * <code>completion_status</code> shall be <code>COMPLETED_YES</code>.
       *
       * @param ri Information about the current request being intercepted.
       */
  void receive_reply (org.omg.PortableInterceptor.ClientRequestInfo ri);

  /**
       * Indicates to the interceptor that an exception occurred.  Allows
       * an Interceptor to query the exception's information before it is 
       * thrown to the client.
       * <p>
       * This interception point may throw a system exception. This has the 
       * effect of changing the exception which successive Interceptors 
       * popped from the Flow Stack receive on their calls to 
       * <code>receive_exception</code>. The exception thrown to the client 
       * will be the last exception thrown by an Interceptor, or the original 
       * exception if no Interceptor changes the exception. 
       * <p>
       * This interception point may also throw a <code>ForwardRequest</code> 
       * exception.  If an Interceptor throws this exception, no other 
       * Interceptors' <code>receive_exception</code> operations are called. 
       * The remaining Interceptors in the Flow Stack are popped and have their 
       * <code>receive_other</code> interception point called. 
       * <p>
       * If the <code>completion_status</code> of the exception is not 
       * <code>COMPLETED_NO</code>, then it is inappropriate for this 
       * interception point to throw a <code>ForwardRequest</code> exception. 
       * The request s at-most-once semantics would be lost. 
       * <p>
       * Compliant Interceptors shall properly follow 
       * <code>completion_status</code> semantics if they throw a system 
       * exception from this interception point. If the original exception is 
       * a system exception, the <code>completion_status</code> of the new 
       * exception shall be the same as on the original. If the original 
       * exception is a user exception, then the <code>completion_status</code> 
       * of the new exception shall be <code>COMPLETED_YES</code>. 
       * <p>
       * Under some conditions, depending on what policies are in effect, an 
       * exception (such as <code>COMM_FAILURE</code>) may result in a retry 
       * of the request. While this retry is a new request with respect to 
       * Interceptors, there is one point of correlation between the original 
       * request and the retry: because control has not returned to the 
       * client, the <code>PortableInterceptor.Current</code> for both the 
       * original request and the retrying request is the same.
       *
       * @param ri Information about the current request being intercepted.
       * @exception ForwardRequest If thrown, indicates to the ORB that a
       *     retry of the request should occur with the new object given in
       *     the exception.
       */
  void receive_exception (org.omg.PortableInterceptor.ClientRequestInfo ri) throws org.omg.PortableInterceptor.ForwardRequest;

  /**
       * Allows an Interceptor to query the information available when a 
       * request results in something other than a normal reply or an 
       * exception. For example, a request could result in a retry 
       * (e.g., a GIOP Reply with a <code>LOCATION_FORWARD</code> status was 
       * received); or on asynchronous calls, the reply does not immediately 
       * follow the request, but control shall return to the client and an 
       * ending interception point shall be called. 
       * <p>
       * For retries, depending on the policies in effect, a new request may or 
       * may not follow when a retry has been indicated. If a new request does 
       * follow, while this request is a new request, with respect to 
       * Interceptors, there is one point of correlation between the original 
       * request and the retry: because control has not returned to the client, 
       * the request scoped <code>PortableInterceptor.Current</code> for both 
       * the original request and the retrying request is the same.  
       * <p>
       * This interception point may throw a system exception. If it does, no 
       * other Interceptors' <code>receive_other</code> operations are called. 
       * The remaining Interceptors in the Flow Stack are popped and have 
       * their <code>receive_exception</code> interception point called.
       * <p>
       * This interception point may also throw a <code>ForwardRequest</code> 
       * exception.  If an Interceptor throws this exception, successive 
       * Interceptors' <code>receive_other</code> operations are called with 
       * the new information provided by the <code>ForwardRequest</code> 
       * exception. 
       * <p>
       * Compliant Interceptors shall properly follow 
       * <code>completion_status</code> semantics if they throw a system 
       * exception from this interception point. The 
       * <code>completion_status</code> shall be <code>COMPLETED_NO</code>. 
       * If the target invocation had completed, this interception point 
       * would not be called.
       * 
       * @param ri Information about the current request being intercepted.
       * @exception ForwardRequest If thrown, indicates to the ORB that a
       *     retry of the request should occur with the new object given in
       *     the exception.
       */
  void receive_other (org.omg.PortableInterceptor.ClientRequestInfo ri) throws org.omg.PortableInterceptor.ForwardRequest;
} // interface ClientRequestInterceptorOperations
