JMS HornetQと永続メッセージを使用したArquillian統合テストがあります。一部のテストでは、メッセージング ジャーナルが未処理のメッセージでいっぱいになり、データがないことを期待する他のテストが中断されます。
テストの実行前または実行後にJMSにメッセージング ジャーナルを消去するように指示する方法はありますか?
これは JMS API 自体には存在しませんが、HornetQ QueueControl 管理オブジェクトにメソッド「removeMessages(filter)」があります。このメソッドはキューの JMX Bean にありますが、Arquillian でそれを取得する方法がわかりません。
幸いなことに、「hornetq.management」キューを介して管理操作を呼び出すことができます。http://docs.jboss.org/hornetq/2.2.5.Final/user-manual/en/html/management.htmlを参照してください。実際には、次のように動作するはずです。
Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management");
QueueRequestor requestor = new QueueRequestor(session, managementQueue);
Message m = session.createMessage();
JMSManagementHelper.putOperationInvocation(m,
"jms.queue.exampleQueue",
"removeMessages","*");
Message reply = requestor.request(m);
boolean success = JMSManagementHelper.hasOperationSucceeded(reply);
サーバーを再起動する場合は、ページング フォルダーとデータ フォルダーを削除できます (バインディングを維持したまま)。