Spezifikation / Framework-APIWeb Realtime2.2

Jakarta WebSocket

Jakarta WebSocket standardisiert server- und clientseitige WebSocket-Endpunkte.

Einordnung
Spezifikation / Framework-API
Enterprise-Rolle
WebSocket eignet sich für bidirektionale, langlebige Kommunikation, nicht für jeden normalen REST-Call.
Diagramm zu Jakarta WebSocket

Fachliches Verständnis

WebSocket eignet sich für bidirektionale, langlebige Kommunikation, nicht für jeden normalen REST-Call. In der Praxis ist wichtig, die Spezifikation nicht mit der konkreten Runtime zu verwechseln. Der Standard beschreibt die portablen APIs, die Implementierung entscheidet über Konfiguration, Performance, Betrieb und Support.

Kernkonzepte

  • @ServerEndpoint.
  • Session und Message Handler.
  • Encoder/Decoder.
  • ClientEndpoint für ausgehende Verbindungen.

Typische Einsatzfälle

  • Live-Status, Chat, Monitoring, Push-Updates.
  • Backend-Verbindung zu WebSocket-Gateway.

Technisches Beispiel

java
@ServerEndpoint("/ws/orders/{orderId}")
public class OrderStatusEndpoint {
    @OnOpen
    public void open(Session session, @PathParam("orderId") String orderId) {
        session.getUserProperties().put("orderId", orderId);
    }

    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        session.getBasicRemote().sendText("ack:" + message);
    }
}
Architekturregel: Jakarta APIs gehören an Systemgrenzen und Infrastrukturpunkte. Fachentscheidungen bleiben in Application Services und Domain-Modellen testbar und möglichst unabhängig vom Container.

Enterprise-Fallen

  • Keine Backpressure-Strategie.
  • Session-Zustand unkontrolliert im Speicher.
  • WebSocket für CRUD missbrauchen.

Legacy-Modernisierung

Polling-basierte Legacy-UIs können gezielt auf Push-Kommunikation umgestellt werden.

Vertiefung: Review-Fragen für Senior-Entwickler
  • Welche Spezifikation ist hier wirklich nötig?
  • Welche Runtime-Funktion wird genutzt und ist sie portabel?
  • Wo liegt die Transaktionsgrenze?
  • Sind API-Verträge, DTOs und Domain-Modelle getrennt?
  • Ist der Code ohne Application Server testbar?