我们使用axis2来构建我们的web服务,使用Jboss服务器来运行我们所有应用程序的逻辑。我们被要求构建一个与bean通信的Web服务,该bean可能需要1个小时才能响应(取决于请求的大小),因此我们无法与在此期间打开的消费者保持连接。
我们可以使用异步Web服务,但这并不是很好,所以我们决定实现一个bean,它将执行webservice背后的逻辑并让服务异步调用该bean。 Web服务将生成一个将传递给使用者的令牌,消费者可以使用它来查询请求的状态。
我的问题是:
答案 0 :(得分:3)
您可以采用的另一种方法是使用JMS和DB。
过程将是
这个过程在资源使用上有点重,但有一些优点
答案 1 :(得分:1)
我不认为有状态会话bean是您问题的答案,它们是为长时间运行的会话会话而设计的,这不是您的场景。
我的建议是使用使用ExecutorService工厂类创建的Java5风格的Executors线程池:
ExecutorService
实例。Callable.call()
方法将以任何形式对业务逻辑bean进行实际调用。Callable
传递给ExecutorService.submit()
,它会立即返回表示调用最终结果的Future
对象。 Executor
将开始在单独的帖子中调用您的Callable
。Future
存储在Map
中,并将令牌作为密钥。Future
,并使用超时值调用get()
上的Future
,以便它只等待很短的时间才能得到答案。 get()
调用将返回调用Callable
的执行结果。
Future
。这是一种非常强大的方法。如果您愿意,您甚至可以配置ExecutorService
以限制可以同时执行的呼叫数。