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 —新しいメッセージング機能

Source: https://habr.com/ru/post/J184460/


All Articles