JMS (Java Message Service) Specification

JMS Planning Long List

Improvements to the JMS specification are managed using the issue tracker. Here is a classified list of all the open issues.


Corrections and clarifications (minor)

ID Description Status Notes
JMS_SPEC-175 Fix javadocs to remove need to disable doclint    
JMS_SPEC-173 Javadocs for JMSContext#start should mention that it is usually called automatically    
JMS_SPEC-171 Typo in javadoc for JMSDestinationDefinition    
JMS_SPEC-153 Correction to 7.3.8. “Use of the CompletionListener by the JMS provider”    
JMS_SPEC-150 Add guidance on when to use receiveBody and how to handle MessageFormatRuntimeException    
JMS_SPEC-121 Injection of JMSContext objects not possible in a WebSocket @OnMessage or @OnClose callback method   Not really a bug, but may require noting in the spec
JMS_SPEC-123 JMSProducer#setJMSCorrelationIDAsBytes should be allowed to throw a java.lang.UnsupportedOperationException    
JMS_SPEC-104 API javadocs need to conform to Oracle accessibility standards and W3C HTML validation standards   Partially completed for JMS 2.0 but one issue remains.
JMS_SPEC-84 Clarify when acknowledged persistent messages may be dropped   Will defer to JMS 2.1
JMS_SPEC-75 Ambiguous javadocs for Connection.createConnectionConsumer and createDurableConnectionConsumer   Carried forward from JMS 2.0
JMS_SPEC-47 Deprecate domain-specific APIs and propose for removal   Deprecation not allowed by Java EE policy. Could make a recommendation not to use.
JMS_SPEC-3 Fix JavaDocs to reflect missing NumberFormatException from API methods   Carried forward from JMS 2.0
JMS_SPEC-2 Fix JavaDocs to reflect missing IllegalStateException from API methods   Carried forward from JMS 2.0

Corrections (major)

ID Description Status Notes
JMS_SPEC-152 New method XAJMSContext#createXAJMSContext    
JMS_SPEC-126 API to allow app servers to implement JMSContext without needing an additional connection pool    

Messaging features (minor)

ID Description Status Notes
JMS_SPEC-159 Allow stop and close to be called from a message listener    
JMS_SPEC-151 Add repeating annotation support to @JMSConnectionFactoryDefinition and @JMSDestinationDefinition    
JMS_SPEC-149 Asynchronous Send Functionality Should Use Java SE 8 Completeable Future    
JMS_SPEC-148 The Delivery Delay Feature Should Utilize the Java SE 8 Date/Time API    
JMS_SPEC-147 Extend the @JMSConnectionFactory annotation to allow a resource reference to be defined    
JMS_SPEC-144 StreamMessage#getBody    
JMS_SPEC-139 Clarify scope of ClientID between JavaDoc and specification    
JMS_SPEC-138 Clarify whether you can call createContext on a QueueConnectionFactory or TopicConnectionfactory    
JMS_SPEC-137 Section 8.7 of the JMS 2.0 spec has a malformed sentence    
JMS_SPEC-124 Sending a foreign message using a provider which does not support setJMSCorrelationIDAsBytes   A bit obscure and unimportant.
JMS_SPEC-118 MessageListeners should be as simple as lambda expressions    
JMS_SPEC-113 Clarify the difference (if any) between JMSException.getLinkedException() and JMSException.getCause()    
JMS_SPEC-110 add JMS methods to access an Object’s creator: Message.getSession(), Session.getConnection(), …    
JMS_SPEC-109 add method Destination.getName()    
JMS_SPEC-108 add generics to methods currently returning raw types    
JMS_SPEC-91 New “relaxed message order” option    
JMS_SPEC-85 Clarify how Message.receiveNoWait() is expected to behave    
JMS_SPEC-79 New factory methods to create BytesMessage and MapMessage and set the payload    
JMS_SPEC-71 Change XAConnectionFactory to extend ConnectionFactory    
JMS_SPEC-68 Add new method Session.acknowledge()    
JMS_SPEC-67 Relaxing the requirement to throw an exception if a message is sent to a deleted temp destination    
JMS_SPEC-66 Define how MessageConsumer.receive should handle a thread interrupt    
JMS_SPEC-24 Clarify classloader used in ObjectMessage.getObject() and/or provide new method getObject(ClassLoader classLoader)    
JMS_SPEC-22 Add JMS defined property JMSXGroupLast    

Messaging features (major)

ID Description Status Notes
JMS_SPEC-154 Standardize Abstractions for Common Message Processing Patterns    
JMS_SPEC-142 Standardize Dead Letter Queues    
JMS_SPEC-130 Allow a JMSContext or Session to opt out of a Java EE transaction    
JMS_SPEC-95 Individual message acknowledge mode    
JMS_SPEC-83 Tighter specification of Expired Message Handling in Section 4.8 “Message Time-to-Live”    
JMS_SPEC-73 Define how messages from a topic are delivered to clustered application server instances   Added to JMS 2.0 public draft but removed from the final draft
JMS_SPEC-72 Poison message management    
JMS_SPEC-59 Basic metadata/management via JMS    
JMS_SPEC-58 New method Message.copyMessage() to create a mutable copy of a received message    
JMS_SPEC-41 Support topic hierarchies Awaiting proposals from original proposer  
JMS_SPEC-37 Last Value Cache Feature for a topic.    
JMS_SPEC-36 Allow messages to be delivered asynchronously in batches   This was deferred from JMS 2.0 until async receive was made simpler, so should be revisited for JMS 2.1
JMS_SPEC-25 Standardise the interface between a JMS provider and a Java EE application server   The JMS 2.0 considered making JCA support mandatory but rejected it. Any other ideas?
JMS_SPEC-21 Support for pre-acknowledge ack mode    
JMS_SPEC-18 Standard set of server JMX MBeans    
JMS_SPEC-14 Durable subscription browser    
JMS_SPEC-7 Provide HTTP Binding    
JMS_SPEC-5 Multi-Value Support in Properties    

New acknowledgement modes

This section contains various proposals for new acknowledgement modes.

ID Description Status Notes
JMS_SPEC-169 Vendor-defined acknowledgement modes    
JMS_SPEC-168 No-acknowledge mode    
JMS_SPEC-95 Individual message acknowledge mode    

Resource creation and configuration

This section contains various proposals affecting the creation and configuration of ConnectionFactory, Queue and Topic objects. Note that the requirements for Java SE applications, Java EE applications and resource adapters are different.

ID Description Status Notes
JMS_SPEC-172 Resource adapter: define standard destination and connection factory properties    
JMS_SPEC-90 Provide simpler mechanism to refer to queues and topics in a portable way   Discussed for JMS 2.0 but consensus not reached
JMS_SPEC-89 Define standard API to create and configure a ConnectionFactory in Java SE applications and by a Java EE container   Discussed for JMS 2.0 but consensus not reached

Application server integration.

These issues are concerned with the API used to “plug in” a particular JMS provider into a particular application server

They don’t affect the JMS API as used by user applications.

ID Description Status Notes
JMS_SPEC-28 Clarify how the JMS provider should interact with Transaction Managers. Awaiting proposals from original proposer  
JMS_SPEC-26 Decide on the future of the optional Chapter 8 API “JMS Application Server Facilities”   No consensus yet

Behaviour of JMS API in a Java EE application server

ID Description Status Notes
JMS_SPEC-156 JMS does not adequately define the behaviour of getAcknowledgeMode, getTransacted and getSessionMode in Java EE   Deferred from JMS 2.0 Rev. A
JMS_SPEC-145 Allow the execution of async message sending on an application server if done within a ManagedExecutorService    
JMS_SPEC-131 Allow client-acknowledgement and local transactions to be used in the Java EE web and EJB container    
JMS_SPEC-129 Resolve some undefined use cases when using Java EE bean-managed JTA transactions    
JMS_SPEC-92 Session.commit() etc should require TransactionInProgressException to be thrown if called in a JTA transaction    

API improvements for JMS MDBs

This section contains proposals for improvements to the whole programming model for JMS MDBs. This includes improvements to the ways JMS MDBs are configured, making JMS MDBs more flexible, and allowing objects which are not MDBs to list for JMS messages. Changes may require an update to the EJB specification as well as to JMS.

Specific functional improvements to JMS MDBs (rather than improvements to the API) are listed separately in Functional improvements to JMS MDBs below.

ID Description Status Notes
JMS_SPEC-174 Define a standard way to specify the resource adapter used by a JMS MDB   EJB_SPEC-127
JMS_SPEC-146 Allow the registration of a message listener via a connection when done within an ManagedExecutorService.    
JMS_SPEC-134 Declarative Annotation Based JMS Listeners    
JMS_SPEC-116 Take advantage of EJB 3.2’s RA improvement for MDBs    
JMS_SPEC-100 Allow Java EE components other than MDBs to consume messages asynchronously    

Functional improvements to JMS MDBs

ID Description Status Notes
JMS_SPEC-143 Define standard MDB activation properties to allow the MDB pool to be configured    
JMS_SPEC-141 Allow async delivery to temporary destinations in Java EE    
JMS_SPEC-117 Specifying redelivery behaviour when a JMS MDB performs rollback    
JMS_SPEC-88 Bind JMS to CDI events and/or business interfaces    
JMS_SPEC-74 Define lifecycle of durable subscriptions used by MDBs    

EJB spec improvements

This section lists a number of improvements to the EJB specification that have been proposed by the JMS specification lead. Since these are not specific to JMS they need to be considered by the EJB expert group.

ID Description Status Notes
EJB_SPEC-126 Allow listener method to always be determined at runtime by resource adapter    
EJB_SPEC-127 Define a standard way to specify the resource adapter used by a JMS MDB    

Connector spec improvements

This section lists a number of improvements to the Connector specification that have been proposed by the JMS specification lead.

ID Description Status Notes
CONNECTOR_SPEC-15 Define a standard way to specify the resource adapter used by a JMS MDB   Logged at request of JCA spec lead, to track any JCA changes needed to support EJB_SPEC-127