GEDOPLAN
Jakarta EE (Java EE)Webprogrammierung

WebSocket mit Java EE und JavaScript

Jakarta EE (Java EE)Webprogrammierung

Die Spezifikation (rfc6455) zu Websockets hat schon einige Jahre auf den Buckel, ist damit aber in allen bekannten Browsern verfügbar. Die Javascript API ist übersichtlich und mit nur wenigen Schritten kann eine bidirektionale Verbindung zwischen Browser und Server hergestellt werden, um Benachrichtigungen vom Server zu erhalten ohne ein alt modisches Polling zu implementieren. Auf Java-Seite steht mit Java EE 7 ebenfalls ein Standard bereit (jsr356) der die Server-Seite für Websocket Szenarien bereit stellt. Werfen wir einen kurzen Blick auf das Zusammenspiele im Beispiel JavaScript + Java EE 7

Die Initialisierung einer Websocket Verbindung in JavaScript ist mit einigen wenigen Zeilen Code bereitgestellt und stellt  Listener-Methoden bereit um auf Ereignisse zu reagieren

var wsConnection = new WebSocket('ws://example.ws.service/ws');
wsConnection.onopen = function () {...};
wsConnection.onerror = function (error) {...};
wsConnection.onmessage = function (e) {...};

Auch das Pendant auf der Serverseite ist nicht wesentlich umfangreicher, das Vorgehen ist simple: wir erstellen eine Klasse und registrieren sie als WebSocket Endpoint mittels der Annotation “ServerEndpoint”. Die entsprechenden Nachrichten um auf Events zu reagieren werden mit zusätzlichen Annotation versehen. In unserem Beispiel führen wir zusätzlich eine Liste aller verbundenen Clients um diese mit Push-Nachrichten zu versorgen.

EchoEndpoint.java

@ServerEndpoint("/echo")
public class EchoEndPoint {

    private static Set<Session> userSessions = Collections.newSetFromMap(new ConcurrentHashMap<Session, Boolean>());

    @OnOpen
    public void onOpen(Session userSession) {
	System.out.println("Neue Verbindung aufgebaut...");
	userSessions.add(userSession);

    }

    @OnClose
    public void onClose(Session userSession) {
	System.out.println("Verbindung getrennt...");
	userSessions.remove(userSession);

    }

    @OnMessage
    public void onMessage(String message, Session userSession) {
	broadcast(message);

    }

    public static void broadcast(String msg) {
	System.out.println("Broadcast Nachricht an alle:" + msg);
	for (Session session : userSessions) {
	    session.getAsyncRemote().sendText("Re: " + msg);
	}

    }
}

 

websocket_demo

 

Das war es schon, mehr ist nicht nötig um JavaScript und Java EE 7 über einen WebSocket zusammen zu bringen.

Ein vollständiges Beispiel findet sich wie immer bei uns im Github:

websocket-demo @ GITHUB

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

2020 07 02 12 09 28 window
Web Security, Spring

Spring Boot Swagger Keycloak

Spring Boot + Swagger sind ein eingespieltes Team, um die eigenen Rest-APIs als OpenApi Beschreibung zur Verfügung zu stellen. Dafür…
IT-Training - GEDOPLAN
Java SE

Apache CompareToBuilder

Gleichheit von Objekten wird bekanntlich mittels “equals” Methode implementiert in der fachliche Informationen heran gezogen werden um zu prüfen ob…

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!