Java SE 7の機能と拡張機能


Java Platform, Standard Edition 7(Java SE 7)は、主要機能リリースです。 このドキュメントでは、Java SE 7と、Java SE 7のOracle実装であるJava SE Development Kit 7(JDK 7)に含まれる機能と拡張機能に関する情報を提供します。

目次



Java SE 7におけるテクノロジーのおもな変更点


Java SE 7のガイド・ドキュメント内の各拡張機能のページに対するリンクを以下のリストに示します。 詳しい情報を確認するには、対象のテクノロジーを選択してください。

 



Java SE 7で対処された重要なRFE




以下に、Java SE 7に関連する重要なRFEのリストを示します。 Java SE 7での変更には、Java言語、Java仮想マシン(JVM)の定義、およびJava SE API仕様に対する変更が含まれています。

Java SE 7のOracle実装であるJDK 7での変更点については、JDK 7で対処された重要なRFEセクションに記載されています。

 

分野:HotSpot
概要: GetLocalInstanceメソッドを追加するため、JVM/TIバージョン番号が1.1から1.2へ変更されています。
RFE: 70037827004582

 

分野: セキュリティ
概要: Java SE 7向けのセキュリティ・アルゴリズム要件が定義され、すべてのJava SE 7実装でサポートする必要があるアルゴリズムのリストが提供されています。 該当するクラス(例:java.security.Signature)のクラス・サマリーが更新され、実装要件が追加されています。 また、これらの要件のすべては、標準アルゴリズム・ドキュメントのImplementation Requirementsセクションに記載されています。
RFE: 5001004

 

分野: API: JSSE
概要: 以前のリリースでは、KeyManagerFactoryに対する標準アルゴリズム名が定義されていませんでした(デフォルト・アルゴリズムを除く)。 Java SE 7リリースでは、KeyManagerFactoryの標準アルゴリズム名として"PKIX"がエクスポートされます。
"PKIX" KeyManagerFactoryアルゴリズムは、次のように定義されています。
X509ExtendedKeyManagers向けのファクトリであり、IETF PKIXワーキング・グループがRFC 3280またはその後継RFCで定義したルールに従って、ローカル認証向けのX.509証明書ベースの鍵ペアを管理します。 KeyManagerFactoryは、クラスjavax.net.ssl.KeyStoreBuilderParametersを使用した初期化をサポートする必要があります。
RFE: 7022855

 

分野: API: JSSE
概要: SunJSSEプロバイダにTLS 1.2のサポートが追加されました。
RFE: 6916074

 

分野: API: 言語
概要: カスタム・クラス・ローダーが非循環式のクラス・ローダー委譲モデルに従っていない場合、クラス・ロードでデッドロックが発生する傾向があります。 java.lang.ClassLoaderクラスに新しいAPIが追加されており、クラス・ローディング処理に対するよりきめ細かいロック・メカニズムとパラレル・ローディングがサポートされています。 カスタム・クラス・ローダーでこの機能を利用する場合、推奨されるモデルや要件について、クラス・ローダーAPIの修正によるデッドロックの回避ドキュメントを参照し、これに従って機能を実装する必要があります。

 

分野: API: AWT
概要: java.awt.Cursorクラスには"predefined"と呼ばれる"保護された静的フィールド"が含まれていました。 このフィールドは削除されました。

 

分野: API: AWT
概要: カラーのアルファ値が、java.awt.Color.darker()メソッドとjava.awt.Color.lighter()メソッドによって維持されるようになりました。
RFE: 6783910

 

 



JDK 7で対処された重要なRFE




JDK 7(Java SE 7のOracle実装)に関連する重要なRFEのリストを以下に示します。 JDK 7での変更には、javac、HotSpot(および関連ツール)、Java SE 7 APIの実装に対する変更が含まれています。

Java SE 7での変更点については、Java SE 7で対処された重要なRFEセクションに掲載されています。

 

分野: スクリプト
概要: JDK 7リリースには、Mozilla Rhino JavaScriptエンジンもバンドルされています。このJavaScriptエンジンは、オラクルが改良したプレリリース・ソースであるバージョン1.7R3に基づいています。 オラクルが改良したRhinoソースは、http://jdk7.java.net/rhino/からダウンロードできます。

 

分野: ツール
概要: Javaランチャの初期化中にエラーが発生した場合、必要に応じて、明確で簡潔なエラー・メッセージが出力されます。 妥当な場合や、ClassLoader APIおよびReflection APIからエラーが出力される場合は、完全なスタック・トレースが出力されます。
RFE: 6968053

 

分野: ツール
概要: 以前は、セグメント内にjava6(またはそれ以降の)クラス・ファイルがない場合、pack200ツールはデフォルトでjava6パックファイルを使用していました。 JDK 7以降のpack200ツールでは、最大限の互換性を確保するために、デフォルトでjava5パックファイルを使用します。
RFE: 6712743

 

分野: ツール
概要: Solarisを使用する場合に限り、JREとJDKのディストリビューションにシンボリック・リンク(symlink)jre/lib/libjvm.so->client/libjvm.soが含まれていました。 これは、Solaris Production JREからJava Referenceバージョン(より正確にはExactVMからHotSpot)への移行を支援するために提供されていたものです。 このsymlinkは削除されており、今後はサポートされません。
このsymlinkが存在していることを前提としているアプリケーション(多くはカスタム・ランチャを持つ旧来のSolarisアプリケーション)は、必要なライブラリ(サーバーまたはクライアントを実装したもの)へのリンクを再作成するか、または必要なVMに対して動的にリンクする必要があります。 もしくは、手動でsymlinkを作成するか、必要なライブラリ(VMを実装したもの)をコピーする方法もあります。ただし、この方法は推奨されておらず、望ましくない副次的作用をもたらす可能性があります。
RFE: 6899834

 

