Wie wir von Oracle JDK und Java Web Start zu AdoptOpenJDK und OpenWebStart migriert sind



Schönen Tag.

In diesem Artikel werde ich über die „Modernisierung“ eines Tools wie Java Web Start in dem Unternehmen sprechen, für das ich arbeite, oder vielmehr darüber, es durch eine alternative OpenSource-Lösung zu ersetzen.

Über mich


Mein Name ist Ildar und ich arbeite für ein deutsches Unternehmen, das wie viele deutsche Unternehmen den alten Technologie-Stack verwendet und versucht, auf einen neueren Stack zu migrieren.

Problem


Ich beginne mit einer Beschreibung des Problems. Unser Unternehmen verfügt über den wichtigsten Teil des Systems, bei dem es sich um eine Legacy-Anwendung handelt, die in Java 6 und teilweise in Java 8 geschrieben wurde. Sie wurde in Java 8 gestartet. Um diese Anwendung für die Produktion zu verwenden, laden Benutzer die JNLP-Datei von der Site herunter und führen sie zu Hause aus auf Computern.

Das Unternehmen existierte also lange Zeit glücklich , bis Oracle bekannt gab, dass es die Unterstützung von Version 8 von Java eingestellt hatte, die Java Web Start-Technologie als veraltet markierte und beschloss, sie ab Java 11 auszuschneiden. Dies bedeutete, dass es noch mehr JWS-Anwendungen gibt, von denen es noch viele gibt wird nicht einschließlich Sicherheitsupdates erhalten. Natürlich können sich nur wenige damit abfinden. Auch Gedankenbegeisterte aus Karakun beschlossen, ihren Ersatz für JWS zu schreiben.

In unserem Unternehmen haben sie vor einiger Zeit begonnen, die Anwendung mithilfe von Spring Boot für das Backend und React für das Frontend neu zu schreiben. Der Vorgang ist jedoch nicht schnell und es gibt derzeit keine Updates.

Suche nach einer Lösung


Das Entwicklungsteam stand daher vor der Frage, alternative Lösungen zu finden. Im Allgemeinen ist zu beachten, dass es für das Problem mehr als eine Lösung gibt. Zunächst wählten Architekten zwei GetDown- Lösungen und denselben OpenWebStart . Zum Zeitpunkt der ersten Entscheidung fiel die Wahl auf die erste Option, da OpenWebStart nicht einmal unter der ersten Version veröffentlicht wurde (es gab nur einige Entwicklungen und Pläne).

Jede der Lösungen hatte ihre Vor- und Nachteile, aber das Unternehmen entschied sich, nicht auf die Veröffentlichung von OpenWebStart zu warten und mit der Implementierung eines auf GetDown basierenden Proof of Concept zu beginnen.

Nach einigen Wochen hat einer der Entwickler die Aufgabe bewältigt und festgestellt, dass wir im Prinzip eine Komplettlösung implementieren können, die unseren Anforderungen entspricht, indem wir etwas mehr Zeit aufwenden.

In der Zwischenzeit kamen weitere dringende Aufgaben hinzu und das Entwicklungsteam lenkte vom Übergang von der PoC-Phase zur vollständigen Implementierung des Java Web Start-Ersatzes ab.

Fristen


Alle lebten glücklich, bis das Management erkannte, dass es Zeit war, bereits zu enden und Java Web Start zu ersetzen. Bis zu diesem Moment war ich nicht an diesem Projekt beteiligt, aber hier haben sie mich auch verbunden.
Zuerst habe ich mich entschlossen, wieder nach Informationen zu Lösungen für unser Problem zu suchen. Nehmen wir also an, Sie kommen von Grund auf in die Lösung. So entdeckte ich die Existenz von OpenWebStart. Ich habe es lokal getestet, bin auf einige Probleme gestoßen (dann sind wir auch auf andere gestoßen) und habe sie gelöst. Infolgedessen gefiel allen die Lösung. Das Management mochte es natürlich besonders, weil es keine Zeit für die Entwicklung aufwenden musste, wie es bei GetDown der Fall ist. Aber am Ende haben wir Zeit damit verbracht, unser System mit OpenWebStart zum Laufen zu bringen.

Kurzinfo zu OpenWebStart


OpenWebStart basiert auf einer anderen Implementierung von Java Web Start - IcedTea-Web und der JNLP-Spezifikation JSR-56 . Zum Zeitpunkt des Schreibens ist das Projekt in Version 1.1.4 vorhanden und plant die Implementierung der Hauptfunktionen von Java Web Start (Fortschritte können hier beobachtet werden ).
Ich sehe nicht den Sinn, alle möglichen Einstellungen aufzulisten, es kann sehr lange dauern.

