Überlegungen zur Ausführung der Java-Version in Production


14

Einige Leute sind auf dem neuesten Stand der Technik - sie aktualisieren den Tag, an dem etwas aktualisiert wird. In der Produktion ist dies nicht angemessen.

Nachforschungen darüber, ob die aktuelle (Java 7) -Version produktionsbereit ist, führen zu einer erheblichen Menge an altem Material, das möglicherweise nicht mehr korrekt ist (zum Zeitpunkt des Schreibens war Java 7 anderthalb Jahre lang nicht verfügbar, was sehr lang zu sein scheint). .

Welche Überlegungen muss ich treffen, um festzustellen, ob ein Upgrade der Produktionsumgebung auf eine spätere Java-Version angemessen ist?


Selbst wenn dies der Fall wäre, müssten alle Bibliotheken / Plug-Ins von Drittanbietern, die in dieser Anwendung verwendet werden (sofern vorhanden), auch mit Java 7 kompatibel sein (riskantes Geschäft).
Arin

2
Ja. Das einzige Problem, auf das ich gestoßen bin, ist, dass ich Java 7 unter Red Hat Enterprise Linux 4 nicht installieren konnte, dass das Betriebssystem jedoch veraltet ist. Ich benutze es jetzt seit ungefähr 6 Monaten in der Produktion, ohne Probleme.
GlenPeterson

@arin: nicht mit Java, nicht wirklich. Es ist in der Regel lächerlich abwärtskompatibel.
Michael Borgwardt

@MichaelBorgwardt Theoretisch stimme ich Ihnen zu, aber in der Testumgebung habe ich festgestellt, dass Bibliotheken von Drittanbietern auch nach dem Aktualisieren auf ein kleines Versions-Upgrade ein fehlerhaftes Verhalten / Abstürze in unserem Testcode verursachen.
Arin

@arin: sicher, es kann passieren. Aber meiner Erfahrung nach ist es so selten, dass es weniger Grund zur Sorge gibt, Java zu aktualisieren, als fast alles andere zu ändern (insbesondere den eigenen Code).
Michael Borgwardt

Antworten:


11

Die erste Frage lautet: "Wird die Java-Version auf dem Computer unterstützt?" Während die Aktualisierung der JRE eine Sache ist, kann es sein, dass das zugrunde liegende Betriebssystem nicht unterstützt wird, wenn die neue Version von Java ausgeführt wird (unterstützte Zertifizierungen und Supportverträge und dergleichen, die viele Unternehmensumgebungen gerne haben).

Viele Java-Produktionsumgebungen werden tatsächlich auf einem Anwendungsserver ausgeführt . Dies wäre die nächste Überlegung. Der Wikipedia-Vergleich von Java EE-App-Servern zeigt, welche Version von Java EE unterstützt wird. Dies ist in der JavaEE-Kompatibilitätsübersicht von Oracle zu sehen . Die getestete Konfiguration für JBoss Enterprise Application Platform 6 ist für Java SE 6.0 Update 6u30. Java SE 6.0 Update 6u30 ist auch die getestete Konfiguration für JBoss Application Server 7.1.0 Final . Diese funktionieren möglicherweise in Java 7, es handelt sich jedoch nicht um getestete Konfigurationen.

Auf dem Anwendungsserver befinden sich Tools zur Live-Code-Analyse , mit denen das Debuggen nachträglich durchgeführt werden kann. Omniscient Debugger (siehe auch) und Dynatrace sind zwei Beispiele dafür. Diese Anwendungen arbeiten, indem sie den Live-Byte-Code von Java instrumentieren (ändern), der ausgeführt wird, um ihm einen Bericht zu erstatten. Da diese Anwendungen durch Ändern des Bytecodes funktionieren, funktionieren sie nicht, wenn sich der Bytecode auf eine Weise ändert, mit der sie nicht arbeiten können (z. B. in einer neuen JRE).

Als nächstes folgen die Frameworks . Ein Beispiel hierfür ist JAXB, das mit Java geliefert wird, und Spring, das es verwendet. Durch die Umstellung auf Java 7 wurde JAXB aktualisiert, wodurch Code generiert wurde, der mit einigen Frameworks nicht kompatibel war (für den eine Aktualisierung erforderlich ist und deren Abhängigkeiten aktualisiert werden müssten ...).

Als nächstes stehen Build-Tools auf der Liste. Man müsste sicherstellen, dass die Build-Umgebung die richtige Version von Java verwendet. Das Schreiben von Code für Java 7, jedoch nicht das Aktualisieren der von Maven oder Ant verwendeten Version, würde dann Probleme verursachen. Es gibt Zeiten, in denen die Build-Tools selbst stark an eine Version mit bestimmten Plugins gebunden sind.

Werkzeuge testen . Dinge wie PMD, Findbugs und Checkstyle erkennen möglicherweise keine neuen Strukturen in einer neuen Java-Version - diese werden möglicherweise sehr verwirrt mit Anweisungen für Zeichenfolgenwechsel oder zusammengesetzten Abfragen. Tools, die sich mit Instrumenten wie der Codeabdeckung befassen, funktionieren in der neuen JVM möglicherweise nicht. Im Kontext von Java 7 wurden Cobertura und Emma nicht auf die neue JRE aktualisiert (diese Anwendungen ändern wiederum den Bytecode, um zu sehen, welcher Code ausgeführt wird und welcher nicht) (siehe Open Source Code Coverage-Bibliotheken für jdk7 ). Dies kann eine Änderung der Build-Skripte erforderlich machen, um von einem zum anderen zu wechseln.

Dann ist da noch die IDE . Man müsste die IDE auf eine Version aktualisieren, die die neuen Strukturen in der Sprache kennt. Die Ankündigung von Eclipse, Java 7 zu unterstützen, zeigt diese Probleme.

Last and not least ist der Entwickler . Es ist Sache des Entwicklers, den neuen Code zu schreiben und sich darüber im Klaren zu sein, wie Code umstrukturiert werden kann. Von Java 1.4 bis 1.5 wurden Vorlagen und Anmerkungen eingeführt, und die Entwickler brauchten einige Zeit, um sich mit den neuen Strukturen vertraut zu machen. Ebenso wurden die Sammlungen in 1.2 überarbeitet und Entwickler von der Verwendung von HashTable und Vector abgehalten. Die Aktualisierung der Version sollte mit einigen Schulungen in den neuen Sprachstrukturen einhergehen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.