Javax Websocket API implementieren

HolyFUT

Mitglied
Hallo zusammen,
ich versuche gerade einen Websocket Server zu entwickeln, hänge allerdings schon bei der Implementierung von javax. So weit ich das verstanden habe ist Javax eine API die man zunächst mittels einer Java Datei als package integrieren muss, jedoch finde ich gefühlt nirgendswo eine offizielle Quelle o.Ä. um eines dieser javax Dateien herunterzuladen. Ich habe bereits gesehen dass in meiner external library meine jdk einen javax ordner beinhaltet
1653025684077.png

Jedoch ist dort zB kein Websocket o.Ä. vorhanden (auch nicht in den darunterliegenden Ordner). Mache ich hier was komplett falsch und kann mir jemand helfen?
 

HolyFUT

Mitglied

HolyFUT

Mitglied
Maven ist ein dependency-management + build tool und ist in der Java enterprise Welt halt Usus.

Hier ein Beispiel: https://blogs.oracle.com/javamagazi...-the-websocket-api-for-java-ee-and-jakarta-ee

Du kannst dir auch die Dependencies selbst ziehen und dann einbinden (maven repositories -> da liegen die jars).
Moin, also irgendwie muss ich sagen, dass ich damit absolut gar nicht klar komme... Ich versuche mich auch wirklich darüber zu informieren, aber ich raff das drum herum nicht. Wenn ich die API einbinden möchte, gelang ich auf diese Seite, kriege ich diese Seite, dann hab ich auf einmal nen ganzen Source Code von Tyrus (wieder etwas neues). Ich krieg von hier und da immer neue Fragezeichen und Links. Hast du einen Ratschlag für mich?
 

KonradN

Super-Moderator
Mitarbeiter
Vielleicht kannst Du einmal im Detail beschreiben, was Du gerade genau machst und wie weit du bisher gekommen bist.

Bist Du dabei, ein Maven Projekt zu erstellen? Hast Du das schon geschafft? Oder willst Du ohne Maven arbeiten? Wie baust Du dann dein Projekt auf? Ist es dann ein reines Eclipse Projekt?

Wenn Du eine Abhängigkeit herunter laden willst, dann solltest Du über die Maven Repository Seite gehen: https://mvnrepository.com/
Dort kannst Du nach Abhängigkeiten suchen, so Du groupId / archetypId hast (Die werden in der Regel immer angegeben für Maven Projekte)
Auf der gegebenen Seite ist z.B. angegeben:
Java:
<dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-api</artifactId>
            <version>${jakartaee}</version>
</dependency>

Also suchen wir mal nach jakarta.jakartaee-api und der erste Treffer scheint es schon zu sein. Also da drauf gehen.

Nun hast du verfügbare Versionen - da gehen wir z.B. auf 9.1.0

Nun siehst Du alle möglichen Details. Oben in den Angaben findet sich "Files" - da kannst Du die jar Datei herunter laden. Du siehst unter der kleinen Tabelle paar Tabs für diverse Build-Tools.

Und da drunter finden sich Details zu weiteren Abhängigkeiten. Ggf. muss man noch weitere Abhängigkeiten herunter laden wenn man dies manuell machen will.

Das wäre der Ablauf mit dem selbst herunter laden von Abhängigkeiten.
 

HolyFUT

Mitglied
Moin danke dir,

eines der größten Knackpunkte die ich gestern durch Zufall gelöst habe, war der Unterschied zwischen Java SE/EE/ME. Wenn ich ganz ehrlich bin, habe ich mir keine großen Gedanken darüber gemacht was der Zusatz "EE" im Java war. Gefühlt hat auch jeder über Java gesprochen und daher habe ich Java und Java EE gleichgesetzt. Damit konnte ich dann, über intellij, mir die Library und dependencies setzen.

1653119202699.png

Die Hälfte sagt mir nichts, die Frage wieso ich einen tyrus Server brauche und bevorzuge wird nirgends wirklich beantwortet. Fühle mich teilweise wie in nodejs wo wahllos und willkürlich packages vorgeschlagen und installiert werden xD
 

KonradN

Super-Moderator
Mitarbeiter
Evtl. einfach eine kleine Erläuterung:

Tyrus ist die Websocket Implementation von Eclipse: https://eclipse-ee4j.github.io/tyrus/

Java EE ist eine Sammlung von Standards / APIs. Das gibt also nur vor, was implementiert werden muss aber es gibt keine fertige Implementierung.

Dies wird dann von unterschiedlichen Projekten implementiert. So gibt es viele kommerziellen Anbieter aber auch Open Source Projekte.
 

HolyFUT

Mitglied
Evtl. einfach eine kleine Erläuterung:

