2015-12-07 2 views
2

im new to WebSockets. для начала обучения я последовал за this учебником. и просто скопировали ClientEndpoint и ServerEndpoint и развернули сервер с tyrus.Не удалось загрузить класс поставщика контейнеров: org.glassfish.tyrus.container.grizzly.GrizzlyEngine

, но когда я пытаюсь запустить сервер он будет бросать эту ошибку:

Failed to load container provider class: org.glassfish.tyrus.container.grizzly.GrizzlyEngine 

здесь код развертывания (я уже комментировал линию, я получаю ошибку):

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

import org.glassfish.tyrus.server.Server; 

public class WebSocketServer { 

    public static void main(String[] args) { 
     runServer(); 
    } 

    public static void runServer() { 

     Server server = new Server("localhost", 8000, "/websockets", WordgameServerEndpoint.class); 

     try { 
      server.start(); //i get the error on this line 
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
      System.out.print("Please press a key to stop the server."); 
      reader.readLine(); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } finally { 
      server.stop(); 
     } 
    } 
} 

здесь код сервера:

import java.io.IOException; 
import java.util.logging.Logger; 

import javax.websocket.CloseReason; 
import javax.websocket.OnClose; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.CloseReason.CloseCodes; 
import javax.websocket.server.ServerEndpoint; 

@ServerEndpoint(value = "/game") 
public class WordgameServerEndpoint { 

    private Logger logger = Logger.getLogger(this.getClass().getName()); 

    @OnOpen 
    public void onOpen(Session session) { 
     logger.info("Connected ... " + session.getId()); 
    } 

    @OnMessage 
    public String onMessage(String message, Session session) { 
     switch (message) { 
      case "quit": 
       try { 
        session.close(new CloseReason(CloseCodes.NORMAL_CLOSURE, "Game ended")); 
       } catch (IOException e) { 
        throw new RuntimeException(e); 
       } 
       break; 
     } 
     return message; 
    } 

    @OnClose 
    public void onClose(Session session, CloseReason closeReason) { 
     logger.info(String.format("Session %s closed because of %s", session.getId(), closeReason)); 
    } 
} 

я был бы признателен за любую помощь :)

+0

Вы могли решить это? –

+0

нет нет действительно. Я поменял свой путь на OkHTTP-библиотеку, с которой было намного легче справиться. –

+0

oh ok .. Наша комплектация отличается тем, что мы используем Apache karaf для комплектации, и проблема, похоже, связана с загрузчиками классов, не загружающими этот GrizzlyEngine (проблема с базой OSGI). Эта банка работает нормально, если работать как автономное приложение. Вы запустили это приложение как самостоятельное приложение или внутри веб-контейнера? –

ответ

2

это, кажется, проблема зависимости,

, если вы являетесь пользователем Maven:

<dependencies> 
    <dependency> 
     <groupId>javax.websocket</groupId> 
     <artifactId>javax.websocket-api</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.tyrus</groupId> 
     <artifactId>tyrus-server</artifactId> 
     <version>1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.tyrus</groupId> 
     <artifactId>tyrus-client</artifactId> 
     <version>1.1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.tyrus</groupId> 
     <artifactId>tyrus-container-grizzly</artifactId> 
     <version>1.1</version> 
    </dependency> 

    <dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.5</version> 
    </dependency> 
</dependencies> 

или загрузить следующие банки:

  • гризли-каркасного 2.3.3.jar
  • гризли-клиент-2.3.3.jar
  • гризли-HTTP-сервер 2.3.3.jar
  • гризли-RCM-2.3.3.jar
  • javax.websocket-апи-1.0.jar
  • Тир-клиент-1.1.jar
  • Тир-контейнер-гризли-1.1.jar
  • Тир-жильный -1.1.jar
  • Тир-сервера 1.1.jar
  • Тир-СПИ-1.1.jar
  • Тир-WebSocket-ядро-1.1.jar

пожалуйста, имейте в виду, что они висимость как для клиентских, так и для серверных реализаций.