分野: ツール
概要: b128以降のJDK 7ディストリビューションには、HtmlConverterツールは含まれていません。
RFE: 4523289

 

分野: ツール
概要: keytoolユーティリティとjarsignerユーティリティで使用される暗号化アルゴリズムのデフォルト値が更新され、強化されています。 詳しくは、keytooljarsignerのツール・ドキュメントを参照してください。
RFE: 6561126

 

分野: ツール
概要: keytoolツールとjarsignerツールの鍵ペア生成とjar署名で、ECCアルゴリズムがサポートされるようになりました。
RFE: 6870812

 

分野: ツール
概要: 自己署名付きでない証明書を生成するための、新しいkeytoolコマンド(-gencert)が提供されています。 新オプション(-ext)を使用すると、-gencert-genkeypair-certreqコマンドでいくつかのX.509 v3の拡張を生成できます。 また、keytoolツールとjarsignerツールには、その他の新しいコマンドとオプションも追加されています。 詳しくは、keytooljarsignerのツール・ドキュメントを参照してください。
RFE: 6780416680284663242926890872

 

分野: ツール
概要: JDK 7では、javadocツールが更新され、生成されたページのスタイルを制御するスタイル・マークアップ・クラスを使用できるようになりました。 -stylesheetfileオプションを指定すると、代わりのスタイルシート・ファイルを使用できます。 このオプションを指定しない場合、javadocツールによって"stylesheet.css"というスタイルシート・ファイルが自動的に作成されます。 たとえば、次のように別のファイル名を指定すると、このデフォルトをオーバーライドできます。

    C:> javadoc -stylesheetfile C:\user\exampleStylesheet.css com.examplePackage
生成されるページには、さまざまなセクションに対応するスタイル・マークアップが含まれています。 スタイルシート・ファイルを使用すると、これらのセクションのスタイルを定義できます。 デフォルトのスタイルシート・ファイルは、そのセクションに含まれる各スタイルに基づいてソートされます。 次の要素のスタイルをカスタマイズできます。
  • ページ・ナビゲーション
  • ヘッダーとフッター
  • コンテンツ
  • ドキュメント全体

RFE: 70524256851834

 

分野: HotSpot
概要: バージョン番号51を持つクラス・ファイルはすべて、タイプ・チェック検証機能を使用して検証されるため、これらのメソッドには、必要に応じてStackMapTable属性が含まれる必要があります。 バージョン50のクラス・ファイルについては引き続き、ファイル内のスタックマップが欠如しているか、正しくない場合に、HotSpot JVMによってタイプ推測型の検証機能へのフェイルオーバーが実行されます。 このフェイルオーバー動作は、バージョン51(JDK 7のデフォルト・バージョン)のクラス・ファイルに対しては実行されません。
バージョン51のクラス・ファイルに含まれるバイトコードをツールから変更する場合、検証を通過できるように、バイトコードに合わせてスタックマップ情報を更新する必要があります。
RFE: 6693236

 

分野: HotSpot
概要: JDK 7では、JavaヒープのPermanent世代にinterned文字列が割り当てられることはありません。代わりに、アプリケーションによって作成されたその他のオブジェクトとともに、Javaヒープの主要部分(Young世代およびOld世代)に割り当てられます。 この変更によって、Javaヒープの主要部分に常駐するデータが多くなり、Permanent世代に格納されるデータは少なくなります。そのため、ヒープ・サイズの調整が必要になる場合があります。 ほとんどのアプリケーションでは、この変更によってヒープ使用に大きな違いが生じることはありませんが、多数のクラスをロードしたり、String.intern()メソッドを多用したりする大規模アプリケーションでは、大きな違いが現れます。
RFE: 6962931

 

分野: HotSpot
概要: 並行マークスイープ・コレクタ(CMS)のヒープ・サイズとshapeパラメータに関して、出荷時に設定されるデフォルト値が変更されました。 この新しい設定は、JDK 6がリリースされた後に発表されたより高速なプラットフォームの利点を生かすためのものです。 HotSpotに含まれる他のコレクタと同様に、このリリースのCMSは、マイナー・コレクションに関連付けられた一時停止時間を"妥当"に維持できるように工夫しながら、プラットフォーム上の利用可能な物理メモリを使用してヒープ・サイズを設定するようになりました。 具体的なヒープの状態やその他の側面は、プラットフォームに依存します。 これらのデフォルト値は、ユーザー固有の要件に合わせて、明示的にサイズや状態を指定(ヒープ・チューニング)することで、一部または全部をオーバーライドできます。
その他のガベージ・コレクタを含むこれらのデフォルト設定について、詳しくはHeap Tuning Guide for JDK 6を参照してください。
RFE: 6896099

 

分野: HotSpot
概要: JDK 6リリースには、CMS向けのパフォーマンス向上機能が含まれていました。 これに対して、JDK 5で提供されていた動作を引き続き使用する仕組みを提供する目的で、CMSUseOldDefaultsフラグが提供されました。 このフラグを指定すると、多数の設定がデフォルトの状態に戻されます。 ここ数年間で、このフラグの使用は最小限にとどまっており、ほとんどの顧客はCMSのパフォーマンス改善を選択していました。 このリリースでは、CMSUseOldDefaultsフラグは削除されています。
RFE: 7027529

 

分野: HotSpot
概要: このリリースのGarbageFirst(G1)ガベージ・コレクタは、実験的に導入されたコレクタです。 jstackjmapなどの一部のコマンドライン・ツールは、G1コレクタを使用する際に正しく動作しない場合があります。
RFE: 6966967

 

