Skip to main content

[jms-spec~repository:213] Update JMS20Demo to use Java 7 try-with-resources blocks and various othe

  • From: nigeldeakin@...
  • To: commits@...
  • Subject: [jms-spec~repository:213] Update JMS20Demo to use Java 7 try-with-resources blocks and various othe
  • Date: Thu, 3 Jan 2013 13:50:59 +0000

Project:    jms-spec
Repository: repository
Revision:   213
Author:     nigeldeakin
Date:       2013-01-03 13:50:58 UTC
Link:       

Log Message:
------------
Update JMS20Demo to use Java 7 try-with-resources blocks and various other 
updates


Revisions:
----------
213


Modified Paths:
---------------
jms2.0/demos/JMS20Demo/web/index.jsp
jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNewCDIWithProperties.html
jms2.0/demos/JMS20Demo/web/JavaEESenderOld.html
jms2.0/demos/JMS20Demo/web/JavaEESenderNew.html
jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNew.java
jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNewCDI.java
jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNewCDI.html
jms2.0/demos/JMS20Demo/web/JavaEESenderNewCDI.html
jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNew.html
jms2.0/demos/JMS20Demo/src/java/beans/JavaEESenderOld.java
jms2.0/demos/JMS20Demo/src/java/beans/JavaEESenderNew.java
jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverOld.html
jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNewCDIWithProperties.java
jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverOld.java
jms2.0/demos/JMS20Demo/web/JavaEESenderNewCDIWithProperties.html
jms2.0/demos/JMS20Demo/web/JavaEESenderOldWithProperties.html


Diffs:
------
Index: 
jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNewCDIWithProperties.java
===================================================================
--- 
jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNewCDIWithProperties.java
   (revision 212)
+++ 
jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNewCDIWithProperties.java
   (revision 213)
