| atr<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><HTML> |
| <HEAD> |
| <TITLE> |
| Architecture |
| </TITLE> |
| </HEAD> |
| <BODY BGCOLOR="#ffffff"> |
| |
| <P> |
| The Java Message Service (JMS) API provides a common way for Java programs to create, |
| send, receive and read an enterprise messaging system's messages. |
| |
| <H3>JMS Applications</H3> |
| |
| <P>A JMS application is composed of the following parts:</P> |
| |
| <UL> |
| <LI>JMS Provider - a messaging system that implements the JMS API |
| in addition to the other administrative and control functionality required |
| of a full-featured messaging product</LI> |
| <LI>JMS Clients - the Java language programs that send and receive |
| messages</LI> |
| <LI>Messages - objects that are used to communicate information between the |
| clients of an application</LI> |
| <LI>Administered Objects - provider-specific objects that clients look up |
| and use to interact portably with a JMS provider</LI> |
| <LI>Non-JMS Clients - clients that use a message system's native |
| client API instead of the JMS API. If the application predated the |
| availability of the JMS API, it is likely that it will include both JMS |
| clients and non-JMS clients.</LI> |
| </UL> |
| |
| <H3>Administration</H3> |
| |
| <P>JMS providers differ significantly in their implementations of |
| underlying messaging technology. There are also major |
| differences in how a JMS provider's system is installed and administered.</P> |
| |
| <P>For JMS clients to be portable, they must be isolated from these |
| proprietary aspects of a provider. This is done by defining JMS administered |
| objects that are created and customized by a provider's administrator and |
| later used by clients. The client uses them through JMS interfaces that are |
| portable. The administrator creates them using provider-specific facilities.</P> |
| |
| <P>There are two types of JMS administered objects:</P> |
| |
| <UL> |
| <LI>ConnectionFactory - the object a client uses to create a |
| connection with a JMS provider</LI> |
| <LI>Destination - the object a client uses to specify the |
| destination of messages it is sending and the source of messages |
| it receives</LI> |
| </UL> |
| |
| <P>Administered objects are placed in a Java Naming and Directory |
| Interface<SUP><FONT SIZE="-2">TM</FONT></SUP> (JNDI) namespace by an |
| administrator. |
| A JMS client typically notes in its documentation the JMS administered objects |
| it requires and how the JNDI names of these objects should be provided to it.</P> |
| |
| <H3>Two Messaging Styles</H3> |
| |
| <P>The JMS specification defines two styles of messaging: the point-to-point |
| (PTP) or the publish-and-subscribe (Pub/Sub). These styles can be combined in a |
| single application, or a given application can use just one of these styles.</P> |
| |
| <P>The JMS API defines these two styles because they represent two of the |
| dominant approaches to messaging currently in use. While the domains have many |
| similarities, they also have some differences. JMS provides a unified programming |
| interface to allow the client programmer to easily send and receive message using |
| either domain, but the client programmer must also be aware of the differences |
| between the domains. The key differences relate to how message persistence is |
| handled, and the meaning of certain message attributes. </P> |
| |
| <H3>JMS Interfaces</H3> |
| |
| When programming an application client, the programmer may either program using |
| the domain specific interfaces, or may use the common interfaces. The key interfaces |
| are listed in the table below. The preferred model is to use the common interfaces. |
| The advantage to using the common interfaces is that both point-to-point and |
| pub/sub tasks can be combined in one session, allowing transactions to operate |
| over both domains. |
| <P>In earlier versions of JMS, there were separate class hierarchies for |
| the pub/sub and point-to-point programming models that had to be used. |
| These class hierarchies are retained to support backward compatibility with |
| earlier versions of the JMS API, but client developers are encouraged to use |
| the common interfaces. |
| <P> |
| <TABLE BORDER CELLPADDING="3" CELLSPACING="0"> |
| <CAPTION> |
| <B>Relationship of PTP and Pub/Sub interfaces<B> |
| </CAPTION> |
| <TR> |
| <TH ALIGN="LEFT">JMS Common</TH> |
| <TH ALIGN="LEFT">PTP Domain</TH> |
| <TH ALIGN="LEFT">Pub/Sub Domain</TH> |
| </TR> |
| <TR> |
| <TD>ConnectionFactory</TD> |
| <TD>QueueConnectionFactory</TD> |
| <TD>TopicConnectionFactory</TD> |
| </TR> |
| <TR> |
| <TD>Connection</TD> |
| <TD>QueueConnection</TD> |
| <TD>TopicConnection</TD> |
| </TR> |
| <TR> |
| <TD>Destination</TD> |
| <TD>Queue</TD> |
| <TD>Topic</TD> |
| </TR> |
| <TR> |
| <TD>Session</TD> |
| <TD>QueueSession</TD> |
| <TD>TopicSession</TD> |
| </TR> |
| <TR> |
| <TD>MessageProducer</TD> |
| <TD>QueueSender</TD> |
| <TD>TopicPublisher</TD> |
| </TR> |
| <TR> |
| <TD>MessageConsumer</TD> |
| <TD>QueueReceiver</TD> |
| <TD>TopicSubscriber</TD> |
| </TR> |
| </TABLE> |
| |
| <P>The following provides a brief definition of these JMS concepts. See the PTP |
| and Pub/Sub chapters of the JMS specification for more information.</P> |
| |
| <UL> |
| <LI>ConnectionFactory - an administered object used by a client to create a |
| Connection</LI> |
| <LI>Connection - an active connection to a JMS provider</LI> |
| <LI>Destination - an administered object that encapsulates the identity of a |
| message destination</LI> |
| <LI>Session - a single-threaded context for sending and receiving messages</LI> |
| <LI>MessageProducer - an object created by a Session that is used for sending |
| messages to a destination</LI> |
| <LI>MessageConsumer - an object created by a Session that is used for receiving |
| messages sent to a destination</LI> |
| </UL> |
| |
| <P>The term <EM>consume</EM> is used in this document to mean the receipt of a |
| message by a JMS client; that is, a JMS provider has received a message and has |
| given it to its client. Since the JMS API supports both synchronous and asynchronous |
| receipt of messages, the term <EM>consume</EM> is used when there is no need to |
| make a distinction between them.</P> |
| |
| <P>The term <EM>produce</EM> is used as the most general term for sending a |
| message. It means giving a message to a JMS provider for delivery to a |
| destination.</P> |
| |
| <H3>Developing a JMS Application</H3> |
| |
| <P>Broadly speaking, a JMS application is one or more JMS clients that exchange |
| messages. The application may also involve non-JMS clients; however, these |
| clients use the JMS provider's native API in place of the JMS API.</P> |
| |
| <P>A JMS application can be architected and deployed as a unit. In many cases, |
| JMS clients are added incrementally to an existing application.</P> |
| |
| <P>The message definitions used by an application may originate with JMS, or they |
| may have been defined by the non-JMS part of the application.</P> |
| |
| <H3>Developing a JMS Client</H3> |
| |
| <P>A typical JMS client executes the following setup procedure:</P> |
| |
| <UL> |
| <LI>Use JNDI to find a ConnectionFactory object</LI> |
| <LI>Use JNDI to find one or more Destination objects</LI> |
| <LI>Use the ConnectionFactory to create a JMS Connection. At this point, |
| message delivery is inhibited</LI> |
| <LI>Use the Connection to create one or more JMS Sessions</LI> |
| <LI>Use a Session and the Destinations to create the MessageProducers and |
| MessageConsumers needed</LI> |
| <LI>Start message delivery for the Connection. Messages will be delivered to |
| MessageConsumers</LI> |
| </UL> |
| |
| <P>At this point a client has the basic setup needed to produce and consume |
| messages.</P> |
| |
| <H3>Package Specification</H3> |
| |
| <BLOCKQUOTE> |
| <A HREF="http://java.sun.com/products/jms/docs.html">Java Message Service |
| Specification - Version 1.1 </A> |
| </BLOCKQUOTE> |
| |
| <H3>Related Documentation</H3> |
| |
| <BLOCKQUOTE> |
| <A HREF="http://java.sun.com/products/jms/tutorial/index.html">Java Message |
| Service Tutorial</A> |
| </BLOCKQUOTE> |
| |
| </BODY> |
| </HTML> |