我有一个在Grizzly实例上运行的Jersey JAX-RS应用程序:
public class Application {
public static final String BASE_URI = "http://127.0.0.1:8080/rest";
public static void main(String[] args) throws IOException {
ResourceConfig rc = new ResourceConfig().packages("my.package.rest");
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
System.out.println("Server started, press any key to stop.");
System.in.read();
server.shutdownNow();
}
}
在my.package.rest
内部有 JAX-RS 注释资源。我想在同一个服务器实例上使用 Tyrus 添加 websocket 注释(@ServerEndpoint
、@OnOpen
、@OnMessage
等)资源(比如在"http://127.0.0.1:8080/websocket"中),但我能够找到的所有文档都显示了如何使用 Tyrus + Grizzly 容器启动独立的 websocket 服务器,而不是与 Jersey 结合使用。我正在寻找类似的东西:
server.getServerConfiguration().addHttpHandler(new SomeTyrusHttpHandler("/websocket"));
但我找不到与SomeTyrusHttpHandler
类似的东西.如何将泽西和泰勒斯组合在一个灰熊服务器中?
好问题,但目前没有好的答案。你仍然可以做到这一点,但这需要深入研究灰熊的内部;Tyrus 由一个插件注册(参见 WebSocketAddOn),它可以与 Jersey 注册到该容器的方式相结合。
请记住,将这两个框架集成在一起并不是一个微不足道的挑战 - 在单个容器中运行它们是第一步,但还有其他事情需要注意,例如"实例提供者"、生命周期调整等。我相信这个话题超出了一个 SO 答案的范围 - 你可以期待我或其他一些 Tyrus/Jersey 团队成员关于这个问题的博客文章。(完成后我会在这里发布)。
无论如何,我建议采取更保守的方法,使用一些支持 Servlet 3.1 的轻量级容器;这应该需要更少的工作,你将拥有标准的 Servlet 运行时/生命周期。