尽管在Web上进行了许多研究,但我找不到任何解决方案。 我想从GUI调用服务。服务(Rest方法)通过线程启动异步处理。我希望服务立即给GUI一个响应,以便GUI不被阻塞。在线程结束时,服务应该给出第二个响应,指示完成处理的GUI。无法通过reasteasy获得异步响应
我想要做的事似乎对应于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();
}
}
在我的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>
的问题:Web服务不会立即给出响应。它仅在线程结束时给出响应,并且GUI被阻止。 通过查看代码,我甚至不明白服务如何立即给出一个“无效”结果的响应。
有关信息:Web服务的调用是在JavaScript框架ExtJS中进行的。它执行一个Ajax请求。
如果有人能帮助我解决这个问题,那将会很棒。在此先感谢
Cedric
谢谢您的答复。不幸的是,我没有足够的时间来尝试这个解决方案,因为我今天离开了我的项目。所以,我的解决方法是完全删除我的方法的异步部分,并确保客户端不会被处理请求阻止。我给你的回复给我的同事,也许有人会有一段时间来看看它,并尝试彗星解决方案 – user2622053
好吧,祝你好运,请不要忘记投票,如果答案对你有用 –
我试过了投票,但我是这个论坛的初学者,所以我没有足够的投票声望 – user2622053