Comment nous avons migré d'Oracle JDK et Java Web Start vers AdoptOpenJDK et OpenWebStart



Bonne journée.

Dans cet article, je parlerai de la «modernisation» dans l'entreprise pour laquelle je travaille d'un outil tel que Java Web Start, ou plutôt, de le remplacer par une solution open source alternative.

À propos de moi


Je m'appelle Ildar et je travaille pour une entreprise allemande qui, comme de nombreuses entreprises allemandes, utilise l'ancienne pile technologique et essaie de migrer vers une pile plus récente.

Problème


Je vais commencer par une description du problème. Notre entreprise possède la partie la plus importante du système, qui est une application héritée écrite en java 6 et partiellement en java 8. Elle a été lancée en java 8. Pour utiliser cette application pour la production, les utilisateurs téléchargent le fichier jnlp à partir du site et l'exécutent à la maison sur les ordinateurs.

La société existait donc heureusement depuis longtemps , jusqu'à ce qu'Oracle annonce qu'il a cessé de prendre en charge la version 8 de java, a déclaré la technologie Java Web Start comme déconseillée, et a décidé de la supprimer à partir de java 11. Cela signifiait qu'il y avait encore plus d'applications JWS, dont il y en a encore beaucoup ne recevra pas les mises à jour de sécurité incluses. Bien sûr, peu de gens peuvent accepter cela. Les amateurs de Karakun ont également décidé d'écrire leur remplaçant pour JWS.

Dans notre entreprise, il y a quelque temps, ils ont commencé à réécrire l'application en utilisant Spring boot pour le backend et React pour le frontend, mais le processus n'est pas rapide et il n'y a pas de mises à jour maintenant.

Rechercher une solution


L'équipe de développement a donc été confrontée à la question de trouver des solutions alternatives. En général, il convient de reconnaître qu'il existe plusieurs solutions au problème. Initialement, les architectes ont sélectionné deux solutions GetDown et le même OpenWebStart . Au moment de la décision initiale, le choix s'est porté sur la première option, car OpenWebStart n'était même pas sorti sous la première version (il n'y avait que quelques développements et plans).

Chacune des solutions avait ses avantages et ses inconvénients, mais la société a décidé de ne pas attendre la sortie d'OpenWebStart et de commencer à mettre en œuvre la preuve de concept basée sur GetDown.

Après avoir passé quelques semaines, l'un des développeurs a fait face à la tâche et nous avons réalisé qu'en principe, nous pouvons mettre en œuvre une solution complète qui satisfait nos besoins en passant un peu plus de temps.

Entre-temps, d'autres tâches urgentes sont arrivées et l'équipe de développement a été distraite de la transition de l'étape PoC à la mise en œuvre complète du remplacement de Java Web Start.

Délais


Tout le monde a vécu heureux jusqu'à ce que la direction se rende compte qu'il était déjà temps de se terminer et avec le remplacement de Java Web Start. Jusqu'à ce moment, je n'étais pas impliqué dans ce projet, mais ici, ils m'ont aussi connecté.
Tout d'abord, j'ai décidé de chercher à nouveau des informations sur les solutions à notre problème. Disons donc entrer dans la solution à partir de zéro. Ainsi, j'ai découvert l'existence d'OpenWebStart. Je l'ai testé localement, j'ai rencontré des problèmes (puis nous en avons rencontré d'autres également) et les ai résolus. En conséquence, tout le monde a aimé la solution. Inutile de dire que la direction l'a particulièrement apprécié car elle n'aurait pas à consacrer de temps au développement, comme c'est le cas avec GetDown. Mais à la fin, nous avons passé du temps à faire fonctionner notre système avec OpenWebStart.

Informations rapides sur OpenWebStart


OpenWebStart est basé sur une autre implémentation de Java Web Start - IcedTea-Web et la spécification JNLP JSR-56 . Au moment de la rédaction, le projet existe dans la version 1.1.4 et prévoit de mettre en œuvre les principales fonctionnalités de Java Web Start (des progrès peuvent être observés ici ).
Je ne vois pas l'intérêt de lister tous les paramètres possibles, cela peut prendre très longtemps.

