This section describes the VisiBroker implementation of Portable Interceptors interfaces and classes as defined by the OMG Specification. For a complete description of these interfaces and classes, refer to
 OMG Final Adopted Specification, ptc/2001-04-03, Portable Interceptors. 
      
      See “Using Portable Interceptors” in the VisiBroker C++ Developer's Guide before using these interfaces.
 
      
      
      
      
      
      
      
      
      
      
      This class is derived from RequestInfo. It is passed to the client side interceptors point.
 
      Some methods on ClientRequestInfo are not valid at all interception points. The following table shows the validity of each attribute or method. If an attribute is not valid, attempting to access it results in a 
BAD_INV_ORDER being raised with a standard minor code of 14.
 
      
      
        
        
          | 1 When ClientRequestInfo  is passed to send_request() , there is an entry in the list for every argument, whether in, inout, or out. But only the in and inout arguments will be available.  2 If the reply_status()  does not return LOCATION_FORWARD , accessing this attribute raises BAD_INV_ORDER  with a standard minor code of 14. | 
      
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      
      
      This method returns the actual object on which the operation will be invoked. If the reply_status() returns 
LOCATION_FORWARD, then on subsequent requests, 
effective_target() will contain the forwarded IOR, while 
target will remain unchanged.
 
      
      This method returns the profile, in the form of IOP::TaggedProfile, that will be used to send the request. If a location forward has occurred for this operation's object and that object's profile changed accordingly, then this profile will be that located profile.
 
      
      This method returns the data, in the form of CORBA::Any, that contains the exception to be returned to the client.
 
      If the exception is a user exception which cannot be inserted into a CORBA::Any (for example, it is unknown or the bindings don't provide the 
TypeCode), then this attribute will be a 
CORBA::Any containing the system exception 
UNKNOWN with a standard minor code of 1. However, the 
RepositoryId of the exception is available in the 
received_exception_id attribute.
 
      
      This method returns the ID of the received_exception to be returned to the client.
 
      
      This methods returns the IOP::TaggedComponent with the given ID from the profile selected for this request.
 
      
      
      
      
      
      
      
      
      
      
      
      virtual void add_request_service_context(
const IOP::ServiceContext& 
_service_context, 
CORBA::Boolean 
_replace) = 0;
 
      
      
      
      
      
      This ClientRequestInterceptor class is used to derive user-defined client side interceptor. A 
ClientRequestInterceptor instance is registered with the VisiBroker ORB (go to 
“ORBInitializer” on page 222 for more information).
 
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      This send_request() interception point allows an interceptor to query request information and modify the service context before the request is sent to the server.
 
      This interception point may raise a system exception. If it does, no other interceptors' send_request() interception points are called. Those interceptors on the Flow Stack are popped and their 
receive_exception() interception points are called.
 
      This interception point may also raise a ForwardRequest exception (go to 
“ForwardRequest” on page 217 for more information). If an Interception raises this exception, no other interceptors' 
send_request methods are called. The remaining interceptors in the Flow Stack are popped and have their 
receive_other() interception point called.
 
      
      
      This send_poll() interception point allows an interceptor to query information during a Time-Independent Invocation (TII) polling get reply sequence.
 
      
      
      
      This receive_reply() interception point 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.
 
      This interception point may raise a system exception. If it does, no other interceptors' receive_reply() methods are called. The remaining interceptors in the Flow Stack will have their 
receive_exception() interception point called.
 
      
      virtual void receive_exception(ClientRequestInfo_ptr 
_ri) = 0;
 
      This receive_exception() interception point is called when an exception occurs. It allows an interceptor to query the exception's information before it is raised to the client.
 
      
      This interception point may also raise a ForwardRequest exception (go to 
“ForwardRequest” on page 217 for more information). If an interceptor raises this exception, no other interceptors' 
receive_exception() interception points are called. The remaining interceptors in the Flow Stack are popped and have their 
receive_other() interception point called.
 
      
      
      This receive_other() interception point 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 (for example, a GIOP Reply with a 
LOCATION_FORWARD status was received), or on asynchronous calls, the reply does not immediately follow the request, but control will return to the client and an ending interception point will be called.
 
      
      This interception point may raise a system exception. If it does, no other interceptors' receive_other() interception points are called. The remaining interceptors in the Flow Stack are popped and have their 
