メッセージ駆動型 Bean の onmessage メソッドに次のロジックを実装しようとしています。
N メッセージを読み取るか、Y 時間待機するか、どちらか先に発生した方にして、トランザクションをコミットします。
このロジックを実装するコードの例を入手できれば幸いです。
T
メッセージ駆動型 Bean の onmessage メソッドに次のロジックを実装しようとしています。
N メッセージを読み取るか、Y 時間待機するか、どちらか先に発生した方にして、トランザクションをコミットします。
このロジックを実装するコードの例を入手できれば幸いです。
T
このコードのようなことをしたいかもしれません。ただし、リスナーを 1 つのコンシューマーに保持してください。同時の負荷分散を行わないでください。そうしないと、注意が必要になります。JEE6 を使用している場合は、アノテーションを介して jms リソースを注入することをお勧めします。ない場合、受信呼び出しは Y/N 時間の待機をブロックします。
public void onMessage(Message msg) {
// So we got a message, let's grab the JMS resources
// Note that these could be injected as well, for convenience
InitialContext context = new InitialContext();
ConnectionFactory factory = (ConnectionFactory) context.lookup("java:comp/env/jms/connectionFactory");
Destination destination = (Destination) context.lookup("java:comp/env/jms/myQueue");
Connection connection = factory.createConnection();
connection.start();
MessageConsumer consumer = session.createConsumer(destination);
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// TODO: handle msg here
// So, let's start look for msgs.
for (int i=0; i<N; i++) {
Message msg_i = consumer.receive(Y/N);
// Handle msg_i here.
}
consumer.close();
session.close();
connection.close();
}