The Jakarta Messaging API (formerly Java Message Service or JMS API) is a
Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
application programming interface
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software Interface (computing), interface, offering a service to other pieces of software. A document or standard that des ...
(API) for
message-oriented middleware
Message-oriented middleware (MOM) is software or hardware infrastructure supporting sending and receiving messages between distributed systems. Message-oriented middleware is in contrast to streaming-oriented middleware where data is communicate ...
. It provides generic messaging models, able to handle the
producer–consumer problem, that can be used to facilitate the sending and receiving of messages between
software system
A software system is a system of intercommunicating software component, components based on software forming part of a computer system (a combination of Computer hardware, hardware and software). It "consists of a number of separate Computer progr ...
s. Jakarta Messaging is a part of
Jakarta EE and was originally defined by a specification developed at Sun Microsystems before being guided by the
Java Community Process.
General idea of messaging
Messaging is a form of ''
loosely coupled'' distributed communication, where in this context the term 'communication' can be understood as an exchange of messages between software components. Message-oriented technologies attempt to relax ''tightly coupled'' communication (such as
TCP network
sockets,
CORBA or
RMI) by the introduction of an intermediary component. This approach allows software components to communicate with each other indirectly. Benefits of this include message senders not needing to have precise knowledge of their receivers.
The advantages of messaging include the ability to integrate heterogeneous platforms, reduce system bottlenecks, increase scalability, and respond more quickly to change.
Version history
* JMS 1.0
[
* JMS 1.0.1 (October 5, 1998)]
* JMS 1.0.1a (October 30, 1998)
* JMS 1.0.2 (December 17, 1999)
* JMS 1.0.2a (December 23, 1999)
* JMS 1.0.2b (August 27, 2001)
* JMS 1.1 (April 12, 2002)
* JMS 2.0 (May 21, 2013)
* JMS 2.0a (March 16, 2015)
JMS 2.0 is currently maintained under the Java Community Process as JSR 343.
JMS 3.0 is under early development as part of Jakarta EE.
Elements
The following are JMS elements:[Java Message Service (JMS)](_blank)
/ref>
; JMS provider
: An implementation of the JMS interface for message-oriented middleware (MOM). Providers are implemented as either a Java JMS implementation or an adapter to a non-Java MOM.
; JMS client
: An application or process that produces and/or receives messages.
; JMS producer/publisher
: A JMS client that creates and sends messages.
; JMS consumer/subscriber
: A JMS client that receives messages.
; JMS message
: An object that contains the data being transferred between JMS clients.
; JMS queue
: A staging area that contains messages that have been sent and are waiting to be read (by only one consumer). As the name queue suggests, the messages are delivered in the order sent. A JMS queue guarantees that each message is processed only once.
; JMS topic
: A distribution mechanism for publishing messages that are delivered to multiple subscribers.
Models
The JMS API supports two distinct models:
* Point-to-point
* Publish-and-subscribe
Point-to-point model
Under the ''point-to-point'' messaging system, messages are routed to individual consumers who maintain queues of incoming messages. This messaging type is built on the concept of message queues, senders, and receivers. Each message is addressed to a specific queue, and the receiving clients extract messages from the queues established to hold their messages. While any number of producers can send messages to the queue, each message is guaranteed to be delivered, and consumed by one consumer. Queues retain all messages sent to them until the messages are consumed or until the messages expire. If no consumers are registered to consume the messages, the queue holds them until a consumer registers to consume them.
Publish-and-subscribe model
The '' publish-and-subscribe'' model supports publishing messages to a particular message "topic". ''Subscribers'' may register interest in receiving messages ''published'' on a particular message topic. In this model, neither the publisher nor the subscriber knows about each other. A good analogy for this is an anonymous bulletin board.
* Zero or more consumers will receive the message.
* There is a timing dependency between publishers and subscribers. The publisher has to create a message topic for clients to subscribe. The subscriber has to remain continuously active to receive messages, unless it has established a durable subscription. In that case, messages published while the subscriber is not connected will be redistributed whenever it reconnects.
JMS provides a way of separating the application from the transport layer
In computer networking, the transport layer is a conceptual division of methods in the layered architecture of protocols in the network stack in the Internet protocol suite and the OSI model. The protocols of this layer provide end-to-end c ...
of providing data. The same Java classes can be used to communicate with different JMS providers by using the Java Naming and Directory Interface (JNDI) information for the desired provider. The classes first use a ''connection factory'' to connect to the queue or topic, and then use populate and send or publish the messages. On the receiving side, the clients then receive or subscribe to the messages.
URI scheme
RFC 6167 defines a jms:
URI scheme for the Java Message Service.
Provider implementations
To use JMS, one must have a JMS provider that can manage the sessions, queues and topics. Starting from Java EE version 1.4, a JMS provider has to be contained in ''all'' Java EE application servers. This can be implemented using the message inflow management of the Java EE Connector Architecture, which was first made available in that version.
The following is a list of common JMS providers:
* Amazon SQS'
Java Messaging Library
* Apache ActiveMQ Classic
* Apache ActiveMQ Artemis
* Apache Qpid, using AMQP
* IBM MQ (formerly MQSeries, then WebSphere MQ)
* IBM WebSphere Application Server's Service Integration Bus (SIBus)
* JBoss Messaging and HornetQ from JBoss
* JORAM from the OW2 Consortium
* Open Message Queue from Oracle
An oracle is a person or thing considered to provide insight, wise counsel or prophetic predictions, most notably including precognition of the future, inspired by deities. If done through occultic means, it is a form of divination.
Descript ...
* OpenJMS from the OpenJMS Group
* Oracle WebLogic Server and Oracle AQ
* PubSub+ from Solace
* RabbitMQ from Pivotal Software
* TIBCO Enterprise Message Service[ ]
See also
* Message Driven Beans
* Message queue — the concept underlying JMS
* Service-oriented architecture
** Event-driven SOA
* Messaging technologies that do ''not'' implement the JMS API include:
** Advanced Message Queuing Protocol (AMQP) — standardized message queue protocol with multiple independent implementations
** Data Distribution Service (DDS) — An Object Management Group (OMG) standardized real-time messaging system with over ten implementations that have demonstrated interoperability between publishers and subscribers
** Microsoft Message Queuing — similar technology, implemented for .NET Framework
References
Further reading
*
External links
*
JSR 343: Java Message Service 2.0
* API Javadoc
Javadoc (also capitalized as JavaDoc or javadoc) is an API documentation generator for the Java programming language. Based on information in Java source code, Javadoc generates documentation formatted as HTML and other formats via extensions. ...
documentation
Oracle's Java EE 7 JMS tutorial
A historical comparison matrix of JMS providers
{{Jakarta EE
Java enterprise platform
Java specification requests
Message-oriented middleware
Software architecture