Previous Table of Contents Next


20.9.1 CORBA Chain Bypass


   For views to discover the chain information, two service contexts are defined as follows:

   ChainBypassCheck = 2ChainBypassInfo = 3

   module CosBridging

   {struct ResolvedRef

   {Resolver resolver;ObjectSystemID objSysID;

unsigned long chainDataFormat;
octet chainDataVersion;
OpaqueData chainData;
OpaqueRef reference;
};

   typedef sequence<ResolvedRef> ResolvedRefChain;

   struct ChainBypassCheck // Outgoing service context{Object objectToCheck;};

   struct ChainBypassInfo // Reply service context{ResolvedRefChain chain;};};

   The ChainBypassCheck service context is sent out with the first outgoing (nononeway) request. Since the service context is propagated automatically to subsequent calls, an object is provided in the service context to avoid returning chain information for an incorrect object. For a reply service context to be generated, the object in the service context must match the object (a view) being invoked.

   If a reply service context, ChainBypassInfo, is received with the reply message, then a view has been detected. The information in the ResolvedRefChain can be used to bypass intermediate views. Each ResolvedRef is identical to a ResolvableRef except that it also contains the result of the resolution -- the reference member contains the data that would be returned if Resolve were called on the included resolver. If the reference field of ResolvedRef is an empty sequence, then the marshaled object reference is assumed to be identical to the chainData.