JMS 2.0の紹介

少し前、2013年6月12日に、 Java EE 7のリリースが世界に紹介されました 。 このリリースの重要なポイントの1つは、2002年以降更新されていないJMSバージョン2.0の外観です。



このテキストはNigel Dikin による記事の始まりの無料翻訳です。 このテキストは、関心のある読者が新しいAPIに慣れ親しむことを目的としています。



JMS 1.1 APIは動作するために多くのコードを必要としますが、うまく証明できたため、2002年以降変更されていません。 JMS 2.0では、新しいAPIはJMSメッセージの送受信を簡単にするように設計されています。 以前のAPIは廃止されておらず、新しいAPIとともに引き続き機能します。



JMS 2.0 APIには、JMSContext、JMSProducer、およびJMSConsumerという新しいインターフェースが登場しました。





JMS送信


比較のため。 JMS 1.1:

public void sendMessageJMS11(ConnectionFactory connectionFactory, Queue queue, String text) { try { Connection connection = connectionFactory.createConnection(); try { Session session =connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(queue); TextMessage textMessage = session.createTextMessage(text); messageProducer.send(textMessage); } finally { connection.close(); } } catch (JMSException ex) { // handle exception (details omitted) } }
      
      







JMS 2.0:

 public void sendMessageJMS20(ConnectionFactory connectionFactory, Queue queue, String text) { try (JMSContext context = connectionFactory.createContext();){ context.createProducer().send(queue, text); } catch (JMSRuntimeException ex) { // handle exception (details omitted) } }
      
      











新しいAPIの特徴は、チェック済みのJMSExceptionではなく、RuntimeException-JMSRuntimeExceptionをスローすることです。 これにより、オプションでJMS例外を処理できなくなります。



同期JMS検索


メッセージを同期的に受信する場合の違いを比較します。

JMS 1.1:

 public String receiveMessageJMS11(ConnectionFactory connectionFactory,Queue queue){ String body=null; try { Connection connection = connectionFactory.createConnection(); try { Session session =connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageConsumer messageConsumer = session.createConsumer(queue); connection.start(); TextMessage textMessage = (TextMessage)messageConsumer.receive(); body = textMessage.getText(); } finally { connection.close(); } } catch (JMSException ex) { // handle exception (details omitted) } return body; }
      
      







JMS 2.0:

 public String receiveMessageJMS20(ConnectionFactory connectionFactory,Queue queue){ String body=null; try (JMSContext context = connectionFactory.createContext();){ JMSConsumer consumer = context.createConsumer(queue); body = consumer.receiveBody(String.class); } catch (JMSRuntimeException ex) { // handle exception (details omitted) } return body; }
      
      









非同期JMSの取得


JavaSEでは、メッセージを非同期的に受信するために、JMS 1.1で次のコードが使用されます。



 MessageConsumer messageConsumer = session.createConsumer(queue); messageConsumer.setMessageListener(messageListener); connection.start();
      
      







JMS 2.0では、次のようになります。



 JMSConsumer consumer = context.createConsumer(queue); consumer.setMessageListener(messageListener);
      
      







MessageConsumerの代わりに-JMSConsumer。 接続が自動的に開始されます。



Java EE WebまたはEJBアプリケーションでは、以前と同様に、setMessageListenerメソッドの代わりにメッセージ駆動型Beanを使用する必要があります



JMSContextオブジェクトをJava EEアプリケーションに挿入する




Java EEアプリケーションでは、Injectアノテーションを使用してJMSContextを挿入できます。 挿入後、JMSContextはアプリケーションサーバーによって管理されます。



次のコードスニペットにより、JMSContextをセッションBeanまたはサーブレットに埋め込むことができます。

 @Inject @JMSConnectionFactory( "jms/connectionFactory") private JMSContext context; @Resource(lookup = "jms/dataQueue") private Queue dataQueue; public void sendMessageJavaEE7(String body) { context.send(dataQueue, body); }
      
      







JMSContextのクローズは、アプリケーションサーバーによって自動的に行われます。 JTAトランザクションがリクエスト中に実行される場合、JMSContextはコミット後に自動的に閉じます;トランザクションがない場合、リクエストの最後に閉じられます。



これで私はやめることにした。 慣れて始めるには、この情報で十分です。 多くの詳細と追加情報はこちら:

JMS 2.0の新機能、パート1:使いやすさ

JMS 2.0の新機能、パート2 —新しいメッセージング機能



All Articles