2017-08-15 4 views
0

Die Art und Weise WebSockets in Tomcat zu implementieren geändert zwischen Version 7 und Version 8Websockets für Tomcat 7 und 8

Tomcat 7:

public class ChatWebSocketServlet extends WebSocketServlet { ... } 

Tomcat 8:

@ServerEndpoint(value = "/chat") 
public class ChatAnnotation { ... } 

Was ich Ich möchte wissen, ob es möglich ist, beide Versionen in einer einzigen Anwendung zu erstellen. Ich habe bereits versucht

@ServerEndpoint(value = "/chat") 
public class ChatServlet extends WebSocketServlet { ... } 

aber es kompiliert nie gegen sowohl websocket-api.jar und catalina.jar. Ich denke, es ist möglich, zu überprüfen, ob eine Klasse definiert ist und die eine oder andere zur Laufzeit zu verwenden, aber ich bin mir nicht sicher, wie ich das genau umsetzen soll oder ob es eine gute Idee ist.

Ich könnte das websocket-api.jar in das Endprodukt verpacken, aber würde das Probleme bei der Bereitstellung auf Tomcat 7 verursachen?

Antwort

1

Von Tomcat 7undTomcat 8 Dokumentation

Anwendungsentwicklung

Tomcat implementiert die Java WebSocket 1.1 API von JSR-356 definiert.

Von Tomcat 7 Dokumentation:

Veraltete proprietäre API

Vor der Entwicklung von JRS-356, bereitgestellt Tomcat einen proprietären WebSocket-API. Diese API wurde in Tomcat 7 als veraltet eingestuft und in Tomcat 8 als entfernt. Es ist unwahrscheinlich, dass diese proprietäre API außer Fehlerbehebungen noch weiterentwickelt.

Informationen zu dieser API finden Sie in der Javadoc-Datei zum org.apache.catalina.websocket-Paket. Die Javadoc-Seiten sind nicht mit in Tomcat-Binärdistributionen enthalten. Um sie lokal zu sehen, müssen Sie herunterladen und installieren "Vollständige Dokumentation" Verteilung, oder bauen Sie es aus Quellen. Sie können dies auch auf der Apache Tomcat Website nachlesen. Beginnen Sie mit der Klasse .

Ich bezweifle, dass Sie beide Implementierungen zur gleichen Zeit verwenden können, aber nach der Dokumentation, die Sie sollten kein Problem mit JSR-356 spezifischen Implementierungen laufen auf beiden Versionen haben. Bleiben Sie einfach weg von der proprietären Implementierung.

Da die erste Version von Tomcat 7 in 2010/2011 veröffentlicht wurde, aber JSR-356 wurde erstmals im Jahr 2013 veröffentlicht, gibt es alte Versionen, die nicht die Standard-Websocket-Implementierung haben, und ich überlasse es Ihnen zu herauszufinden, in welcher Version die JSR-356-Implementierung zuerst enthalten war. Aufgrund von Bugfixes, einschließlich sicherheitsrelevanter Fehler, sollte es jedoch einfach sein, nur die neueste Version von Tomcat 7 zu unterstützen. Machen Sie sich keine Sorgen über diejenigen, die ihre Serversoftware seit mehreren Jahren nicht aktualisieren.

+0

Das war richtig. Das Demo-Tomcat 7-System, mit dem ich arbeitete, war mit 7,0 kritisch.39, was mich zu der Schlussfolgerung brachte, dass Sie in Tomcat 7 keine Anmerkungen verwenden konnten. Aber Sie können und ich stimme zu, dass es nicht zu viel ist, nach der neuesten Version einer Version zu fragen. –

Verwandte Themen