2015-08-14 3 views
0

У меня есть приложение Spring, которое подключается к конечной точке websocket. Для этого я использую класс Spring StandardWebSocketClient.Каковы другие реализации WebsocketClient весной?

WebSocketClient transport = new StandardWebSocketClient(); 
WebSocketStompClient stompClient = new WebSocketStompClient(transport); 
stompClient.setMessageConverter(new MappingJackson2MessageConverter()); 
String url = "ws://localhost:8080/asynccontrol"; 
StompSessionHandler handler = new MySessionHandler(); 
stompClient.connect(url, handler); 

Это работает в Jetty без проблем. Теперь мне нужно развернуть это приложение в среде WebSphere JRE7. Поскольку эта версия WAS не поддерживает JSR-356, я должен использовать другую реализацию. Из этого link WebsocketClient может быть типа:

  • StandardWebSocketClient в режиме исполнения JSR-356
  • JettyWebSocketClient с использованием Jetty 9+ родной WebSocket API
  • Любая реализация WebSocketClient Спринга

Первый выбор недоступен (нет времени исполнения JSR-356), второй вариант недоступен (требуется JRE8, получение неподдерживаемой версии major.minor версии 52), что это третий выбор? Каковы другие реализации WebSocketClient от Spring?

Можно ли перекомпилировать org.eclipse.jetty.websocketclient в JRE7?

Решение

Я не могу использовать jetty9.2, поскольку он не совместим с JettyWebSocketClient адаптером. Однако я мог бы просто использовать api без адаптера, с StandardWebSocketClient.

Я установил tomcat8, и он также работает с StandardWebSocketClient. В tomcat7 я все еще получал несовместимую ошибку подтипа WsContainerProvider, возможно, ошибку для моей конкретной версии tomcat. Для плана резервного копирования я также разработал TyrusWebSocketClient. Спасибо вам, ребята.

+0

Возможно использование API-интерфейса клиента Jetty 9.2.x в JRE7 (только для Jetty 9.3.x для JRE8) –

ответ

1

Вы можете использовать tyrus-standalone client.

Если вы используете Maven, добавьте эту зависимость:

<dependency> 
    <groupId>org.glassfish.tyrus.bundles</groupId> 
    <artifactId>tyrus-standalone-client</artifactId> 
    <version>1.9</version> 
</dependency> 

или

<dependency> 
    <groupId>org.glassfish.tyrus.bundles</groupId> 
    <artifactId>websocket-ri-bundle</artifactId> 
    <version>1.2.1</version> 
</dependency> 

Я использовал websocket-ri-bundle (вторая зависимость) она работает, но любой один из этих двух будет работать нормально.

EDIT

Если вы видите StandardWebsocketClient класс

public StandardWebSocketClient() { 
    this.webSocketContainer = ContainerProvider.getWebSocketContainer(); 
} 

Spring пытается определить поставщика контейнера из META-INF/services/javax.websocket.ContainerProvider файла реализации клиента. Поэтому любая клиентская реализация websocket, которая правильно указывает этот файл, будет работать.

+0

Я боюсь, что это не реализация Spring. Как инициализировать его с помощью объекта клиента tyrus websocket? – Mejmo

+0

Не нужно выполнять весеннюю паутину, пружина автоматически идентифицирует ее. обновил мой ответ. – Karthik

+0

@Mejmo Я имею в виду, что не нужно быть «реализацией Spring», это просто должна быть реализация 'websocketclient'. – Karthik

Смежные вопросы