Dan*_*iel 6 java multithreading ejb
我知道我不能修改EJB容器中的线程,因此我不知道如何在EJB环境中以正确的方式执行以下操作:
涉及的是:
场景是:
客户端调用服务器方法,然后将几个消息发送到队列.之后,Server会做其他一些事情.在此期间,Mdb消耗一条消息,调用Wi进行一些相当长的计算,并得到结果.现在Mdb将结果提供给Server.当服务器获取它发送的每条消息的所有"结果"时,它会使用W s 的结果进行更多计算,并将结果返回给客户端.
我的问题:
在Java SE,我只想做.wait()来让服务器等待的结果W¯¯年代,经过服务器没有发送消息后的工作.然后mdb在设置结果时会.notify().因为我不能修改EJB容器中的线程,正如规范所述,我迷失了因为我找不到任何适当的方法来在EJB环境中实现相同的行为.
对此问题的任何帮助都将非常感谢,提前感谢.
PS:我正在使用JBoss 5.1.0,以防有任何特定于供应商的措施来解决这个问题.
对此的适当解决方案是消息传递的“请求/响应”模式。简而言之,您可以通过消息传递系统通过发送消息并等待响应消息来执行“同步”操作(所有这些在 J2EE 世界中都是合法的)。在实践中,您可以通过多种方式实现此目的,但一般的想法是,您发送带有某种唯一标识符的请求消息,然后使用为您指定的请求 ID 设置的消息过滤器来等待响应消息。已发送(这通常是“correlationId”字段的用途)。MDB 将获取请求消息,处理它们,并使用请求消息中指定的唯一标识符发送响应消息。您可以使用一个队列完成所有这些操作,也可以使用单独的请求/响应队列,或者您可以做一些疯狂的事情,例如创建“临时”响应队列(每个请求)。您可以使用该方法告诉 MDB 将请求消息发送到哪里Message.setJMSReplyTo
。
一般模式是:
receive()
直到接收并处理所有消息(或超时)(显然,服务器直接从步骤2进行到步骤4,我这样写只是为了突出控制流程。)
归档时间: |
|
查看次数: |
1615 次 |
最近记录: |