我有一个要求,作为Web服务[Java]的一部分,我将作业的详细信息输入到数据库中,该服务由Windows服务[C#]异步处理,并对Java Web服务进行HTTP Restful调用通知工作状态。
情景:
我们如何在Java Web Service中实现这一目标?
编辑:我使用Jersey框架实现了restful web-service,并在Jetty服务器上运行。答案 0 :(得分:0)
根据您使用的Jersey和Jetty版本,您可以使用Servlet 3.0中添加的asynchronously handling requests支持。 (基于Jetty Wikipedia page,我相信你至少需要Jetty 8.x.基于this article,我相信你至少需要Jersey / JAX-RS 2.0。)
Jersey documentation和JAX-RS API docs有关于如何异步(即在另一个线程中)完成未完成请求的示例:
@Path("/resource")
public class AsyncResource {
@GET
public void asyncGet(@Suspended final AsyncResponse asyncResponse) {
new Thread(new Runnable() {
@Override
public void run() {
String result = veryExpensiveOperation();
asyncResponse.resume(result);
}
private String veryExpensiveOperation() {
// ... very expensive operation
}
}).start();
}
}
在您的情况下,您将以这样的方式存储AsyncResponse
对象,一旦您收到来自其他Web服务的响应,您可以通过调用resume
来完成请求,并提供您想要的任何响应发送给客户。
另见: