Previous Table of Contents Next


23.2.2 Interoperable Object Group References


   This section extends the definition of an interoperable object reference (IOR) to encompass references to server object groups. The interoperable object group reference (IOGR) for a server object group is an IOR that contains multiple TAG_INTERNET_IOP profiles and that may contain a TAG_MULTIPLE_COMPONENTS profile.

   Each of the TAG_INTERNET_IOP profiles must contain the TAG_FT_GROUP component, and may contain other components such as TAG_IIOP_ALTERNATE_ADDRESS components. At most one of the TAG_INTERNET_IOP profiles may contain the TAG_FT_PRIMARY component. The TAG_MULTIPLE_COMPONENTS profile may also contain the TAG_FT_GROUP component, which must be used for object groups that have no members. An example is shown in Figure 27-3 on page 27-14.

   The TAG_FT_GROUP component and TAG_FT_PRIMARY component are described in Section 23.2.2.1, “TAG_FT_GROUP Component,? on page 23-14 and Section 23.2.2.2, “TAG_FT_PRIMARY Component,? on page 23-16.


   tag_group

   object_group

   object_group_id

   version

   ft_domain_id

   _version


   Figure 23-3 An example of the Interoperable Object Group Reference Used for Fault Tolerance. The reference is an IOR that contains multiple TAG_INTERNET_IOP profiles, any of which may be used to reach the server object group. The reference may also contain a TAG_MULTIPLE_COMPONENTS profile. The TAG_FT_GROUP component is contained in every profile of the reference. The TAG_FT_PRIMARY component is contained in at most one TAG_INTERNET_IOP profile.

   23.2.2.1 TAG_FT_GROUP Component

   The TAG_FT_GROUP component is contained in the profiles of the interoperable object group reference.

   module IOP {const ComponentId TAG_FT_GROUP = 27;};

   module FT {typedef string FTDomainId;typedef unsigned long long ObjectGroupId;typedef unsigned long ObjectGroupRefVersion;

   struct TagFTGroupTaggedComponent { // tag = TAG_FT_GROUP;

GIOP::Version version;
FTDomainId ft_domain_id;
ObjectGroupId object_group_id;
ObjectGroupRefVersion object_group_ref_version;
};
};

   Object groups have an identity that persists even as the membership of the object group changes. Thus, an object group requires an identifier that is unique within the context of a fault tolerance domain. Moreover, as the membership of an object group changes, the object group reference may have different versions. To address these concerns, Fault Tolerant CORBA introduces the following types.

   typedef string FTDomainId;

   The identifier of a fault tolerance domain.

   typedef unsigned long long ObjectGroupId;

   The identifier of an object group.

   typedef unsigned long ObjectGroupRefVersion;

   The version number of the object group reference.

   The TAG_FT_GROUP component contains the fault tolerance domain identifier and object group identifier of the server object group, which are used to reach the server object group. It also contains the object_group_ref_version, which the client ORB may put in the FT_GROUP_VERSION service context in the client’s request messages, as described in Section 23.2.7.1, “FT_GROUP_VERSION Service Context,? on page 23-22.

   const ComponentId TAG_FT_GROUP = 27;

   A constant that designates the TAG_FT_GROUP component that is contained in the TAG_INTERNET_IOP profiles and may be contained in the TAG_MULTIPLE_COMPONENTS profile.

   struct TagFTGroupTaggedComponent { // tag = TAG_FT_GROUP;

   GIOP::Version version;

   FTDomainId ft_domain_id;

   ObjectGroupId object_group_id;

   ObjectGroupRefVersion object_group_ref_version; };

   The TAG_FT_GROUP component, within the TAG_INTERNET_IOP profiles and TAG_MULTIPLE_COMPONENTS profile, contains the version of the TAG_FT_GROUP component, the fault tolerance domain identifier, the object group identifier, and the version number of the object group reference for the server object group. For implementations conforming to this version of the specification, the value of version.major must be 1 and the value of the version.minor must be 0.

   23.2.2.2 TAG_FT_PRIMARY Component

   The TAG_FT_PRIMARY component is contained in at most one of the TAG_INTERNET_IOP profiles of the interoperable object group reference.

   module IOP { const ComponentId TAG_FT_PRIMARY = 28;

   };

   module FT { struct TagFTPrimaryTaggedComponent { // tag = TAG_FT_PRIMARY; boolean primary; }; };

   The profile that contains the TAG_FT_PRIMARY component is used in preference to other profiles to reach the server object group.

   const ComponentId TAG_FT_PRIMARY = 28;

   A constant that designates the TAG_FT_PRIMARY component that is contained in at most one of the TAG_INTERNET_IOP profiles.

   struct TagFTPrimaryTaggedComponent { // tag = TAG_FT_PRIMARY; boolean primary;

   };

   The TagFTPrimaryTaggedComponent, when present in a TAG_INTERNET_IOP profile, indicates that the profile is to be used in preference to the other TAG_INTERNET_IOP profiles within the object group reference.

   At most one of the profiles in the object group reference contains the TAG_FT_PRIMARY component. A client-side ORB may use that profile in preference to the other profiles. It is not mandated that the ORB must choose the profile containing the TAG_FT_PRIMARY component. Moreover, it cannot be guaranteed that the endpoint addressed by the profile containing the TAG_FT_PRIMARY component is currently the primary endpoint for the object group.

   Use of any of the profiles, other than that containing the TAG_FT_PRIMARY component, may result in one or more LOCATION_FORWARDs and thus reduced efficiency. No requirement is imposed on the particular order in which the other profiles, that do not contain the TAG_FT_PRIMARY component, must be used.