Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
GIDS 2012: Java Message Service 2.0
-
Upload
arun-gupta -
Category
Technology
-
view
4.461 -
download
5
description
Transcript of GIDS 2012: Java Message Service 2.0
![Page 1: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/1.jpg)
1 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
What's coming in Java Message Service 2.0 Arun Gupta, Java EE & GlassFish Guy blogs.oracle.com/arungupta, @arungupta
probably
![Page 2: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/2.jpg)
2 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
2
![Page 3: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/3.jpg)
3 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Agenda • JSR 343 Update • What's in the JMS 2.0 Early Draft
– Simplifying the JMS API – Improving integration with application servers – New API features
• Q&A
3 3
![Page 4: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/4.jpg)
4 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
JMS
• Java Message Service (JMS) specification – Part of Java EE but also stands alone – Last maintenance release (1.1) was in 2003
• Does not mean JMS is moribund! – Multiple active commercial and open source implementations – Shows strength of existing spec
• Meanwhile – Java EE has moved on since, and now Java EE 7 is planned – Time for JMS 2.0
4
![Page 5: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/5.jpg)
5 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
JMS 2.0
• March 2011: JSR 343 launched to develop JMS 2.0
• Target: to be part of Java EE 7 in Q2 2013
• Early Draft released • Community involvement invited
– Visit jms-spec.java.net and get involved
– Join the mailing list – Submit suggestions to the issue tracker
5
![Page 6: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/6.jpg)
6 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
JSR 343 Expert Group
. . .
![Page 7: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/7.jpg)
7 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Initial goals of JMS 2.0
• Simpler and easier to use – simplify the API – make use of CDI (Contexts and
Dependency Injection) – clarify any ambiguities in the spec
• Support new themes of Java EE 7 – PaaS – Multi-tenancy
• Standardise interface with application servers
• Clarify relationship with other Java EE specs – some JMS behaviour defined in
other specs
• New messaging features – standardize some existing vendor
extensions (or will retrospective standardisation be difficult?)
7
![Page 8: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/8.jpg)
8 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
JMS 2.0 Timeline
8
Final approval ballot
Comple0on of RI and TCK
Public review
Prepara0on of public dra;
Early dra; review
Prepara0on of early dra;
Forma0on of expert group
Q1 2013
Q2 2011
Q3 2012
Q1 2012
✔ ✔ ✔
![Page 9: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/9.jpg)
9 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
What's in the Early Draft
• Here are some items in the JMS 2.0 Early Draft – Based on Expert Group members' priorities – All items in JIRA at jms-spec.java.net
• Things are still changing • It's not too late
– to give us your views on these items – to propose additional items for a later draft or revision
9
![Page 10: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/10.jpg)
10 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Simplifying the JMS API
![Page 11: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/11.jpg)
11 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
What's wrong with the JMS API? Not a lot...
![Page 12: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/12.jpg)
12 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Receiving messages in Java EE
@MessageDriven(mappedName = "jms/inboundQueue") public class MyMDB implements MessageListener { public void onMessage(Message message) { String payload = (TextMessage)textMessage.getText(); // do something with payload } }
![Page 13: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/13.jpg)
13 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Sending messages in Java EE
@Resource(lookup = "jms/connFactory") ConnectionFactory cf;
@Resource(lookup="jms/inboundQueue") Destination dest; public void sendMessage (String payload) throws JMSException { Connection conn = cf.createConnection(); Session sess = conn.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer producer = sess.createProducer(dest); TextMessage textMessage = sess.createTextMessage(payload); messageProducer.send(textMessage); connection.close(); }
![Page 14: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/14.jpg)
14 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Sending messages in Java EE
@Resource(lookup = "jms/connFactory") ConnectionFactory cf;
@Resource(lookup="jms/inboundQueue") Destination dest; public void sendMessage (String payload) throws JMSException { Connection conn = cf.createConnection(); Session sess = conn.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer producer = sess.createProducer(dest); TextMessage textMessage = sess.createTextMessage(payload); messageProducer.send(textMessage); connection.close(); }
Need to create intermediate objects just to satisfy the API
![Page 15: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/15.jpg)
15 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Sending messages in Java EE
@Resource(lookup = "jms/connFactory") ConnectionFactory cf;
@Resource(lookup="jms/inboundQueue") Destination dest; public void sendMessage (String payload) throws JMSException { Connection conn = cf.createConnection(); Session sess = conn.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer producer = sess.createProducer(dest); TextMessage textMessage = sess.createTextMessage(payload); messageProducer.send(textMessage); connection.close(); }
Redundant arguments
![Page 16: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/16.jpg)
16 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Sending messages in Java EE
@Resource(lookup = "jms/connFactory") ConnectionFactory cf;
@Resource(lookup="jms/inboundQueue") Destination dest; public void sendMessage (String payload) throws JMSException { Connection conn = cf.createConnection(); Session sess = conn.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer producer = sess.createProducer(dest); TextMessage textMessage = sess.createTextMessage(payload); messageProducer.send(textMessage); connection.close(); }
Boilerplate code
![Page 17: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/17.jpg)
17 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Sending messages in Java EE
public void sendMessage (String payload) throws JMSException { try { Connection conn = null; con = cf.createConnection(); Session sess = conn.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer producer = sess.createProducer(dest); TextMessage textMessage=sess.createTextMessage(payload); messageProducer.send(textMessage); } finally { connection.close(); } } Need to close
connections after use
![Page 18: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/18.jpg)
18 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Sending messages in Java EE public void sendMessage (String payload) { Connection conn = null; try { con = cf.createConnection(); Session sess = conn.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer producer = sess.createProducer(dest); TextMessage textMessage=sess.createTextMessage(payload); messageProducer.send(textMessage); } catch (JMSException e1) { // do something } finally { try { if (conn!=null) connection.close(); } catch (JMSException e2){ // do something else } } }
And there's always exception handling to add
![Page 19: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/19.jpg)
19 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Approaches to simplification
• Simplify the existing API • Define new simplified API • Use CDI annotations to hide the boilerplate code
19
![Page 20: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/20.jpg)
20 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Simplify the existing API
• Need to maintain backwards compatibility limits scope for change – New methods on javax.jms.Connection:
• Keep existing method
• New method for Java SE
• New method for Java EE
– Make javax.jms.Connection implement java.lang.AutoCloseable
20
connection.createSession(transacted,deliveryMode)
connection.createSession(sessionMode)
connection.createSession()
connection.createSession(sessionMode)
connection.createSession()
![Page 21: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/21.jpg)
21 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Sending a Message (Java EE) Standard API @Resource(lookup = "jms/connectionFactory ") ConnectionFactory connectionFactory; @Resource(lookup="jms/inboundQueue") Queue inboundQueue; public void sendMessageOld (String payload) throws JMSException { try (Connection connection = connectionFactory.createConnection()) { Session session = connection.createSession(); MessageProducer messageProducer = session.createProducer(inboundQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); } }
![Page 22: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/22.jpg)
22 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Sending a Message (Java EE) New Simplified API @Resource(mappedName="jms/contextFactory") ContextFactory contextFactory; @Resource(mappedName="jms/inboundQueue") Queue inboundQueue; public void sendMessage(String payload) { try (JMSContext context = contextFactory.createContext();){ context.send(inboundQueue,payload); } }
![Page 23: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/23.jpg)
23 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Sending a Message (Java EE) New Simplified API (With Injection) @Inject @JMSConnectionFactory("jms/contextFactory") JMSContext context; @Resource(mappedName="jms/inboundQueue") Queue inboundQueue; public void sendMessage(String payload) { context.send(inboundQueue,payload); }
![Page 24: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/24.jpg)
24 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Receiving a Message Asynchronously Standard API @Resource(lookup = "jms/connectionFactory") ConnectionFactory connectionFactory; @Resource(lookup="jms/inboundQueue") Queue inboundQueue; public String receiveMessageOld() throws JMSException { try (Connection connection = connectionFactory.createConnection()) { connection.start(); Session session = connection.createSession(); MessageConsumer messageConsumer = session.createConsumer(inboundQueue); TextMessage textMessage = (TextMessage)messageConsumer.receive(); String payload = textMessage.getText(); return payload; } }
![Page 25: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/25.jpg)
25 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Receiving a Message Asynchronously New Simplified API @Resource(lookup = "jms/connectionFactory") ConnectionFactory connectionFactory; @Resource(lookup="jms/inboundQueue") Queue inboundQueue; public String receiveMessageNew() { try (JMSContext context = connectionFactory.createContext()) { JMSConsumer consumer = context.createConsumer(inboundQueue); return consumer.receivePayload(String.class); } }
![Page 26: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/26.jpg)
26 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Receiving a Message Asynchronously New Simplified API (With Injection) @Inject @JMSConnectionFactory("jms/connectionFactory") private JMSContext context; @Resource(lookup="jms/inboundQueue") Queue inboundQueue; public String receiveMessageNew() { JMSConsumer consumer = context.createConsumer(inboundQueue); return consumer.receivePayload(String.class); }
![Page 27: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/27.jpg)
27 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Some other simplifications
![Page 28: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/28.jpg)
28 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Making durable subscriptions easier to use
• Durable subscriptions are identified by {clientId, subscriptionName}
• ClientId will no longer be mandatory when using durable subscriptions
• For a MDB, container will generate default subscription name (EJB 3.2)
28
![Page 29: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/29.jpg)
29 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
New features for PaaS
![Page 30: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/30.jpg)
30 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Annotations to create resources in Java EE
• Currently no standard way for an application to define what JMS resources should be created in the application server and registered in JNDI
• No equivalent to DataSourceDefinition: @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
className="com.foobar.MyDataSource", portNumber=6689, serverName="myserver.com", user="lance", password="secret" )
![Page 31: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/31.jpg)
31 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Annotations to create resources in Java EE
• JSR 342 (Java EE 7) will define new annotations • Possible new SPI to create the physical destinations
@JMSConnectionFactoryDefinition( name="java:app/MyJMSFactory", resourceType="javax.jms.QueueConnectionFactory", clientId="foo", resourceAdapter="jmsra", initialPoolSize=5, maxPoolSize=15 )
@JMSDestinationDefinition( name="java:app/orderQueue", resourceType="javax.jms.Queue", resourceAdapter="jmsra", destinationName="orderQueue")
![Page 32: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/32.jpg)
32 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Improving Integration with Application Servers
![Page 33: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/33.jpg)
33 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Defining the interface between JMS provider and an application server
• Requirement: allowing any JMS provider to work in any Java EE application server
• Current solution: JMS 1.1 Chapter 8 JMS Application Server Facilities
![Page 34: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/34.jpg)
34 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
JMS 1.1 Chapter 8 JMS Application Server Facilities
• Interfaces all optional, so not all vendors implement them • No requirement for application servers to support them • Some omissions
– No support for pooled connections
• Meanwhile…
![Page 35: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/35.jpg)
35 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Java EE Connector Architecture (JCA)
• Designed for integrating pooled, transactional resources in an application server
• Designed to support async processing of messages by MDBs
• JCA support already mandatory in Java EE • Many JMS vendors already provide JCA adapters
![Page 36: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/36.jpg)
36 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Defining the interface between JMS provider and an application server • JMS 2.0 will make provision of a JCA adaptor mandatory • JMS 1.1 Chapter 8 API remains optional, under review
![Page 37: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/37.jpg)
37 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Improvements to MDBs
• Proposals being sent to JSR 342 (EJB 3.2) • Fill "gaps" in MDB configuration • Surprisingly, no standard way to specify
– JNDI name of queue or topic (using annotation) – JNDI name of connection – clientID!– durableSubscriptionName!
![Page 38: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/38.jpg)
38 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Defining the destination used by a MDB
• annotation... • ejb-jar.xml...
… all names are provisional
@MessageDriven(messageDestinationLookup="jms/inboundQueue”) public class MyMDB implements MessageListener {
...
<ejb-jar> <enterprise-beans> <message-driven> <ejb-name>MessageBean</ejb-name> <message-destination-lookup-name> jms/inboundQueue <message-destination-lookup-name>
![Page 39: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/39.jpg)
39 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Defining the connection factory used by a MDB
• annotation...
• ejb-jar.xml... ...all names provisional
@MessageDriven(connectionFactoryLookup="jms/myCF") public class MyMDB implements MessageListener {
...
<ejb-jar> <enterprise-beans> <message-driven> <ejb-name>MessageBean</ejb-name> <connection-factory-lookup-name> jms/myCF <connection-factory-lookup-name>
![Page 40: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/40.jpg)
40 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Defining the clientId and durable subscription name used by a MDB
• Define as standard activation config properties
• Many app servers support these already
@MessageDriven(activationConfig = { @ActivationConfigProperty( propertyName="subscriptionDurability",propertyValue="Durable"),
@ActivationConfigProperty( propertyName="clientId",propertyValue="MyMDB"),
@ActivationConfigProperty( propertyName="subscriptionName",propertyValue="MySub")
})
![Page 41: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/41.jpg)
41 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
New API Features
![Page 42: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/42.jpg)
42 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
New API features
• Delivery delay • Send a message with async acknowledgement from server • JMSXDeliveryCount becomes mandatory • Multiple consumers on the same topic subscription (both durable
and non-durable) • Some products implement some of these already
![Page 43: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/43.jpg)
43 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Delivery delay
• Allows a JMS client to schedule the future delivery of a message • New method on MessageProducer
• Sets the minimum length of time in milliseconds from its dispatch time that a produced message should be retained by the messaging system before delivery to a consumer.
• Why? If the business requires deferred processing, e.g. end of day
public void setDeliveryDelay(long deliveryDelay)
![Page 44: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/44.jpg)
44 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Send a message with async acknowledgement from server • Send a message and return immediately without blocking until an
acknowledgement has been received from the server. • Instead, when the acknowledgement is received, an asynchronous
callback will be invoked
• Why? Allows thread to do other work whilst waiting for the acknowledgement
producer.send(message, new AcknowledgeListener(){ public void onAcknowledge(Message message) { // process ack } });
![Page 45: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/45.jpg)
45 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Make JMSXDeliveryCount mandatory • JMS 1.1 defines an optional JMS defined message
property JMSXDeliveryCount. – When used, this is set by the JMS provider when a message is
received, and is set to the number of times this message has been delivered (including the first time). The first time is 1, the second time 2, etc
• JMS 2.0 will make this mandatory • Why? Allows app servers and applications to handle
"poisonous" messages better
![Page 46: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/46.jpg)
46 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Multiple consumers on a topic subscription
• Allows scalable consumption of messages from a topic subscription – multiple threads – multiple JVMs
• No further change to API for durable subscriptions (clientID not used) • New API for non-durable subscriptions
• Why? Scalability • Why? Allows greater scalability
MessageConsumer messageConsumer= session.createSharedConsumer(topic,sharedSubscriptionName);
![Page 47: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/47.jpg)
47 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Get involved!
• Early Draft Already Available • Mailing lists, issue tracker and wiki:
– jms-spec.java.net
• Join [email protected] to follow and contribute • Applications to join the expert group
– http://jcp.org/en/jsr/summary?id=343
• Contact the spec lead – [email protected]
![Page 48: GIDS 2012: Java Message Service 2.0](https://reader033.fdocuments.us/reader033/viewer/2022051323/54809b0ab479596f578b4700/html5/thumbnails/48.jpg)
48 | Copyright © 2012, Oracle and/or it’s affiliates. All rights reserved. |
Questions & Answers