Tyrus ist die Websocket Implementation von Eclipse: https://eclipse-ee4j.github.io/tyrus/

Java EE ist eine Sammlung von Standards / APIs. Das gibt also nur vor, was implementiert werden muss aber es gibt keine fertige Implementierung.

Dies wird dann von unterschiedlichen Projekten implementiert. So gibt es viele kommerziellen Anbieter aber auch Open Source Projekte.
Danke für die Erklärung, da gibt es wirklich eine menge zu lernen und zu wissen, was man aber auch so in keinem Tutorial lernt... Ich komme von der Webentwicklung, beruflich sowohl im Frontend als auch Backend. Da ist das finde ich wesentlich überschaubarer, aber wir haben auch nicht so viel Optionen in Punkto WebSocket - einige gibts, aber nicht so umfangreich, und Nodejs bringt da ne ziemlich High-Level Architektur mit ;D

Ich habe folgende Frage:
Ich habe soeben versucht einen WebSocket Server mit tyrus und Jakarta aufzusetzen. Habe die dependencies über Maven heruntergeladen und in mein Projekt eingebunden. Klappt aber alles nur bedingt, denn wenn ich meinen WebSocket Server starten möchte bekomme ich folgende Fehlermeldung:
"Class EchoEndpoint is not ServerApplicationConfig descendant nor has @ServerEndpoint annotation."
Das ist anstrengend, denn weder die Google-Suche noch irgendwelche Guides und Tutorials geben Aufschluss über die Fehlermeldung. Was ich gefunden habe ist, dass ServerApplicationConfig fehlt und für WebSockets notwendig sind die Programmatic-Basierend entwickelt sind. Annotation-Basierende WebSockets sind von der Pflicht der Anbindung der ServerApplicationConfig ausgenommen - sehr schön!

Die Fehlermeldung verstehe ich folgendermaßen: Er findet weder eine Konfiguration für Programmatic WebSockets noch für Annotation WebSockets.

Aber ich habe hier Annotations für meinen WebSocket Server verwendet. Hier mal die einzelnen Code-Schnippsel:

Java:
import org.glassfish.tyrus.server.Server;

public class ChatWebSocket {

    public static void main(String[] args) throws Exception {
        Server server = new Server("localhost", 8025, "/websockets", null, EchoEndpoint.class);

        try {
            server.start();
            System.out.println("Server started");
            while(true) { }
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        }
    }


}

Java:
import jakarta.websocket.Session;
import jakarta.websocket.OnMessage;
import jakarta.websocket.OnOpen;
import jakarta.websocket.server.ServerEndpoint;

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

    @OnMessage
    public String onMessage(String message, Session session) {
        return message;
    }

    @OnOpen
    public void onOpen() {
        System.out.println("Client has connected");
    }
}

Das klappt nicht! Ich verstehe nicht wieso, ich habe dazu nichts gefunden. Verwende ich hingegen beim Import die packages von Javax und nicht von Jakarta funktioniert alles wie geplant.

Wieso ist das so? Wo habe ich einen Fehler? Was soll ich jetzt hier für eine API verwenden und wieso kann ich die Jakarta WebSocket API nicht verwenden? :/

Besten Dank für all deine und eure Hilfe. Der Start mit Java ist nicht einfach, da war C++ und C# wesentlich angenehmer, gerade was die selbstständige Fehlersuche über Google angeht krieg ich hier nur sehr maue Ergebnisse. Die Doku macht es mir teilweise auch schwer, argh...
 

KonradN

Super-Moderator
Mitarbeiter
Der Start mit Java ist nicht einfach, da war C++ und C# wesentlich angenehmer,
Dazu nur einmal die kurze Anmerkung, dass Du hier nicht Probleme mit Java hast sondern mit Java EE. Das ist also so, als ob Du mit C++ oder C# Probleme mit einer Library hast.... Nutz mal die Workflow Foundation (Gibt es die noch? Oder hat Microsoft die eingestampft? Oder neu gemacht?) Zu .Net 3.51 war das mangelhaft, weil zu viel intern gekapselt war. Bei 4 haben die Entwickler ein AddOn zur automatischen Generierung der Dokumentation genutzt. Also MSDN hat dir zu GetCar() dann "Gets a car." als Doku gegeben was einem sehr geholfen hat ...

Also der Vergleich hinkt etwas. Die Probleme gibt es so bei allen Sprachen und ist nichts, was an Java liegt.

Was die konkreten Probleme angeht:
a) Konfiguration: Java EE und Spring wollen beide eine gewisse Konfiguration. Die muss da sein und kann auf diverse Wege hinzugefügt werden. Hier macht es ggf. Sinn, irgend eine Art Tutorial / Buch heran zu ziehen, die das von Grund auf etwas erläutern. Oder vielleicht auch auch Spring Boot interessant - eine Sache, die Spring Boot macht, ist eben die Einführung von vielen Defaults. Man muss deutlich weniger konfigurieren.

