小编use*_*053的帖子

无法通过reasteasy获得异步响应

尽管网上有很多研究,但我找不到任何解决方案.我想从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请求.

如果有人可以帮我解决这个问题,那就太棒了.提前致谢

塞德里克

java rest asynchronous comet resteasy

2
推荐指数
1
解决办法
2252
查看次数

标签 统计

asynchronous ×1

comet ×1

java ×1

rest ×1

resteasy ×1