Java SE 7の機能と拡張機能


Java Platform, Standard Edition 7は主要機能リリースです。このドキュメントでは、Java SE 7と、Java SE 7のOracle実装である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が追加されており、クラス・ローディング処理に対するよりきめ細かいロック・メカニズムとパラレル・ローディングがサポートされています。カスタム・クラス・ローダーでこの機能を利用する場合、推奨されるモデルや要件について『Class Loader API Modifications for Deadlock Fix』ドキュメントを参照し、これに従って実装する必要があります。

 

分野: 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への変更は、Java SE 7で対処された重要なRFEセクションに掲載されています。

 

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

 

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

 

分野:ツール
概要:自己署名付きでない証明書を生成するため、新しいkeytoolコマンド(-gencert)が提供されています。新オプション(-ext)を使用すると、-gencert-genkeypair-certreqコマンドでいくつかのX.509 v3の拡張を生成できます。また、keytoolツールとjarsignerツールに対して、その他の新しいコマンドとオプションが提供されています。詳しくは、『keytool』と『jarsigner』のツール・ドキュメントを参照してください。
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
概要:Solarisを使用している場合に限られますが、以前のリリースではThread.interrupt()メソッドによって一部のブロッキングI/O処理が妨げられるため、ターゲット・スレッドによってInterruptedIOExceptionがスローされ、ソケット・ストリームやファイル・ストリームが整合性を欠いた状態のままになっていました。この、いわゆる"割込み可能なレガシーI/Oサポート"はJDK 7では無効化されています。Solaris固有のこの動作に依存していたアプリケーションは、コマンドラインから-XX:+UseVMInterruptibleIOオプションを実行することで、このサポートを再び有効化できます。ただし、将来のJDKリリースでは、割込み可能なレガシーI/Oサポートは完全に削除される可能性があります。
RFE: 6554406

 

分野: JSSE
概要:TLS再ネゴシエーションの修正が実装されました。詳しくは、『TLS / SSLv3 Renegotiation Vulnerability Explained』、『Understanding the TLS Renegotiation Attack』、『Authentication 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を使用したBlowfish、DES、DESede、AES
ECBモードとPKCS5Paddingを使用したAES、DES、DESede
ECBモードとNoPaddingを使用したAES、DES、DESede

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環境変数にレガシー・ランタイムへのパスが含まれる場合、LD_LIBRARY_PATHとバリアント型をSolarisに設定することで、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セッションを使用して認証が実行されます。このため、あるユーザー名とパスワードをブラウザに提供した後で、別のユーザー名とパスワードを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 Documentation』のThe 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の欠陥というよりも、ウィンドウ・マネージャのバグである点に注意してください。詳しくは、CR 6762511を参照してください。

RFE: 6990921

 

分野:API:AWT
概要:この問題は、X 11システム(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(OEL)5.6以前に影響を与えることがわかっています。年代の近いその他のバージョンにも、同様の影響が及ぶ場合があります。この問題の解決策は、0.9.3以降のバージョンのXrenderライブラリをインストールするか、新しいLinuxディストリビューション(OEL 6など)にアップグレードすることです。XrenderパイプラインはJDK 7ではデフォルトで無効化されていますが、システム・プロパティに"-Dsun.java2d.xrender=True"を設定することで、有効化できます。こうすることで、このバグが存在しないことを実装から確認できない場合、Xrenderバグに関する警告が通知されます。
Xrenderパイプラインについて、詳しくは『Java 2D Enhancments in Java SE 7』を参照してください。
RFE: 7032904

 

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