分野: HotSpot
概要: 以前のJDKリリースをSolarisで使用している場合に限られますが、以前のリリースではThread.interrupt()メソッドによって一部のブロッキングI/O処理が妨げられるため、ターゲット・スレッドによってInterruptedIOExceptionがスローされ、ソケット・ストリームやファイル・ストリームが整合性を欠いた状態のままになっていました。 この、いわゆる"割込み可能なレガシーI/Oサポート"は、JDK 7では無効化されています。 Solaris固有のこの動作に以前から依存しているアプリケーションの場合は、コマンドラインから-XX:+UseVMInterruptibleIOオプションを指定して実行することで、このサポートを再び有効化できます。 ただし、将来のJDKリリースでは、割込み可能なレガシーI/Oサポートは完全に削除される可能性があります。
RFE: 6554406

 

分野: JSSE
概要: TLS再ネゴシエーションの修正が実装されました。 詳しくは、 TLS / SSLv3 Renegotiation Vulnerability ExplainedUnderstanding the TLS Renegotiation AttackAuthentication Gap in TLS Renegotiationを参照してください。

 

分野: JSSE
概要: SunJSSEプロバイダのJSSEクライアントに、Server Name Indication(SNI)の拡張機能が追加されました。
RFE: 6985179

 

分野: SASL
概要: クライアントとサーバーの両方で、NTLMがSASLメカニズムとしてサポートされるようになりました。 実装されているのは認証レイヤーのみであり、通信におけるプライバシや整合性は保護されません。
RFE: 6911951

 

分野: インストーラ
概要: Solaris 11 Expressリリースでは、ソフトウェア・パッケージのインストール、アップグレード、削除を行う新しいデフォルト・メカニズムとしてIPSパッケージ・システムが採用されています。 JDK 7リリースは、IPSシステムをサポートしています。 IPSパッケージでは、すべてのSolarisユーザーに対して変更が発生します。 すべてのパッケージで名前やプロセスが変更される可能性が高いため、ユーザーまたはサード・パーティが作成した自動インストーラやインストール検証アプリケーションは、更新が必要になります。
RFE: 6979976

 

分野: インストーラ
概要: JDK 7では、.shパッケージや.binパッケージは配布されません。 詳しくは、トラブルシューティング・ガイドを参照してください。
RFE: 6980760

 

分野: インストーラ
概要: SUSE Linux SLES10 x86に、32ビットのJREやJDKをインストールすることはできません。 詳しくは、トラブルシューティング・ガイドを参照してください。
RFE: 7006936

 

分野: インストーラ
概要: 以前のリリース・バージョンがすでにインストールされている場合、SolarisやLinuxにJREをインストールすることはできません。 この問題の回避策は、-Fオプションを指定することです。
RFE: 6978307

 

分野: インストーラ
概要: OLS6 x64を使用している場合、32ビット・バージョンのJDKやJREをインストールすることはできません。java.exeバージョンの処理が失敗します。
RFE: 7005996

 

分野: デプロイメント
概要: 以前のリリースでは、pack200ツールの出力はデフォルトでセグメント化されていました。 このリリースのpack200ツールでは、jarファイルごとに1つの大きなセグメントが作成されます。 このため、エンドユーザーのシステム上で利用できる仮想メモリよりも大きなjarファイルがデプロイされている場合は、入力jarファイルを分割するか、あるいはコマンドライン・フラグ"--segment-limit=nnnnn"または同等のプロパティ"SEGMENT_LIMIT"を使用して、適切にセグメント化することを推奨します。
RFE: 6575373

 

分野: デプロイメント
概要: Windows XPマシンでは、デフォルトのキャッシュ・ディレクトリが$USER\Local Settings\Application Data\Sun\Java\Deployment\cacheになりました。 必要であれば、キャッシュ・ディレクトリとしてネットワーク共有フォルダを指定することによって、複数のドメイン・マシン間で1つのアプリケーション・キャッシュを利用できます。
RFE: 7012538

 

分野: デプロイメント
概要: オプションのアプレット・パラメータjnlp_embeddedを使用すると、JNLPコンテンツをHTMLページ上にキャッシュすることで、ネットワーク・アクセスを省略してアプレットの起動時間を短縮できます。 jnlp_embeddedパラメータの値は、アプレットのJNLPファイルのコンテンツをbase64でエンコードしたものになります。 次に例を挙げます。
<applet  width="710" height="540" >
           <param name="jnlp_href" value="launch.jnlp"/>
           <param name="jnlp_embedded"

                value="PD94bWwgdmVyc2lvbj0iMS4wIiB . . . dC1kZXNjPg0KPC9qbmxwPg0
K"/>
           <param name="draggable" value="true"/>
       </applet>
jnlp_embeddedパラメータが指定されると、この値によって、jn.p_hrefパラメータで指定したJNLP値のコンテンツが置換されます。 この状況では、jnlp_refの値は省略可能であり、jnlp_embeddedのコンテンツが無効である場合にのみ予備として使用されます。 JNLPコンテンツの埋込みに関しては、いくつかの制限事項があります。
  • 要素jnlpの属性hrefは、相対的でなければなりません。
  • 要素jnlpの属性codebaseは空白でなければなりません(コードベース値はドキュメントのベースURLから取得される)。

RFE: 6990877

 

分野: デプロイメント
概要: JDK 7では、キャッシュの消去は次のように実施されます。
  • javaws -XClearCacheを呼び出すと、インストールされていないリソースのみがキャッシュから削除されます。
  • javaws -uninstallを呼び出すと、インストールされたリソースとインストールされていないリソースの両方が削除されます。
  • 以前のリリースでは、JCPの"Delete Temporary Files"ダイアログには、"Applications and Applets"と"Trace and Log files"という2つのチェック・ボックスがあり、両方ともデフォルトで選択されていました。 JDK 7の場合、"Trace and Log Files"、"Cached Applications and Applets"、"Installed Applications and Applets"という3つのチェック・ボックスがあり、最初の2つがデフォルトで選択されています。
  • インストールされたアプリケーションのみが、Add/Removeパネルのエントリとして表示されます。

RFE: 6873615

 

分野: JNLPファイル
概要: このリリースでは、Java Web Startアプリケーションのデバッグをサポートすることを目的として、信頼できるアプリケーション向けに、JNLPファイルで-XX:HeapDumpOnOutOfMemoryErrorフラグがサポートされています。
RFE: 6664424

 

分野: JNLPファイル
概要: 旧バージョンのJava Web Startでは、JNLP仕様の6.0.10セクションが正しく実装されていませんでした。 この修正によって、os="Windows\ XP"os="Windows\ Vista"os="Windows\ 7"といった詳細な値を指定した"os"属性が期待どおりに機能するようになります。 os-"Win"os="Windows"という値も、引き続きすべてのWindowsプラットフォームに適合しています。 このリリースでは、os="Windows\ Vista Windows\ 7"という値はVistaまたはWindows 7にのみ適合し、Windows XPには適合していません。
RFE: 7014170

 

分野: プラグイン
概要: Javaプラグインの最初の生成を示すメッセージが廃止され、プラグイン1が使用されるたびにログ・ファイルとJavaコンソールにメッセージが出力されるようになりました。
RFE: 7027792

 

分野: プラグイン
概要: このリリースでは、Windowsのトレイ・アイコンがデフォルトで無効化されています。 トレイ・アイコンを有効化するには、Windowsのスタート・メニューを使用してください。
RFE: 6694710

 

分野: プラグイン
概要: 64ビットのツールキットが、64ビットのWindowsプラットフォームでサポートされるようになりました。
RFE: 6492139

 

分野: プラグイン
概要: 以前のリリースでは、Persistence APIによるアプレットの永続性は一時的であり、VMが終了するとデータは失われていました。 LiveConnectを使用してページのDOM内にデータを保存するか、またはJNLPサービスの1つを使用することで、任意の標準Javaメカニズムを介してデータを永続化できます。
RFE: 6992419

 

分野: プラグイン
概要: このリリースのDTプラグインでは、Google Chromeがサポートされています。
RFE: 6907245

 

分野: セキュリティ
概要: PKIXの実装が拡張され、対応するキーの堅牢性が十分でない場合に証明書を拒否するためのオプションが追加されました。例としては、サイズが1,024未満のRSAキーやMD2ハッシュ関数が挙げられます。
RFE: 6792180

 

分野: API: JSSE
概要: TLS 1.1のサポートがSunJSSEプロバイダに追加されたため、このリリースのSunJSSEプロバイダでは、"疑似プロトコル"SSLv2Helloはデフォルトではアクティブになっていません。
RFE: 4873188

 

分野: API: 言語
概要: 以前のリリースでは、javax.lang.model.typeパッケージに含まれる2つの例外タイプ、MirroredTypeExceptionMirroredTypesExceptionの間に関係はありませんでした。 javac実装では、MirroredTypesExceptionがスローされるべきケースでMirroredTypeExceptionがスローされていました。 この問題を解決する目的もあって、MirroredTypeExceptionMirroredTypesExceptionのサブクラスになりました。 この変更にはバイナリ互換性があり、通常、既存のアノテーション・プロセッサの動作は維持されます。 ただし、この変更によってクライアント・プログラムのソースに非互換性が生じる可能性があります。そのような場合は、catch句の順序を変更するとプログラムを再度コンパイルできるようになります。

 

分野: API: 言語
概要: このリリースにおける言語の変更をモデル化するため、javax.lang.model.*でいくつかの更新が行われました。一例を挙げると、javax.lang.model.type.TypeVisitorインタフェースにメソッドが追加されています。 この追加によって、TypeVisitorインタフェースを直接実装したライブラリとソースの間に非互換性が生じます。 ただし、このような追加はAPIの発展の一環として予測されていたものであり、ライブラリに直接インタフェースを実装するのではなく、ユーティリティ・ビジターを拡張するよう指示する明示的な警告が出されています。
RFE: 6933147

 

分野: API: ユーティリティ
概要: 以前のリリースでは、java.util.TreeMapのエラーのため、無効なNULL要素やComparableを実装していない要素を空のTreeMapsTreeSetsに挿入することが可能となっていました。 空のTreeMapsまたはTreeSetsに挿入できるのは1つの無効な要素のみであり、その他の要素では、想定どおりにNullPointerExceptionまたはClassCastExceptionが発生していました。 また、コレクションに対する他の操作のほとんども失敗していました。 JDK 7では、無効なNULL要素やComparableを実装していない要素を空のTreeMapまたはTreeSetに挿入すると、NullPointerExceptionがスローされます。
RFE: 5045147

 

分野: API: NIO
概要: JDK 7より前のリリースでは、java.nio.ByteBuffer.allocateDirect(int)を使用して割り当てられるダイレクト・バッファをページ境界に合わせていました。 JDK 7では実装が変更され、ダイレクト・バッファをページに合わせていないため、多数の小さなバッファを作成するアプリケーションのメモリ要件が軽減されます。 この文書化されていない位置合わせに以前から依存しているアプリケーションの場合は、コマンドライン・オプション-XX:+PageAlignDirectMemoryを指定して実行することで、以前の動作に戻すことができます。
RFE: 4837564

 

分野: API: AWT
概要: このリリースでは、重量コンポーネント(AWTなど)と軽量コンポーネント(Swingなど)の限定的な組合せが正式にサポートされています。 詳しくは、API仕様(java.awt.Componentクラス仕様と"See Also"リンクを参照)と記事Mixing Heavyweight and Lightweight Componentsを参照してください。 コンポーネントの組合せの問題を解決するためにカスタム・コードを使用しているアプリケーションで、組合せに対するサポートの組込みによって問題が発生している場合は、-Dsun.awt.disableMixing=trueシステム・プロパティを指定してこの機能を無効化できます。
RFE: 4811096

 

分野: API: AWT
概要: ウィンドウ・マネージャがシステム・トレイ(およびTrayIcon API)をサポートしているかどうかを検出する仕組みが変更されました。 現在のウィンドウ・マネージャを調べる代わりに、System Tray Protocol Specificationが使用されます。
RFE: 6438179

 

分野: API: AWT
概要: JDK 7リリースでは、2種類のAWTツールキットがサポートされています。 WToolkitはWindowsで、XToolkitはLinuxまたはSolarisでサポートされています。 LinuxまたはSolarisでのMToolkitの実装サポートは廃止されました。

 

分野: API: AWT
概要: この修正によって、すべてのjava.awt.Windowオブジェクト(フレームやダイアログは除く)が、X11における標準のトップレベル・ウィンドウになります。 JDK 6リリースでは、これらはOverrideRedirectウィンドウでした。
RFE: 6380835

 

分野: API: AWT
概要: 透明な背景色を指定することでPERPIXEL_TRANSLUCENTと同様の透明性を実現しているウィンドウでは、子の重量コンポーネント(AWTなど)が正しく表示されない可能性があります。 AWTは、ピクセル単位の半透明ウィンドウのみで軽量コンポーネント(Swingなど)をサポートしています。 2種類のコンポーネントの違いについて、詳しくはComponentクラス仕様と記事Mixing Heavyweight and Lightweight Componentsを参照してください。
RFE: 6802853

 

分野: API: DnD
概要: セキュリティ機能が拡張されたため、信頼できないアプリケーションに対する一部の操作で、例外がスローまたは出力されます。 たとえば、ドラッグ・アンド・ドロップ操作の途中で、マウス・ポインタを信頼できないJavaアプリケーションにドラッグすると、アプリケーションはドロップ・コールバック・メソッド内でのみ送信データを取得できます。 もう1つの例は、クリップボードの実装です。 信頼できないアプリケーションでは、java.awt.AWTPermission.accessClipboard権限を持たないユーザーがシステム・クリップボードにアクセスすることはできません。

 

分野: JGSS
概要: キータブ・ファイルが変更されるたびに、Javaによってこのファイルが読み取られるようになりました。 このファイルを使用するアプリケーションが起動される際、このファイルが空白であっても、存在しなくても問題ありません。

 

分野: JGSS
概要: このリリースでは、Windowsシステムや*nixシステムに対してデフォルトでkrb5.confを設定するJGSS向けに、デフォルト構成ファイルが提供されるようになりました。 これによって、JGSSやkrb5のプログラムのデプロイ、特にJavaアプレットのデプロイが非常に簡単になります。
RFE: 648321867854566552334

 

分野: JCE
概要: SunPKCS11プロバイダで、Raw RSA暗号化がサポートされるようになりました。たとえば、基盤となるPKCS11ライブラリでCKM_RSA_X_509メカニズムがサポートされている場合、Cipher.getInstance("RSA/ECB/NoPadding")を呼び出すことができます。 また、Cipherオブジェクトをリクエストする際に、SunPKCS11は、"RSA"を"RSA/ECB/PKCS1Padding"変換のエイリアスとして認識します。
RFE: 6994008

 

分野: JCE
概要: SunPKCS11プロバイダで、特定のブロック暗号に対して、PKCS5Paddingを使用したECBモードとCBCモードがサポートされるようになりました。 より具体的に言うと、対応するPKCS11メカニズムが基盤となるPKCS11ライブラリによってサポートされている場合、Cipher.getInstance(...)コールに対して次の変換がサポートされています。
CBCモードとPKCS5Paddingを使用したDES、DESede、AES、Blowfish
ECBモードとPKCS5Paddingを使用したDES、DESede、AES
ECBモードとNoPaddingを使用したDES、DESede、AES

RFE: 4898461

 

分野: JCE
概要: 基盤となるPKCS11ライブラリでCKM_AES_CTRメカニズムがサポートされている場合、SunPKCS11プロバイダでカウンタ・モード(CTR)(例:Cipher.getInstance("AES/CTR/NoPadding")コール)を使用したAES暗号化がサポートされるようになりました。
RFE: 6604496

 

分野: JCE
概要: Solaris 10 update 5リリースでSolarisの関連バグ(6306708 "CKM_SSL3_KEY_AND_MAC_DERIVEによって、エクスポート可能な暗号スイートに対して誤った暗号化キーが返される)が解決されたため、SunPKCS11プロバイダが次の2つのメカニズムをデフォルトで無効化することはなくなりました。
  • CKM_SSL3_KEY_AND_MAC_DERIVE
  • CKM_TLS_KEY_AND_MAC_DERIV

RFE: 7036252

 

分野: Java DB
概要: JDK 7は、Java DB 10.8.1.2によって更新されています。
RFE: 7042197

 



既知の問題




 

分野: ツール
概要: ダイアモンド演算子を使用した配列作成式を、コンパイラが間違って許可してしまいます。次に例を挙げます。

Object[] o = new ArrayList<>[42];
このプログラムは(JLSによると)誤った形式であるため、拒否されなければなりません。
RFE: 7057297

 

分野: ツール
概要: SolarisとLinuxで、LD_LIBRARY_PATH環境変数の使用がJavaランチャから削除されました。 この修正は、ほとんどのSolarisおよびLinuxユーザーにとってシームレスな変更ですが、旧バージョンのJDKからJDK 7を起動するJavaアプリケーションでは、JDK 7を実行する前に必ずLD_LIBRARY_PATH環境変数をクリーンアップする必要があります。もしくは、単純に、JDK 7を使用してJDK 7を起動します。 詳しくは、ブログ・エントリPurging LD_LIBRARY_PATHを参照してください。
RFE: 6367077

 

分野: ツール
概要: SolarisとLinuxでは、LD_LIBRARY_PATH環境変数が削除されたため、JDK 6の実行可能ファイルからJDK 7実行可能ファイルが実行されます。そのため、親の実行可能ファイルにおける設定が子の実行可能ファイルに適用される場合、JDK 7ランチャはLD_LIBRARY_PATH値に対して脆弱になります。 このような状況を回避するために、LD_LIBRARY_PATH環境変数にレガシー・ランタイムへのパスが含まれる場合は、Solaris上でLD_LIBRARY_PATHとバリアント型を設定してJavaランチャ自体を保護します。
RFE: 7029048

 

分野: ツール
概要: 値を必要とするアノテーションがクラスで使用されており、この値が別のクラスの定数値への最初の参照であり、さらにこのクラス自体にアノテーションが付けられている場合、javacコンパイラから例外がスローされる可能性があります。 この問題の回避策としては、定数値への静的なインポートを追加します。これによって、アノテーション値として使用する場合でも、定数値への最初の参照にはなりません。
RFE: 7043371

 

分野: ツール
概要: このリリースでは、次のプログラムはコンパイルされません。
import java.util.*;

interface A { List<Number>  getList(); }
interface B { List getList(); }
interface AB extends A, B {}

class Test {
    void test(AB ab) {
        Number n = ab.getList().get(1); //error here
    }
}
この問題は、以前はab.getList()A.getList()として解決されていたものが、このリリースではB.getList()として解決されることが原因となっています。 これに対して、次の回避策を使用できます。
      Number n = ((A)ab).getList().get(1); //works

RFE: 7062745

 

分野: HotSpot
概要: このループ・オプティマイザの問題は、JDK 7のビルド39以降とJDK 6 Update 14以降でまれに発生しています。 これは、ネストしたループに対してOn-Stack Replacement(OSR)コンパイルが実行された場合に発生し、メモリ操作の順序が不正に変更されることがあります。 この問題を引き起こすリグレッション・テストが、http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/diff/e3cbc9ddd434/test/compiler/7044738/Test7044738.javaで提供されています。
RFE: 7044738

 

分野: HotSpot
概要: この問題は、5091921の修正に関連した変更が実施されて以来、JDK 7のビルド139以降で発生しています。これは、ループ・オプティマイザに以前からあるループ境界チェックの問題です。 ループの本体に複雑な制御フローが含まれる場合に、この問題が発生することがあります。 推奨されている回避策は、コマンドラインで-XX:-UseLoopPredicate -XX:-LoopLimitCheckフラグを指定することです。
RFE: 7068051

 

分野: HotSpot
概要: JDK 6 Update 14では、CR 6684579のバグを修正するためにネストした参照の動作の細かい部分が変更されています。 この修正は、並行処理コレクタの一時停止時間の遅延に影響を与えるパフォーマンス異常に対応したものです。 JDK 7のガベージ・コレクタは、引き続き、JDK 6 Update 14およびその後続のJDK 6更新リリースと同じ方法で動作します。 ネストした参照の問題は、CR 6990438およびCR 6990442として追跡されており、両方ともJDK 8で対応される予定です。
RFE: 699043869904426684579

 

分野: HotSpot
概要: Ubuntu 10.10以降には、Serviceabilityコマンドに影響を与える、新しいデフォルト・セキュリティ・ポリシーが含まれています。 あるプロセスが同じUIDによって所有されている別のプロセスに関連付けられる際に、ターゲット・プロセスが元のプロセスの子でない場合、このポリシーによって関連付けが阻止されます。
新しいセキュリティ・ポリシーの影響を受けるコンポーネントは、次のとおりです。
  • Serviceability Agent(SA)
  • jinfo
  • jmap
  • jstack -F
より寛容なポリシーへ戻すには、次のいずれかの方法を使用します。 1) 一時的に(次のリブートまで)設定する場合は、/proc/sys/kernel/yama/ptrace_scopeの値を0に変更します。2) より永続的な設定にする場合には、/etc/sysctl.d/10-ptrace.confの値を0に変更します。 オプション1ではリブートの必要はありませんが、オプション2ではリブートが必要になります。
RFE: 7050524

 

分野: HotSpot
概要: JDK 7 FCS(b147)では、Apache Lucerneの一部であるPorterStemmerの実行中に、segvによってHotspotがクラッシュします。
推奨されている回避策は、コマンドラインで-XX:-UseLoopPredicateを指定することです。
この問題は、少なくともJDK 6 Update 23およびJDK 7ビルド102以降で、-XX:+AggressiveOptsを使用した際に発生しています。しかし、6942326向けの修正の一環として、定数Stringの長さを定数として扱うコードがデフォルトで有効化されたため、JDK 7ビルド134ではコマンドライン・フラグは提供されていません。
2011年7月27日、7070134への対応として、Hotspot 22向けのOpenJDK Hotspotソース・ベースにこの問題に対する暫定的な修正が適用されました。これを検証または使用するには、http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/4e761e7e6e12で提供されている変更セットを参照してください。
RFE: 69423267070134

 

分野: インストーラ
概要: JREのアンインストール中にカスタムの"Files in Use"ダイアログで取消しを実行すると、エラーは表示されませんが、その後のアンインストールを実行できなくなります。 この問題が発生する場合は、%TEMP%フォルダに作成されるMSI*.logファイルに、次の内容が含まれます。
MSI (s) (*:*) [*:*:*:*]: Product: Java(TM) 7 -- Removal failed.
MSI (s) (*:*) [*:*:*:*]: Windows Installer removed the product.
  Product Name: Java(TM) 7. Product Version: 7.0.0.
  Product Language: 1033. Removal success or error status: 1602.
この問題を回避するには、HKEY_CURRENT_USER\Software\JavaSoft\FIUCancelレジストリ・キーを削除し(存在する場合)、アンインストールを再試行します。

 

分野: Webstart
概要: JNLPインストール・ヒントが無視される場合があります。 次のいずれかの場合、デフォルト設定(Install、ヒントが付いている場合)のままではアプリケーションまたはアプレットがインストールされません。
  1. メインのJNLPファイルに対するhrefタグがJNLPファイルに含まれておらず、offline-allowedが指定されていない場合
  2. プラットフォームでショートカットがサポートされていない場合

RFE: 7046670

 

分野: プラグイン
概要: Javaプラグインとブラウザで、異なるhttpsセッションを使用して認証が実行されます。 このため、あるユーザー名とパスワードをブラウザに提供した後で、もう1つのユーザー名とパスワードをJavaプラグインに提供する必要があります。
Firefoxに対しては、二重認証を回避するためにJavaプラグイン実装の変更が実施されていますが、Microsoftは必要なAPIを公開していないので、同じ解決方法をInternet Explorerに適用することはできません。
二重認証ダイアログを回避するには、次の回避策を適用します。 Javaプラグイン向けのユーザー名/パスワードのダイアログ・ボックスが表示される際に、ユーザー名とパスワードを保存するためのオプションが表示されます。 ダイアログでこのチェック・ボックスをクリックすると、この特定のサイトに対するユーザー名とパスワードがプラグインに記録されるため、認証ダイアログが再表示されることはなくなります。
RFE: 6936012

 

分野: プラグイン
概要: Internet Explorerでは、ウィンドウのターゲット名が名前付け規則に従っていない場合(空白が含まれる場合など)、showDocument APIを使用してアプレットからドキュメントを開くことはできません。 W3CのサイトにあるHTMLの仕様で、正式な名前付け規則が定義されています。 次にその一部を抜粋します。 IDトークンとNAMEトークンは、文字([A-Za-z])で始まる必要があり、任意の数の文字、数字([0-9])、ハイフン("-")、アンダースコア("_")、コロン(":")、ピリオド(".")が含まれます。 たとえば、次のコードは正しく動作しません。
    showDocument("http://myhost/myDoc.html", "my window");   // 誤
次のコード・スニペットで使用しているウィンドウ・ターゲット名は名前付け規則に準拠しているため、コードは正しく動作します。
    showDocument("http://myhost/myDoc.html", "my_window");   // 正
RFE: 7074254

 

分野: セキュリティ
概要: このリリースでは、SSLv2Helloハンドシェイク・プロトコルはデフォルトで無効化されています。このプロトコルは、SSLv3を認識しない旧式のSSLv2サーバー実装と通信する目的で、SSLv3サーバー実装によって使用されていたものです。 この変更による副次的作用は、SSL/TLS拡張がHelloメッセージから削除されなくなったことです。 認識されない拡張機能はSSL/TLSピアによって無視されるため、ほとんどの場合、これは問題になりません。 しかし、古いサーバー実装では、問題が発生する可能性もあります。
RFE: 48731886916074

 

分野: セキュリティ
概要: Elliptic Curve Cryptography(ECC)キーを含む公開鍵証明書が、Solaris 11上のSunPKCS11 JCEセキュリティ・プロバイダによって正しく解析されません。 既知の回避策は、代わりにSunEC JCEセキュリティ・プロバイダを使用することです。
RFE: 7054637

 

分野: 国際化
概要: CR 4700857向けの変更の影響で、ロケール形式とロケーションがWindowsシステムのローカル言語とは異なる言語に設定されている場合、javax.xml.datatype.XMLGregorianCalendartoGregorianCalendar()メソッドを呼び出すことで作成されたGregorianCalendarインスタンスが、週の最初の日を誤った日付で返す場合があります。 次に、週の最初の日が異なる日付を持つOSロケールに対して、別のロケール形式とロケーションが設定されている事例を示します。 例:
OS ロケール形式/ロケーション
en_US de_DE
en_CA de_DE
de_DE en_CA
iw_IL fi_FIなど

RFE: 4700857

 

分野: 国際化
概要: 中国語、日本語、または韓国語のロケールを持つLinuxディストリビューションでは、SCIM/iBusベースの入力メソッドを使用しているときに、キーを押し続けて自動リピートすると、ハングすることがあります。 ハングした場合は、入力メソッドのデーモンを再起動する必要があります。 または、SCIM/iBusベースでない入力メソッドを使用すると、この問題を完全に回避できます。
RFE: 6506617

 

分野: JSSE
概要: JDK 7のSunJSSEプロバイダでもっとも望ましいのは、Elliptic Curve Cryptography(ECC)アルゴリズムおよびAdvanced Encryption Standard(AES)ベースの暗号スイートです(Java Cryptography Architecture Oracle Providers DocumentationThe SunJSSE Providerを参照)。 ただし、負荷が重い場合、欠陥を含む一部のオペレーティング・システムのネイティブのPKCS11実装は正しく動作しません。これは、基盤となるJCEプロバイダがPKCS11ベースである場合に、TLSハンドシェイクで障害が発生するためです。 ネイティブのPKCS11ライブラリを更新するか、または次の回避策のいずれかを適用することが推奨されています。 a) SunJSSEプロバイダでAESアルゴリズムを無効化する。b) Java実装全体で、PKCS11 JCEプロバイダを無効化する。
RFE: 6916074

 

