Java SE 6 Update 10 Beta > 新しい Java Plug-In > Java プラットフォームバージョン選択
まとめ
次世代の Java Plug-In テクノロジ (以下、「Java Plug-In」) により、Web ブラウザで各アプレットを実行するために使用する Java Runtime Environment (JRE) のバージョンをきめ細かく制御できます。このドキュメントでは、使用可能なバージョン選択のメカニズムとその動作について、「従来の」Java Plug-In との違いも含めて、説明します。
目次
Java SE 6 Update 10 で、Sun Microsystems, Inc. は Java Plug-In の新しい実装を導入します。Java Plug-In は、ソフトウェアの一部で、Web ブラウザでアプレットを実行します。新しい Java Plug-In は、Sun が Java を直接サポートするすべてのプラットフォーム (Solaris、Linux、Microsoft Windows)、およびサポートされるすべてのブラウザファミリ (Mozilla Firefox ファミリのブラウザ、Internet Explorer 6 および 7) に対して同時に導入されます。
新しいプラグインでは、アーキテクチャーが大幅に再設計されています。Web ブラウザのプロセスに埋め込まれる Java™ 仮想マシン (JVM) インスタンスでアプレットを実行するのではなく、アプレットを実行する JVM インスタンスは Web ブラウザとは別のプロセスになりました。このアーキテクチャーは、Solaris および Linux プラットフォームの「従来の」Java Plug-In と似ていますが、Web ブラウザ間の通信チャネルと関係、および接続される JVM インスタンスが再設計されました。新しいプラグインでは、Web ブラウザへの複数の JVM インスタンスの同時接続がサポートされます。
新しいプラグインでは、従来のプラグインのようにアプレットごとに新しい JVM インスタンスが必ずしも作成されるわけではなく、新しいプラグインのデフォルトの動作は、同じ JVM インスタンスでのすべてのアプレットの実行です。
新しい Java Plug-In は、複数の同時接続 JVM インスタンスをサポートするだけでなく、複数の JRE バージョンもサポートします。より正確には、同じブラウザセッション内での他のアプレットの実行に使用される JRE のバージョンに影響を与えずに、特定のバージョンの JRE 上での個々のアプレットの実行をサポートします。この機能は、アプリケーションの起動に使用される JRE のバージョンの選択を可能にする、Java Web Start が提供する機能と似ています。新しいプラグイン経由で以前のバージョンの JRE が選択されると、新しいプラグインのコードが以前の JRE バージョン上で自動的に実行されます。この動作も、Java Web Start 起動ツールの動作と似ています。
新しい Java Plug-In のバージョン選択メカニズムは、1.4.2 までの JRE バージョンで動作します。JRE 1.3.1 以前のバージョンはサポートされません。たとえば 1.3.1 に関する制限を回避するために、ブラウザセッション内の一部のアプレットに新しい Java Plug-In を使用し、その他のアプレットに従来の Java Plug-In を使用することはできません。
以前のバージョンの JRE の技術上の制限から、Unix/X11 プラットフォーム (Solaris および Linux) では、選択できる最も古い JRE バージョンは 5.0 です。新しい Java Plug-In を使用した 1.4.2 上でのアプレットの実行は、これらのプラットフォームではサポートされません。
新しい Java Plug-In は、アプレットを起動する JRE バージョンを選択するためのプラットフォームやブラウザに依存しない新しいメカニズムを提供します。それが java_version アプレットパラメータです。この新しいパラメータは以下をサポートします。
- 特定の JRE バージョンの選択 (「1.5.0_11」)
- 特定の JRE ファミリの選択 (「1.5*」)
- 特定の JRE ファミリ以降の選択 (「1.5+」)
新しい ★Deployment Toolkit★ を使用すると、HTML を手作業で記述することなく、ブラウザに依存しない方法でこのパラメータを指定することができます。
最も充実した情報を提供するために、新しいバージョン選択のメカニズム、および既に使用可能なブラウザ固有のメカニズムとの相互運用のしくみについて、詳しく説明します。バージョン選択の動作の詳細については、その後のセクションで説明します。
ブラウザに依存しない JRE バージョン選択を提供するために、<applet>、<object>、および <embed> タグに java_version パラメータが追加されました。このパラメータの値は、JNLP 仕様の第 4 章と付録 A に記載されているルールに従うバージョン文字列です。特定の JRE バージョンの選択、特定のファミリのバージョンの選択、または特定のファミリ以降のバージョンの選択がすべてサポートされます。
java_version パラメータは、<applet> および <object> タグと使用するときは埋め込みの <param> タグ内の名前と値のペアとして、<embed> タグと使用するときは java_version=[version] を使用して指定してください。その他の代替形式または短縮形式の構文は、ブラウザ間での動作が保証されません。詳細は、「★Java Plug-In Guide★」の「★Using APPLET, OBJECT and EMBED tags★」セクションを参照してください。
システム上で利用可能な最新の JRE 上で実行する場合は、java_version パラメータは必要ありません。これはデフォルトの動作です。
下の例は、java_version パラメータの使用方法を示しています。
java_version パラメータのサポートは、新しい Java Plug-In によって提供されます。新しい Java Plug-In が特定のシステム上に存在しない場合、アプレットごとの JRE バージョン選択をサポートするには、ブラウザ固有のメカニズムをダウンロードしてインストールする必要があります。一般に、Internet Explorer ファミリでは、プラグインを自動ダウンロードするために <object> タグおよび classid 属性が使用されます。Mozilla ブラウザファミリでは、同じ目的のために <embed> タグおよび MIME タイプが使用されます。java_version パラメータと <object> および <embed> タグの組み合わせの詳細については、後述の classid および version の説明の「推奨される使用法」を参照してください。
<object> タグと <embed> タグはどちらも、コンテンツの一部をレンダリングするために使用するプラグインのバージョン選択をある程度サポートします。下位互換のために、新しいプラグインではこれらのタグに対する以前のバージョン選択手法が一部サポートされますが、新しい機能のすべてにアクセスするには既存のコンテンツに変更を加える必要があります。詳細については、後のclassid の下位互換およびversion の下位互換を参照してください。
<applet> タグを使用して、個々のアプレットに対して特定の JRE バージョンを選択:
<applet codebase="http://foo.bar.com/" code="MyApplet" ...>
<param name="java_version" value="1.5.0_11">
</applet>
特定のファミリの最新の JRE を選択:
<applet codebase="http://foo.bar.com/" code="MyApplet" ...>
<param name="java_version" value="1.5*">
</applet>
特定のファミリまたはそれ以降のファミリの JRE を選択:
<applet codebase="http://foo.bar.com/" code="MyApplet" ...>
<param name="java_version" value="1.5+">
</applet>
これらの要求がどのように満たされるかについての詳細は、「バージョン選択の動作」を参照してください。
Internet Explorer ブラウザは、<object> タグの classid 属性を使用して、そのタグのコンテンツの表示方法を示します。『★Java Plug-In Developer Guide★』の「★Using the Applet, Object and Embed Tags★」には、classid 属性の使用方法、および codebase 属性と組み合わせて、システム上でどのバージョンも使用できない場合に特定の JRE バージョンを自動的にダウンロードしてインストールする方法が記述されています。ファミリ CLSID という概念は、特定のファミリ内の任意の JRE を選択する方法を提供するために、最近になって導入されました。
以前のマニュアルで説明されている classid オプションのすべてが、新しい Java Plug-In と組み合わされて動作して、特定の JRE バージョンを選択または自動的にダウンロードしてインストールするわけではありません。ここでは、新しいプラグインと組み合わされて動作する要素と、下位互換メカニズムが用意されている要素について説明します。
classid 属性の推奨される使用法は、前述の java_version パラメータと組み合わせることです。複数の JRE をサポートする最新バージョンの Java Plug-In が使用されるように示すには、インストールされている最新の JRE バージョンを常に参照する動的な classid を <object> タグで指定してください。次に、java_version パラメータを使用して、アプレットの実行に使用する JRE のバージョンを指定してください。
推奨される使用法の例:
<object
classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase="http://java.sun.com/out-of-proc-plugin-url-placeholder.exe#1,6,0,10"
width="200" height="200">
<param name="code" value="MyApplet">
<param name="java_version" value="1.5*">
</object>
現時点では、Sun Microsystems, Inc. は、新しい Java Plug-In を記述するための新しい CLSID を提供せず、動的 classid の使用をオーバーロードしています。つまり、Java Plug-In で複数の JRE バージョンをサポートしない、以前のバージョンの JRE が既にインストールされている場合は、その classid のハンドラが既に使用可能であるため、新しい Java Plug-In は自動的にダウンロードおよびインストールされません。その結果、java_version パラメータを使用したバージョン選択は無視されます。新しい classid を提供しないという決定は、将来再検討される可能性があります。当分の間、Sun は、複数の JRE バージョン選択および新しい Java Plug-In の自動ダウンロードを必要とする上級開発者が、多くの企業で一般的であるように、コンテンツを正しく実行するにはユーザーが新しい Java Plug-In をインストールして構成する必要があることをドキュメント化するか、クライアントマシンを管理制御することを期待します。
classid 属性を既に使用している開発者が容易に移行できるようにするために、2 つの下位互換メカニズムが導入されました。classid を使用して特定の JRE バージョンまたは特定のファミリの任意の JRE を選択する機能です。どちらの場合も、新しい Java Plug-In とアプレットのターゲット JRE バージョンの両方が既にインストールされて構成されていることが前提です。これらの下位互換メカニズムと組み合わせて、新しい Java Plug-In を提供する JRE であれ、アプレットの実行に使用する JRE であれ、JRE を自動的にダウンロードすることはできません。
これらの下位互換メカニズムは将来のリリースで削除される可能性があります。Sun は、既存のコンテンツを前述の新しいメカニズムに移行することをお勧めします。
個々のアプレットに対して特定の JRE バージョン (1.5.0_11) を選択:
<object
classid="clsid:CAFEEFAC-0015-0000-0011-ABCDEFFEDCBA"
width="200" height="200">
<param name="code" value="MyApplet">
</object>
ファミリ CLSID を使用して特定のファミリ (1.5) の最新 JRE を選択:
<object
classid="clsid:CAFEEFAC-0015-0000-FFFF-ABCDEFFEDCBA"
width="200" height="200">
<param name="code" value="MyApplet">
</object>
codebase パラメータを使用して古いバージョンの JRE をダウンロードしようとしても無視されます。これらの classid は、最新バージョンの DLL を参照するように新しい Java Plug-In のインストールプロセス中にシステムで登録されるためです。java_version パラメータをこれらの classid と組み合わせて使用することもサポートされていません。java_version パラメータと静的またはファミリ classid の両方を指定すると、定義されていない動作が発生します。
Mozilla ブラウザファミリは、<embed> で MIME タイプを使用して、そのタグのコンテンツの使用方法を示します。『★Java Plug-In Developer Guide★』の「★Using the Applet, Object and Embed Tags★」には、<embed> タグの使用方法と、特定のバージョンの JRE の自動ダウンロードのサポートについての詳しい説明が記載されています。
以前のバージョンの Java Plug-In は、application/x-java-applet MIME タイプの version および jpi-version 部分を使用して JRE のバージョン選択を実行していました。以前のマニュアルで説明されているこれらのメカニズムのすべてが、新しい Java Plug-In と組み合わされて動作して、特定の JRE バージョンを選択または自動的にダウンロードしてインストールするわけではありません。ここでは、新しいプラグインと組み合わされて動作する要素と、下位互換メカニズムが用意されている要素について説明します。
<embed> タグの推奨される使用法は、アプレットの MIME タイプで version または jpi-version を指定しないことです。代わりに、java_version パラメータを使用して、アプレットを実行する特定の JRE バージョンを選択します。以前の Java バージョンがインストールされていない場合は、pluginspage パラメータを使用して、新しい Java Plug-In の自動ダウンロードを有効にすることができます。
<embed code="MyApplet"
type="application/x-java-applet"
pluginspage="http://java.sun.com/out-of-proc-plugin-url-placeholder.xpi"
width="200" height="200">
java_version="1.5*"
</embed>
現時点では、Sun Microsystems, Inc. は、新しい Java Plug-In を記述するための新しい MIME タイプを提供せず、application/x-java-applet MIME タイプの使用をオーバーロードしています。つまり、Java Plug-In で複数の JRE バージョンをサポートしない、以前のバージョンの JRE が既にインストールされている場合は、その MIME タイプをサポートするプラグインが既に使用可能であるため、新しい Java Plug-In は自動的にダウンロードおよびインストールされません。その結果、java_version パラメータを使用したバージョン選択は無視されます。新しい MIME タイプを提供しないという決定は、将来再検討される可能性があります。当分の間、Sun は、複数の JRE バージョン選択および新しい Java Plug-In の自動ダウンロードを必要とする上級開発者が、多くの企業で一般的であるように、コンテンツを正しく実行するにはユーザーが新しい Java Plug-In をインストールして構成する必要があることをドキュメント化するか、クライアントマシンを管理制御することを期待します。
MIME タイプの version および jpi-version 部分を既に使用している開発者が容易に移行できるようにするために、新しい Java Plug-In では限定的な下位互換がサポートされます。具体的には、特定のファミリまたはそれ以降のファミリの任意の JRE を要求するための version 属性がサポートされます。jpi-version 属性を使用した特定の JRE バージョンの選択はサポートされなくなりました。新しいJava Plug-In の正しい動作を中断する可能性があるため、この属性を使用しないことを強くお勧めします。
この下位互換メカニズムは将来のリリースで削除される可能性があります。Sun は、既存のコンテンツを前述の新しいメカニズムに移行することをお勧めします。
version 属性を使用して 1.5 JRE 以降を要求:
<embed code="MyApplet"
type="application/x-java-applet;version=1.5"
width="200" height="200">
</embed>
version 属性のセマンティクスでは、上記のタグが値 1.5+ を持つ java_version パラメータの使用と同等であることが暗示されています。新しい Java Plug-In は 5.0 よりも新しいバージョンの Java SE 6 Update 10 で提供されるため、このバージョン要求は実質的に無効です。
また、version 属性と java_version パラメータの組み合わせはサポートされません。java_version パラメータと version 属性の両方を指定すると、定義されていない動作が発生します。
前述のバージョン選択メカニズムはすべて、同じ基盤コードパスを使用して実装されます。ここでは、特定の JRE バージョンの検出とバージョン選択に関連するユーザー経験について一般的な用語で説明します。
すべてのプラットフォームで、新しいプラグインは、Java コントロールパネルの一覧にあるエントリから使用する JRE を見つけます (「Java」タブ、「Java アプレットのランタイム設定」の「表示」ボタン)。この一覧内の使用可能な JRE は、deployment.properties ファイルでエンコードされます。このファイルの場所はプラットフォームによって異なります。Windows プラットフォームでは、通常 C:\Documents and Settings\[username]\Application Data\Sun\Java\Deployment にあります。Unix プラットフォームでは、通常 ~/.java/deployment/deployment.properties にあります。
Windows プラットフォームでは、Java コントロールパネルと新しい Java Plug-In の両方が、インストール済みの JRE を自動的に検出し、それらを使用可能なセットに追加します。Unix プラットフォームでは、インストール済みの JRE の自動検出はサポートされません。Java コントロールパネルの「Java アプレットのランタイム設定」ダイアログを使用して、新しい Java Plug-In の既知の一覧に JRE を手動で追加することができます。
詳細については、Java コントロールパネルの変更事項に関するリリースノートのセクションを参照してください。
デフォルトでは、新しい Java Plug-In は、この一覧にある最新の JRE バージョンですべてのアプレットを実行します。明示的に要求された場合にのみ、以前の JRE バージョンでアプレットを実行します。
「1.5.0_11」のような特定の更新リリースなど、特定の JRE バージョンでアプレットを起動するための要求の場合:
- 使用可能な JRE の一覧が調べられます。正確に一致するバージョン文字列がある場合は、その JRE バージョンが選択されます。そうではなく、同じファミリの JRE が 1 つ以上インストールされている場合は、最新バージョンが選択されます。そうでない場合は、マシン上で使用できる最新の JRE が選択されます。
- 選択された JRE バージョンはファミリのセキュリティーベースラインと比較されます。そのバージョンに等しい、またはそのバージョンより新しい場合、それ以上の要求は行われず、アプレットが起動されます。
- そうでない場合は、アプレット用のコードが、選択した JRE バージョンの JVM インスタンスでダウンロードされます。アプレットが署名されていて、ユーザーがアプレットのセキュリティーダイアログを受け入れる (またはコードソースが既に信頼されている) 場合は、それ以上の要求は行われず、アプレットが起動されます。
- そうでない場合は、「古い」JRE バージョンで未署名のアプレットを処理します。このアプレットは古い JRE リリース上での実行を要求していることを示すダイアログボックスが表示され、実行を許可するかどうかをユーザーに確認します。ユーザーが「はい」をクリックした場合、アプレットは起動されます。ユーザーが「いいえ」をクリックした場合、アプレットは、使用可能な最新の JRE バージョン上で再起動されます。
特定のファミリでアプレットを起動するための要求の場合は、そのファミリの最新の JRE が選択され、上記の手順の (2) 以降が実行されます。
特定のファミリまたはそれ以降のファミリでアプレットを起動するための要求の場合は、使用可能な最新の JRE がアプレットの起動に使用されます。
「従来の」Java Plug-In と比較して、新しい Java Plug-In では JRE の特定の更新リリースの選択が可能です。「従来の」Plug-In の最新リリースと同様、JRE ファミリまたはインストール済みの最新 JRE の選択がサポートされていて、Java Web Start に匹敵するブラウザに依存しない新しいバージョン選択メカニズムが追加されています。Internet Explorer と Mozilla ブラウザファミリの両方で既存のバージョン選択メカニズムを使用するアプレットコンテンツとの下位互換をある程度提供します。
特に、新しいプラグインは Internet Explorer で静的 CLSID を尊重しようとします。従来のプラグインの現在のバージョンは、静的 CLSID をインストール済みの最新 JRE バージョンに常にリダイレクトします。
ユーザー経験は従来のプラグインとわずかに異なります。特に、アプレットが古い JRE バージョンを選択した場合のアプレット単位での警告ダイアログの表示は新しい動作です。ただし、これは、アプレット単位で JRE バージョンを選択できるように柔軟性が拡張されたために必要となりました。警告ダイアログの表示は、Java Web Start での表示と最大限類似するように設計されており、これらの 2 つのテクノロジは将来的にさらに統一される予定です。
新しい Java Plug-In の JRE のバージョン選択機能は、アプレットコンテンツのエンタープライズ配備での長年の問題を解決することを目的としています。Sun Partner チャネルまたは★Java Plug-In forum★を通じてフィードバックをお寄せください。