3

メッセージ駆動型 Bean の onmessage メソッドに次のロジックを実装しようとしています。

N メッセージを読み取るか、Y 時間待機するか、どちらか先に発生した方にして、トランザクションをコミットします。

このロジックを実装するコードの例を入手できれば幸いです。

T

4

1 に答える 1

0

このコードのようなことをしたいかもしれません。ただし、リスナーを 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();
}
于 2012-09-09T21:11:25.007 に答える