如何提交或刷新进程中的其余响应
问题描述:
我对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);
}
}
答
如果你可以做你想做什么,你会耗尽服务器上的资源,因为每个请求会以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调用,并有上述螺纹拉断,使查询。
大脑,谢谢你的示例代码。我会研究它,以确保我完全明白你的意思,因为我的Java经验非常有限。 –