Voici quelques-uns d'entre eux:

  • gestion du cache (taille, emplacement ...),
  • paramètres de sécurité (permettant aux utilisateurs d'exécuter une application non signée par des certificats, d'afficher ou non des popups d'avertissement ...),
  • ajouter des adresses de serveurs à la liste blanche,
  • paramètres de débogage à distance,
  • gestion des certificats de sécurité
  • Contrôle de version JRE / JDK,
  • autre

Caractéristiques de l'utilisation d'OpenWebStart et problèmes rencontrés


Installez OpenWebStart


L'installation d'OpenWebStart est assez simple. Il suffit de télécharger le fichier d'installation de votre plateforme sur le site et de suivre les instructions de l'installateur.

Mais c'est pas de chance. Dans notre cas, les utilisateurs sont environ 10 000 clients, pour chacun desquels le service d'assistance de notre entreprise doit installer cet outil. La solution a été trouvée assez rapidement: l'installation dite en arrière-plan est disponible.

Vous devez télécharger le fichier d'installation sur chacun des ordinateurs et exécuter une commande spéciale (et pour cela, l'entreprise dispose déjà d'un outil):

OpenWebStart_windows_Setup.exe -q -varfile response.varfile

, où response.varfile est un fichier avec certains paramètres qui peuvent être définis à l'avance par le programme d'installation. Par exemple, le dossier dans lequel installer OpenWebStart et quelques autres.

Eh bien, nous avons fait face à ce problème. De plus, il serait nécessaire que tous les clients installent en quelque sorte une version spécifique d'AdoptOpenJDK et les lient à OpenWebStart, ce qui se fait facilement via l'interface utilisateur, mais ce n'est pas notre cas.



Nous avons trouvé dans les paramètres que vous pouvez spécifier l'URL à partir de laquelle OpenWebStart prendra le fichier de paramètres, dans lequel vous pouvez spécifier l'URL du JRE dont nous avons besoin. Et l'URL elle-même avec le fichier de paramètres peut être spécifiée dans le fichier response.varfile mentionné ci-dessus (c'est compliqué).

Le fichier de paramètres JSON lui-même avec différentes versions de JRE est le suivant .

Dans les paramètres, vous pouvez également spécifier la version et le fournisseur du JRE, au cas où plusieurs JRE sont spécifiés dans le fichier JSON. Nous en avons indiqué un seul et avons téléchargé le fichier JSON et l'archive avec le JRE dont nous avons besoin sur le compartiment Amazon S3.

Après les tests, nous avons constaté qu'avec la version JRE que nous avons téléchargée, l'application ne démarre pas ... Il s'est avéré que notre Java a une structure légèrement différente dans l'archive. Nous avons créé un script batch qui a reconstruit la structure de l'archive JRE.

«Eh bien, maintenant tout va bien fonctionner», nous avons pensé.

Lorsque vous démarrez l'application pour la première fois, le JRE est automatiquement chargé, qui sera utilisé à l'avenir. Mais nous attendions la prochaine surprise.

Le malheur ne vient jamais seul


Mais comme cela arrive habituellement, nous ne nous sommes pas limités à un seul problème.

Notre application a, disons, une fonctionnalité. Il y en a en fait deux. Une application (un fichier jnlp) démarre une deuxième application (second jnlp). Et dans ce cas, la deuxième application n'a pas démarré. Dans les journaux, vous pouvez voir que les applications sont bloquées dans l'impasse. De la trace furtive, il est devenu clair que la raison en est le mécanisme de journalisation interne d'OpenWebStart.

Le problème a été résolu en désactivant la journalisation interne d'OpenWebStart. Bien entendu, les journaux de nos applications sont restés.



Ces paramètres ont également été désactivés dans le fichier response.varfile, qui est utilisé lors de l'installation en arrière-plan.

Et maintenant, après avoir surmonté ces obstacles et quelques autres (je n'ai pas besoin de mentionner tout le monde déjà), nous avons réussi à lancer notre application, qui est actuellement en cours de test avant d'être publiée sur le prod. Comme nous l'avons testé, la version d'OpenWebStart est passée de 1.1.1 à 1.1.4. Parmi les changements notables a été ajoutée la possibilité de débuter à distance.



Peut-être que mon article sera utile à quelqu'un dans un travail aussi difficile que le support des applications héritées. Si vous avez des questions - demandez, je vais essayer de répondre.

PS toutes les images sont extraites du site officiel d' OpenWebStart .

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


All Articles