尽管网上有很多研究,但我找不到任何解决方案.我想从GUI调用一个服务.该服务(Rest方法)使用线程启动异步处理.我希望服务立即给出对GUI的响应,以便不阻止GUI.在线程结束时,服务应该给出第二个响应,指示GUI已完成处理.
我想做的似乎对应于Reasteasy的异步HTTP部分.所以,我已经尝试过这段代码(我只考虑了我的问题的重要部分):
@PUT
@Path("/duplicate/1")
public void duplicate( UcModel uc,
final @Suspend(TIMEOUT_ASYNCHRONOUS_DUPLICATION) AsynchronousResponse response) throws BusinessException {
Thread t = new Thread() {
@Override
public void run() {
try {
Thread.sleep(40000);
} catch (InterruptedException e) {
}
Response jaxrs = Response.ok(result).build();
response.setResponse(jaxrs);
}
};
t.start();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的web.xml中,我已经把这段代码:
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher
</servlet-class>
<async-supported>true</async-supported>
</servlet>
Run Code Online (Sandbox Code Playgroud)
问题是:Web服务不会立即给出响应.它仅在线程结束时给出响应,并且GUI被阻止.通过查看代码,我甚至不明白服务如何立即给出"无效"结果的响应.
有关信息:Web服务的调用是在一个Javascript框架ExtJS中进行的.它执行Ajax请求.
如果有人可以帮我解决这个问题,那就太棒了.提前致谢
塞德里克