3.1.1 Abstract Data Model

This section describes a conceptual model of possible data organization that a queue manager implementation maintains to participate in the MSMQ protocols. The described organization is provided to facilitate the explanation of how the related protocols behave. This document does not mandate that implementations adhere to this model as long as their external behavior is consistent with the behavior that is described in the protocol documents.

The following UML static class diagram (see [UML]) shows the ADM elements and their relationships. This is followed by a high-level description of these ADM elements.

UML static class diagram for the queue manager abstract data model

Figure 2: UML static class diagram for the queue manager abstract data model

DirectoryObject: An ADM element that is used as a base class for ADM elements that can be published in a directory.

The following ADM elements subclass the DirectoryObject ADM element:

  • QueueManager: Represents the attributes and relationships of a queue manager in the Message Queuing system.

  • Queue: Represents a single queue that is hosted by the queue manager. The following ADM element subclasses the Queue ADM element.

    • Outgoing Queue: A subtype of a Queue that is used to store messages while they are in transit to a queue on a remote queue manager.

  • Enterprise: Represents the attributes and relationships of an enterprise.

  • Site: Represents the attributes and relationships of an MSMQ site in an enterprise.

  • RoutingLink: A relationship between two MSMQ sites.

  • ConnectedNetwork: Represents the attributes and relationships of a connected network in an Enterprise.

  • User: Associates the security identifier (SID) of a user with a set of certificates for that user.

    MessagePosition: Represents a position in a queue that can contain a message.

    Message: The data that is stored in a queue and is exchanged between two queue managers.

    OutgoingTransferInfo: Contains information about message transfer from an outgoing queue on a local queue manager and the destination queue on a remote queue manager.

    IncomingTransactionalTransferInfo: Contains information about transactional message transfer from a remote queue manager to a destination queue that is hosted on the local queue manager.

    Cursor: An iterator over the messages contained within a queue. The abstract data model and processing rules for a Cursor ADM element are specified in section 3.2.

    Transaction: Defines the unit of work for queuing operations that send, receive or move messages to queues.

    TransactionalOperation: Associates an action with a MessagePosition that is part of a larger unit of work.

    OpenQueueDescriptor: Contains information about a queue that has been opened for message operations by one of the MSMQ protocols.

    WaitingMessageReadOperation: Contains information about outstanding message read requests.

The remaining subsections describe details of these ADM elements, with the exception of the DirectoryObject ADM element, which is described fully in this section. In addition, the enumeration types used in these attributes are described in section 3.1.1.17.

In the subsequent subsections, if the attributes of these ADM elements are categorized as Persistent or Directory attributes, they MUST conform to the following requirements.

Persistent attribute: Requires that the ADM element or attribute value MUST survive across queue manager shut down and restart cycles.

Directory attribute: Requires that the ADM element or attribute value MUST survive across queue manager shut down and restart cycles. In addition, this type of attribute can be published in or retrieved from the directory through the directory access events defined in sections 3.1.7.1.18 through 3.1.7.1.24.

Any attributes listed in subsequent sections that are not specified as Persistent or Directory attributes MUST be treated as volatile attributes that do not survive across queue manager shut down and restart cycles.

The DirectoryObject ADM element contains the following directory attribute, which is inherited by all of its subclasses:

Identifier: A GUID that uniquely identifies a DirectorObject ADM element instance. This identifier MUST NOT change over the lifetime of the DirectoryObject ADM element instance.

The queue manager MUST maintain  LocalQueueManager, an instance of a QueueManager (section 3.1.1.1) ADM element. The LocalQueueManager ADM element instance MUST be accessible to all MSMQ protocol implementations that are co-located on the queue manager.