receive_exception() interception point called.
 
      This interception point may also raise a ForwardRequest exception (go to 
“ForwardRequest” on page 217 for more information). If an interceptor raises this exception, successive interceptors' 
receive_other() methods are called with the new information provided by the 
ForwardRequest exception.
 
      
      
      
      
      A Codec is obtained from the 
CodecFactory. The 
CodecFactory is obtained through a call to 
ORB::resolve_initial_references("CodecFactory").
 
      
      Include the IOP_c.hh file when you use this class.
 
      
      
      This exception is raised by encode() or 
encode_value() when an invalid type is specified for the encoding.
 
      
      This exception is raised by decode() or 
decode_value() when the data in the octet sequence cannot be decoded into a 
CORBA::Any.
 
      
      This exception is raised by decode_value() when the given 
TypeCode does not match the given octet sequence.
 
      
      
      This method converts the given data in the form of a CORBA::Any into an octet sequence based on the encoding format effective for this 
Codec. This octet sequence contains both the 
TypeCode and the data of the type.
 
      This operation may raise InvalidTypeForEncoding.
 
      
      
      This method decodes the given octet sequence into a CORBA::Any object based on the encoding format effective for this 
Codec.
 
      This method raises FormatMismatch if the octet sequence cannot be decoded into a 
CORBA::Any.
 
      
      
      This method converts the given CORBA::Any object into an octet sequence based on the encoding format effective for this 
Codec. Only the data from the 
CORBA::Any is encoded, not the 
TypeCode.
 
      This operation may raise InvalidTypeForEncoding.
 
      
      virtual CORBA::Any* decode_value(const CORBA::OctetSequence& 
_data,CORBA::TypeCode_ptr 
_tc) = 0;
 
      This method decodes the given octet sequence into a CORBA::Any based on the given 
TypeCode and the encoding format effective for this 
Codec.
 
      This method raises FormatMismatch if the octet sequence cannot be decoded into a 
CORBA::Any.
 
      
      
      
      This class is used to obtained a Codec. The 
CodecFactory is obtained through a call to 
ORB::resolve_initial_references("CodecFactory").
 
      
      Include the IOP_c.hh file when you use this class.
 
      
      
      This exception is raised if CodecFactory cannot create a 
Codec. See 
create_codec() function below.
 
      
      
      This create_codec() method creates a 
Codec of the given encoding.
 
      This method raises UnknownEncoding if this factory cannot create a 
Codec of the given encoding.
 
      
      
      
      The Current class is merely a slot table, the slots of which are used by each service to transfer their context data between their context and the request's or reply's service context.
 
      Each service which wishes to use Current reserves a slot or slots at initialization time (go to 
“virtual CORBA::ULong allocate_slot_id() = 0;” on page 225 for more information) and uses those slots during the processing of requests and replies.
 
      Before an invocation is made, Current is obtained by way of a call to 
ORB::resolve_initial_references("PICurrent").
 
      From within the interception points, the data on Current that has moved from the thread scope to the request scope is available by way of the 
get_slot() method on the 
RequestInfo object. A 
Current can still be obtained by way of 
resolve_initial_references(), but that is the interceptor's thread scope 
Current.
 
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      A service can get the slot data it sets in PICurrent by way of the 
get_slot() method. The data is in the form of a 
CORBA::Any object.
 
      If the given slot has not been set, a CORBA::Any containing a type code with a 
TCKind value of 
tk_null, no value is returned.
 
      If get_slot() is called on a slot that has not been allocated, 
InvalidSlot is raised.
 
      If get_slot() is called from within an ORB initializer, 
BAD_INV_ORDER with a minor code of 14 is raised.
 
      
        
        
          |  |  | 
        
          |  | SlotId of the slot from which the data will be returned. | 
      
      virtual void set_slot(CORBA::ULong 
_id, const CORBA::Any& 
_data);
 
      A service sets data in a slot with set_slot(). The data is in the form of a 
CORBA::Any object.
 
      
      If set_slot() is called on a slot that has not been allocated, 
InvalidSlot is raised.
 
      If set_slot() is called from within an ORB initializer (go to 
“ORBInitializer” on page 222 for more information) 
BAD_INV_ORDER with a minor code of 14 is raised.
 
      
        
        
          |  |  | 
        
          |  | SlotId of the slot from which the data will be set. | 
        
          |  | data, in the form of a CORBA::Any  object, which will be set to the identified slot. | 
      
      
      
      This structure defines the encoding format of a Codec. It details the encoding format, such as CDR Encapsulation encoding, and the major and minor versions of that format.
 
      
      
      
      
      
      
      Include the IOP_c.hh file when you use this 
struct.
 
      
      
      
      
      
      
      
      
      
      Use this class to hold exceptions information returned from the method exceptions() in the class 
RequestInfo. It is an implementation of variable-length array of type 
CORBA::TypeCode. The length of 
ExceptionList is available at run time.
 
      
      
      Include the Dynamic_c.hh file when you use this class.
 
      
      
      The ForwardRequest exception is the means by which an interceptor can indicate to the ORB that a retry of the request should occur with the new object given in the exception. This behavior of causing a retry only occurs if the ORB receives a 
ForwardRequest from an interceptor. If 
ForwardRequest is raised anywhere else, it is passed through the ORB as is normal for a user exception.
 
      If an interceptor raises a ForwardRequest exception in response to a call of an interceptor, no other interceptors are called for that interception point. The remaining interceptors in the Flow Stack will have their appropriate ending interception point called: 
receive_other() on the client, or 
send_other() on the server. The 
reply_status() in the 
receive_other() or 
send_other() will return 
LOCATION_FORWARD.
 
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      
      
      This method is called during ORB::destroy(). When 
ORB::destroy() is called by an application, the VisiBroker ORB:
 
      
      
        
          
            | 
                2	
               | calls the Interceptor::destroy() method for each interceptor | 
        
       
      
      Method invocations from within Interceptor::destroy() on object references for objects implemented on the ORB being destroyed result in undefined behavior. However, method invocations on objects implemented on VisiBroker ORB, other than the one being destroyed, are permitted. (This means that the VisiBroker ORB being destroyed is still capable of acting as a client, but not as a server.)
 
      
      
      The IORInfo interface provides the server side ORB service with access to the applicable policies during IOR construction and the ability to add components. The ORB passes an instance of its implementation of this interface as a parameter to 
IORInterceptor::establish_components().
 
      
      
      If an illegal call is made to an attribute or method in IORInfo, the 
BAD_INV_ORDER system exception is raised with a standard minor code value of 14.
 
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      An ORB service implementation may determine what server side policy of a particular type is in effect for an IOR being constructed by calling the get_effective_policy() method. When the IOR being constructed is for an object implemented using a POA, all Policy objects passed to the 
PortableServer::POA::create_POA() call that created that POA are accessible via 
get_effective_policy.
 
      
      
      virtual void add_ior_component(const IOP::TaggedComponent& 
_a_component) = 0;
 
      This method is called from establish_components() to add a tagged component to the set which will be included when constructing IORs. The components in this set will be included in all profiles.
 
      
      
      virtual void add_ior_component_to_profile(const IOP::TaggedComponent&
 _a_component, CORBA::ULong 
_profile_id) = 0;
 
      This method is called from establish_components() to add a tagged component to the set which will be included when constructing IORs. The components in this set will be included in the specified profile.
 
      
      
      
      
      
      
      
      
      This method returns the attribute that provides a means to obtain an object reference template whenever an IOR interceptor is invoked. There is no standard way to directly create an object reference template. The value of adapter_template() returns is the template created for the adapter policies and IOR interceptor calls to 
add_component() and 
add_component_to_profile(). The value of the 
adapter_template() returns is never changed for the lifetime of the object adapter.
 
      
      This method returns the attribute that provides access to the factory that will be used by the adapter to create object references. current_factory() initially has the same value as the 
adapter_template attribute, but this can be changed by setting 
current_factory to another factory. All object references created by the object adapter must be created by calling the 
make_object() method on 
current_factory.
 
      virtual void current_factory(ObjectReferenceFactory_ptr 
_current_factory) = 0;
 
      This method sets the current_factory attribute. The value of the 
current_factory attribute that is used by the adapter can only be set during the call to the 
components_established method.
 
      
      
      class IORInfoExt: public PortableInterceptor::IORInfo
 
      
      
      Include the PortableInterceptorExt_c.hh file when you use this class.
 
      
      
      
      
      
      
      
      
      
      This is supported through the IORInterceptor and 
