注:この Java Plug-in ガイドでは、Java SE 6 update 10 リリースより前にリリースされた機能について説明します。最新情報については、Java Rich Internet Application の開発および配備を参照してください。

< 目次

Java 拡張機能の配備

注: Java 拡張機能は、「オプションパッケージ」、「標準拡張機能」、または単に「拡張機能」とも呼ばれます。

このセクションでは、次のトピックについて説明します。

Java アプレットは、Java 拡張機能を使用してユーザーに追加の機能を提供します。アプレットは Java Plug-in を使用して、さまざまな Java 拡張機能 (JavaHelp、Java 3D、Java Media Framework など) の Java Runtime Environment へのインストールをトリガーできます。このドキュメントでは、Java Plug-in で「インストール型 Java 拡張機能」(「バンドル型 Java 拡張機能」に相対するもの) を配備する基本的な手順を示します。Java 拡張機能の稼動方法の詳細は、「Java 拡張機能メカニズム」を参照してください。

概要

拡張機能を使用するアプレットは、マニフェストを含む署名付き JAR ファイルとしてパッケージ化されます。Java Plug-in は、アプレットがダウンロードされて Java Plug-in と一緒に実行されるときに、アプレット JAR ファイルのマニフェストをチェックします。マニフェストには、アプレットに必要な拡張機能の一覧が含まれています。個々の拡張機能は 1 つ以上の JAR ファイルで構成され、これらのファイルは <jre>/lib/ext ディレクトリにインストールされます。

通常、アプレットのマニフェストには、拡張機能ごとに拡張機能 JAR ファイルの名前、ベンダー、およびバージョン情報の一覧が含まれています。また、JAR ファイルが <jre>/lib/ext にインストールされていない場合や、古くなっている場合のために、JAR ファイルまたはそのインストーラを取得できる URL の一覧も含まれています。URL は、拡張機能 JAR ファイルの 1 つを直接指定している場合や、拡張機能 JAR ファイルをインストールするインストーラ (ネイティブまたは Java) を指定している場合があります。更新が必要かどうかを判断する規則については、「オプションパッケージのバージョン管理」で説明します。

Java Plug-in を使って Java 拡張機能を配備するには、拡張機能に関する情報が次の 3 つのマニフェストファイルに指定されている必要があります。

  1. アプレット JAR ファイルのマニフェスト

  2. 各拡張機能 JAR のマニフェスト

  3. Implementation-URL JAR ファイルのマニフェスト

これらの各マニフェストファイルについての詳しい説明は次のとおりです。

アプレット JAR ファイルのマニフェスト

アプレットに Java 拡張機能を配備するには、アプレットを JAR ファイルとしてパッケージ化する必要があります。また、アプレット JAR ファイルのマニフェストファイルには、「オプションパッケージのバージョン管理」に従って、必要な拡張機能の一覧を定義し、拡張機能をダウンロードできる URL および拡張機能に関するその他の情報を指定する必要があります。次の例は、拡張機能が 2 つのマニフェストファイルです。

Extension-List: RectangleArea RectanglePerimeter
RectangleArea-Extension-Name: com.mycompany.RectangleArea
RectangleArea-Specification-Version: 1.2
RectangleArea-Implementation-Version: 1.2
RectangleArea-Implementation-Vendor-Id: com.mycompany
RectangleArea-Implementation-URL: http://example.com/RectangleArea.jar
RectanglePerimeter-Extension-Name: com.example.RectanglePerimeter
RectanglePerimeter-Specification-Version: 1.2
RectanglePerimeter-Implementation-Version: 1.2
RectanglePerimeter-Implementation-Vendor-Id: com.example
RectanglePerimeter-Implementation-URL: http://example.com/RectanglePerimeter.jar

この例では、アプレットに 2 つの拡張機能 RectangleArea および RectanglePerimeter が配備されます。それぞれが 1 つの JAR ファイルを持っています。これらがインストールされていないか、更新されたバージョンが必要な場合、指定した Implementation-URL から適切なバージョンがダウンロードされます。Implementation-URL は、次のような JAR ファイルを指している必要があります。

これについては、後述の「Implementation-URL JAR ファイルのマニフェスト」セクションで詳しく説明します。

Extension-List の名前と属性の接頭辞

