2015-04-20 30 views
5

Mam aplikację Jersey JAX-RS, która biegnie na przykład Grizzly:Kombajny Jersey z Tyru

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

wewnątrz my.package.rest istnieją JAX-RS adnotacją zasobów. Chciałbym dodać adnotowane zasoby websocket (@ServerEndpoint, @OnOpen, @OnMessage, itp.) Za pomocą Tyrusa na tej samej instancji serwera (na przykład w "http://127.0.0.1:8080/websocket"), ale cała dokumentacja, którą udało mi się znaleźć, pokazuje, jak uruchomić niezależny serwer websocket przy użyciu pojemnika Tyrus + a Grizzly, nie łączonego z Jersey. Szukam czegoś podobnego:

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

ale nie mogę znaleźć coś podobnego do SomeTyrusHttpHandler. Jak mogę połączyć Jersey i Tyrus na jednym serwerze Grizzly?

Odpowiedz

1

Dobre pytanie, ale obecnie nie ma dobrej odpowiedzi na tę. Nadal możesz to zrobić, ale wymagałoby to głębokiego zanurzenia się w grizzly; Tyrus jest zarejestrowany przez dodatek (patrz WebSocketAddOn) i można go połączyć z metodą Jersey w celu rejestracji w tym kontenerze.

Należy pamiętać, że integracja tych dwóch ram nie jest trywialnym wyzwaniem - uruchomienie ich w jednym kontenerze to pierwszy krok, ale są jeszcze inne rzeczy, którymi należy się zająć, np. "Dostawca instancji", cykl życia korekta itp. Wierzę, że ten temat wykracza poza zakres jednej odpowiedzi SO - możesz oczekiwać od mnie lub innego członka zespołu Tyrus/Jersey o moim blogu. (Wrzucę to tutaj, kiedy już to zrobię).

W każdym razie, zaleciłbym bardziej konserwatywne podejście i użycie lekkiego pojemnika obsługującego Servlet 3.1; to powinno wymagać znacznie mniej pracy po twojej stronie, a będziesz mieć standardowe środowisko uruchomieniowe/cykl życia Servlet.

+0

Po prostu użyj Atmosphere, robi dokładnie to, co chcesz i pozwala uruchomić Jersey na szczycie Grizzly, GlassFish itp. Https://github.com/Atmosphere/atmosphere. Na przykład http://goo.gl/s7OwGc jest bardzo łatwym przykładem Jersey 2, który działa transparentnie na stronach internetowych. – jfarcand

+0

zobacz https://github.com/pavelbucek/placeholder - PoC, który łączy Jersey i Tyrus (na szczycie Grizzly + HK2). –

+0

Witam, czy są jakieś wieści o takiej integracji? Chciałbym dodać zasoby WebSocket do mojego projektu w Jersey. –