IORInfo interfaces.
 
      
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      A server side ORB calls the establish_components() method on all registered 
IORInterceptor instances when it is assembling the list of components that will be included in the profile(s) of an object reference. This method is not necessarily called for each individual object reference. In the case of the POA, these calls are made each time 
POA::create_POA() is called. In other adapters, these calls would typically be made when the adapter is initialized. The adapter template is not available at this stage since information (the components) needed in the adapter template is being constructed.
 
      
        
        
          |  |  | 
        
          |  | IORInfo instance used by the ORB service to query applicable policies and add components to be included in the generated IORs. | 
      
      
      After all of the establish_components() methods have been called, the 
components_established() methods are invoked on all registered IOR interceptors. The adapter template is available at this stage. The 
current_factory attribute may be get or set at this stage.
 
      Any exception that occurs in components_established() is returned to the caller of 
components_established(). In the case of the POA, this causes the 
create_POA call to fail, and an 
OBJ_ADAPTER exception with a standard minor code of 6 is returned to the invoker of 
create_POA().
 
      
        
        
          |  |  | 
        
          |  | IORInfo instance used by the ORB service to access applicable policies. | 
      
      virtual void adapter_manager_state_changed(CORBA::Long 
_id, 	CORBA::Short 
_state) = 0;
 
      Any time the state of an adapter manager changes, the adapter_manager_state_changed() method is invoked on all registered IOR interceptors.
 
      If a state change is reported through adapter_manager_state_changed(), it is not reported through 
adapter_state_changed().
 
      
        
        
          |  |  | 
        
          |  | IORInfo instance used by the ORB service to access applicable policies. | 
        
          |  |  | 
      
      virtual void adapter_state_changed(const ObjectReferenceTemplateSeq& 
_templates, CORBA::Short 
_state) = 0;
 
      
      
      
      
      An interceptor is registered by registering an associated ORBInitializer object which implements the 
ORBInitializer class. When an ORB is initializing, it calls each registered 
ORBInitializer, passing it an 
ORBInitInfo object which is used to register its interceptor.
 
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      
      
      
      
      Calling the post_init() methods is not the final task of ORB initialization. The final task, following the 
post_init() calls, is attaching the lists of registered interceptors to the ORB. Therefore, the ORB does not contain the interceptors during calls to 
post_init(). If an ORB-mediated call is made from within 
post_init(), no request interceptors will be invoked on that call. Likewise, if a method is performed which causes an IOR to be created, no IOR interceptors will be invoked.
 
      
      
      
      This ORBInitInfo class is passed to 
ORBInitializer object for registering interceptors.
 
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      class DuplicateName : public CORBA_UserException;
 
      
      
      class InvalidName: public CORBA_UserException
 
      This exception is raised by register_initial_reference() and 
resolve_initial_references().
 
      
      
      
      resolve_initial_references() raises 
InvalidName if the name to be resolved is invalid.
 
      
      
      This method returns the arguments passed to ORB_init(). They may or may not contain the ORB's arguments.
 
      
      
      
      This method returns the IOP::CodecFactory. The 
CodecFactory is normally obtained via a call to 
ORB::resolve_initial_references("CodecFactory"), but since the ORB is not yet available and interceptors, particularly when processing service contexts, will require a 
Codec, a means of obtaining a 
Codec is necessary during ORB initialization.
 
      virtual void register_initial_reference(const char* 
_id, CORBA::Object_ptr 
_obj) = 0;
 
      If this method is called with an id, "Y", and an object, 
YY, then a subsequent call to 
register_initial_reference() will return object 
YY.
 
      This method is identical to ORB::register_initial_reference(). This same functionality exists here because the ORB, not yet fully initialized, is not yet available but initial references may need to be registered as part of Interceptor registration. The only difference is that the version of this method on the ORB uses PIDL (
CORBA::ORB::ObjectId and 
CORBA::ORB::InvalidName) whereas the version in this interface uses IDL defined in this interface; the semantics are identical.
 
      
      
      
      
      
      This method is only valid during post_init(). It is identical to 
ORB::resolve_initial_references(). This same functionality exists here because the ORB, not yet fully initialized, is not yet available but initial references may be required from the ORB as part of Interceptor registration.
 
      
      If the name to be resolved is invalid, resolve_initial_references() will raise 
