2008-11-04 13 views
7

Ich habe eine Server - Client-Anwendung, die auf Java 1.3 ausgeführt wird; Ich möchte Schritt für Schritt zu Java 1.6 wechseln, also die ersten Clients, dann den Rest der Clients und schließlich den Server ... Ich frage mich, ob Sie mich auf einige allgemeine Probleme hinweisen können, die mitkommen können und worauf sollte ich achten?Ändern der Java-Version

Antwort

11

Sun versucht, ein hohes Maß an Abwärtskompatibilität zu halten, so dass Sie möglicherweise einfach die neue JVM installieren und starten Sie Ihre Anwendung mit ihm.

Ein Dokument, das die Rückwärtsinkompatibilität von Java 1.6 mit einer früheren Version beschreibt, ist here. Dieses Dokument verknüpft auch die Kompatibilitätsdokumente für Java 1.5 und Java 1.4. Wahrscheinlich möchten Sie diese Dokumente lesen, um sich über mögliche Fallstricke zu informieren.

Java 1.5 und Java 1.6 führten neue Klassen-Dateiformate ein. Die JVMs werden die alten Klassendateien ebenfalls ausführen, aber das erneute Kompilieren Ihres Codes - insbesondere mit JDK 1.6 - wird der neuen JVM helfen, einige Änderungen zu nutzen, um Ihre Anwendung schneller zu machen. Sie könnten also eine Neukompilierung in Betracht ziehen.

Zusätzlich wurden einige neue Schlüsselwörter eingeführt, nämlich assert (in 1.4) und enum (in 1.5) (wie bereits von Yuval erwähnt). Wenn Sie diese Wörter als Bezeichner verwenden, schlägt eine Neukompilierung fehl, aber die alten Klassendateien funktionieren. Sie können den Schalter -source an javac übergeben, um es kompilieren zu lassen: 'javac -source 1.3' kompiliert den Code ohne assert und enum als Schlüsselwort.

4

Aus dem Kopf, suchen Sie nach den Namen enum und assert in Feldern und lokalen Variablen ... Diese Wörter wurden Schlüsselwörter in Java 1.4 und 5. Der Java 6 Compiler wird sie als Kompilierungsfehler markieren, wenn es sieht Sie.

Yuval = 8-)

2

Wenn ich von 1.4.2 bis 1,5 auf ein kleines Applet zog ich gearbeitet, viele Dinge brach: screen refresh haben alle wackelig, Elemente bewegt usw.

Suns JRE behält nicht die Abwärtskompatibilität für alles. Manchmal, wenn Elemente veraltet sind, gehen sie nach einer sehr kurzen Zeit vollständig verloren.

Wir haben alles mit "stock" Java geschrieben, auch mit Suns Bibliotheken.

Ich habe auch mehrere Anwendungen in reinem Java geschrieben geschrieben, die auf einer oder zwei Plattformen in der gleichen Version der JRE funktionieren auf anderen mit dieser Version (das Produkt, mit dem ich arbeite jetzt funktioniert gut unter Windows, ok auf Mac OS X, anständig unter Linux, aber unter Solaris - alle mit der gleichen JRE.

Verschieben von Versionen ist kein einfacher Schritt, es sei denn, die Anwendung ist wirklich klein.

+3

Nach meiner Erfahrung entstehen Bildschirmaktualisierungsprobleme zwischen Versionen in der Regel aus Missbrauch von Swing-APIs, die nie garantiert funktionieren. Es gibt jedoch Ausnahmen von dieser Erfahrung. :) – jsight

+3

Ich habe noch nie von einer veralteten Methode gehört, die tatsächlich entfernt wird. Einige veraltete Methoden aus 1.0.x sind immer noch in Java 6. Können Sie Beispiele nennen? –

+0

an dieser Stelle, nicht von der Spitze meines Kopfes - Ich habe nicht Java seit 1.4.2 berührt, aber es gab definitiv einige Probleme mit dem Versuch, 1.2-Ära Anrufe in 1.4.2 zu verwenden – warren

0

Meine Erfahrung ist, dass die Kompatibilität ziemlich hoch ist. Ich habe nur eine App gefunden, die ich nicht auf einer aktuellen Version ausführen konnte. Aus welchem ​​Grund auch immer (ich hatte keine Quelle, also habe ich mich nicht damit beschäftigt), dass eine App nur auf 1.4.2 laufen würde. Alles andere, mit dem ich jemals zu tun hatte (einige von ihnen ziemlich groß), sind bis 1.6 gut gegangen. Keine Änderungen erforderlich.

YMMV natürlich, so dass Sie es versuchen müssen, werden Sie und sehen ...

3

die Abwärtskompatibilität von Suns JVMs Im Allgemeinen ist sehr gut, aber nicht perfekt. Ich habe gesehen, wie drei sehr große Anwendungen von 1.3 auf 1.5 migriert sind und nur eine kleine Anzahl von Problemen auftreten. Die größte davon war eine Swing-Maske, die in eine endlose Event-Handling-Schleife ging und die App einfror Es ist unwahrscheinlich, dass ein Teil Probleme verursacht, aber es gab ziemlich große Änderungen unter Swing, vor allem zwischen 1.3 und 1.4 - das Fokus-Subsystem wurde zum Beispiel komplett neu geschrieben.

Es ist immer noch möglich, dass die App ohne Probleme läuft, aber Sie sollten auf jeden Fall umfangreiche Tests durchführen.