基本的なシナリオは 2 つあります。拡張機能が単一の JAR ファイルを持つ場合と、複数の JAR ファイルを持つ場合です。Extension-List の名前と属性の接頭辞について、これら 2 つのシナリオで説明します。

単一の JAR ファイルを持つ拡張機能

上記の例のように、単一の JAR ファイルを持つ拡張機能の場合、Extension-List の名前と、関連するマニフェスト属性の接頭辞が、拡張機能 JAR ファイルの名前になります。

複数の JAR ファイルを持つ拡張機能

拡張機能が複数の JAR ファイルで構成されることもあります。たとえば、Java 3D 拡張機能は、JAR ファイル j3daudio.jarj3dcore.jarj3dutils.jar、および vecmath.jar で構成されています。ここでは、2 つのシナリオを考慮する必要があります。ネイティブインストーラまたは Java インストーラで JAR ファイルをインストールする場合と、インストーラは使用せずに raw インストールによって拡張機能 JAR ファイルをインストールする場合です。

ネイティブインストーラまたは Java インストーラを使用する場合は、Extension-List に JAR ファイルの名前を 1 つだけ指定する必要があります。また、その名前を接頭辞として、属性を 1 セットだけ指定できます。通常、拡張機能にはメイン JAR ファイルが 1 つあります。この場合は、その名前を Extension-List に指定し、関連するマニフェスト属性の接頭辞としても使用します。メイン JAR ファイルがない場合は、オプションパッケージにある任意の JAR ファイルの名前を使用できます。

次の例は、Java 3D 拡張機能のアプレットマニフェストです。j3dcore.jar は、メイン JAR ファイルです。

Extension-List: j3dcore
j3dcore-Extension-Name: javax.media.j3d

j3dcore-Specification-Version: 1.2
j3dcore-Specification-Vendor: Sun Microsystems, Inc
j3dcore-Implementation-Version: 1.2.1_03
j3dcore-Implementation-Vendor-Id: com.sun
j3dcore-Implementation-URL: http://<myserver>/native/java3d-win.jar

複数の JAR ファイルがある場合、raw インストールの手順は次のように変わります。個々の JAR ファイルを個別の拡張機能であるかのように扱い、各ファイルの名前を Extension-List に指定します。指定した JAR ファイルごとに、それぞれマニフェスト属性のセットを指定します。このとき、属性の接頭辞として、各 JAR ファイルの名前を使用します。

JAR 拡張機能の識別に関する注意事項

インストールされた拡張機能 JAR ファイルについて、Java Plug-in は次の 4 つのマニフェスト属性をチェックします。

  • Extension-Name
  • Specification-Version
  • Implementation-Version
  • Implementation-Vendor-Id

Extension-NameImplementation-Vendor-Id は、アプレットのマニフェストファイルで指定された値と正確に一致しなければいけません。

各拡張機能 JAR ファイルのマニフェスト

ここでは、Implemenation-URL に指定された URL から Plug-in が取得できる JAR ファイルについて説明します。URL から取得可能な拡張機能 JAR ファイルは、直接取得するか (raw インストール)、Java インストーラまたはネイティブインストーラを通して取得できます。どちらの場合も、JAR ファイルは <jre>/lib/ext にインストールされます。

アプレットに必要な拡張機能の一覧は、アプレットのマニフェストに指定されています。これにより、アプレットの起動時に Plug-in は <jre>/lib/ext ディレクトリにある JAR ファイルを調べ、不足している拡張機能や古くなった拡張機能をインストールする必要があるかどうかを判断します。

一般的に、Implementation-URL を通して取得される拡張機能 JAR ファイルのマニフェストには、各種の名前、バージョン、およびベンダー情報が含まれている必要があります。したがって、このような拡張機能 JAR ファイルがインストールされていると、Java Plug-in はあとでこれらの情報をアプレットに必要な拡張機能に関する情報と比較でき、拡張機能のインストールやアップグレードが必要かどうかを判断できます。アプレットが拡張機能を要求する前は、<jre>/lib/ext に拡張機能がまったくインストールされていないか、インストールされた拡張機能 JAR ファイルにマニフェスト情報がまったくない、あるいは不完全なマニフェスト情報しかない場合が多いでしょう。

