是否有任何方法可以确保JMS事件发生或告诉JMS事件在特定时间开始和完成?

时间:2016-11-15 12:24:49

标签: java jboss jms cdi jboss-arquillian

我正在使用Arquillian在使用CDI和JMS的EAR文件中运行集成测试,其中我依赖于集成测试的JMS事件的结果。我发现无法控制何时发生JMS事件。有时,JMS事件发生在特定测试开始之前,这是我想要的结果。但有时我发现JMS事件发生在测试之后。有没有办法告诉JMS它应该在特定时间开始还是在特定时间内完成?有没有办法向JMS询问特定事件是否已经发生?有没有办法告诉Arquillian的测试在开始之前等待JMS完成?

2 个答案:

答案 0 :(得分:1)

我解决问题的方法是在发送JMS事件后添加以下调用:

try {
    Thread.sleep(4000);
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

使用上面的代码,JMS事件可以在下一个测试开始之前完成。这始终如一。

答案 1 :(得分:0)

没有

基本上你要求的是使用异步技术的同步行为。

我不相信我曾经在JMS规范中看到过保证及时性,所以在传递消息时,由JMS提供者和监听器接收关于它何时实际发生的消息。

就尝试在特定时间内完成而言,在传递消息之后,由您的处理来确定处理的时间有多短或多长。除了放入你自己的超时逻辑之外,JMS本身不会这样做。

我会问一个真正的基本问题:JMS真的是你正在尝试做的正确技术吗?