b) javax vs. jakarta - Oracle hat die Weiterentwicklung abgegeben. Nur eben durften gewisse Namen nicht weiter verwendet werden, daher haben sich die Namespaces auch geändert. Die aktuellen java EE Standards nutzen also jakarta und ältere nutzen javax. Du hast Version 1.17 im Einsatz welche die Jakarta Websocket API 1.1.2 implementiert.

Die Jakarta Websocket API 1.1.2 nutzt javax.websocket: https://jakarta.ee/specifications/websocket/1.1/apidocs/
Die Jakarta Websocket API 2.0 nutzt jakarta.websocket: https://jakarta.ee/specifications/websocket/2.0/apidocs/

Dankschreiben diesbezüglich bitte an Oracle. :)
 

HolyFUT

Mitglied
Also der Vergleich hinkt etwas. Die Probleme gibt es so bei allen Sprachen und ist nichts, was an Java liegt.
Moin, danke du hast natürlich recht und ich wollte hier auch niemanden auf die Füße treten damit. Ich wollte nur damit sagen, dass der Start mit C++ und C# mir wesentlich einfacher fiel, aber dass soll keine Wertung über die Fähigkeit Java sein o.Ä.

b) javax vs. jakarta - Oracle hat die Weiterentwicklung abgegeben. Nur eben durften gewisse Namen nicht weiter verwendet werden, daher haben sich die Namespaces auch geändert. Die aktuellen java EE Standards nutzen also jakarta und ältere nutzen javax. Du hast Version 1.17 im Einsatz welche die Jakarta Websocket API 1.1.2 implementiert.
Punktgenau, danke! Da hätte ich auch selber draufkommen müssen, steht ja auch hier: https://eclipse-ee4j.github.io/tyrus/ ;D
 

KonradN

