有一個Arquillian集成測試使用JMS HornetQ與持續消息。有些測試會讓消息傳遞日誌充滿未處理的消息,這些消息打破了期望沒有數據的其他測試。如何在執行測試之前/之後清理HornetQ消息日誌?
有沒有辦法告訴JMS在執行測試之前或之後清理其消息日誌?
有一個Arquillian集成測試使用JMS HornetQ與持續消息。有些測試會讓消息傳遞日誌充滿未處理的消息,這些消息打破了期望沒有數據的其他測試。如何在執行測試之前/之後清理HornetQ消息日誌?
有沒有辦法告訴JMS在執行測試之前或之後清理其消息日誌?
這在JMS API本身並不存在,但HornetQ QueueControl管理對象中有一個方法'removeMessages(filter)'。該方法可以在Queue的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);
如果要重新啓動服務器,你可以刪除分頁和數據文件夾(同時保持綁定)。