Websockets tomcat не работает метод ContainerProvider.getWebSocketContainer()

 
 
 
Сообщения:18
Всем доброго времени суток. Взялся за изучение учебника Java WebSocket Programming и застрял на примере из третей главы. То что там отсутствует самый объемный класс это отдельная история (кому нужно брал здесь). Но по сути, есть следующий фрагмент:
    public static DrawingClient connect(DrawingWindow window, String path) {
        WebSocketContainer wsc = ContainerProvider.getWebSocketContainer();
		System.out.println(wsc);
        try {
            DrawingClient client = new DrawingClient(window);
            wsc.connectToServer(client, new URI(path));

Не смотря на то что все компилируется. В момент запуска доходит до последней строки и вываливает:
null
Exception in thread "main" java.lang.NullPointerException
at DrawingClient.connect(DrawingClient.java:6)
Причина понятна wsc равен null но что с этим делать? В книге говориться что все примеры запускались на glassfish 4. Нашел подобное обсуждение о том можно ли создать клиент WS лишь с библиотекой websocket-api.jar и там советовали добавить tomcat-util.jar и tomcat-juli.jar. Как я понимаю их надо добавлять на этапе выполнения (я запускаю через консоль) с указанием -classpath но это не помогло.
Изменен:08 ноя 2019 16:39
 
 
Сообщения:18
Все удалось запустить. Чтобы запустить клиент WS на чистой java необходимо подцепить при выполнении библиотеку tyrus-standalone-client-1.13.1.jar также выяснилась еще одна неприятность по ходу пьесы. В следующем фрагменте условие всегда было false:
for (Session otherSession : this.session.getOpenSessions()) {
	if (!otherSession.equals(this.session)) 

Оказывается в 7хх tomcat было решено что данный метод this.session.getOpenSessions() должен возвращать набор из сеансов подключенных к конкретному экземпляру endpoint, а не набор сеансов подключенных к классу Endpoint т.е. он всегда возвращал набор из одной, текущей сессии. Пришлось все обновлять. Слава Гуглу!
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет