阅读RESTful文档,似乎不可能实现异步实例,但是在SO上可能有人知道得更好。
我想表达的是我想要异步执行服务请求:
@Path("/helloworld", asyncSupported=true)
public class MyHelloWorldService {
...
}
我知道@Path中没有定义asyncSupported
,但我正在寻找类似于@WebServlet
的东西。然后,我想使用AsyncContext
实例(或等效物)。
这种情况可能吗?
阅读RESTful文档,似乎不可能实现异步实例,但是在SO上可能有人知道得更好。
我想表达的是我想要异步执行服务请求:
@Path("/helloworld", asyncSupported=true)
public class MyHelloWorldService {
...
}
我知道@Path中没有定义asyncSupported
,但我正在寻找类似于@WebServlet
的东西。然后,我想使用AsyncContext
实例(或等效物)。
这种情况可能吗?
RestEasy提供了一些支持,使用自定义注释@Suspend
。
此外,还有一个基于Jersey的框架/库叫做Atmosphere,但它可能对你的用例来说过于复杂,因为它的重点似乎是长轮询客户端/服务器Web应用程序(例如聊天-https://github.com/Atmosphere/atmosphere)
[1] 实际执行逻辑的线程中将丢失请求的CDI范围。有关更多信息,请参见RESTEasy-682问题。目前我所知道的任何REST框架都没有解决这个问题[2014年3月]。
然而,还有其他选择。像Jetty这样的项目正在优雅地解决这类问题,如此示例所示。我只能建议您考虑其他选择,因为社区正在不断发展。
请查看此处的Pubsubhubbub示例,了解一种基于REST的异步协议。它基于Atom订阅格式,比WS-* pub/sub机制简单得多。