InvalidName.
 
      virtual void add_client_request_interceptor(ClientRequestInterceptor_ptr 
_interceptor) = 0;
 
      
      
      
      virtual void add_server_request_interceptor(
	ServerRequestInterceptor_ptr 
_interceptor) = 0;
 
      
      
      
      virtual void add_ior_interceptor(IORInterceptor_ptr 
_interceptor) = 0;
 
      
      
      
      
      
      A service calls allocate_slot_id to allocate a slot on 
PortableInterceptor::Current.
 
      
      While slot id's can be allocated within an ORB initializer, the slots themselves cannot be initialized. Calling set_slot() or 
get_slot() on the 
Current within an ORB initializer will raise a 
BAD_INV_ORDER with a minor code of 14.
 
      virtual void register_policy_factory(CORBA::ULong 
_type, PolicyFactory_ptr 
_policy_factory) = 0;
 
      This method registers a PolicyFactory for the given 
PolicyType.
 
      If a PolicyFactory already exists for the given 
PolicyType, 
BAD_INV_ORDER is raised with a standard minor code of 16.
 
      
      
      
      
      
      Include the Dynamic_c.hh file when you use this 
struct.
 
      
      
      
      
      
      
      
      This class is used to pass parameters information returned from the method arguments() in the class 
RequestInfo. It is an implementation of variable-length array of type 
Parameter. The length of 
ParameterList is available at run-time.
 
      
      
      Include the Dynamic_c.hh file when you use this class.
 
      
      
      A portable ORB service implementation registers an instance of the PolicyFactory interface during ORB initialization. The POA is required to preserve any policy which is registered with 
ORBInitInfo in this manner.
 
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      The ORB calls create_policy() on a registered 
PolicyFactory instance when 
CORBA::ORB::create_policy() is called for the 
PolicyType under which the 
PolicyFactory has been registered. The 
create_policy() method then returns an instance of the appropriate interface derived from 
CORBA::Policy whose value corresponds to the specified 
CORBA::Any. If it cannot, it will raise an exception as described for 
CORBA::ORB::create_policy().
 
      
        
        
          |  |  | 
        
          |  | A CORBA::PolicyType specifying the type of policy being created. | 
        
          |  | An CORBA::Any containing data with which to construct the CORBA::Policy . | 
      
      
      
      This is the base class from which ClientRequestInfo and 
ServerRequestInfo are derived. Each interception point is given an object through which the Interceptor can access request information. client side and server side interception points are concerned with different information, so there are two information objects: 
ClientRequestInfo is passed to the client side interception points and 
ServerRequestInfo is passed to the server side interception points. But there is information that is common to both, so they both inherit from this common interface: 
RequestInfo.
 
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      
      
      This ID is not the same as the GIOP request_id. If GIOP is the transport mechanism used, then these IDs may very well be the same, but this is not guaranteed nor required.
 
      
      
      
      
      
      This method returns a Dynamic::ExceptionList describing the 
TypeCodes of the user exceptions that this operation invocation may raise. If there are no user exceptions, this attribute will be a zero length sequence.
 
      
      This method returns a CORBA::StringSequence describing the contexts that may be passed on this operation invocation. If there are no contexts, this attribute will be a zero length sequence.
 
      
      This method returns a CORBA::StringSequence containing the contexts being sent on the request.
 
      
      This method returns the data, in the form of CORBA::Any, that contains the result of the operation invocation. If the operation return type is void, this attribute will be a 
CORBA::Any containing a type code with a 
TCKind value of 
tk_void and no value.
 
      
      
      On the client, a reply is not returned when response_expected() is false, so 
receive_reply() cannot be called. 
receive_other() is called unless an exception occurs, in which case 
receive_exception() is called.
 
      
      This method returns an attribute, defined in the Messaging specification, is pertinent only when response_expected() is false. If 
response_expected() is true, the value of 
sync_scope() is undefined. It defines how far the request will progress before control is returned to the client. This attribute may have one of the following values:
 
      
      
      
      
      
      For SYNC_WITH_SERVER and 
