6.3. メッセージの受信
この例では、JNDI コンテキストを作成し、そのコンテキストを使用して ConnectionFactory
および Destination
を検索し、ファクトリーを使用して Connection
を起動してから Session
を作成します。次に、Destination
に対して MessageConsumer
が作成され、それを使用してメッセージを受信し、その内容をコンソールに出力します。その後、接続が閉じられ、プログラムを終了します。送信例 と同じ JNDI 設定が使用されます。
この Receiver
例の実行可能なバリアントは、以前 3章スタートガイド で説明した Hello World 例とともに、クライアントディストリビューションの例ディレクトリー内に含まれています。
例: メッセージの受信
package org.jboss.amq.example; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.ExceptionListener; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; public class Receiver { public static void main(String[] args) throws Exception { try { Context context = new InitialContext(); 1 ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup"); Destination destination = (Destination) context.lookup("myDestinationLookup"); 2 Connection connection = factory.createConnection("<username>", "<password>"); connection.setExceptionListener(new MyExceptionListener()); connection.start(); 3 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 4 MessageConsumer messageConsumer = session.createConsumer(destination); 5 Message message = messageConsumer.receive(5000); 6 if (message == null) { 7 System.out.println("A message was not received within given time."); } else { System.out.println("Received message: " + ((TextMessage) message).getText()); } connection.close(); 8 } catch (Exception exp) { System.out.println("Caught exception, exiting."); exp.printStackTrace(System.out); System.exit(1); } } private static class MyExceptionListener implements ExceptionListener { @Override public void onException(JMSException exception) { System.out.println("Connection ExceptionListener fired, exiting."); exception.printStackTrace(System.out); System.exit(1); } } }
- 1
- JNDI
Context
を作成して、ConnectionFactory
およびDestination
オブジェクトを検索します。設定は、前述したjndi.properties
ファイルから選択されます。 - 2
ConnectionFactory
およびDestination
オブジェクトは、ルックアップ名を使用して JNDIContext
から取得されます。- 3
- ファクトリーは
Connection
の作成に使用され、続いてExceptionListener
が登録され、開始します。接続の作成時に指定される認証情報は、通常は適切な外部設定ソースから取得され、アプリケーション自体とは別のままとなり、個別に更新することができます。 - 4
- トランザクション以外の自動承認
Session
がConnection
に作成されます。 - 5
MessageConsumer
は、Destination
からメッセージを受信するために作成されます。- 6
- メッセージを受信する呼び出しは、5 秒のタイムアウトで行われます。
- 7
- 結果は確認され、メッセージを受信した場合、その内容は出力され、メッセージが受信されなかったことが通知されます。
Sender
が送信されている内容であるため、結果はTextMessage
に明示的にキャストされます。 - 8
Connection
は終了します。Session
およびMessageConsumer
は暗黙的に閉じられます。
これは単なる例であることに注意してください。実際のアプリケーションは、通常有効期限の長い MessageConsumer
を使用し、時間の経過とともに多数のメッセージを受信します。通常、各メッセージに対して Connection
、Session
、および MessageConsumer
を開くことは効率的ではありません。