首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在进程中间提交或刷新rest响应

如何在进程中间提交或刷新rest响应
EN

Stack Overflow用户
提问于 2011-11-06 15:38:14
回答 1查看 1.1K关注 0票数 0

我对爪哇和泽西都很陌生。现在,我想使用这个jersey来实现在发送响应后具有额外处理的REST服务(具体来说,在同一个servlet上下文中睡眠固定的秒,然后触发一个不同的REST请求,所以它与REST代理不同)。我在googled上搜索了一段时间,但所有的人似乎都想当然地认为,在方法的末尾隐式地刷新响应是理所当然的。下面是启用JAXB的当前代码,我正在努力工作。

代码语言:javascript
复制
@Path("/chat")
public class LoadSimulator {

    @Context private UriInfo uriInfo;

    @Path("/outbound/{senderAddress}/requests")
    @POST
    @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    public Response createOutboundSMSMessage(OutboundSMSMessageRequest inSmsReq, @PathParam("senderAddress") String senderAddress) throws JAXBException {
        String requestId = UUID.randomUUID().toString();
        URI uri = uriInfo.getAbsolutePathBuilder().path(requestId).build();

        ObjectFactory factory = new ObjectFactory();
        ResourceReference resourceReference = new ResourceReference();
        resourceReference.setResourceURL(uri.toString());
        JAXBElement<ResourceReference> inSmsResponse = factory.createResourceReference(resourceReference);
                return Response.created(uri).entity(inSmsResponse).build();
             //// want to flush or commit the response explicitly like:
              //        out.flush();
            //        out.close();
            //// Then sleep for a few second and fire a new REST request
            //        sleep(5);
            //          ....   
            // ClientConfig config = new DefaultClientConfig();
            // String response = r.path("translate").queryParams(params).get(String.class);



    }
}
EN

回答 1

Stack Overflow用户

发布于 2011-11-06 16:13:57

如果你能做你想做的事情,你会耗尽你的服务器上的资源,因为每一个请求都需要X秒,在盒子呼喊叔叔之前,你有有限的线程可用。

不需要评论为什么要这样做;如果您将@Singleton注释用于您的LoadSimulator,您可以在@PostConstruct public void init()中设置一个侦听(并发)队列的线程--该线程在servlet启动时被调用。

代码语言:javascript
复制
@Singleton
@Path("/chat")
public class LoadSimulator {
    private Thread restCaller;
    private ConcurrentLinkedQueue<MyInfo> queue = new ConcurrentLinkedQueue<MyInfo>();

    ...
    @PostConstruct public void init()
    {
        restCaller = new Thread(new MyRunnable(queue));
        restCaller.start();
    }
    ...

然后,在REST调用中,您会将进行第二次REST调用所需的任何信息放入该队列,并让前面提到的线程完成它并进行查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8028122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档