2012-02-07 36 views
2

我刚刚开始使用Java EE来构建Web服务。 其中大部分都非常简单,因为他们得到请求,做一些工作并返回结果。一旦结果返回给客户端,它就会死亡。Java EE响应客户端,但继续处理

现在我需要能够响应客户端,以表明它的请求已收到并且正在处理中,但我不想在发送请求后结束webservice线程。我需要它在响应像发送请求到其他Web服务之后做一些处理。然后客户会定期轮询以获得结果的结果。这将由另一个web服务调用线程处理。

我不确定这在Java EE中是否可行。我通常只使用xml的TCP套接字完成此操作。

回答

1

从Java EE 6开始,可以将EJB的方法定义为异步:请参见Asynchronous Method Invocation。所以你的例程会从处理你的web服务的bean中调用一个异步bean,以触发你冗长的进程的开始,并返回到客户端。然后,您可以通过不同的Web服务方法查询此过程的结果。

在Java EE 5中,虽然不是直接的,但也可以使用timer tasks。但是,不可能自动查询此类任务的结果,因此您必须对其进行设计,以便将其状态保存到数据库中,以便另一个bean可以从中读取它的状态。

+0

我正在使用netbeans来生成简单的Java EE web服务。感谢您的链接。它应该帮助很多。甚至不知道什么是EJB。似乎NetBeans隐藏在你后面的很多东西。 – likenoother 2012-02-07 15:44:53

1

您希望以异步方式处理请求。从您的webservice方法中,您可以在JMS队列中发送消息,该消息由执行处理的消息驱动的Bean(MDB)获取。发送该消息时,请从您的web服务方法返回。

或者,如果可能的话,您的客户端可以在JMS队列上发送消息,并且您的服务器在客户端监视的响应队列上进行响应。

+0

谢谢我将研究JMS。我对Java EE世界仍然很陌生。不幸的是,客户端将无法直接使用JMS队列,因为它将以不同的语言进行外部开发。 – likenoother 2012-02-07 15:40:42

相关问题