我正在使用Arquillian在使用CDI和JMS的EAR文件中运行集成测试,其中我依赖于集成测试的JMS事件的结果。我发现无法控制何时发生JMS事件。有时,JMS事件发生在特定测试开始之前,这是我想要的结果。但有时我发现JMS事件发生在测试之后。有没有办法告诉JMS它应该在特定时间开始还是在特定时间内完成?有没有办法向JMS询问特定事件是否已经发生?有没有办法告诉Arquillian的测试在开始之前等待JMS完成?
答案 0 :(得分:1)
我解决问题的方法是在发送JMS事件后添加以下调用:
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
使用上面的代码,JMS事件可以在下一个测试开始之前完成。这始终如一。
答案 1 :(得分:0)
没有
基本上你要求的是使用异步技术的同步行为。
我不相信我曾经在JMS规范中看到过保证及时性,所以在传递消息时,由JMS提供者和监听器接收关于它何时实际发生的消息。
就尝试在特定时间内完成而言,在传递消息之后,由您的处理来确定处理的时间有多短或多长。除了放入你自己的超时逻辑之外,JMS本身不会这样做。
我会问一个真正的基本问题:JMS真的是你正在尝试做的正确技术吗?