Alles frisch macht der Frühling

JEP 373: Überarbeitung des DatagramSocket APIs
Keine Kommentare

„Ohne Fleiß kein Preis“ hieß es für Java 15 bei den Java-Entwicklern: Die Überarbeitung des DatagramSocket APIs wurde folgerichtig in den Stand eines offiziellen JEPs erhoben: JEP 373. In diesem wird vorgeschlagen, das API im Hinblick auf Aktualität und Wartbarkeit auf Vordermann zu bringen – ohne dabei die Rückwärtskompatibilität aus den Augen zu verlieren…

Via JEP 353 wurde bereits damit begonnen, veraltete Java-Schnittstellen zu überarbeiten und neu zu implementieren. Während es allerdings in JEP 353 um das Socket API ging (java.net.Socket und java.net.ServerSocket), soll Project Loom unternommen.

DatagramSocket API: Aus alt mach neu

Ein großes Problem – wie dies auch bereits bei JEP 353 der Fall war – stellt die Tatsache dar, dass die Implementierungen der APIs java.net.DatagramSocket und java.net.MulticastSocket bereits seit JDK 1.0 Teil von Java und eine Mixtur aus veraltetem Java- und C-Code sind. Laut JEP 373 ist besonders die Implementierung des MulticastSocket problematisch, da es aus einer Zeit vor IPv6 stammt. Davon abgesehen gibt es auch in Sachen Nebenläufigkeit etliche Stellschrauben, an denen gedreht werden muss, was eine Überarbeitung und Neu-Implementierung nötig macht.

Anders als bei JEP 353 wird allerdings nicht in Betracht gezogen, einfach einen Ersatz für DatagramSocketImpl bereitzustellen. Stattdessen soll DatagramSocket intern eine neue Instanz seiner selbst wrappen und sämtliche Aufrufe direkt an diese delegieren. Die so gewrappte Instanz ist entweder die neue Implementierung (ein Socket-Adapter der aus einem NIO-basierten DatagramChannel::socket erstellt wurde) oder ein Klon der veralteten DatagramSocket-Klasse, die dann an die veraltete Implementierung DatagramSocketImpl delegiert. Wie genau das funktionieren soll, zeigt das folgende Diagramm.

DatagramSocket

Quelle: Oracle

Man sich in Bezug auf den DatagramSocket entschieden, nicht gleich Nägel mit Köpfen zu machen: Im JEP 373 heißt es zwar, dass die veralteten Implementierungen wohl in einem der kommenden Releases als deprecated markiert und schließlich in mittelfristiger Zukunft entfernt werden sollen, aber vorerst gibt es sowohl die neue (NIO-basierte) und die herkömmliche Implementierung. Standardmäßig soll aber die neue Implementierung aktiviert sein.

Weitere Informationen und Details zu JEP 373 gibt es in der umfangreichen Beschreibung des Vorschlags auf der OpenJDK-Homepage.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -