この製品バージョンは、Java 2 Standard Edition (J2SE) 5 仕様をサポートします。
その Java 仮想マシンは、Java 言語コンパイラーや実行環境を提供します。新規および既存のアプリケーション
が J2SE 5 によって提供される機能を利用するかどうかを判別し、必要に応じて JIT モードを調整し、非推奨機能からの移行
を開始します。
このタスクについて
J2SE 5 の概要については、Sun サイト
http://java.sun.com/developer/technicalArticles/releases/j2se15/ の『J2SE 5 in a Nutshell』を参照してください。J2SE 5 では以下の JSR が追加されました。
- JSR 003: JMX 1.2 仕様。パッケージ: javax.management.*
- JSR 013: BigDecimal を使用した、算術演算の改良のための java.math への付加物
- JSR 028: Java SASL パッケージ: javax.security.sasl
- JSR 114: rowset をより完全に指定する JDBC Rowset の実装
- JSR 133: Java メモリー・モデルおよびスレッド仕様の改訂
- JSR 160: JMX リモート API、V1.0
- JSR 163: Java プラットフォーム・プロファイル・アーキテクチャー、JVMTI (JVMPI を置換)
- JSR 166: 並行性ユーティリティー。パッケージ: java.util.concurrent.*
- JSR 174: Java 仮想マシンのモニターおよび管理仕様
- JSR 175: Java プログラミング言語用のメタデータ・ファシリティー
- JSR 200: Java アーカイブのネットワーク転送フォーマット
- JSR 201: 列挙型、Autoboxing、ループの拡張、および静的インポートによる、
Java プログラミング言語の拡張
- JSR 206: Java API for XML Processing (JAXP) 1.3
- JSR 204: ユニコード補足文字のサポート
仮想マシン仕様には、generics、プリミティブの auto-boxing、
アノテーション (コード生成のための API ドキュメンテーション・メタデータ)、および列挙型のサポートなどの、
アプリケーション開発者を援助するいくつかのフィーチャーおよび機能が提供されています。これにより、
開発が迅速で簡単になり、エラーが少なくなります。例えば、generics ベースのコンテナーでは、
誤った割り当てやキャストをコンパイル時にキャッチできるため、generics を使用すると、
ClassCastExceptions に関する問題を vector などの項目から除去することができます。(C++ 言語に詳しい開発者は、
generics を、C++ テンプレートに類似した新規 Java 言語機能と考えることができます。)
Java Monitoring and Management Console (JConsole) は Sun Java Development Kit (JDK) バージョン 5 の一部です。
この JDK は Sun Solaris オペレーティング・システム用の WebSphere Application Server バージョン 6.1 に同梱ですが、WebSphere Application Server
は JConsole ツールをサポートしません。
仕様について詳しくは、Sun サイト (http://java.sun.com/j2se/1.5.0/docs/api/index.html) の J2SE 5 アプリケーション・プログラミング・インターフェースの資料を参照してください。
http://java.sun.com/j2se/1.5.0/docs/index.html も参照してください。
デフォルトの JIT モードを使用するかどうかを決定します。
J2SE 5 では、Solaris 仮想マシンのデフォルト JIT モードは、ハードウェア構成によって異なります。
常に「クライアント」になる設定が変わりました。J2SE 5 では、サーバー・クラス・ハードウェア
(つまり、2 つ以上の CPU および 2 GB 以上の RAM) の場合、仮想マシンは自動的に「サーバー」JIT モードに切り替わります。
ユーザーの選択に応じて -server または -client パラメーターを構成するには、
サーバー・プロセス定義の汎用 Java 仮想マシン引数を設定します。
Java 仮想マシン設定
を参照してください。
- アプリケーションで新規 J2SE 5 機能を利用するかどうかを決定します。
新規言語機能および J2SE 5 を使用するアプリケーションは、バージョン 6.1 ノードにのみデプロイすることができます。
これは、以前の製品バージョンは、J2SE 5 仮想マシンを備えていないためです。
J2EE 1.4 仕様は、新規言語フィーチャーを考慮に入れません。したがって、generics ベース・タイプは、
ホーム、スタブなどで公開されるパブリック EJB インターフェースには使用しないようにしてください。
開発するコードを複数の J2SE レベルで実行しなければならない場合、必要なすべての J2SE レベルに含まれないクラス
やメソッドを誤って使用しないようにするため、J2SE 1.4 などの最小レベルの J2SE の API 仕様のみを使用します。
これを行わない場合、古い J2SE 実装でアプリケーションが破損することがあります。
Java 仮想マシン内部のクラスや API にアクセスするアプリケーションは、問題を引き起こす場合があります。
これらのクラスや API は、J2SE 5 仕様によって変換されないため、変更を受けやすくなっています。
「com.sun.*」などの接頭部が付いたパッケージは「内部にある」とみなされます。さらに、仮想マシンの JAXP 実装
を提供する Xerces や Xalan クラスを直接使用するなど、XML および XSL パーサー実装を直接使用しないことを
強くお勧めします。直接パーサー API も「内部にある」とみなされ、変更を受けやすくなっています。
アプリケーションは、J2SE 1.4 や J2SE 5 API 文書で定義された JAXP API にのみ依存するようにしてください。
アプリケーションが特定バージョンの Xerces や Xalan、あるいはその他の XML/XSL パーサー・パッケージ
を必要とする場合は、パーサーをアプリケーションの WEB-INF/lib ディレクトリーに組み込み、
アプリケーション・デプロイメントにおいて適切なクラス・ロード・モードを設定します。
これにより、アプリケーション用に、XML パーサー API は、Java 仮想マシン・ブートストラップ・クラス・パスから
でなく、アプリケーション・クラス・パスからロードされるようになります。このガイドラインに従わない場合、
新規 J2SE レベルへのマイグレーションの試行中に重大な問題が発生することがあります。
- コンパイラー・モードを設定して、J2SE 5 アプリケーションを
古いレベルの Java 仮想マシン上で実行できるようにコンパイルします。
古い J2SE 仕様上で実行する予定の、J2SE 5 でビルドするアプリケーションをコンパイルする場合は、
J2SE 5 コンパイラーで必ず「-source」や「-target」モードを指定してください。
これにより、生成されるバイトコードが、以前の Java 仮想マシンと互換性を持つようになります。
例えば、ターゲットの Java 仮想マシンが 1.4.2 レベルのときに、J2SE 5 でアプリケーションをコンパイルする場合は、
1.4.2 と互換性のあるバイトコードを生成するには、「-source 1.4」や「target 1.4」と指定する必要があります。
この指定では、J2SE 5 に新しく追加されたパッケージ、クラス、または機能の処理は行われません。
バイトコードの出力のみが処理されます。開発者は、アプリケーションを複数の Java 仮想マシン仕様レベルで実行する
場合は、J2SE パッケージからどの API を使用するかに注意を払う必要があります。
- 以前コンパイルした J2SE 1.4 ベース・アプリケーションの非互換性に対処します。
http://java.sun.com/j2se/1.5.0/compatibility.html#binary
で Sun Microsystems によって文書化された非互換性を除いて、Java (TM) 2 Technology Edition、バージョン 5.0 は、
Java (TM) 2 Technology Edition、バージョン 1.4.2 との間に上位バイナリー互換性があります。
非互換性のほとんどは、1.5 のターゲットを使用して、JDK 5 レベルでクラスをコンパイルするときのものです。
Sun の文書では、「ほぼすべての既存プログラムは、修正されていない J2SE 5.0 上で実行する必要があります」
と記載されています。マイグレーションの参照として、J2SE 1.4 や J2SE 5
アプリケーション・プログラミング・インターフェース文書が http://java.sun.com/j2se/1.4.2/docs/api/index.html および http://java.sun.com/j2se/1.5.0/docs/api/index.html の Sun サイトでそれぞれ入手可能です。
最も顕著なソース互換性問題を以下に示します。
- 「enum」という名前の変数。 「enum」という単語は言語のキーワードになりました。
これを変数名として使用すると、コンパイラー障害が発生するようになりました。変数名を訂正するまでは、
J2SE 5 を使用したコンパイルでは、「-source 1.4」を指定するようにしてください。「-source 1.4」を使用している間は、
すべての新規 JDK 5 言語構造体は無効になり、ソース・コードで使用することができなくなります。
- 「プロキシー」、「キュー」、または「フォーマッター」というベース名を持つクラスに対するあいまい参照。
java.net.* をインポートし、プロキシーというベース名を持つ他のクラスを、そのクラス名を完全に修飾せずに
使用する場合は、コンパイル時エラーが発生することがあります。エラーが発生するのは、java.net.* が java.net.Proxy を含む
ようになったからです。
同じような状況で、java.lang.reflect.* のインポート中にエラーが発生する場合があります。
J2SE 5 の新規 java.utils.Queue クラスが javax.jms.Queue などの他の Queue パッケージ名と競合することにも注意
してください。
java.util.* をインポートし、フォーマッターというベース名を持つ他のクラスを、
そのクラス名を完全に修飾せずに使用する場合は、コンパイル時エラーが発生することがあります。
エラーが発生するのは、java.util.* が、J2SE 5 仕様で追加されたクラス java.util.Formatter
を含むようになったからです。
- 非推奨の JVMDI や JVMPI 機能から JVMTI への移行を開始します。
J2SE 5 では、以前の J2SE 仕様でパブリックな使用法で利用できたいくつかの機能が非推奨になりました。
JVMDI や JVMPI は J2SE 5 で非推奨になりました。また、J2SE 仕様の次のメジャー・リリースで除去
される可能性があります。新規の開発やツール・セットは、JVMTI への移行を開始する必要があります。
すべてのネイティブ (JNI) パフォーマンス・プロファイル・ライブラリーを、
http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/index.html で説明されている新規 JVMTI API にマイグレーションします。
- Java コマンド行インターフェースの使用法をアップデートします。
J2SE 5 レベルのコマンド行インターフェースは、仮想マシンのベンダーによって異なりますが、
J2SE 1.4 から大幅に変更されたわけではありません。それらは、
JAVA_HOME/bin ディレクトリーにあります。
すべての J2SE 5 実装の標準である、いくつかの顕著なコマンド行オプションを以下に示します。
- JVMTI の場合、-agentlib を使用して、指定するネイティブ・エージェント・ライブラリーを
ロードします。
- JVMTI の場合、-agentpath を使用して、絶対パス名によってネイティブ・エージェント・ライブラリー
をロードします。
- JVMTI の場合、-javaagent を使用して、Java プログラミング言語エージェントをロードします
(詳しくは java.lang.instrument を参照)。
- アノテーション機能をサポートするこの新規コマンド行については、
apt -help を参照してください。
- そのコマンド行の情報やアップデートについては、
javac -help を参照してください。
- ANT タスクをアップデートします。
本製品の以前のバージョンに付いている
idltojava ANT タスクに基づいて ANT タスクを作成した場合、そのタスクが生成するスタブ/タイやスケルトンが、
以前の製品リリースと互換性を持つようにするために、そのタスクが、J2SE 1.4 のときのように、J2SE 5 用の適切な
パラメーターを受け渡すようにする必要があります。