私はサーバーを持っています-Java1.3で実行されるクライアントアプリケーション。私は段階的にJava1.6に変更したいのですが、残りのクライアントよりも最初の数クライアント、そして最後にサーバーを意味します...発生する可能性のあるいくつかの一般的な問題に私を導き、何をすべきか疑問に思いました。
6 に答える
Sun は高いレベルの下位互換性を維持しようとしているため、新しい JVM をインストールして、それを使用してアプリケーションを再起動するだけで済みます。
Java 1.6 と以前のバージョンとの下位互換性について説明しているドキュメントは、こちらです。このドキュメントは、Java 1.5とJava 1.4の互換性ドキュメントにもリンクしています。おそらく、このドキュメントを読んで、起こりうる落とし穴について学びたいと思うでしょう。
Java 1.5 およびJava 1.6では、新しいクラス ファイル形式が導入されました。JVM は古いクラス ファイルも実行しますが、特に JDK 1.6 を使用してコードを再コンパイルすると、新しい JVM がいくつかの変更を利用してアプリケーションを高速化するのに役立ちます。したがって、再コンパイルを検討してください。
さらに、いくつかの新しいキーワードが導入されました。つまり、assert (1.4) と enum (1.5) (Yuval が既に述べたように) です。これらの単語を識別子として使用すると、再コンパイルは失敗しますが、古いクラス ファイルは機能します。-source
javac にスイッチを指定してコンパイルさせることがjavac -source 1.3
できます。
Sunは、Javaの新しいバージョンごとに導入される非互換性のリストを保持しています。
1.4.2の最後のドキュメントには、JDK1.0に戻る互換性に関する注意事項へのリンクがあります。
頭のてっぺんから、名前enum
とassert
フィールドとローカル変数を探します... これらの単語は、Java 1.4 および 5 のキーワードになりました。Java 6 コンパイラは、それらを見つけた場合、コンパイル エラーとしてマークします。
ユヴァル=8-)
一般に、Sun の JVM の下位互換性は非常に優れていますが、完全ではありません。私は 3 つの非常に大きなアプリケーションが 1.3 から 1.5 に移行し、少数の問題しか発生しないのを見てきました。そのうちの最大のものは、1 つの Swing マスクが無限のイベント処理ループに入り、1.4 未満でアプリがフリーズすることでした。
サーバー部分が問題を引き起こす可能性は低いですが、特に 1.3 と 1.4 の間で、Swing の内部でかなり大きな変更がありました。たとえば、フォーカス サブシステムが完全に書き直されました。
アプリが問題なく動作する可能性はまだありますが、徹底的なテストを行う必要があります。
私が取り組んでいた小さなアプレットで 1.4.2 から 1.5 に移行したとき、多くのことが壊れました: 画面の更新がすべて不安定になったり、要素が移動したりしました。
Sun の JRE は、すべての下位互換性を維持しているわけではありません。アイテムが廃止されると、非常に短期間で完全になくなることがあります。
Sun のライブラリも使用して、「ストック」Java ですべてを作成しました。
また、純粋な Java で記述されたアプリケーションが、同じバージョンの JRE の 1 つまたは 2 つのプラットフォームで問題なく動作するのを見てきました (私が使用している製品は、Windows ではうまく動作し、Mac OS X でも問題なく動作します。 Linux ではまともですが、Solaris では失敗します - すべて同じ JRE を使用します)。
アプリケーションが非常に小さい場合を除き、バージョンの移動は簡単な手順ではありません。
私の経験では、互換性はかなり高いです。現在のバージョンで実行できなかったアプリを1つだけ見つけました。何らかの理由で(ソースがないので、私はそれを掘り下げませんでした)、1つのアプリは1.4.2以外では実行されませんでした。私がこれまで扱ってきた他のすべて(それらのいくつかはかなり大きい)は、1.6まで問題なく到達しました。変更は必要ありません。
もちろんYMMVなので、試してみる必要があります...