Super-Moderator
Mitarbeiter
Moin, danke du hast natürlich recht und ich wollte hier auch niemanden auf die Füße treten damit. Ich wollte nur damit sagen, dass der Start mit C++ und C# mir wesentlich einfacher fiel, aber dass soll keine Wertung über die Fähigkeit Java sein o.Ä.
Ich denke, Du bist da auch niemandem auf die Füße getreten. Die Meisten hier sind auf vielen Baustellen unterwegs und kennen auch mehr als eine Sprache. Deine Probleme sind auch einfach erklärlich, denn hier im Java EE ist halt alles schön groß und komplex aufgebaut. Das ist genau gegensätzlich zu der Idee bei Microsoft, bei dem man dann einfach eine Library einbezieht a.la. WCF. Von daher kann ich Dich sehr gut verstehen. Auch wenn der Vergleich etwas hinkt :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
O Problem mit SOAP / javax.xml importieren Java Basics - Anfänger-Themen 7
J javax.servlet.ServletException: Name is null Java Basics - Anfänger-Themen 7
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
pkm javax.script.ScriptException bei der ScriptEngine Java Basics - Anfänger-Themen 9
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
R Klassen Javax.vecmath.* Java Basics - Anfänger-Themen 5
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
T eclipse findet javax nicht Java Basics - Anfänger-Themen 4
N Erste Schritte import javax.media.3d....; //Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 10
timbeau Javax.Mail: Check this out Java Basics - Anfänger-Themen 10
c_sidi90 javax.exe beenden nach Programmende Java Basics - Anfänger-Themen 10
L javax.xml.transform.Source Java Basics - Anfänger-Themen 6
StrikeTom Javax.mail frage(zu code) Java Basics - Anfänger-Themen 17
N javax.swing.JOptionPane einbauen? Java Basics - Anfänger-Themen 9
D package javax.comm does not exist Java Basics - Anfänger-Themen 5
kulturfenster Problem mit javax.swing.Timer Java Basics - Anfänger-Themen 2
C javax.print.DocPrintJob Java Basics - Anfänger-Themen 17
G Fehler beim builden javax...... Java Basics - Anfänger-Themen 4
J Servlet Interface javax.servlet.Servlet Java Basics - Anfänger-Themen 2
? Konsolenprogramm hat Problem mit java.awt oder javax.swing Java Basics - Anfänger-Themen 7
G NoClassDefFoundError: javax/xml/stream/XMLStreamException Java Basics - Anfänger-Themen 23
A Finde javax.servlet.* nicht Java Basics - Anfänger-Themen 6
M Fehler: package javax.portlet does not exist Java Basics - Anfänger-Themen 2
V Serialisieren einer ShortMessage (javax.sound.midi) Java Basics - Anfänger-Themen 5
alexpetri javax.xml.stream.* nicht gefunden Java Basics - Anfänger-Themen 3
A java.awt und javax.swing verschwunden Java Basics - Anfänger-Themen 2
S import javax.image.io.*; funktioniert nicht Java Basics - Anfänger-Themen 28
L getDuration() von einem javax.media.player objekt problem. Java Basics - Anfänger-Themen 3
K Problem mit javax/servlet/http/HttpServletRequest.java Java Basics - Anfänger-Themen 2
E Wo bekomme ich das javax.swing.* package her? Java Basics - Anfänger-Themen 3
G import javax.servlet cannot be resolved Java Basics - Anfänger-Themen 1
N Probleme mit import von javax.servlet.* Java Basics - Anfänger-Themen 3
B Wo finde ich die Klasse javax.sound.sampled.AudioSystem Java Basics - Anfänger-Themen 7
R Javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
G wie bekomme ich das javax.jws.* package in den JBuilder ? Java Basics - Anfänger-Themen 7
J javax.comm-API kompilieren Java Basics - Anfänger-Themen 12
C wo ist mein javax.mail? Java Basics - Anfänger-Themen 2
L JavaMail: javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
F javax.imageio.ImageIO write methode Java Basics - Anfänger-Themen 11
B javax entpacken - aber wohin? Java Basics - Anfänger-Themen 2
HolyFUT Best Practice Architektur WebSocket Server Java Basics - Anfänger-Themen 1
Phash Websocket abfragen Java Basics - Anfänger-Themen 1
L Erste Schritte Help with websocket protocol implementation Java Basics - Anfänger-Themen 5
Maxq Klassen Actionen in Button implementieren Java Basics - Anfänger-Themen 6
A LinkedList implementieren Java Basics - Anfänger-Themen 32
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
new_to_coding Rekursive Reihe implementieren Java Basics - Anfänger-Themen 1
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
P9cman Ampel in Java implementieren Java Basics - Anfänger-Themen 3
districon Generics implementieren Java Basics - Anfänger-Themen 2
W UML Diagramm implementieren Java Basics - Anfänger-Themen 2
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
R Taxistand Implementieren Java Basics - Anfänger-Themen 1
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Gaudimagspam BMI in Java implementieren Java Basics - Anfänger-Themen 38
T Methode implementieren Java Basics - Anfänger-Themen 21
R Implementieren einer iterativen und rekursiven Klassenmethode. Java Basics - Anfänger-Themen 1
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
B UML-Klassendiagram get und set implementieren Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
E Klassen implementieren Java Basics - Anfänger-Themen 94
S Tokenizer selbst implementieren Java Basics - Anfänger-Themen 1
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
M WindowStateListener selbst implementieren Java Basics - Anfänger-Themen 8
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
F Kindklassen sollen Ihre Methoden selbst implementieren Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
N Verkettete Liste implementieren Java Basics - Anfänger-Themen 5
N Stacks und Queues Implementieren Java Basics - Anfänger-Themen 2
R Listen richtig implementieren Java Basics - Anfänger-Themen 3
Shizmo Methoden Formel besser implementieren Java Basics - Anfänger-Themen 8
X Polynome implementieren Java Basics - Anfänger-Themen 3
O Methoden implementieren, Sichtbarkeiten, Brüche Java Basics - Anfänger-Themen 104
D Erste Schritte Weitere Befehle implementieren Java Basics - Anfänger-Themen 27
D Erste Schritte Befehl back implementieren Java Basics - Anfänger-Themen 18
B Formel in Java implementieren Java Basics - Anfänger-Themen 4
M Suchbaum implementieren Java Basics - Anfänger-Themen 8
S Implementieren zweier Klassen Java Basics - Anfänger-Themen 5
Hacer Interfaces implementieren Java Basics - Anfänger-Themen 7
C Zyklisch verkette Liste - Pop() methode implementieren Java Basics - Anfänger-Themen 2
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
K Klassen implementieren Java Basics - Anfänger-Themen 7
W Neue Klassenmethode implementieren.. Java Basics - Anfänger-Themen 6
U Datentypen Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 13
C UML Diagramm in Java implementieren-Korrektur Java Basics - Anfänger-Themen 8
T Equal Methode implementieren Java Basics - Anfänger-Themen 22
C ZahlenMuster implementieren Java Basics - Anfänger-Themen 1
C Alte Klausuraufgabe - UML in Java implementieren Java Basics - Anfänger-Themen 1
D Erste Schritte spielfeld als Datenspeicher implementieren Java Basics - Anfänger-Themen 1
D spielfeld als Datenspeicher implementieren Java Basics - Anfänger-Themen 5
J Builder Pattern implementieren Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben