2015-04-20 14 views
5

Ich habe ein Jersey JAX-RS-Anwendung, die auf einem Grizzly-Instanz ausgeführt wird:Kombinieren Jersey mit Tyrus

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(); 
    } 
} 

innen my.package.rest gibt es JAX-RS Ressourcen kommentiert. Ich möchte Websocket mit Anmerkungen versehen (@ServerEndpoint, @OnOpen, etc.) Ressourcen mit Tyrus auf der gleichen Server-Instanz (sagen wir in "http://127.0.0.1:8080/websocket") aber die gesamte Dokumentation, die ich finden konnte, zeigt, wie man einen Standalone-Websocket-Server startet Verwendung von Tyrus + einem Grizzly-Container, nicht kombiniert mit Jersey. Ich bin auf der Suche nach so etwas wie:

server.getServerConfiguration().addHttpHandler(new SomeTyrusHttpHandler("/websocket")); 

aber ich kann nichts ähnlich wie SomeTyrusHttpHandler finden. Wie kann ich Jersey und Tyrus in einem einzigen Grizzly-Server kombinieren?

Antwort

1

gute Frage, aber es gibt derzeit keine gute Antwort für diese. Sie können das immer noch tun, aber es würde erfordern, tief in Grizzly Interna einzutauchen; Tyrus wird von einem Addon registriert (siehe WebSocketAddOn) und es kann mit Jersey-Registrierung in diesem Container kombiniert werden.

Bitte denken Sie daran, dass die Integration dieser beiden Frameworks keine triviale Herausforderung ist - sie in einem einzigen Container laufen zu lassen ist ein erster Schritt, aber es müssen noch andere Dinge erledigt werden, wie "Instanzanbieter", Lebenszyklus Anpassung usw. Ich glaube, dass dieses Thema den Umfang einer SO-Antwort übersteigt - Sie können einen Blogpost von mir oder einem anderen Tyrus/Jersey-Teammitglied erwarten. (Ich werde es hier einmal posten, das ist getan).

Wie auch immer, ich würde empfehlen, einen konservativeren Ansatz zu nehmen und einen leichten Container zu verwenden, der Servlet 3.1 unterstützt; Das sollte viel weniger Arbeit auf Ihrer Seite erfordern und Sie werden Standard Servlet Laufzeit/Lebenszyklus haben.

+0

Verwenden Sie einfach Atmosphäre, es tut genau das, was Sie wollen und erlauben Jersey auf Grizzly, GlassFish etc. https://github.com/Atmosphere/atmosphere laufen zu lassen. Zum Beispiel http://goo.gl/s7OwGc ist ein super einfaches Beispiel für Jersey 2, das transparent auf Websockets läuft. – jfarcand

+0

siehe https://github.com/pavelbucek/placeholder - PoC, das Jersey und Tyrus kombiniert (zusätzlich zu Grizzly + HK2). –

+0

Hallo, gibt es Neuigkeiten über eine solche Integration? Ich möchte meinem Jersey-Projekt eine WebSocket-Ressource hinzufügen. –