我有一个Jersey JAX-RS应用程序,它在Grizzly实例上运行:
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注释的资源。我想添加带注释的websocket (@ServerEndpoint、@OnOpen、@OnMessage等)资源,但我能找到的所有文档都展示了如何使用Tyrus + Grizzly容器启动独立的websocket服务器,而不是与Jersey结合使用。我正在寻找类似这样的东西:
server.getServerConfiguration().addHttpHandler(new SomeTyrusHttpHandler("/websocket"));但我找不到任何类似于SomeTyrusHttpHandler的东西。如何将Jersey和Tyrus合并到单个Grizzly服务器中?
发布于 2015-04-21 17:17:36
问得好,但这个问题目前还没有好的答案。你仍然可以这样做,但这需要深入研究Grizzly的内部结构;Tyrus是通过一个插件注册的(参见WebSocketAddOn),它可以与Jersey的注册方式相结合来注册到该容器中。
请记住,将这两个框架集成在一起并不是一个微不足道的挑战-在一个容器中运行它们是第一步,但还有其他事情需要注意,比如“实例提供者”,生命周期调整,等等。我相信这个话题超出了一个答案的范围-你可以期待我或其他Tyrus/Jersey团队成员就此发表博客。(一旦完成,我会在这里张贴)。
无论如何,我建议采取更保守的方法,使用一些支持Servlet 3.1的轻量级容器;这应该需要您的工作少得多,并且您将拥有标准的Servlet运行时/生命周期。
https://stackoverflow.com/questions/29751116
复制相似问题