Sun Java Solaris Communities My SDN Account Join SDN
 
Java 2 SDK Release Notes for Linux

 

リリースノート
Java 2 SDK, Standard Edition
Version 1.3 Linux 版

   英語版

J2SE 1.3.0_02 で加えられた変更については、J2SE 1.3.0_02 のリリースノートを参照してください。

目次

概要
スーパーユーザ - 発生する可能性のある問題
Java Plug-in でのリモートディスプレイのサポート (サポートされない)
Virtual Machine と Red Hat 7.0
未完成の Java -help メッセージ
JPasswordField では削除キーは機能しない
インプットメソッドのサポート
マニュアルページの利用
SuSE カーネルのユーザへの注
Linux SMP のシステムバグ
マルチスクリーンサポートでの制限
RMI-IIOP および Java IDL
ドラッグ&ドロップ
Accessibility
Swing
セキュリティ
ネットワーク
Java Plug-in
日本語サポートの問題
中国語のサポート (サポートされない)
2000 年対応

概要

Java Developer Connection Web サイトのドキュメントを参照してください。
JavaTM Technology on the Linux Platform

バージョン 1.3.0 は、Java 2 SDK および Java 2 Runtime Environment のアップグレードリリースで、新しい機能や API が追加され、多くの機能に関してパフォーマンスの向上およびバグ修正が行われています。新しい機能や拡張された機能の総括的な概要は、以下を参照してください。

ドキュメントの「新機能の概要」

このリリースでは、仮想マシンおよびクラスライブラリでのバグ修正に加えて、インプットメソッドの新規サポートが提供され、SDK ツール用にマニュアルページが追加されています。

スーパーユーザ - 発生する可能性のある問題

CONFIG_IP_TRANSPARENT_PROXY オプションを使用してカーネルをコンパイルした任意のバージョンの Linux 上でスーパーユーザとして実行した場合、API 仕様に準拠した動作は保証されません。Red Hat 6.2 ディストリビューションに同梱されているデフォルトのカーネルは、このオプションを使用してコンパイルされています。この問題に関連する非互換性を回避するには、スーパーユーザで実行する場合は Java プラットフォームを使用しないか、またはカーネルが CONFIG_IP_TRANSPARENT_PROXY オプションを使用してコンパイルされていない Linux オペレーティングシステムにアップグレードしてください。Red Hat 7.1 には、この問題が発生しないバージョン 2.4 のカーネルが同梱されています。

Java Plug-in でのリモートディレスプレイのサポート (サポートされない)

J2SE 1.3.0 は、ローカル Linux ホストに設定されたディスプレイとともに使用する KDE および KWM ウィンドウマネージャをサポートします。ただし、ディスプレイがリモート Linux ホストに設定されている場合、Java Plug-in 1.3.0 は KDE ウィンドウマネージャをサポートしません。Java Plug-in を使用する場合、KDE ウィンドウとリモートディスプレイの設定により GUI オブジェクトの生成中に実行時エラーが発生する可能性があります。この問題のバグ ID は 4380775 です。

Virtual Machine と Red Hat 7.0

J2SE 1.3 には、Java Virtual Machine (VM) の実装が 2 つ含まれています。
  • Java HotSpot Client VM (起動時間が高速化されるようにチューニング)
  • Java HotSpot Server VM (長時間動作するサーバアプリケーション用に、操作の最高速度を高めるようにチューニング)
詳細は、J2SE 1.3 のドキュメントを参照してください。

Java 2 SDK 1.3 には、現在は使用されない Classic VM も含まれています。Classic VM は、-classic コマンド行オプション (java -classic MyApp) を使用して呼び出すことができます。ただし、glibc ライブラリのバグのため、Red Hat 7.0 では Classic VM は動作しません。このバグは、glibc-2.1.94 で修正されると思われます。この問題のバグ ID は 4375774 です。

Classic VM は、Java 2 Runtime Environment 1.3 には含まれていません。

未完成の Java -help メッセージ

-help (java -help) オプションで Java アプリケーションを起動すると、利用可能なコマンド行オプションを簡単に説明するヘルプメッセージが表示されます。 しかし、このヘルプメッセージは、不十分ですべてのオプションを表示しません。利用可能なオプションをすべて表示するには、Java アプリケーション起動ツールのマニュアルページ、または Java アプリケーション起動ツール用の J2SE のリファレンスページを参照してください。

JPasswordField では削除キーは機能しない

キーの中央部にある削除キーは、JPasswordFields では適切に機能しません。この問題を回避するには、バックスペースキーを使用して文字を削除します。数値入力キーにある削除キーは適切に機能するため、このキーを使用しても文字を削除できます。この問題は、バグ 4366978 で追跡調査されています。

インプットメソッドのサポート

Linux 上の Java 2 Runtime Environment では、ユーザは、ユーザ設定可能なホットキーを使用してインプットメソッドを選択します。ホットキーを定義するには、以下の環境変数を設定します。

  • JAVA_INPUT_METHOD_SELECTION_KEY


    java.awt.event.KeyEvent クラスに定義されているキーコード (VK_F4 など) に設定してください。

  • JAVA_INPUT_METHOD_SELECTION_KEY_MODIFIERS


    java.awt.event.InputEvent クラスに定義されている修飾マスク (SHIFT_MASK) の組み合わせに設定してください。2 つ以上のマスクが存在する場合、マスクはコンマで区切る必要があります。この変数の設定は任意です。

ユーザがホットキーの組み合わせを押すとポップアップウィンドウが表示され、そのウィンドウに選択可能なインプットメソッドのリストが表示されます。環境変数にはデフォルト値は設定されていません。したがって、デフォルトのホットキーはありません。

Windows および Solaris プラットフォームでは、Java Runtime Environment は [ウィンドウ (Window)] メニュー (Motif の場合) に [入力方式の切替え (Select Input Method)] メニュー項目を追加します。ユーザはそこからインプットメソッドを選択します。ただし、Linux のウィンドウマネージャはこのようなメニュー項目の追加をサポートしていないため、ホットキーによって選択が可能になります。この機能は実装に固有であり、将来のリリースでは変更される可能性があることに注意してください。

マニュアルページの利用

Java 2 SDK v1.3 Linux 版にすべての SDK ツール用のマニュアルページが付属するようになりました。マニュアルページは RPM ダウンロードバンドルにパッケージ化されており、RPM バンドルから SDK パッケージをインストールすると自動的にインストールされます。マニュアルページは、SDK の GZIP 形式のダウンロードバンドルには含まれていません。

SuSE カーネルのユーザへの注

J2SE 1.3 Linux 版は、Red Hat 6.1 オペレーティングシステムでサポートされています。それ以外の Linux プラットフォームではサポートされていないため、Red Hat 6.1 以外の Linux システムで J2SE 1.3 を使用しようとすると、問題が発生する可能性があります。

たとえば、SuSE 6.4 カーネルにはデフォルトモードでスタックおよびヒープのメモリ設定があり、Java Virtual Machine でのスタックの使用方法とは互換性がありません。そのため Virtual Machine は、スタックオーバーフローが発生してクラッシュします。クラッシュを回避するには、最初に次のコマンドを実行して heap-stack-gap ファイルの内容を変更します。

echo 4 > /proc/sys/vm/heap-stack-gap
詳細は、
4345034 のバグレポートを参照してください。

Linux SMP のシステムバグ

Linux SMP のシステムバグ 4343002 により、glibc 2.1.2 内の Linux スレッドの競合状態が原因で、VM がクラッシュする場合があります。クラッシュの原因となるような競合状態はまれにしか発生せず、通常は再現性がありません。クラッシュの結果、以下のようなエラーメッセージが表示されます。
# 
# An unexpected exception has been detected in native code outside the VM.
# Program counter=0x40091598
# Problematic Thread: prio=1 tid=0x812ea40 nid=0x1c08 runnable 
#

マルチスクリーンサポートでの制限

バージョン 4.0 より前のバージョンの XFree86 X サーバは、マルチスクリーン機能をサポートしません。XFree86 X サーバを使用している場合は、新しいマルチスクリーン機能をサポートするバージョン 4.0 を Java 2 プラットフォームで使用する必要があります。ただし、XFree86 4.0 は最近リリースされたものであるため、XFree86 4.0 での Java 2 SDK のテストは完全には行われていません。

RMI-IIOP および Java IDL

1.3 での RMI-IIOP の機能に関連した事項について以下に説明します。
  • Java 2 SDK, Standard Edition (J2SE) v 1.3 に含まれる Java ORB は、Java 直列化仕様で指定されている、直列化可能クラスに対する発展的な変更をサポートしていません。これは、1.3 に含まれる Java ORB の、既知の機能面でのバグです。この機能面でのバグにより、J2SE 1.3 の Java ORB は、特定の Java プラットフォームクラスを J2SE 1.2 から J2SE 1.3 へ、または J2SE 1.3 から J2SE 1.2 に渡す場合に失敗します。

    以下のクラスは、J2SE 1.2.2 から J2SE 1.3 で拡張されました。

    javax.swing.AbstractAction
    javax.swing.JTable
    javax.swing.text.html.HTML$UnknownTag
    sun.awt.font.FontDesignMetrics
    
    これらのクラスは、J2SE 1.2.2 では持たなかった writeObject メソッドを J2SE 1.3 では持っています。

    これらのデータ型を渡すクライアントが、Java 2 Enterprise Edition リファレンス実装、または J2SE 1.2 の RMI-IIOP Standard Edition を使用して実行され、J2SE 1.3 で実行されるサーバと通信しようとする場合 (あるいはその逆) に、相互運用性の点で問題が発生します。

    アプリケーションプログラマがこのバグを回避する方法としては、直列化可能クラスに writeObject メソッドを定義することをお勧めします。writeObject の仕様により、直列化可能クラスは Java ORB を使用するカスタム整列化可能クラスになります。さらに、Java プラットフォームの将来のバージョンで、実行時の互換性が維持できるようになります。

  • RMI スタブコンパイラ (rmic ユーティリティ) に -iiop オプションを指定して実行し、IIOP プロトコル用のスタブを生成すると、バグ 4318477 により、-classpath オプションで指定された JAR ファイルは無視されます。このバグを回避するには、JAR ファイルからクラスファイルを除外します。rmic コンパイラは、除外されたクラスファイルを正しくロードします。このバグは、Java 2 SDK の次期保守リリースで修正される予定です。RMI スタブコンパイラについては、Java 2 SDK のドキュメントの「ツールとユーティリティ」を参照してください。

  • OMG IDL でコードを書くときに、インタフェース名をモジュール名として使用してはいけません。使用すると、複数の異なるベンダーのツールでコンパイルした場合に、その結果に一貫性がなくなる可能性があります。またその結果として、コードの移植性がなくなります。しかしたとえば、同じ名前を含むコードを Sun Microsystems が提供する IDL-to-Java コンパイラでコンパイルすれば、同一の結果を得ることができます。同じコードを他のベンダーの IDL-to-Java コンパイラでコンパイルすると、異なる結果が生成される可能性があります。

Java 2D テクノロジ

Java プラットフォームは、16 色表示をサポートしていません。16 色表示でグラフィックスおよび GUI コンポーネントの描画に問題が発生する場合は、色数を 256 色以上に変更してください。

ドラッグ&ドロップ

クラス java.awt.datatransfer.DataFlavor に 2 つのメソッドが追加されました。
  • selectBestTextFlavor(DataFlavor[]) - 入力の DataFlavor 配列から最適なフレーバーを選択します。このメソッドは、Java 2 プラットフォームでサポートされるエンコーディングの配列でフレーバーを比較します。その際、charset 属性に基づいて MIME タイプも比較し、もっともよく一致するフレーバーを返します。
  • getReaderForText(Transferable) - メソッド selectBestTextFlavor が選択したフレーバーに最適なリーダを取得します。

これらの新規メソッドを使用しないと、Unicode で符号化されたテキストは元のアプリケーションのドキュメントに正しくドラッグされません (テキストの先頭に余分な文字が残る)。この問題を避けるため、これらのメソッドでは Unicode テキストではなく ISO8859-1 を転送します。

Accessibility

AWT および Swing コンポーネントは、Java Accessibility API を実装する内部クラスを持ち、各コンポーネントに適したユーザ補助機能をサポートします。ただし、以下のクラスについては、このリリースではユーザ補助機能のサポートが完全には実装されていません。
java.awt.TextComponent
java.awt.Menu
java.awt.MenuItem
java.awt.List
すべてのコンポーネント対するユーザ補助機能の完全なサポートは、Java 2 プラットフォームの将来のリリースで実装される予定です。

Swing

メソッド Component.getListeners は、Swing インタフェース AncestorListener および VetoableChangeListener に対して動作しません。これらのインタフェースに対して、getListeners は、リスナーが実際にいくつ登録されるかにかかわらず、長さがゼロの配列を返します。この問題は、バグレポート 4290704 および 4257538 で追跡管理されています。

セキュリティ

以下に、このバージョンでのセキュリティ関連の注を説明します。
  • jarsigner ユーティリティは、コード署名証明書が自己署名されない場合に、Netscape SignTool 1.3 によって署名されたファイルを検証できます。注: 公式な Netscape コード署名証明書は、VeriSign から入手できます。これらの証明書は、VeriSign によって発行され、自己署名はされません。

    Netscape SignTool 1.3 は、コード署名証明書が自己署名される場合は、証明書を署名ファイルには格納しません。また、署名ファイルが署名者の証明書を含まない場合、jarsigner は署名された JAR ファイルを検証できません。注: SignTool 1.3 自体が生成したコード署名証明書は、テスト用であり、自己署名されたものです。コード署名証明書が自己署名されたテスト用の証明書である場合に、Netscape SignTool 1.3 によって署名された JAR ファイルを jarsigner が検証できないというのは、既知の問題です。

  • Java 2 SDK では、アプリケーションクラスは現行の ClassLoader インスタンスによってロードされます。それによってアプリケーションクラスがインストール済み拡張機能を使用できるようになり、さらに、アプリケーションクラスパス (ユーザが指定) をブートストラップクラスパス (固定で、ユーザは通常変更しない) から分離することができるようになります。-Xbootclasspath オプションを使用すると、必要に応じてブートストラップクラスパスを無効にできます。

    つまり、Java 2 SDK のアプリケーションクラスは、デフォルトですべてのアクセス権を持つのではないこということです。その代わり、そのシステムに設定されたセキュリティポリシーを基にアクセス権が与えられます。そのため、1.0 や 1.1 の元のセキュリティモデルに基づいて自らのセキュリティコードを書くようなアプリケーションでは、例外をスローしたり、Java 2 SDK で起動しなかったりする場合があります。

  • 以下に、セキュリティポリシーと署名に関する問題の概要を示します。
    • Java 2 プラットフォームが使用するデフォルトのセキュリティポリシー実装は、Java セキュリティプロパティファイル jre/lib/security/java.securitypolicy.provider プロパティによって指定されます。デフォルト以外のセキュリティポリシー実装を指定する場合は、デフォルト以外のセキュリティプロパティクラスファイルを新しくブートクラスパスに置く必要があります。これは、-Xbootclasspath コマンド行オプションを使って行います。このオプションの詳細は、Java アプリケーション起動ツールのリファレンスページを参照してください。これにより、ポリシーファイルがブートストラップクラスローダによりロードされます。新たにデフォルトポリシーファイルを、クラスパスまたは拡張機能内などの他の場所に配置すると、このファイルは取得されず、代わりに sun.security.provider.PolicyFile で提供されるデフォルトポリシーが使用されます。

    • バージョン 1.2.2 以降の Java 2 SDK は、新しいクラスローディング機構を使用します。新しいクラスローダでは、Jar ファイルのパッケージに属する任意のクラスファイルを署名する場合、同じパッケージに属するすべてのクラスファイルが同じ署名者によって署名されている必要があります。パッケージ内に署名付きクラスと署名のないクラスとが混在する、または署名者の異なるクラスが存在する Jar ファイルは使用できなくなりました。Jar ファイルには、署名のないパッケージを含めることは可能です。ただし、任意のパッケージが署名付きクラスを含む場合、そのパッケージのクラスファイルはすべて、同一の署名者により署名される必要があります。この基準に従っていない既存の Jar ファイルは、このバージョンの Java 2 プラットフォームでは使用できません。

  • keytool ツールを使って、Base64 で符号化された証明書をインポートまたは印刷することができます。ただし、この処理を行うためには、証明書ファイルの末尾に改行文字が挿入されていなければなりません。証明書ファイルの末尾に改行文字がない場合は、サポート対象外の符号化であることを示す例外 CertificateException がスローされるか、「入力の構文解析に失敗しました。」や「入力は X.509 証明書ではありません。」などの意味のエラーメッセージが表示されます。

    このようなエラーメッセージや例外が発生する場合は、ファイルの末尾に改行文字が存在しない可能性があります。その理由の 1 つとして、証明書発行局からの証明書応答 (証明書署名要求への応答) に改行文字が含まれていないことが考えられます。

    UNIX では、次のコマンドを実行することによって、ファイルの末尾に改行文字が存在するかどうかを確認できます。

        od -xc <certificate_name>
    
    <certificate_name> は、証明書が含まれているファイル名で置き換えます。たとえば、mycert という名前のファイルを使用する場合は、次のコマンドを実行します。
        od -xc mycert
    
    実行後、出力の末尾に「¥n」があれば、ファイルの末尾には改行文字が存在しています。「¥n」がない場合は、改行文字を挿入する必要があります。

    証明書ファイルの末尾に改行文字があるかどうかわからない場合は、とりあえず段落ごとに改行文字を挿入してみてください。改行文字が余分に存在していても問題はありません。改行文字を挿入したら、-import または -printcert コマンドを再試行します。ここでコマンドが正しく実行されれば、改行文字の不足のせいでエラーが発生していたことになります。それでもまだエラーが発生する場合は、証明書に何らかの問題があると考えられます。

    Base64 で符号化された証明書ファイルの末尾に改行文字を挿入したい場合は、まず任意のテキストエディタでファイルを開き、ファイルの末尾にカーソルを移動させます。次に、改行文字 (または復帰改行文字) を入力します。キーボードの Enter キーなどを押すと入力できます。

  • ネットワーク

    このリリースのネットワーク API には、以下の既知のバグと制限があります。
    • HTML 4.0 の仕様では、URI (Uniform Resource Identifier) 内の非 ASCII 文字は 1 つまたは複数の UTF-8 バイトに符号化することが推奨されています。多くの既存 CGI スクリプトは、ドキュメントが受信されたエンコーディングからのバイトを使って非 ASCII 文字を処理しています。しかし、クラス URLEncoder および URLDecoder は、URI での非 ASCII 文字を処理するメソッドをサポートしません。これらのクラスは、背後のプラットフォームのデフォルトエンコーディングで定義されている文字ではなく 1 つまたは複数のバイトを使います。このバグの ID は 4257115 です。

    • クライアント側でメソッド HttpURLConnection.getResponseCode を呼び出すと、Win98 または WinNT サーバで送信された HTTP ヘッダフィールドに余分な CR がある場合に仮想マシンがクラッシュすることがあります。このバグの ID は 4258697 です。

    Java Plug-in

    バージョン 1.3 の Java Plug-in 製品は、Java 2 プラットフォームのみサポートします。JDK 1.1.x では動作しません。バージョン 1.1.x の Java プラットフォームで Java Plug-in を使用するには、1.3 より前のバージョンの Java Plug-in 製品を使用する必要があります。

    このリリースでの Java Plug-in テクノロジの制限を以下に示します。

    • Plug-in のコントロールパネルでコマンド行 swing -Djava.security-debug=all を設定すると、バグのためブラウザがハングアップします。

    • Netscape NavigatorTM で HTTPS を使用すると、サーバ応答ヘッダが java.net.URLConnection で利用できなくなります。

    • HTTPS で 1.3 の新しいアプレットキャッシングのサポートを使用するには、EMBED/OBJECT タグに "cache_version" パラメータを追加する必要があります。例を示します。
      <PARAM NAME="cache_version" VALUE="1.2.1.0">
      
      ここで、cache_version は、X.X.X.X の形式になります (X は 0 から F までの 16 進数)。このバージョン番号が、インストールされているバージョンより大きい場合は、JAR がダウンロードされます。

    • Java Plug-in Converter を実行するには、コマンド行から次のように入力します。
      java -jar HTMLConverter.jar
      

    • モーダルダイアログは、完全にはモーダルではありません。ユーザは、Java Plug-in で親ウィンドウをクリックしてアクションを実行することができます。

    日本語サポートの問題

    Java 2 SDK の日本語サポートに関する全般的な情報は、日本語対応についてのページを参照してください。以下の注は、このリリースでの、インプットメソッドの使用に関連します。
    • バグ 4300209 は、RedHat6.1J 上でかな漢字ルートウィンドウおよびパッシブクライアントウィンドウを使用した場合の、日本語文字の入力の問題に関連します。日本語文字をルートウィンドウで入力して確定すると、クライアントウィンドウがフォーカスを取得するまで日本語文字がクライアントウィンドウに表示されません。クライアントウィンドウがフォーカスを取得すると、語 (ワード)はルートウィンドウで確定したのとは逆の順にクライアントウィンドウに表示されます。この問題は、RedHat 6.1J 改訂版 または RedHat 6.2J では発生しません。

      バグ 4351215 も、インプットメソッドの問題に関連します。InputMethodWindows はその作成時にキーボード入力に対して不正にアクティブになります。このため、インプットメソッドが動作しなくなるというフォーカスの問題が発生します。

      回避策: これらの問題を回避するには、KDE Control Center で KWM フォーカスポリシーを "(old) focus-follows-mouse" に設定します。

    • Red Hat 6.1J 改訂版オペレーティングシステムの起動時に、バックグラウンドでインプットメソッドサーバ kinput2 を自動的に立ち上げるようにデフォルトで設定されていますが、デフォルト日本語ロケールの設定が原因でその処理に失敗します。インプットメソッドサーバが動作していない場合、Java アプリケーションがインプットメソッドを使用しようとするとシステムエラーが発生します。J2SE 1.3 を Red Hat 6.1J 改訂版とともに使用するには、インプットメソッドサーバを手動で起動する必要があります。この問題は、他のバージョンの Red Hat オペレーティングシステムでは確認されていません。

    中国語のサポート (サポートされない)

    J2SE 1.3 Linux 版は、Red Hat 6.1 オペレーティングシステムでサポートされます。しかしながら、中国語バージョンの Red Hat が利用可能になっていません。J2SE 1.3 Linux 版は、Red Hat 以外のオペレーティングシステムの中国語ロケールでは動作する可能性はありますが、Sun は Red Hat 以外のオペレーティングシステムにおいて J2SE 1.3 のテストもサポートもしていません。この問題のバグ ID は 4339494 です。

    2000 年対応

    2000 年対応に関する情報は、「Year 2000 Product Compliant Status List」を参照してください。