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
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?
Über einen Applicationserver, auch wenn ich nicht wirklich weiß was der Unterschied ist und bis jetzt wusste ich nicht dass es da einen Unterschied gibt...
Danke für die Info, was ist Maven und wofür wird es verwendet? Zumindest das was ich an Docus und Tutorials gefunden habe war, dass teilweise Begriffe wie Maven wahllos ohne Context hin und her geworfen werden. Echt frustrierend
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?
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:
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.
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.
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
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:
importorg.glassfish.tyrus.server.Server;publicclassChatWebSocket{publicstaticvoidmain(String[] args)throwsException{Server server =newServer("localhost",8025,"/websockets",null,EchoEndpoint.class);try{
server.start();System.out.println("Server started");while(true){}}catch(Exception e){thrownewException(e.getMessage());}}}
Java:
importjakarta.websocket.Session;importjakarta.websocket.OnMessage;importjakarta.websocket.OnOpen;importjakarta.websocket.server.ServerEndpoint;@ServerEndpoint("/echo")publicclassEchoEndpoint{@OnMessagepublicStringonMessage(String message,Session session){return message;}@OnOpenpublicvoidonOpen(){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...
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.
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.
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