@@ -61,11 +61,11 @@
     public String receiveMessageNewCDIWithProperties() {
                 try {
             JMSConsumer consumer = context.createConsumer(inboundQueue);
-            TextMessage textMessage = (TextMessage) consumer.receive(1000);
-            if (textMessage==null){
+            Message message = consumer.receive(1000);
+            if (message==null){
                 return "Received null";
             } else {
-               return "Body="+textMessage.getText()+", 
JMSPriority="+textMessage.getJMSPriority()+", 
foo="+textMessage.getStringProperty("foo");
+               return "Body="+message.getBody(String.class) +", 
JMSPriority="+message.getJMSPriority()+", 
foo="+message.getStringProperty("foo");
             }
         } catch (Exception ex) {
             
Logger.getLogger(JavaEESyncReceiverOld.class.getName()).log(Level.SEVERE, 
null, ex);
Index: jms2.0/demos/JMS20Demo/src/java/beans/JavaEESenderNew.java
===================================================================
--- jms2.0/demos/JMS20Demo/src/java/beans/JavaEESenderNew.java  (revision 212)
+++ jms2.0/demos/JMS20Demo/src/java/beans/JavaEESenderNew.java  (revision 213)
@@ -59,16 +59,9 @@
     @Resource(lookup = "java:global/jms/demoQueue")
     Queue demoQueue;
     
-    // GlassFish 4.0 currently uses Java SE 6, so this example does not make 
use of the Java SE 7 AutoCloseable API. 
-
     public void sendMessageNew(String body) {
-        try {
-            JMSContext context = connectionFactory.createContext();
-            try {
-                context.createProducer().send(demoQueue, body);
-            } finally {
-                context.close();
-            }
+        try (JMSContext context = connectionFactory.createContext();){
+            context.createProducer().send(demoQueue, body);
         } catch (JMSRuntimeException ex) {
             Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, 
ex);
         }
Index: jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNew.java
===================================================================
--- jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNew.java    
(revision 212)
+++ jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNew.java    
(revision 213)
@@ -55,16 +55,10 @@
     @Resource(lookup = "java:global/jms/demoQueue")
     Queue demoQueue;
 
-    // GlassFish 4.0 currently uses Java SE 6, so this example does not make 
use of the Java SE 7 AutoCloseable API. 
     public String receiveMessageNew() {
-        try {
-            JMSContext context = connectionFactory.createContext();
-            try {
-                JMSConsumer consumer = context.createConsumer(demoQueue);
-                return "Received " + consumer.receiveBody(String.class, 
1000);
-            } finally {
-                context.close();
-            }
+        try (JMSContext context = connectionFactory.createContext();){
+            JMSConsumer consumer = context.createConsumer(demoQueue);
+            return "Received " + consumer.receiveBody(String.class, 1000);
         } catch (JMSRuntimeException ex) {
             
Logger.getLogger(JavaEESyncReceiverOld.class.getName()).log(Level.SEVERE, 
null, ex);
         }
Index: jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNewCDI.java
===================================================================
--- jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNewCDI.java 
(revision 212)
+++ jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverNewCDI.java 
(revision 213)
@@ -57,7 +57,6 @@
     @Resource(lookup = "java:global/jms/demoQueue")
     Queue inboundQueue;
 
-    // GlassFish 4.0 currently uses Java SE 6, so this example does not make 
use of the Java SE 7 AutoCloseable API. 
     public String receiveMessageNewCDI() {
         try {
             JMSConsumer consumer = context.createConsumer(inboundQueue);
Index: jms2.0/demos/JMS20Demo/src/java/beans/JavaEESenderOld.java
===================================================================
--- jms2.0/demos/JMS20Demo/src/java/beans/JavaEESenderOld.java  (revision 212)
+++ jms2.0/demos/JMS20Demo/src/java/beans/JavaEESenderOld.java  (revision 213)
@@ -56,8 +56,6 @@
     @Resource(lookup = "java:global/jms/demoQueue")
     Queue demoQueue;
     
-    // GlassFish 4.0 currently uses Java SE 6, so these examples do not make 
use of the Java SE 7 AutoCloseable API. 
-
     public void sendMessageOld(String body) {
         try {
             Connection connection = connectionFactory.createConnection();
Index: jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverOld.java
===================================================================
--- jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverOld.java    
(revision 212)
+++ jms2.0/demos/JMS20Demo/src/java/beans/JavaEESyncReceiverOld.java    
(revision 213)
@@ -56,8 +56,6 @@
     @Resource(lookup = "java:global/jms/demoQueue")
     Queue demoQueue;
     
-    // GlassFish 4.0 currently uses Java SE 6, so this example does not make 
use of the Java SE 7 AutoCloseable API. 
-
     public String receiveMessageOld() {
         Connection connection = null;
         try {
Index: jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverOld.html
===================================================================
--- jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverOld.html       (revision 212)
+++ jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverOld.html       (revision 213)
@@ -47,10 +47,10 @@
         <li>Need to create all three objects explicitly and then call 
<tt>close</tt> after use</li>
         <li>Parameters to <tt>createSession</tt> are required but are 
ignored in a JTA transaction</li>
         <li>Need to explicitly cast the received <tt>Message</tt> to the 
appropriate type (i.e. <tt>TextMessage</tt>) and extract its payload</li>
-        <li>Need a <tt>try...finally</tt> block to ensure <tt>close</tt> is 
called, 
-        plus at least one more <tt>try</tt> block to handle exceptions.<br>
-        (This will get simpler in JMS 2.0 as the Java 7 try-with-resources 
syntax can be used to avoid an explicit <tt>close()</tt>,
-        but this cannot be demonstrated yet as GlassFish 4.0 still requires 
Java 6)
+        <li>JMS 1.1 requires a <tt>try...finally</tt> block to ensure 
<tt>close</tt> is called, 
+        though in JMS 2.0 a Java 7 "try-with-resources" block 
+        can be used to avoid an explicit <tt>close()</tt>.
+        <li>Includes an additional <tt>try...catch</tt> block to catch and 
log exceptions.<br>
         </ul>
 <p>This example is for Java EE but the API for Java SE is similar
         <p><img src="arrow.gif">&nbsp;<a 
href="JavaEESyncReceiverNew.html">Now compare this with using the JMS 2.0 
simplified API to do the same thing</a>
Index: jms2.0/demos/JMS20Demo/web/JavaEESenderNewCDIWithProperties.html
===================================================================
--- jms2.0/demos/JMS20Demo/web/JavaEESenderNewCDIWithProperties.html    
(revision 212)
+++ jms2.0/demos/JMS20Demo/web/JavaEESenderNewCDIWithProperties.html    
(revision 213)
@@ -28,7 +28,7 @@
         }
     }
 }</pre>
-        <p>This example additionally shows:
+        <p>In addition to the features demonstrated in <a 
href="JavaEESenderNewCDI.html">JavaEESenderNewCDI</a>, this example shows:
         <ul>
         <li>Setting message priority to 1 and a message property 
<tt>foo</tt> to <tt>bar</tt>
         <li>Set message priority using the <tt>setPriority</tt> on the 
<tt>JMSProducer</tt></li>
Index: jms2.0/demos/JMS20Demo/web/index.jsp
===================================================================
--- jms2.0/demos/JMS20Demo/web/index.jsp        (revision 212)
+++ jms2.0/demos/JMS20Demo/web/index.jsp        (revision 213)
@@ -42,8 +42,5 @@
             Before running it, use the previous examples to put a few 
messages on the queue first.            
         <p><a href="JavaEESyncReceiverNewCDIWithProperties.html">Using the 
JMS 2.0 simplified API and injection to receive a message, displaying 
delivery options and message properties 
(JavaEESyncReceiverNewCDIWithProperties)</a>
         <br>
-        <h2>Note</h2>
-        <p>
-        GlassFish 4.0 currently uses Java SE 6, so these examples do not 
make use of the Java SE 7 AutoCloseable API.
         </body>
 </html>
Index: jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNewCDIWithProperties.html
===================================================================
--- jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNewCDIWithProperties.html    
  (revision 212)
+++ jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNewCDIWithProperties.html    
  (revision 213)
@@ -25,11 +25,11 @@
     public String receiveMessageNewCDIWithProperties() {
                 try {
             JMSConsumer consumer = context.createConsumer(inboundQueue);
-            TextMessage textMessage = (TextMessage) consumer.receive(1000);
-            if (textMessage==null){
+            Message message = consumer.receive(1000);
+            if (message==null){
                 return "Received null";
             } else {
-               return "Payload="+textMessage.getText()+", 
JMSPriority="+textMessage.getJMSPriority()+", 
foo="+textMessage.getStringProperty("foo");
+               return "Body="+message.getBody(String.class) +", 
JMSPriority="+message.getJMSPriority()+", 
foo="+message.getStringProperty("foo");
             }
         } catch (Exception ex) {
             
Logger.getLogger(JavaEESyncReceiverOld.class.getName()).log(Level.SEVERE, 
null, ex);
@@ -37,11 +37,12 @@
         return null;
     }
 }</pre>
-        <p>This example shows:
+        <p>In addition to the features demonstrated in <a 
href="JavaEESyncReceiverNewCDI.html">JavaEESyncReceiverNewCDI</a>, this 
example shows:
         <ul>
             <li>Extracting the message priority and the message property 
<tt>foo</tt> from the received message
             <li>Need to obtain the <tt>TextMessage</tt> and use the JMS 1.1 
<tt>getJMSPriority</tt> and <tt>getStringProperty</tt> methods
-            <li>Cannot use the new JMS 2.0 method which returns the message 
payload directly as that doesn't provide access to message options and 
properties</tt>
+            <li>Cannot use the new JMS 2.0 method which returns the message 
body directly as that doesn't provide access to message options and 
properties</tt>
+            <li>However can use the new JMS 2.0 <tt>getBody</tt> method to 
obtain message body without the need to cast to a <tt>TextMessage</tt> first. 
   
             <li>Same applies to a non-injected <tt>JMSContext</tt> (not 
shown)
         </ul>
         <p>You have reached the last example</p>
Index: jms2.0/demos/JMS20Demo/web/JavaEESenderOldWithProperties.html
===================================================================
--- jms2.0/demos/JMS20Demo/web/JavaEESenderOldWithProperties.html       
(revision 212)
+++ jms2.0/demos/JMS20Demo/web/JavaEESenderOldWithProperties.html       
(revision 213)
@@ -37,7 +37,7 @@
         }
     }
 }</pre>
-        <p>This example additionally shows:
+        <p>In addition to the features demonstrated in <a 
href="JavaEESenderOld.html">JavaEESenderOld</a>, this example shows:
         <ul>
         <li>Setting message priority to 1 and a message property 
<tt>foo</tt> to <tt>bar</tt>
         <li>Set message priority using the <tt>setPriority</tt> on the 
<tt>MessageProducer</tt></li>
Index: jms2.0/demos/JMS20Demo/web/JavaEESenderNew.html
===================================================================
--- jms2.0/demos/JMS20Demo/web/JavaEESenderNew.html     (revision 212)
+++ jms2.0/demos/JMS20Demo/web/JavaEESenderNew.html     (revision 213)
@@ -18,30 +18,24 @@
     @Resource(lookup = "java:global/jms/demoQueue")
     Queue demoQueue;
     
-    public void sendMessageNew(String payload) {
-        try {
-            JMSContext context = connectionFactory.createContext();
-            try {
-                context.createProducer().send(demoQueue, payload);
-            } finally {
-                context.close();
-            }
+    public void sendMessageNew(String body) {
+        try (JMSContext context = connectionFactory.createContext();){
+            context.createProducer().send(demoQueue, body);
         } catch (JMSRuntimeException ex) {
             Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, 
ex);
         }
     }
+}
 }</pre>
         <p>This example shows:
         <ul>
         <li>Use of a JMS 2.0 <tt>JMSContext</tt> for sending a message 
instead of separate <tt>Connection</tt> and <tt>Session</tt> objects
-        <li><b>6 lines of code to send a message</b> (excluding exception 
handling)</li>
-        <li><tt>JMSContext</tt> is created explicitly and then closed after 
use</li>
+        <li><b>2 lines of code to send a message</b> (excluding exception 
handling)</li>
+        <li><tt>JMSContext</tt> is created explicitly (in a 
"try-with-resources" block)
         <li>No need to specify <tt>transacted</tt> and 
<tt>acknowledgeMode</tt> parameters (unlike with <tt>createSession</tt>) in 
Java EE </li>
         <li>No need to create a <tt>TextMessage</tt> object: message payload 
is passed directly to the <tt>send</tt> method</li>
-        <li>Still need a <tt>try...finally</tt> block to ensure 
<tt>close</tt> is called, 
-        plus at least one more <tt>try</tt> block to handle exceptions.<br>
-        (This will get simpler in JMS 2.0 as the Java 7 try-with-resources 
syntax can be used to avoid an explicit <tt>close()</tt>,
-        but this cannot be demonstrated yet as GlassFish 4.0 still requires 
Java 6)
+        <li>No need to call <tt>context.close()</tt> as the use of a 
"try-with-resources" block means the <tt>JMSContext</tt> is automatically 
closed at the end of the block</li>
+        <li>Includes a <tt>catch</tt> block to catch and log exceptions.<br>
         </ul>
         <p>This example is for Java EE but the API for Java SE is similar
         <p><img src="arrow.gif">&nbsp;<a href="JavaEESenderNewCDI.html">Now 
compare this with using the JMS 2.0 simplified API and injection do the same 
thing</a>
Index: jms2.0/demos/JMS20Demo/web/JavaEESenderNewCDI.html
===================================================================
--- jms2.0/demos/JMS20Demo/web/JavaEESenderNewCDI.html  (revision 212)
+++ jms2.0/demos/JMS20Demo/web/JavaEESenderNewCDI.html  (revision 213)
@@ -30,8 +30,9 @@
         <li>Use of a JMS 2.0 <b>injected</b> <tt>JMSContext</tt> for sending 
a message instead of separate <tt>Connection</tt> and <tt>Session</tt> 
objects        
         <li><b>1 line of code to send a message</b> (excluding exception 
handling)</li>
         <li>No need to create the <tt>JMSContext</tt> - it is injected 
automatically by the container</li>
-        <li>No need to call <tt>close</tt> on the <tt>JMSContext</tt> (or 
use a a <tt>try...finally</tt> block) - it is closed automatically by the 
container (at end of transaction)</li>
+        <li>No need to call <tt>close</tt> on the <tt>JMSContext</tt> (or 
use a "try-with-resources" block) - it is closed automatically by the 
container at the of the transaction</li>
         <li>No need to create a <tt>TextMessage</tt> object: message payload 
is passed directly to the <tt>send</tt> method</li>
+        <li>Includes a <tt>try...catch</tt> block to catch and log 
exceptions.<br>
         </ul>
         <p>Note that injection of <tt>JMSContext</tt> is only available in 
the Java EE web or EJB container
         <p><img src="arrow.gif"><a href="JavaEESyncReceiverOld.html">Now 
examine using the JMS 1.1-style API to <i>receive</i> a message</a>
Index: jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNew.html
===================================================================
--- jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNew.html       (revision 212)
+++ jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNew.html       (revision 213)
@@ -15,19 +15,13 @@
 
     @Resource(lookup = "java:global/jms/demoConnectionFactory")
     ConnectionFactory connectionFactory;
-
     @Resource(lookup = "java:global/jms/demoQueue")
     Queue demoQueue;
 
     public String receiveMessageNew() {
-        try {
-            JMSContext context = connectionFactory.createContext();
-            try {
-                JMSConsumer consumer = context.createConsumer(demoQueue);
-                return "Received " + consumer.receivePayload(String.class, 
1000);
-            } finally {
-                context.close();
-            }
+        try (JMSContext context = connectionFactory.createContext();){
+            JMSConsumer consumer = context.createConsumer(demoQueue);
+            return "Received " + consumer.receiveBody(String.class, 1000);
         } catch (JMSRuntimeException ex) {
             
Logger.getLogger(JavaEESyncReceiverOld.class.getName()).log(Level.SEVERE, 
null, ex);
         }
@@ -40,10 +34,8 @@
         <li><tt>JMSContext</tt> is created explicitly and then closed after 
use</li>
         <li>No need to specify <tt>transacted</tt> and 
<tt>acknowledgeMode</tt> parameters (unlike with <tt>createSession</tt>) in 
Java EE </li>
         <li>No need to cast the received message to a <tt>TextMessage</tt>  
and extract its payload:  message payload is returned directly by the 
<tt>receive</tt> method</li>
-        <li>Still need a <tt>try...finally</tt> block to ensure 
<tt>close</tt> is called, 
-        plus at least one more <tt>try</tt> block to handle exceptions.<br>
-        (This will get simpler in JMS 2.0 as the Java 7 try-with-resources 
syntax can be used to avoid an explicit <tt>close()</tt>,
-        but this cannot be demonstrated yet as GlassFish 4.0 still requires 
Java 6)
+        <li>No need to call <tt>context.close()</tt> as the use of a 
"try-with-resources" block means the <tt>JMSContext</tt> is automatically 
closed at the end of the block</li>
+        <li>Includes a <tt>catch</tt> block to catch and log exceptions.<br>
         </ul>
         <p>This example is for Java EE but the API for Java SE is similar
         <p><img src="arrow.gif">&nbsp;<a 
href="JavaEESyncReceiverNewCDI.html">Now compare this with using the JMS 2.0 
simplified API and injection to do the same thing</a>
Index: jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNewCDI.html
===================================================================
--- jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNewCDI.html    (revision 212)
+++ jms2.0/demos/JMS20Demo/web/JavaEESyncReceiverNewCDI.html    (revision 213)
@@ -15,14 +15,14 @@
     @Inject
     @JMSConnectionFactory("java:global/jms/demoConnectionFactory") // <== 
could omit this and use the default
     private JMSContext context;
-
     @Resource(lookup = "java:global/jms/demoQueue")
     Queue inboundQueue;
 
+    // GlassFish 4.0 currently uses Java SE 6, so this example does not make 
use of the Java SE 7 AutoCloseable API. 
     public String receiveMessageNewCDI() {
         try {
             JMSConsumer consumer = context.createConsumer(inboundQueue);
-            return "Received " + consumer.receivePayload(String.class, 1000);
+            return "Received " + consumer.receiveBody(String.class, 1000);
         } catch (JMSRuntimeException ex) {
             
Logger.getLogger(JavaEESyncReceiverOld.class.getName()).log(Level.SEVERE, 
null, ex);
         }
@@ -33,9 +33,10 @@
         <ul>
         <li>Use of an injected <tt>JMSContext</tt> for receiving a message 
synchronously instead of separate <tt>Connection</tt> and <tt>Session</tt> 
objects
         <li>No need to create the <tt>JMSContext</tt> - it is injected 
automatically by the container</li>
-        <li>No need to call <tt>close</tt> on the <tt>JMSContext</tt> (or 
use a a <tt>try...finally</tt> block) - it is closed automatically by the 
container (at end of transaction)</li>
+        <li>No need to call <tt>close</tt> on the <tt>JMSContext</tt> (or 
use a "try-with-resources" block) - it is closed automatically by the 
container at the of the transaction</li>
         <li>No need to cast the received message to a <tt>TextMessage</tt>  
and extract its payload:  message payload is returned directly by the 
<tt>receive</tt> method</li>
-        </ul>
+        <li>Includes a <tt>try...catch</tt> block to catch and log 
exceptions.<br>
+</ul>
         <p>Note that injection of <tt>JMSContext</tt> is only available in 
the Java EE web or EJB container
         <p>You can stop here, or carry on and <img src="arrow.gif"><a 
href="JavaEESenderOldWithProperties.html">examine using the JMS 1.1-style API 
to send a message, setting delivery options and message properties</a>
         <p><img src="arrow.gif">&nbsp;<a 
href="Servlet1?option=JavaEESyncReceiverNewCDI">Run this example</a>
Index: jms2.0/demos/JMS20Demo/web/JavaEESenderOld.html
===================================================================
--- jms2.0/demos/JMS20Demo/web/JavaEESenderOld.html     (revision 212)
+++ jms2.0/demos/JMS20Demo/web/JavaEESenderOld.html     (revision 213)
@@ -43,10 +43,10 @@
         <li>Need to create all three objects explicitly and then call close 
after use</li>
         <li>Parameters to <tt>createSession</tt> are required but are 
ignored in a JTA transaction</li>
         <li>Need to explicitly create a <tt>Message</tt> of the appropriate 
type (i.e. <tt>TextMessage</tt>) and set its payload</li>
-        <li>Need a <tt>try...finally</tt> block to ensure <tt>close</tt> is 
called, 
-        plus at least one more <tt>try</tt> block to handle exceptions.<br>
-        (This will get simpler in JMS 2.0 as the Java 7 try-with-resources 
syntax can be used to avoid an explicit <tt>close()</tt>,
-        but this cannot be demonstrated yet as GlassFish 4.0 still requires 
Java 6)
+        <li>JMS 1.1 requires a <tt>try...finally</tt> block to ensure 
<tt>close</tt> is called, 
+        though in JMS 2.0 a Java 7 "try-with-resources" block 
+        can be used to avoid an explicit <tt>close()</tt>.
+        <li>Includes an additional <tt>try...catch</tt> block to catch and 
log exceptions.<br>
         </ul>
 <p>This example is for Java EE but the API for Java SE is similar
 <p><img src="arrow.gif">&nbsp;<a href="JavaEESenderNew.html">Now compare 
this with using the JMS 2.0 simplified API to do the same thing</a>





[jms-spec~repository:213] Update JMS20Demo to use Java 7 try-with-resources blocks and various othe

nigeldeakin 01/03/2013
 
 
Close
loading
Please Confirm
Close