2015-04-20 8 views
5

У меня есть приложение 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, , @OnMessage и т. Д.) Ресурсы с использованием Tyrus на том же экземпляре сервера (скажем, в «http://127.0.0.1:8080/websocket»), но вся документация, которую я смог найти, показывает, как запустить автономный сервер websocket используя Tyrus + контейнер Grizzly, не объединенный с Джерси. Я ищу что-то вроде:

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

, но я не могу найти ничего подобного SomeTyrusHttpHandler. Как я могу комбинировать Jersey и Tyrus на одном сервере Grizzly?

ответ

1

хороший вопрос, но в настоящее время нет хорошего ответа для этого. Вы все еще можете это сделать, но это потребует глубокого погружения в внутренности Гризли; Тирус зарегистрирован аддоном (см. WebSocketAddOn), и его можно комбинировать с Джерси способом регистрации в этом контейнере.

Пожалуйста, помните, что объединение этих двух фреймворков не является тривиальной задачей - запуск их в одном контейнере является первым шагом, но есть и другие вещи, о которых нужно позаботиться, например, «поставщик экземпляра», жизненный цикл настройка и т. д. Я считаю, что эта тема выходит за рамки одного SO-ответа - вы можете ожидать от меня или какого-то другого члена команды Tyrus/Jersey из блога. (Я отправлю его здесь, как только это будет сделано).

В любом случае, я бы рекомендовал принять более консервативный подход и использовать небольшой контейнер, который поддерживает сервлет 3.1; что должно потребовать гораздо меньше работы на вашей стороне, и у вас будет стандартное время выполнения/жизненный цикл сервлета.

+0

Просто используйте Атмосферу, она делает именно то, что вы хотите, и разрешите управлять Джерси поверх гризли, GlassFish и т. Д. Https://github.com/Atmosphere/atmosphere. Например, http://goo.gl/s7OwGc - это супер легкий пример Джерси 2, который работает прозрачно поверх веб-гнезд. – jfarcand

+0

см. Https://github.com/pavelbucek/placeholder - PoC, в котором сочетаются Джерси и Тир (поверх Grizzly + HK2). –

+0

Привет, есть ли новости об такой интеграции? Я хотел бы добавить ресурс WebSocket в проект на Джерси. –