分野: API: JMX
概要: MLetクラス・ローダーを使用して、jarファイルに格納されたリソース・ファイルをロードすることができません。 このバグは、JDK 6リリースとJDK 7リリースで発生します。 この問題の回避策は、クラスパスからjarファイルを取得することです。
RFE: 7055240

 

分野: API: AWT
概要: 半透明のウィンドウに対するサポートがAWTに追加されました。 Windows.setOpacity()Windows.setShape()、またはWindows.setBackground()といったメソッドを起動して視覚効果を有効化する前に、開発者は、目的の効果がサポートされているかどうかを確認する必要があります。 この確認を行うには、GraphicsDevice.isWindowTranslucencySupported()メソッドを呼び出し、目的の効果を引数として指定します。 メソッドから効果がサポートされていると通知された場合は、その効果を有効化しても例外はスローされません。 ただし、X11システム(Linux、Solaris)での視覚効果の使用には、いくつかの問題があります。
  1. ピクセル単位の半透明(Windows.setBackground()): この効果はサポート対象として通知される場合がありますが、システムが合成マネージャを実行していないために、この効果を有効化したウィンドウが視覚的に透明に見えないことがあります。 システムでは、合成ウィンドウ・マネージャ(compizなど)か個別の合成マネージャ(xcompmgrなど)のいずれかを実行する必要があります。 残念ながら、合成マネージャが実行中であるかどうかを検出する方法はないため、透明ウィンドウが実際に透明に見えるかどうかをJavaから通知することはできません。 Javaがチェックおよび通知できるのは、ウィンドウに対する効果の有効化がネイティブ・プラットフォームでサポートされているかどうかという点のみです。
  2. 単純な半透明(Window.setOpacity()):Javaからこの効果は使用できないと通知される場合がありますが、実際には、ウィンドウ・マネージャはアクティブ・アプリケーションに対してこの効果をサポートしており、半透明ウィンドウを表示できます。 この問題は、ウィンドウ・マネージャ(Metacityの一部のバージョンなど)がこの効果をサポートしていることを通知しないために発生します。 これはJavaの欠陥というよりも、ウィンドウ・マネージャのバグである点に注意してください。 詳しくは、6762511を参照してください。

RFE: 6990921

 

分野: API: AWT
概要: この問題は、X11システム(Linux、Solaris)でのWindow.toFront()Window.toBack()の動作に固有の問題です。 AWTは、常に、ウィンドウイング・システム(X11システム向けのICCCMやEWMHなど)の仕様に従って、ウィンドウをスタック順序の最上位または最下位にするために必要なすべてのアクションを実行します。 アクションが有効になるかどうかは、システムで実行されているウィンドウ・マネージャによって異なります。 一部のウィンドウイング・システムでは、ウィンドウをスタック順序の最上位にする際に、追加の制約が適用されます。 ほとんどの場合、このような追加の制約は、これらのウィンドウ環境におけるユーザビリティやセキュリティの向上を目的としたものです。 それ以外の場合、これらは単純にウィンドウイング・システムのバグである可能性があります。 つまり、Window.toFront()メソッドやWindow.toBack()メソッドを起動しても、常に期待した結果が得られるとは限りません。
toFront()メソッドの仕様がこの問題の一因であると言えますが、JDK 7の開発中には、この特有の動作に関する苦情がユーザーから複数寄せられました。 AWTは追加制約を省くことも、サード・パーティのソフトウェアのバグを回避することもできないため、これらのCRはすべて"Not a Defect"としてクローズされています。 Javaアプリケーションでこの問題が発生する場合、通常は、ネイティブ・アプリケーションでも同じように動作するかどうかを確認し、ウィンドウイング・システムに対するバグとして届け出ることをお勧めします。

 

分野: API: 2D
概要: 古いLinuxバージョンを使用している場合、プラットフォームの/usr/lib/libXrender.soにバグが含まれるため、新しいJava 2D Xrenderパイプラインによって、JREがハングするか、またはXserverからアプリケーションへの接続が切断されて警告なしで終了する場合があります。 このバグはfreedesktop.orgで文書化されており、GradientPaintクラスを使用するアプリケーションに影響を及ぼします。 アプリケーションでグラデーションの使用を避ける以外に、既知の回避策はありません。 このバグは、Red Hat Enterprise Linux(RHEL)5.6以前とOracle Enterprise Linux 5.6以前に影響を与えることが分かっています。 年代の近いその他のバージョンにも、同様の影響が及ぶ場合があります。 この問題の解決策は、バージョン0.9.3以降のXrenderライブラリをインストールするか、Oracle Enterprise Linux 6などの新しいLinuxディストリビューションにアップグレードすることです。 Xrenderパイプラインは、JDK 7ではデフォルトで無効化されていますが、システム・プロパティに"-Dsun.java2d.xrender=True"を設定することで有効化できます。 こうすることで、このバグが存在しないことを実装から確認できない場合でも、Xrenderバグに関する警告が通知されます。
Xrenderパイプラインについて、詳しくはJava™ SE 7におけるJava 2Dの拡張機能を参照してください。
RFE: 7032904

 

分野: API: テキスト
概要: 反復インデックスが初期化される前に、テキスト属性がBidi(AttributedCharacterIterator)コンストラクタにチェックインされます。 インデックスが最初の文字に設定されていない場合、Bidi.baseIsLeftToRight()メソッドから間違った値が返されます。 反復インデックスがテキスト範囲の外にある場合、この問題を回避するには、Bidi(AttributedCharacterIterator)コンストラクタを呼び出す前にAttributedCharacterIterator.first()メソッドを呼び出して、反復インデックスをリセットします。
RFE: 7042148

 

Left Curve
Javaリソース
Right Curve