SYNC_WITH_TARGET, the server does send an empty reply back to the client before the target is invoked. This reply is not intercepted by server side Interceptors.
 
      
      
      
      
      
      
      
      
      
        
          
            | 
                •     
               | Within the receive_reply interception point, this attribute will only be SUCCESSFUL . | 
        
       
      
        
          
            | 
                •     
               | Within the receive_exception interception point, this attribute will be either SYSTEM_EXCEPTION  or USER_EXCEPTION . | 
        
       
      
        
          
            | 
                •     
               | Within the receive_other interception point, this attribute will be any of: SUCCESSFUL , LOCATION_FORWARD , or TRANSPORT_RETRY . SUCCESSFUL means an asynchronous request returned successfully. LOCATION_FORWARD  means that a reply came back with LOCATION_FORWARD  as its status. TRANSPORT_RETRY  means that the transport mechanism indicated a retry - a GIOP reply with a status of NEEDS_ADDRESSING_MODE , for instance. | 
        
       
      
      
        
          
            | 
                •     
               | Within the send_reply interception point, this attribute will only be SUCCESSFUL . | 
        
       
      
        
          
            | 
                •     
               | Within the send_exception interception point, this attribute will be either SYSTEM_EXCEPTION  or USER_EXCEPTION . | 
        
       
      
        
          
            | 
                •     
               | Within the send_other interception point, this attribute will be any of: SUCCESSFUL , or LOCATION_FORWARD . SUCCESSFUL  means an asynchronous request returned successfully. LOCATION_FORWARD  means that a reply came back with LOCATION_FORWARD  as its status. | 
        
       
      
      If the reply_status() returns 
LOCATION_FORWARD, then this method returns an object to which the request will be forwarded. It is indeterminate whether a forwarded request will actually occur.
 
      
      This method returns the data, in the form of a CORBA::Any, from the given slot of the 
PortableInterceptor::Current that is in the scope of the request.
 
      If the given slot has not been set, then a CORBA::Any containing a type code with a 
TCKind value of 
tk_null is returned.
 
      
      Go to “Current” on page 215 for an explanation of slots and the 
PortableInterceptor::Current.
 
      
        
        
          |  |  | 
        
          |  | SlotId of the slot which is to be returned. | 
      
      
      
      
      
      
      
      
      
      
      
      This class is derived from RequestInfo. It is passed to server side interception points.
 
      Some methods on ServerRequestInfo are not valid at all interception points. The table below shows the validity of each attribute or method. If it is not valid, attempting to access it will result in a 
BAD_INV_ORDER being raised with a standard minor code of 14.
 
      
      
        
        
          | 1When ServerRequestInfo  is passed to receive_request() , there is an entry in the list for every argument, whether in, inout, or out. But only the in and inout arguments will be available.  2If the reply_status()  does not returns LOCATION_FORWARD , accessing this attribute will raise BAD_INV_ORDER  with a standard minor code of 14.  3If the servant locator caused a location forward, or raised an exception, this attribute / method may not be available in this interception point. NO_RESOURCES  with a standard minor code of 1 will be raised if it is not available.  4The method is not available in this interception point because the necessary information requires access to the target object's servant, which may no longer be available to the ORB. For example, if the object's adapter is a POA that uses a ServantLocator, then the ORB invokes the interception point after it calls ServantLocator::postinvoke() . | 
      
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      
      This method returns data, in the form CORBA::Any, that contains the exception to be returned to the client.
 
      If the exception is a user exception which cannot be inserted into a CORBA::Any (e.g., it is unknown or the bindings don't provide the 
TypeCode), then this attribute will be an 
CORBA::Any containing the system exception 
UNKNOWN with a standard minor code of 1.
 
      
      This method returns the value that was passed into the ORB::init call using the 
-ORBServerId argument when the ORB was created.
 
      
      
      In Java, this is accomplished using the -ORBid argument in the 
ORB.init call that created the ORB containing the object adapter that created this template. What happens if the same 
ORBid is used on multiple 
ORB::init() calls in the same server is currently undefined.
 
      
      
      
      This method returns the opaque object_id, in the form of CORBA::OctetSequence, that describes the target of the operation invocation.
 
      
      
      
      This method returns the RepositoryID for the most derived interface of the servant.
 
      
      This method returns the policy in effect for this operation for the given policy type. The returned CORBA::Policy object will only be a policy whose type was registered via 
register_policy_factory().
 
      If a policy for the given type was not registered via register_policy_factory, this method will raise 
