Considérations sur la version Java à exécuter dans Production

14

Certaines personnes sont à la pointe des technologies - mettant à jour le jour où quelque chose est mis à jour. En production, ce n'est pas aussi approprié.

Rechercher si la version actuelle (Java 7) est prête pour la production produit une quantité importante de matériel ancien qui pourrait ne plus être correct (au moment de la rédaction de cet article, Java 7 est sorti depuis un an et demi, ce qui semble bien long) .

Quelles considérations dois-je prendre pour déterminer s'il est approprié de mettre à niveau l'environnement de production vers une version ultérieure de Java?

JohnDoDo
la source
Même si c'était le cas, toute bibliothèque / plug-in tiers utilisé (le cas échéant) dans ladite application devrait également être OK avec Java 7 (entreprise risquée).
arin
2
Oui. Le seul problème que j'ai rencontré est que je ne pouvais pas installer Java 7 sur Red Hat Enterprise Linux 4, mais alors, ce système d'exploitation est obsolète. Je l'utilise en production partout ailleurs depuis environ 6 mois maintenant sans accroc.
GlenPeterson
@arin: pas avec Java, pas vraiment. Il a tendance à être ridiculement compatible vers le bas.
Michael Borgwardt
@MichaelBorgwardt en théorie, je suis d'accord avec vous, mais dans un environnement de test, j'ai vu des bibliothèques tierces provoquer un comportement erratique / des plantages dans notre code de test même après la mise à jour vers une petite mise à niveau de version.
arin
@arin: bien sûr, cela peut arriver. Mais d'après mon expérience, c'est tellement rare qu'il y a moins de raisons d'avoir peur de mettre à jour Java que de changer presque n'importe quoi d'autre (en particulier son propre code).
Michael Borgwardt

Réponses:

11

La première question à se poser est "La version de Java est-elle prise en charge sur la machine?" Bien que la mise à jour du JRE soit une chose, il se peut que le système d'exploitation sous-jacent ne soit pas pris en charge lors de l'exécution de la nouvelle version de Java (certifications prises en charge et contrats de support, etc., que de nombreux environnements d'entreprise aiment avoir).

De nombreux environnements de production Java s'exécutent en fait sur un serveur d'applications . Ce serait la prochaine considération. La comparaison Wikipedia de Java EE App Servers montre quelle version de Java EE est prise en charge. Cela peut être vu plus en détail dans la vue d'ensemble de la compatibilité JavaEE d'Oracle . La configuration testée pour JBoss Enterprise Application Platform 6 est contre Java SE 6.0 mise à jour 6u30. La mise à jour 6u30 de Java SE 6.0 est également la configuration testée pour JBoss Application Server 7.1.0 Final . Ceux-ci peuvent fonctionner dans Java 7, mais ce ne sont pas des configurations testées.

En se développant sur le serveur d'applications, il existe des outils d' analyse de code en direct qui sont utilisés pour déboguer après coup. Le débogueur omniscient (voir aussi) et Dynatrace en sont deux exemples. Ces applications fonctionnent en instrumentant (modifiant) le code d'octets en direct de java en cours d'exécution pour lui faire rapport. Comme ces applications fonctionnent en modifiant le code d'octet, si le code d'octet change d'une manière avec laquelle elles ne sont pas capables de fonctionner (comme dans un nouveau JRE), elles ne fonctionneront pas.

Ensuite, les cadres . Un exemple de ceci est JAXB qui vient avec Java et Spring qui l'utilise. Le passage à Java 7 a mis à jour JAXB qui a généré du code incompatible avec certains frameworks (ce qui nécessite leur mise à jour et leurs dépendances doivent être mises à jour ...).

Les outils de construction sont les prochains sur la liste. Il faudrait s'assurer que l'environnement de build utilise la bonne version de Java. L'écriture de code pour Java 7 mais pas la mise à jour de la version utilisée par Maven ou Ant entraînerait alors des problèmes. Il y a des moments où les outils de construction eux-mêmes sont fortement liés à une version avec des plugins particuliers.

Outils de test . Des choses telles que PMD, findbugs et checkstyle peuvent ne pas reconnaître de nouvelles structures dans une nouvelle version de Java - celles-ci peuvent être très confondues avec les instructions de changement de chaîne ou les captures composées. Les outils qui entrent dans l'instrumentation tels que la couverture de code peuvent ne pas fonctionner dans la nouvelle JVM. Dans le contexte de Java 7, Cobertura et Emma n'ont pas été mis à jour vers le nouveau JRE (encore une fois, ces applications modifient le code d'octet pour voir quel code est exécuté et lequel ne l'est pas) (voir les bibliothèques de couverture de code open source pour jdk7 ). Cela pourrait nécessiter une modification des scripts de génération pour passer de l'un à l'autre.

Ensuite, il y a l' IDE . Il faudrait mettre à jour l'IDE vers une version consciente des nouvelles structures du langage. L' annonce par Eclipse de la prise en charge de Java 7 montre ces problèmes.

Le dernier et certainement pas le moindre est le développeur . Il appartient au développeur d'écrire le nouveau code et de savoir comment le code peut être restructuré. En passant de Java 1.4 à 1.5, des modèles et des annotations ont été introduits et il a fallu du temps aux développeurs pour se familiariser avec les nouvelles structures disponibles. De même, les collections sont retravaillées en 1.2 et éloignent les développeurs de l'utilisation de HashTable et Vector. La mise à jour de la version devrait s'accompagner d'une certaine formation aux nouvelles structures linguistiques.

Communauté
la source