Hier sind nur einige davon:

  • Cache-Verwaltung (Größe, Speicherort ...),
  • Sicherheitseinstellungen (Benutzer können eine Anwendung ausführen, die nicht von Zertifikaten signiert ist, unabhängig davon, ob Warn-Popups angezeigt werden oder nicht ...),
  • Serveradressen zur Whitelist hinzufügen,
  • Remote-Debug-Einstellungen,
  • Verwaltung von Sicherheitszertifikaten
  • JRE / JDK-Versionskontrolle,
  • und andere

Funktionen zur Verwendung von OpenWebStart und die aufgetretenen Probleme


Installieren Sie OpenWebStart


Die Installation von OpenWebStart ist recht einfach. Es reicht aus, die Installationsdatei für Ihre Plattform auf der Website herunterzuladen und den Anweisungen des Installationsprogramms zu folgen.

Aber das ist Pech. In unserem Fall sind die Benutzer ungefähr 10.000 Kunden, für die der Support-Service unseres Unternehmens dieses Tool installieren muss. Die Lösung wurde recht schnell gefunden: Die sogenannte Hintergrundinstallation ist verfügbar.

Sie müssen die Installationsdatei auf jeden Computer hochladen und einen speziellen Befehl ausführen (und dafür verfügt das Unternehmen bereits über ein Tool):

OpenWebStart_windows_Setup.exe -q -varfile response.varfile

Dabei ist response.varfile eine Datei mit einigen Einstellungen, die vom Installationsprogramm im Voraus festgelegt werden können. Zum Beispiel der Ordner, in dem OpenWebStart installiert werden soll, und einige andere.

Nun, wir haben dieses Problem bewältigt. Außerdem müssten alle Clients eine bestimmte Version von AdoptOpenJDK installieren und mit OpenWebStart verknüpfen, was über die Benutzeroberfläche problemlos möglich ist. Dies ist jedoch nicht unser Fall.



Wir haben in den Einstellungen festgestellt, dass Sie die URL angeben können, von der OpenWebStart die Einstellungsdatei übernimmt, in der Sie die URL zu der von uns benötigten JRE angeben können. Und die URL selbst mit der Einstellungsdatei kann in der oben erwähnten response.varfile angegeben werden (so kompliziert ist es).

Die JSON-Einstellungsdatei selbst mit verschiedenen Versionen der JRE lautet wie folgt .

In den Einstellungen können Sie auch die Version und den Hersteller der JRE angeben, falls in der JSON-Datei mehrere JREs angegeben sind. Wir haben nur eine angegeben und die JSON-Datei und das Archiv mit der benötigten JRE auf den Amazon S3-Bucket hochgeladen.

Nach dem Testen haben wir festgestellt, dass die Anwendung mit der von uns heruntergeladenen JRE-Version nicht gestartet wird. Es stellte sich heraus, dass unser Java im Archiv eine etwas andere Struktur aufweist. Wir haben ein Batch-Skript erstellt, das die Struktur des JRE-Archivs neu erstellt.

"Nun, jetzt wird alles gut funktionieren", dachten wir.

Wenn Sie die Anwendung zum ersten Mal starten, wird die JRE automatisch geladen, die in Zukunft verwendet wird. Aber wir warteten auf die nächste Überraschung.

Das Unglück kommt nie allein


Aber wie es normalerweise passiert, waren wir nicht auf ein Problem beschränkt.

Unsere Anwendung hat beispielsweise eine Funktion. Es gibt tatsächlich zwei von ihnen. Eine Anwendung (eine JNLP-Datei) startet eine zweite Anwendung (zweite JNLP). In diesem Fall wurde die zweite Anwendung nicht gestartet. In den Protokollen konnten Sie sehen, dass die Anwendungen im Deadlock stecken bleiben. Aus dem Stealth-Trace wurde deutlich, dass der Grund der interne OpenWebStart-Protokollierungsmechanismus ist.

Das Problem wurde durch Deaktivieren der internen Protokollierung von OpenWebStart behoben. Die Protokolle unserer Anwendungen blieben natürlich erhalten.



Diese Einstellungen wurden auch in der Datei response.varfile deaktiviert, die während der Hintergrundinstallation verwendet wird.

Und jetzt, nachdem wir diese und einige andere Hindernisse überwunden haben (ich muss nicht alle erwähnen), haben wir es geschafft, unsere Anwendung zu starten, die derzeit getestet wird, bevor sie für das Produkt freigegeben wird. Während des Tests wurde die Version von OpenWebStart von 1.1.1 auf 1.1.4 aktualisiert. Von den bemerkenswerten Änderungen wurde die Möglichkeit hinzugefügt, aus der Ferne zu debütieren.



Vielleicht ist mein Artikel für jemanden nützlich, der einen so schwierigen Job wie die Unterstützung älterer Anwendungen hat. Wenn Sie Fragen haben - fragen Sie, ich werde versuchen zu beantworten.

PS Alle Bilder stammen von der offiziellen OpenWebStart- Website .

Source: https://habr.com/ru/post/undefined/


All Articles