単一の JAR ファイルを持つ拡張機能の場合、その JAR ファイルに署名が付いていることと、次の属性を持つマニフェストファイルが含まれていることが必要です。

Extension-Name: javax.help
Specification-Vendor: Sun Microsystems, Inc
Specification-Version: 1.0
Implementation-Vendor-Id: com.sun
Implementation-Vendor: Sun Microsystems, Inc
Implementation-Version: 1.1.3

Java 拡張機能が複数の JAR ファイルで構成され、ネイティブインストーラまたは Java インストーラによってインストールされる場合は、アプレットマニフェストの Extension-List に指定されている JAR ファイルだけに、拡張機能の情報 (Extension-NameSpecification-Version など) を指定します。インストーラを使用しない場合は、すべての JAR ファイルに拡張機能の情報を含める必要があります。

これらの属性の詳細は、「オプションパッケージのバージョン管理」を参照してください。

Implementation-URL JAR ファイルのマニフェスト

これは、アプレットがマニフェスト内の Implementation-URL 属性を使って参照する JAR ファイルです。<jre>/lib/ext に拡張機能がまったくインストールされていない場合や、インストールされている拡張機能が古い場合は、この URL から拡張機能を取得できます。

Implementation-URL JAR ファイルがネイティブインストーラまたは Java インストーラである場合は、そのことが次の 2 つの特別な属性で示されます。Main-Class は Java インストーラを示し、Extension-Installation はネイティブインストーラを示します。インストーラが指定されていない場合、Implementation-URL JAR ファイルは拡張機能 JAR ファイルそのものです。Java Plug-in は、次の 3 とおりの方法で拡張機能をインストールできます。

各方法について、次に説明します。

raw インストールを使用した Java 拡張機能のインストール

拡張機能の raw インストールでは、個々の拡張機能 JAR ファイルが Java Plug-in によって <jre>/lib/ext ディレクトリにインストールされます。Java やネイティブのインストーラは使用されず、Java Plug-in が各 JAR ファイルの「インストーラ」として機能します。単一の JAR ファイルを持つ拡張機能の場合、その JAR ファイルの URL が Implementation-URL としてアプレット JAR マニフェストに示されます。Java Plug-in は、拡張機能 JAR ファイルのマニフェストに Main-Class 属性も Extension-Installation 属性も含まれていないことから、raw インストールであると認識できます。

ここでは、javax.mediax という拡張機能が、単一の JAR ファイル mediax.jar を持っているとします。アプレットおよび拡張機能の JAR は次のようになります。

例:アプレットの JAR マニフェスト

Extension-List: mediax
mediax-Extension-Name: javax.mediax
mediax-Specification-Version: 1.1
mediax-Implementation-Version: 1.1.2
mediax-Implementation-Vendor-Id: com.sun
mediax-Implementation-URL: http://java.sun.com/products/plugin/extensions/examples/media/mediax.jar

例:拡張機能の JAR マニフェスト

Extension-Name: javax.mediax
Specification-Vendor: Sun Microsystems, Inc Specification-Version: 1.1
Implementation-Vendor-Id: com.sun
Implementation-Vendor: Sun Microsystems, Inc
Implementation-Version: 1.1.2
2 つの JAR ファイル mediax_core.jarmediax_codec.jar を持つ別のバージョンの拡張機能 javax.mediax-2 があるとします。この場合、2 つの JAR ファイルを個別の拡張機能であるかのように扱い、アプレットの JAR マニフェストに各ファイルを指定する必要があります。

例:アプレットの JAR マニフェスト

Extension-List: mediax_core mediax_codec
mediax_core-Extension-Name: javax.mediax_core
mediax_core-Specification-Version: 1.1
mediax_core-Implementation-Version: 1.1.2
mediax_core-Implementation-Vendor-Id: com.sun
mediax_core-Implementation-URL: http://java.sun.com/products/plugin/extensions/examples/media/mediax_core.jar mediax_codec-Extension-Name: javax.mediax_codec
mediax_codec-Specification-Version: 1.1
mediax_codec-Implementation-Version: 1.1.2
mediax_codec-Implementation-Vendor-Id: com.sun
mediax_codec-Implementation-URL: http://java.sun.com/products/plugin/extensions/examples/media/mediax_codec.jar

例: 拡張機能の JAR マニフェスト

Extension-Name: javax.mediax_core
Specification-Vendor: Sun Microsystems, Inc Specification-Version: 1.1
Implementation-Vendor-Id: com.sun
Implementation-Vendor: Sun Microsystems, Inc
Implementation-Version: 1.1.2
Extension-Name: javax.mediax_codec
Specification-Vendor: Sun Microsystems, Inc Specification-Version: 1.1
Implementation-Vendor-Id: com.sun
Implementation-Vendor: Sun Microsystems, Inc
Implementation-Version: 1.1.2

Java インストーラを使用した Java 拡張機能のインストール

Java インストーラを使用して拡張機能をインストールすることもできます。Java インストーラは、JAR ファイルとしてバンドルする必要があります。また、生成された JAR ファイルを、アプレットの JAR マニフェストファイルの Implementation-URL に指定する必要があります。インストール時に、JAR ファイルのダウンロードおよび検証が行われます。そのあと、JAR ファイル内の Java インストーラの Main-Class が実行されて、インストーラが起動します。Java インストーラによって、インストーラにバンドルされている拡張機能 JAR ファイルが Java Runtime の適切な場所 (<jre>/lib/ext) にコピーされます。

これはアプリケーション JAR ファイルですが、そのマニフェスト内の属性は、アプレットマニフェストの Extension-List に指定されている拡張機能 JAR ファイルの属性と同じになります。ただし、Main-Class 属性が追加されます。

例:Java インストーラの JAR マニフェスト

Extension-Name: javax.help 
Specification-Vendor: Sun Microsystems, Inc 
Specification-Version: 1.1 
Implementation-Vendor-Id: com.sun 
Implementation-Vendor: Sun Microsystems, Inc 
Implementation-Version: 1.1.3
Main-Class: com.sun.javahelp.installer
この場合、マニフェストに Main-Class が存在するため、JAR ファイルは Java インストーラとして扱われ、Main-class が呼び出されます。Java インストーラによって、拡張機能 JAR ファイルが <jre>/lib/ext ディレクトリにコピーされます。拡張機能の個々の JAR ファイルに、適切なバージョン情報が含まれている必要があります。

ネイティブインストーラを使用した Java 拡張機能のインストール

ネイティブインストーラを使用して拡張機能をインストールすることもできます。ネイティブインストーラは、JAR ファイルとしてバンドルする必要があります。また、生成された JAR ファイルを、アプレットの JAR マニフェストファイルの Implementation-URL に指定する必要があります。インストール時に JAR ファイルのダウンロードおよび検証が行われ、次にネイティブインストーラが起動します。ネイティブインストーラによって、インストーラにバンドルされている拡張機能 JAR ファイルが Java Runtime の適切な場所 (<jre>/lib/ext) にコピーされます。

これはアプリケーション JAR ファイルですが、そのマニフェスト内の属性は、アプレットマニフェストの Extension-List に指定されている拡張機能 JAR ファイルの属性と同じになります。ただし、Extension-Installation 属性が追加されます。

例:ネイティブインストーラの JAR マニフェスト

Extension-Name: javax.media.jmf
Specification-Vendor: Sun Microsystems, Inc 
Specification-Version: 2.1 
Implementation-Vendor-Id: com.sun 
Implementation-Vendor: Sun Microsystems, Inc 
Implementation-Version: 2.1.1
Extension-Installation: jmf-2_1_1-win.exe

この場合、マニフェストに Extension-Installation が存在するため、JAR ファイルはネイティブインストーラとして扱われ、インストーラ自体が起動します。ネイティブインストーラによって、Java 拡張機能ファイルが <jre>/lib/ext ディレクトリにコピーされます。Java 拡張機能の個々の JAR ファイルに、適切なバージョン情報が含まれている必要があります。

セキュリティー

インストールされている拡張機能を更新する必要がある場合、その拡張機能のダウンロードおよび検証が行われて、拡張機能が適正に署名されていることが確認されます。有効な場合、Plug-in によりセキュリティーダイアログがポップアップし、拡張機能のインストールを続行するかインストールをキャンセルするかのオプションが提供されます。

ユーザーがセキュリティーダイアログでオプションを選択すると、対応するセキュリティーコンテキスト内で、拡張機能インストールが実行されます。拡張機能が正しくインストールされないかぎり、アプレットは起動できません。

Java 拡張機能は Java Runtime の <jre>/lib/ext ディレクトリにダウンロードおよびインストールされるため、それぞれ署名されていることが必要です。拡張機能のインストール後に、ポリシーファイルを介して Java 拡張機能に適切なアクセス権が付与されます。

詳細な手順

Java Plug-in 用のこれらの拡張機能設定手順に従ってください。

I. アプレットに必要な拡張機能を作成/取得する。

各拡張機能は 1 つ以上の JAR ファイルで構成されます。各 JAR ファイルには、バージョン情報の入ったマニフェストファイルが含まれていることと (「各拡張機能 JAR ファイルのマニフェスト」を参照)、署名が付いていることが必要です。(これの例外 (ネイティブ/Java インストーラで複数の JAR ファイルをインストール) を参照してください。)

一連のファイルから JAR ファイルを作成するには、次のコマンドを使用します。

% jar cmf my_manifest my_jar input_files

jar ツールの詳細については、プラットフォームに応じたツールとユーティリティードキュメントを参照してください。

JAR ファイルに署名する手順は多少複雑になります。手順の概要は次のとおりです。

  1. keytool -genkey オプションを使って鍵ペアを生成します。
  2. keytool -certreq を使って、VeriSignThawte などの認証局 (CA) に対する証明書要求を生成します。この要求を CA に電子メールで送ります。CA は、要求者の身分情報を確認したあと、証明書チェーンを電子メールで返送します。この証明書チェーンをファイルにコピーします。
  3. keytool -import オプションを使用して、チェーンをキーストア内にインポートできます。
  4. jarsigner ツールを使って JAR ファイルに署名し、署名されたことを -verify オプションで確認できます。

keytooljarsigner の詳細については、プラットフォームに応じたツールとユーティリティードキュメントを参照してください。

このトピックの詳細と例については、「RSA 署名付き証明書を使用したアプレットの署名方法」の章を参照してください。その章ではアプレット JAR ファイルに署名する手順が説明されていますが、拡張機能 JAR ファイルに署名する手順も同じです。

II. Implementation-URL JAR ファイルを作成/取得する

インストーラを使用しない場合

手順 I で説明した拡張機能 JAR ファイルが Implementation-URL JAR ファイルです。

インストーラを使用する場合

  1. インストーラを作成または取得します。
  2. インストーラの JAR ファイルおよびそれにバンドルする拡張機能について、マニフェストを作成します。
    • Java インストーラの場合は、マニフェストに Main-Class 属性を含めます。
    • ネイティブインストーラの場合は、Extension-Installation 属性を含めます。
  3. インストーラ、マニフェスト、および必要な拡張機能をバンドルして JAR ファイルを作成し、その JAR ファイルに署名します。JAR ファイルの作成と署名の手順は、上記の手順 I と同じです。

ここでは、アプレットで Sun の Java Advanced Imaging を拡張機能としてインストールする必要があるとします。これは次の場所からダウンロードできます。

http://java.sun.com/products/java-media/jai/downloads/download.html

「Windows JRE Install」バージョンを選択するとします。次のファイルがダウンロードされます。

jai-1_1_1_01-lib-windows-i586-jre.exe

このインストーラには、次の JAR ファイルがバンドルされており、インストーラによって <jre>/lib/ext ディレクトリにインストールされます。

上記の .exe インストーラが入った JAR ファイルのマニフェストを作成し、JAR ファイルに署名します。

マニフェストは次のようになります。

Extension-Name: javax.media.jai 
Specification-Vendor: Sun Microsystems, Inc 
Specification-Version: 1.1 
Implementation-Vendor-Id: com.sun 
Implementation-Vendor: Sun Microsystems, Inc 
Implementation-Version: 1.1.1_01
Extension-Installation: jai-1_1_1-01-windows-i586-jre.exe

インストーラとマニフェストファイルを、jai_win.jar という JAR ファイルにまとめます。この例では、.exe インストーラにバンドルされているので、拡張機能 JAR ファイルを含める必要はありません。JAR ファイルの名前には必ず拡張子 .jar を付けてください。

jai_win.jar に署名します。

III. アプレット JAR を作成する

1. アプレットのマニフェストファイルを作成します。次の例は、ネイティブインストーラを使用する jai のマニフェストファイルです。

Extension-List: jai_core
jai_core-Extension-Name: javax.media.jai
jai_core-Specification-Version: 1.1
jai_core-Implementation-Version: 1.1.1_01
jai_core-Implementation-Vendor-Id: com.sun
jai_core-Implementation-URL: http://myserver.example.com/jai_win.jar

オプションパッケージの中には、オぺレーティングシステムごとに異なる JAR ファイル内にパッケージされるものもあります。アプレットを異なる OS 上で動作させるには、Implementation-URL マニフェスト属性で $(os-name)$ 構造を使用します。$(os-name)$ は、アプレットが実行されるターゲット OS (SunOS、Linux、Windows-98、Windows-NT、Windows-2000、Windows-Me など) に変換されます。

optpkg-Implementation-URL: http://.../optpkg-$(os-name)$.jar

2. *.class ファイル、アプレットに必要なその他のサポートファイル、およびアプレットのマニフェストファイルを JAR ファイルにまとめ、JAR ファイルに署名します。JAR ファイルの作成と署名の手順は、前述の手順と同じです。JAR ファイルの名前には必ず拡張子 .jar を付けてください。

IV. アプレットの起動用 HTML を生成する

アプレットの HTML ページを作成します。手動で作成するか、JDK に付属している HtmlConverter を使って作成できます。HtmlConverter を使用することをお勧めします。手動で作成する場合は、手順について「Java Plug-in での OBJECTEMBED、および APPLET タグの使用」を参照してください。アプレット JAR ファイルは、archive 属性の中に指定する必要があります。

アプレットの名前が JaiApplet、作成したアプレット JAR ファイルの名前が JaiApplet.jar、メインクラスが JaiApplet.class であるとします。

元のアプレットは次のようなものであるとします。

<html>
<head>
<title>JaiApplet</title>
</head>
<body>
<APPLET code="JaiApplet.class" archive="JaiApplet.jar" align="absmiddle" WIDTH="400"HEIGHT="300"> </APPLET>
</body>
</html>

動的バージョン管理のために HtmlConverter を使ってこれを変換すると、次のようになります。

<html>
<head>
<title>JaiApplet</title>
</head>
<body>
<!--"CONVERTED_APPLET"-->
<!-- HTML CONVERTER -->
<OBJECT
classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase = "http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab#Version=6,0,0,99"
WIDTH = "400" HEIGHT = "300" ALIGN = "absmiddle" >
<PARAM NAME = CODE VALUE = "JaiApplet.class" >
<PARAM NAME = ARCHIVE VALUE = "JaiApplet.jar" >
<PARAM NAME = "type" VALUE = "application/x-java-applet;version=1.6">
<PARAM NAME = "scriptable" VALUE = "false">
<COMMENT>
<EMBED
type = "application/x-java-applet;version=1.6"
CODE = "JaiApplet.class"
ARCHIVE = "JaiApplet.jar"
WIDTH = "400"
HEIGHT = "300"
ALIGN = "absmiddle"
scriptable = false
pluginspage = "http://java.sun.com/products/plugin/index.html#download">
<NOEMBED>
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
<!--
<APPLET CODE = "JaiApplet.class" ARCHIVE = "JaiApplet.jar" WIDTH = "400" HEIGHT = "300" ALIGN = "absmiddle">
</APPLET>
-->
<!--"END_CONVERTED_APPLET"-->
</body>
</html>

拡張機能がインストールされていない場合は、アプレットの実行時に Java Plug-in によって Java Security Warning が表示され、アプレットが http://myserver.example.com/jai_win.jar からの拡張機能 javax.media.jai のインストールを必要としていることが通知されます。拡張機能をインストールするアクセス権が付与されている場合は、インストーラによって JAR ファイルが <jre>/lib/ext ディレクトリにインストールされます。インストールが完了したらアプレットを実行できます。

Java Media Framework を Java 拡張機能として配備する場合の、実際に動作する完全な例については、付録 5「完全な例 — Java 拡張機能としての Java Media Framework の配備」を参照してください。

既知の制限とその他の注意

 


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.