2011-11-06 72 views
0

我对Java和泽西都很陌生。现在,我想在发送响应之后使用球衣来实现额外处理的REST服务(具体来说,睡眠一段固定时间,然后在同一个servlet上下文中发出不同的REST请求,因此它不像REST代理)。我已经搜索了一段时间,但似乎都认为这是理所当然的,在方法结束时隐含地冲淡响应。这里是目前的代码与JAXB启用我努力工作。如何提交或刷新进程中的其余响应

@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); 



    } 
} 

回答

0

如果你可以做你想做什么,你会耗尽服务器上的资源,因为每个请求会以X秒和箱哭叔叔之前你有一个有限数量的线程。

没有评论为什么你想这样做;如果您为LoadSimulator使用@Singleton注释,那么您可以设置一个线程来侦听@PostConstruct public void init()中的(并发)队列 - 当您的servlet启动时会被调用。

@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

大脑,谢谢你的示例代码。我会研究它,以确保我完全明白你的意思,因为我的Java经验非常有限。 –