This appendix contains the Document Type Definition (DTD) for DMS configuration files. The DTD describes all XML tags that can be used in a DMS configuration file.

<!--
This is the XML DTD for the PatchBay 1.0 configuration file.
-->

<!--
The dynamo-message-system element describes the configuration of all
the elements of the dynamo messaging system.  It describes the patch
bay, the local JMS configuration, and the message registry.
-->
<!ELEMENT dynamo-message-system (patchbay, local-jms,
message-registry)>


<!--
The patchbay element defines the configuration of the PatchBay
component of the dynamo messaging system.  It begins with a
declaration of the JMS providers used in the system, then declares
each message-source, message-sink, and message-filter managed by the
PatchBay.

Used in: dynamo-message-system
-->
<!ELEMENT patchbay (provider*, message-source*, message-sink*,
message-filter*)>


<!--
The provider element describes one JMS provider that will be used in
the Patch Bay.  It assigns a name to the provider, describes where the
various ConnectionFactory interfaces can be found, and includes flags
describing the provider's transaction capabilities.

Used in: patchbay
-->
<!ELEMENT provider (provider-name, topic-connection-factory-name?,
queue-connection-factory-name?, xa-topic-connection-factory-name?,
xa-queue-connection-factory-name?, supports-transactions?,
supports-xa-transactions?, username?, password?, client-id?,
initial-context-factory?)>


<!--
The provider-name assigns a name to a provider for use by destination
references in the file.

Used in: provider, input-destination, output-destination

