Previous | Table of Contents | Next |
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.