在完美的世界中,我会想象有一个像@QoS(10, CONSTANT_RETURN_OBJECT)
这样的注释可以放在java方法周围,如果它们需要的时间比指定时间(本例中为10秒)要长,那么方法执行基本上被认为是超时的,我们返回由开发人员定义的预先打包的CONSTANT_RETURN_OBJECT,以指示空结果。
但实际上,在我们说它太长并且只是回归并继续我们的快乐方式之前,支持或建议实施泽西服务器方法可以运行多长时间的好方法是什么?
它的一个给定(我的问题在这里),你无法控制调用jersey-server的客户端,所以你不能在那里设置超时...这就是为什么你要强制执行一些合理的服务器端。
我想我在某种程度上要求的是,是否有一个注释基本上将方法调用包装为Executor驱动的任务并以超时运行它?有点像这两个帖子的答案中写的代码:
答案 0 :(得分:1)
执行此操作的方法是实现servlet过滤器。基本过滤器如下所示:
public class TimeoutFilter implements Filter {
@Override
public void doFilter(final ServletRequest servletRequest,
final ServletResponse servletResponse,
final FilterChain chain) throws IOException, ServletException {
final HttpServletRequest req = (HttpServletRequest)servletRequest;
try {
// Execute this with a time limit
chain.doFilter(servletRequest, servletResponse);
}
catch (Exception e) {
// Handle exceptions here; you should state the exceptions explicitly
// rather than just catching Exception
}
}
}
然后,您可以设置Executor或过滤器中的任何内容,为请求提供时间限制。