Example:
<provider-name>MQSeries</provider-name>
-->
<!ELEMENT provider-name (#PCDATA)>


<!--
The topic-connection-factory-name describes the JNDI location of the
provider's TopicConnectionFactory interface.

Used in: provider

Example:
<topic-connection-factory-name>
  dynamo:/dms/local/LocalDMSManager
</topic-connection-factory-name>
-->
<!ELEMENT topic-connection-factory-name (#PCDATA)>


<!--
The queue-connection-factory-name describes the JNDI location of the
provider's QueueConnectionFactory interface.

Used in: provider

Example:
<queue-connection-factory-name>
  dynamo:/dms/local/LocalDMSManager
</queue-connection-factory-name>
-->
<!ELEMENT queue-connection-factory-name (#PCDATA)>


<!--
The xa-topic-connection-factory-name describes the JNDI location of
the provider's XATopicConnectionFactory interface.

Used in: provider

Example:
<xa-topic-connection-factory-name>
  dynamo:/dms/local/LocalDMSManager
</xa-topic-connection-factory-name>
-->
<!ELEMENT xa-topic-connection-factory-name (#PCDATA)>


<!--
The xa-queue-connection-factory-name describes the JNDI location of
the provider's XAQueueConnectionFactory interface.

Used in: provider

Example:
<xa-queue-connection-factory-name>
  dynamo:/dms/local/LocalDMSManager
</xa-queue-connection-factory-name>
-->
<!ELEMENT xa-queue-connection-factory-name (#PCDATA)>


<!--
The supports-transactions element indicates if the provider supports
transactions through the Session.commit()/rollback() methods.

Used in: provider

Must be one of:
<supports-transactions>true</supports-transactions>
<supports-transactions>false</supports-transactions>
-->
<!ELEMENT supports-transactions (#PCDATA)>


<!--
The supports-xa-transactions element indicates if the provider supports
transactions through the XA interface.

Used in: provider

Must be one of:
<supports-xa-transactions>true</supports-xa-transactions>
<supports-xa-transactions>false</supports-xa-transactions>
-->
<!ELEMENT supports-xa-transactions (#PCDATA)>


<!--
The username element specifies the username that should be
provided when creating a new connection.

Used in: provider

Example:
<username>
  charles
</username>
-->
<!ELEMENT username (#PCDATA)>


<!--
The password element specifies the password that should be
provided when creating a new connection.

Used in: provider

Example:
<password>
  charles
</password>
-->
<!ELEMENT password (#PCDATA)>


<!--
The client-id element specifies the client identifier that will be
assigned to the connection.  This is primarily used to reconnect to
durable subscription state.

Used in: provider

Example:
<client-id>
  OrderProcessor
</client-id>
-->
<!ELEMENT client-id (#PCDATA)>


<!--

The initial-context-factory element specifies the nucleus name of a
component that implements the
atg.dms.patchbay.JMSInitialContextFactory interface.  This nucleus
component will be called on to create an InitialContext whenever a
JNDI name needs to be resolved for the provider (i.e., when resolving
the JNDI name of a Topic/QueueConnectionFactory, or a Topic or a
Queue).  If no initial-context-factory is supplied, then the JNDI
names will be resolved against a "vanilla" InitialContext (i.e., one
created by calling "new InitialContext()").

Used in: provider

Example:
<initial-context-factory>
  /atg/jmsproviders/providerx/InitialContextFactory
</initial-context-factory>
-->
<!ELEMENT initial-context-factory (#PCDATA)>


<!--

The message-source element describes one MessageSource.  It specifies
its Nucleus name, and also describes each of the MessageSource's
output ports.

Used in: patchbay
-->
<!ELEMENT message-source (nucleus-name, output-port*)>


<!--
The nucleus-name element specifies the absolute name of a global
Nucleus component.

Used in: message-source, message-sink, message-filter

Example:
<nucleus-name>
  /atg/commerce/sources/EmailSource
</nucleus-name>
-->
<!ELEMENT nucleus-name (#PCDATA)>


<!--
The output-port element specifies how one of the output ports is
connected to possibly many destinations.

Used in: message-source, message-filter
-->
<!ELEMENT output-port (port-name?, output-destination*)>

<!--
The redelivery-port element specifies how one of the redelivery ports is
connected to possibly many destinations.

Used in: message-sink, message-filter
-->
<!ELEMENT redelivery-port (port-name?, output-destination*)>

<!--
The port-name element specifies the name of an input or output port.

Used in: output-port, input-port

Example:
<port-name>
  DEFAULT
</port-name>
-->
<!ELEMENT port-name (#PCDATA)>


<!--
The output-destination describes one Destination to which Messages
through an output port should be sent.  Each destination describes the
JMS provider through which the Message should be sent, the JNDI name
of the Destination, whether the Destination is a Topic or Queue, and
what options should be set on Messages on their way out.

Used in: output-port
-->
<!ELEMENT output-destination (provider-name?, destination-name,
destination-type, priority?, delivery-mode?)>


<!--
The destination-name element specifies the JNDI name of the
Destination

Used in: output-destination, input-destination

Example:
<destination-name>
  localjms:/local/dcs/PurchaseEvents
</destination-name>
-->
<!ELEMENT destination-name (#PCDATA)>


<!--
The destination-type element specifies the type of the Destination

Used in: output-destination, input-destination

Must be one of:
<destination-type>Topic</destination-type>
<destination-type>Queue</destination-type>
-->
<!ELEMENT destination-type (#PCDATA)>


<!--
The priority element specifies the JMSPriority that should be assigned
to all Messages going to this Destination through this output-port.
The priority should be between 0 and 9 (inclusive).

Used in: output-destination

Example:
<priority>8</priority>
-->
<!ELEMENT priority (#PCDATA)>


<!--
The delivery-mode element specifies the JMSDeliveryMode that should be
assigned to all Messages going to this Destination through this
output-port.

Used in: output-destination

Must be one of:
<delivery-mode>PERSISTENT</delivery-mode>
<delivery-mode>NON_PERSISTENT</delivery-mode>
-->
<!ELEMENT delivery-mode (#PCDATA)>


<!--
The message-sink element describes one MessageSink.  It specifies its
Nucleus name, and also describes each of the MessageSink's input
ports.

Used in: patchbay
-->
<!ELEMENT message-sink (nucleus-name, input-port*, redelivery-port*)>


<!--
The input-port element specifies how one of the input ports receives
Messages from possibly many destinations.

Used in: message-sink, message-filter
-->
<!ELEMENT input-port (port-name?, input-destination*)>


<!--
The input-destination element describes one Destination from which
Messages are received and attributed to this input-port.  Each
Destination describes the JMS provider from which the Message should
be received, the JNDI name of the Destination, whether the Destination
is a Topic or Queue, the message selector to be used, and whether
local messages should be received.

Used in: input-port
-->
<!ELEMENT input-destination (provider-name?, destination-name,
destination-type, durable-subscriber-name?, message-selector?,
no-local?, redelivery?)>

<!--
The redelivery element describes the configuration parameters used
for message redelivery during failure conditions. max-attempts defines
the maximum number of delivery attempts by Patch Bay to the input
destination. The delay interval (specified in msec) defines how long a
message should be delayed before a redelivery is attempted. Finally
if the maximum number of delivery attempts has been reached then
the message will be redirected to the output port named through
the failure-output-port element.

Used in: input-destination
-->

<!ELEMENT redelivery (max-attempts, delay, failure-output-port)>
<!ELEMENT max-attempts (#PCDATA)>
<!ELEMENT delay (#PCDATA)>
<!ELEMENT failure-output-port (#PCDATA)>

<!--
The message-selector element describes the filter that will restrict
the flow of Messages from this Destination.

Used in: input-destination

Example:
<message-selector>
  JMSType = 'atg.dcs.Purchase'
</message-selector>
-->
<!ELEMENT message-selector (#PCDATA)>


<!--
The durable-subscriber-name element specifies the name of the durable
subscription to which this should subscribe.  This may only be
specified for Topic Destinations.  If this is not specified, a durable
subscription will not be used.

Used in: input-destination

Example:
<durable-subscriber-name>
  orders
</durable-subscriber-name>
-->
<!ELEMENT durable-subscriber-name (#PCDATA)>


<!--
The no-local indicates whether Messages sent to this Topic by the same
Session should not be received.  If true, then such messages are
blocked, otherwise such messages are received.  This may only be
specified for Topic destinations.  Defaults to false if not specified.

Used in: input-destination

Must be one of:
<no-local>true</no-local>
<no-local>false</no-local>
-->
<!ELEMENT no-local (#PCDATA)>


<!--
The message-filter element describes one MessageFilter.

Used in: patchbay
-->
<!ELEMENT message-filter (nucleus-name, input-port*, output-port*,
redelivery-port*)>


<!--
The local-jms element configures the Local JMS system that will be
used with the patch bay in the dynamo messaging system.  It configures
the JNDI prefix that will be used for the destination names, and also
names all of the queues and topics in the Local JMS system.

Used in: dynamo-message-system
-->
<!ELEMENT local-jms (jndi-prefix, topic-name*, queue-name*)>


<!--
The jndi-prefix element specifies what JNDI prefix should be prepended
to each topic or queue name to form the destination's JNDI name.  The
prefix should start with "/" and should not include the "localdms:".
The destination's JNDI name will be
"localdms:{jndi-prefix}{topic/queue-name}".

Used in: local-jms

Example:
<jndi-prefix>
  /local
</jndi-prefix>
-->
<!ELEMENT jndi-prefix (#PCDATA)>


<!--
The topic-name element specifies the name of a Topic in the Local JMS
system.  The name should begin with a "/", and must be unique among
both topic-name and queue-name elements.

Used in: local-jms

Example:
<topic-name>
  /ProfileEvents
</topic-name>
-->
<!ELEMENT topic-name (#PCDATA)>


<!--
The queue-name element specifies the name of a Queue in the Local JMS
system.  The name should begin with a "/", and must be unique among
both queue-name and queue-name elements.

Used in: local-jms

Example:
<queue-name>
  /ProfileEvents
</queue-name>
-->
<!ELEMENT queue-name (#PCDATA)>


<!--
The message-registry element is the root element of the
MessageRegistry configuration file.  It defines several message-family
elements.

Used in: dynamo-message-system
-->
<!ELEMENT message-registry (message-family*)>


<!--
The message-family element describes a group of message-type elements,
and may also recursively contain a set of message-family elements.

Used in: message-registry, message-family
-->
<!ELEMENT message-family (message-family-name, message-family*,
message-type*)>


<!--
The message-family-name element specifies the name of a
message-family.

Used in: message-registry, message-family

Example:
<message-family-name>atg.dcs</message-family-name>
-->
<!ELEMENT message-family-name (#PCDATA)>


<!--
The message-typer element describes one MessageTyper.

Used in: message-type
-->
<!ELEMENT message-typer (nucleus-name)>

<!--
The message-type element describes one mapping from JMSType to Object
class.

Used in: message-family
-->
<!ELEMENT message-type (jms-type, message-class, message-typer?, message-context?,
                        display-name?, display-name-resource?, expert?, hidden?,
                        description?, description-resource?, resource-bundle?)>


<!--
The jms-type element specifies the JMSType for this message type.  The
jms-type must be unique across all message types in the message
registry.

Used in: message-type

Example:
<jms-type>
  atg.dcs.Purchase
</jms-type>
-->
<!ELEMENT jms-type (#PCDATA)>


<!--
The message-class element specifies the fully-qualified class name of
the Java Bean that contains the message's data.

Used in: message-type

Example:
<message-class>
  atg.dcs.PurchaseMessage
</message-class>
-->
<!ELEMENT message-class (#PCDATA)>


<!--
The message-context element specifies the nature of the message's
originating context.  If omitted, then no assumptions are made
concerning the message's context.  The following values are recognized:

   request: the message originates in a request thread, and
            request- or session-specific values may be resolved
    via JNDI.

   session: the message originates in a session-specific context, and
            session-specific values may be resolved via JNDI.
Used in: message-type

Example:
<message-context>
  request
</message-context>
-->
<!ELEMENT message-context (#PCDATA)>

<!--
The display-name element specifies a GUI display name for an element
described in the patch bay definition file.

Example:
<display-name>
  Buys Product
</display-name>
-->
<!ELEMENT display-name (#PCDATA)>

<!--
The display-name-resource element specifies a GUI display name for an element
described in the patch bay definition file, which can be loaded from a resource
bundle.

Example:
<display-name-resource>
  buysProduct
</display-name-resource>
-->
<!ELEMENT display-name-resource (#PCDATA)>

<!--
The description element specifies a GUI description for an element
described in the patch bay definition file.

Example:
<description>
  Generated when user purchases a product
</description>
-->
<!ELEMENT description (#PCDATA)>

<!--
The description-resource element specifies a GUI description for an element
described in the patch bay definition file, which can be loaded from a resource
bundle.

Example:
<description-resource>
  buysProductDescription
</description-resource>
-->
<!ELEMENT description-resource (#PCDATA)>

<!--
The resource-bundle element specifies a resource bundle from which resources
for an element described in the patch bay definition file can be loaded.

Example:
<resource-bundle>
  atg.dms.Resources
</resource-bundle>
-->
<!ELEMENT resource-bundle (#PCDATA)>

<!--
The hidden element specifies a flag indicating that the given message type
should be hidden in a GUI.

Example:
<hidden>
  true
</hidden>
-->
<!ELEMENT hidden (#PCDATA)>

<!--
The expert element specifies a flag indicating that the given message type
should be hidden in a GUI from non-expert users.

Example:
<expert>
  true
</expert>
-->
<!ELEMENT expert (#PCDATA)>