INV_POLICY with a standard minor code of 3.
 
      
        
        
          |  |  | 
        
          |  | The CORBA::PolicyType which specifies the policy to be returned. | 
      
      virtual void set_slot(CORBA::ULong 
_id, const CORBA::Any& 
_data) = 0;
 
      This method allows an Interceptor to set a slot in the PortableInterceptor::Current that is in the scope of the request. If data already exists in that slot, it will be overwritten.
 
      
      Go to “Current” on page 215 for an explanation of slots and 
PortableInterceptor::Current.
 
      
      
      
      
      virtual void add_reply_service_context(const IOP::ServiceContext& 
_service_context,CORBA::Boolean 
_replace) = 0;
 
      
      
      
      
      
      This ServerRequestInterceptor class is used to derive user-defined server side interceptor. A 
ServerRequestInterceptor instance is registered with the ORB (go to 
“ORBInitializer” on page 222 for more information).
 
      
      Include the PortableInterceptor_c.hh file when you use this class.
 
      
      virtual void receive_request_service_contexts(
	ServerRequestInfo_ptr 
_ri) = 0;
 
      At this receive_request_service_contexts() interception point, Interceptors must get their service context information from the incoming request and transfer it to 
PortableInterceptor::Current's slots.
 
      
      This interception point may raise a system exception. If it does, no other Interceptors' receive_request_service_contexts() interception points are called. Those Interceptors on the Flow Stack are popped and their 
send_exception() interception points are called.
 
      This interception point may also raise a ForwardRequest exception (go to 
“ForwardRequest” on page 217 for more information). If an Interceptor raises this exception, no other Interceptors' 
receive_request_service_contexts() methods are called. Those Interceptors on the Flow Stack are popped and their 
send_other interception points are called.
 
      
        
        
          |  |  | 
        
          |  | This is the ServerRequestInfo instance to be used by Interceptor. | 
      
      virtual void receive_request(ServerRequestInfo_ptr 
_ri) = 0;
 
      This receive_request() interception point allows an Interceptor to query request information after all the information, including method parameters, are available. This interception point will execute in the same thread as the target invocation.
 
      In the DSI model, since the parameters are first available when the user code calls arguments(), 
receive_request() is called from within 
arguments(). It is possible that 
arguments() is not called in the DSI model. The target may call 
set_exception() before calling 
arguments(). The ORB will guarantee that 
receive_request() is called once, either through 
arguments() or through 
set_exception(). If it is called through 
set_exception(), requesting the 
arguments() will result in 
NO_RESOURCES being raised with a standard minor code of 1.
 
      This interception point may raise a system exception. If it does, no other Interceptors' receive_request() methods are called. Those Interceptors on the Flow Stack are popped and their 
send_exception interception points are called.
 
      This interception point may also raise a ForwardRequest exception (go to 
“ForwardRequest” on page 217 for more information). If an Interceptor raises this exception, no other Interceptors' 
receive_request() methods are called. Those Interceptors on the Flow Stack are popped and their 
send_other() interception points are called.
 
      
        
        
          |  |  | 
        
          |  | This is the ServerRequestInfo instance to be used by Interceptor. | 
      
      
      This send_reply() interception point allows an Interceptor to query reply information and modify the reply service context after the target operation has been invoked and before the reply is returned to the client. This interception point will execute in the same thread as the target invocation.
 
      This interception point may raise a system exception. If it does, no other Interceptors' send_reply() interception points are called. The remaining Interceptors in the Flow Stack will have their 
send_exception() interception point called.
 
      
        
        
          |  |  | 
        
          |  | This is the ServerRequestInfo instance to be used by Interceptor. | 
      
      
      This send_exception() interception point is called when an exception occurs. It allows an Interceptor to query the exception information and modify the reply service context before the exception is raised to the client. This interception point will execute in the same thread as the target invocation.
 
      
      This interception point may also raise a ForwardRequest exception (go to 
“ForwardRequest” on page 217 for more information). If an Interceptor raises this exception, no other Interceptors' 
send_exception() interception points are called. The remaining Interceptors in the Flow Stack will have their 
send_other interception points called.
 
      
      This send_other() interception point 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 
LOCATION_FORWARD status was received). This interception point will execute in the same thread as the target invocation.
 
      This interception point may raise a system exception. If it does, no other Interceptors' send_other() methods are called. The remaining Interceptors in the Flow Stack will have their 
send_exception interception points called.