2016-10-01 6 views
0

Ich habe Probleme mit der Ausführung meiner Java EE-Anwendung. Ich habe Namlich Code für Server edpoint:OnMessage (WebSocket) funktioniert nicht in Glassfish, Java 8

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

import javax.enterprise.context.ApplicationScoped; 
import javax.websocket.*; 
import javax.websocket.server.ServerEndpoint; 



@ApplicationScoped 
@ServerEndpoint(
     value = "/model" 
) 
public class ModelWebSocket { 


    private final ModelHandle model = new ModelHandle(); 

    @OnOpen 
    public void onOpen(Session session) throws IOException { 

    } 

    @OnError 
    public void onError(Throwable error) { 
     /// put model back to pool, log erros 
    } 


    // This code never calls, 
    @OnMessage 
    public void onMessage(String message, Session session) { 

     //TODO: Add decoders/encoders to annotations 
     try {  
      ModelInputData inputData = new ModelInputDataDecoder().decode(message);   
      double input = inputData.getInput(); 
      double timespan = inputData.getTimespan(); 

      model.setInput(input); 

      ModelProcessData process = model.getOuptput(timespan); 

      try { 
       session.getBasicRemote().sendText(
         new ModelProcessDataEncoder().encode(process) 
       ); 
      } catch (IOException | EncodeException ex) { 
       Logger.getLogger(ModelWebSocket.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } catch (DecodeException ex) { 
      Logger.getLogger(ModelWebSocket.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

} 

And the following stub for a client stub in javascript: 

<!DOCTYPE html> 
<!-- 
This is a test 
--> 
<html> 
    <head> 
     <title>Test</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    </head> 
    <body> 
     <!-- insert the main script here --> 

     <script type ="text/javascript"> 

      //copied from https://learn.javascript.ru/websockets 
      var socket = new WebSocket(
        "ws://localhost:8080/SimulatorWeb/model" 
        ); 

      socket.onopen = function() { 
       alert("Connection OK"); 
      }; 

      socket.onclose = function (event) { 
       if (event.wasClean) { 
        alert('Connection closed'); 
       } else { 
        alert('Connection interrupted'); // например, "убит" процесс сервера 
       } 
       alert('Code: ' + event.code + ' redason: ' + event.reason); 
      }; 

      socket.onmessage = function (event) { 
       alert("Data accepted " + event.data); 
      }; 

      socket.onerror = function (error) { 
       alert("Error " + error.message); 
      }; 



      function send(){ 
       socket.send("dummy"); 
      } 
     </script> 

     <button type="button" onclick="send();" >Send</button> 
    </body> 
</html> 

Kunde scheinen Nachricht zu senden, aber OnMessage nie abgefangen. Ich habe das die folgenden warnen, wenn ich Glassfish 4.1.1 starten:

  • WARNEN: WELD-000411: Observer-Methode [BackedAnnotatedMethod] Privat org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType (@Observes ProcessAnnotatedType) empfängt Ereignisse für alle annotierten Typen. Erwägen Sie, Ereignisse mit @WithAnnotations oder einem generischen Typ mit Grenzen einzuschränken. WARN: WELD-000411: Observer Methode [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType (@Observes ProcessAnnotatedType) empfängt Ereignisse für alle kommentierten Typen. Erwägen Sie, Ereignisse mit @WithAnnotations oder einem generischen Typ mit Grenzen einzuschränken. WARN: WELD-000411: Observer Methode [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType (@Observes ProcessAnnotatedType, BeanManager) empfängt Ereignisse für alle kommentierten Typen. Erwägen Sie, Ereignisse mithilfe von @WithAnnotations oder einem generischen Typ mit Begrenzungen einzuschränken.

Ich habe ich viel Zeit Debuggen ausgegeben, aber ich bin immer noch nicht in der Lage, das Problem zu finden ... Ich Java 8 SDK und NetBeans IDE verwenden.

(ich verwende im Code keine Decoder/Encoder, weil ich dachte, dass sie das Problem waren und entfernt sie aus ServerEnpoint)

Antwort

0

Ich weiß nicht, was das Problem mit Glassfish ist ... Ich swithed zu Tomcat und manuell hinzugefügt WEB_INF/lib alle externen Bibliotheken, die ich brauchte (javax.json in meinem Fall). Tomcat scheint dem ursprünglichen Code keine Warnungen zu geben und alles funktioniert gut.

Verwandte Themen