Previous Table of Contents Next


20.10 Thread Identification

   To correlate incoming requests with previous outgoing requests, DCOM requires a causality ID. The identifier is essentially a logical thread ID used to determine whether an incoming request is from an existing logical thread or is a different logical thread of execution. CORBA, on the other hand, does not strictly require a logical thread ID. To maintain the logical thread ID as requests pass through both DCOM and CORBA, we define a general purpose service context, which can be used to maintain logical thread identifiers for any system a thread of execution passes through.

   module CosBridging

   {struct OneThreadID{

   ObjectSystemID objSysID;

   OpaqueData threadID;

   };

   typedef sequence<OneThreadID> ThreadIDs;

   struct LogicalThreadID // Service context{ThreadIDs IDs;};};

   The logical thread ID information is propagated through a CORBA call chain using a service context (IDs to be assigned by the OMG) containing the LogicalThreadID structure.

   For future use, a DCOM extent is defined to allow the same logical thread identification information to be passed through a DCOM call chain. If the OMG chooses to standardize a logical thread ID format for CORBA, this can be passed through a DCOM call chain using this extent.

   struct OneThreadID

   {ObjectSystemID objSysID;OpaqueData threadID;

   };

   struct ThreadIDs

   {unsigned long len;unsigned long maxlen;OneThreadID [size_is(len)] *data;

   };

   struct LogicalThreadID // DCOM extent{ThreadIDs IDs;};

   This extent, used for passing logical thread IDs, is identified by the following UUID:

   f81f4e20-2234-11d1-8a22-006097cc044d