Java 拡張機能の配備


注: Java 拡張機能は、「オプションパッケージ」と呼ばれることもあります。

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

Java アプレットは、さまざまな Java 拡張機能を使用してユーザに特定の機能を提供します。 Java アプレット使用時に Java Plug-in 内で Java 拡張機能を動的に配備するのは、特に何千ものマシンの配備されたイントラネット/インターネット環境で開発を行う場合に、開発者にとって困難でした。

Java 拡張機能インストールを利用すると、さまざまな Java 拡張機能 (JavaHelp、Java3D など) を Java アプレットと共に Java 2 Runtime Environment に容易に配備およびインストールできます。 このドキュメントでは、Java Plug-in のインストール型 Java 拡張機能を配備する基本的な手順を示します。Java 拡張機能の稼動方法の詳細は、Java 2 の「Java 拡張機能機構」を参照してください。

概要

Java Plug-in で Java 拡張機能インストールを使用するには、拡張機能に関する情報を次の 3 か所で指定する必要があります。

  1. アプレットの JAR ファイルの MANIFEST
    アプレットが Java 拡張機能インストールを必要とする場合、アプレットが必要とする Java 拡張機能インストールのリストを MANIFEST に定義し、拡張機能をダウンロードする URL を指定する必要があります。

  2. インストールする Java 拡張機能 JAR ファイルの MANIFEST (例: ¥lib¥ext ディレクトリからダウンロードする JAR ファイル)
    この目的は、拡張機能の JAR ファイル内に拡張機能名、バージョン、およびバージョン情報を認識させることです。 これによって、Java Plug-in は、アプレットが要求する拡張機能を、インストールされたすべての拡張機能 (例: lib/ext 内) の拡張機能名、バージョン、およびベンダー情報と比較できるようになります。その後、Java Plug-in は拡張機能のインストールやアップグレードが必要かどうかを判断します。

  3. Java 拡張機能インストールの JAR ファイルの MANIFEST
    これは、アプレットが MANIFEST 内の Implementation-URL 属性を使用して参照する JAR ファイルです。 この目的は、拡張機能のインストールタイプを示して、インストールのトリガが適正に行われるようにすることです。

アプレットでの Java 拡張機能の指定

アプレットに Java 拡張機能を配備するには、アプレットを JAR ファイルとしてパッケージ化する必要があります。 アプレットの MANIFEST ファイルには、「オプションパッケージのバージョン管理」に従って、インストールする Java 拡張機能に関する適切な情報を含める必要があります。 次に例を示します。

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://mycompany.com/RectangleArea.jar
RectanglePerimeter-Extension-Name:com.mycompany.RectanglePerimeter
RectanglePerimeter-Specification-Version: 1.2
RectanglePerimeter-Implementation-Version: 1.2
RectanglePerimeter-Implementation-Vendor-Id:com.mycompany
RectanglePerimeter-Implementation-URL:http://mycompany.com/RectanglePerimeter.jar

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

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

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

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

Extension-NameImplementation-Vendor-Id は、アプレットの JAR MANIFEST.MF ファイルで指定された値と正確に一致しなければなりません。 Java Plug-in によってインストールされた拡張機能のバージョン属性を評価して、新しい拡張機能のダウンロードが必要かどうかを判断する方法については、「オプションパッケージのバージョン管理」を参照してください。

Sun のサポートする Specification-Version および Implemenation-Version の形式

Specification-VersionImplementation-Version は、以下に示す Sun 製品の規則に従っています。また、サードパーティの製品は、拡張機能が最新かどうかを判断するために、Java Plug-in と同じ規則に従う必要があります。

Specification-Version 文字列は、以下の形式をとります。

n1.n2[.n3]

n1n2n3 には整数が入り、n1.n2 は「メジャーバージョン番号」、オプションの n3 は「マイナーバージョン番号」 (「保守バージョン番号」とも呼ばれる) を表します。

Implementation-Version も最初の部分は同じ形式ですが、以下の部分が異なっています。

  • 下線 (_) に続けて n4n5 を追加して、「パッチバージョン番号」 (「更新バージョン番号」とも呼ばれる) を表します。
  • または、ハイフン (-) を付けてマイルストン名 (eaalphabetarc ...) を追加します。これには後ろに整数の番号を付けることもあります (ea1beta2rc1 ...)。

パッチバージョン番号とマイルストン名の両方を、Implemenation-Version 文字列で同時に使用することはできません。

一般的な形式は以下のとおりです。

n1.n2[.n3][_<patch_number>|-<milestone_name>]

上記のバージョン形式に使用できるのは、整数 (n1n2n3 ...)、文字、ドット、ハイフン、および下線だけで、それ以外の文字 (*+ ...) は使用できません。

Specification-Version および Implementation-Version の番号は理論に基づいて付けられるわけではありませんが、実際にはたいていお互いに同期を保っています。

例:

Specification-Version の例: 1.31.4

Implementation-Version の例: 1.3.11.4.0_021.4.0-beta3

上記に挙げた規則は、サードパーティの拡張機能 JAR を使用して MANIFEST.MF ファイルを調べ、そこに含まれる実際の値を確認する場合にも、常に有効です。 この規則に従っていない場合、アプレットの JAR とそれに対応する MANIFEST.MF を変更したり、拡張機能 JAR を変更する必要があります。

Java 拡張機能インストール

Java Plug-in では、3 つのタイプの Java 拡張機能インストールがサポートされています。

  1. raw Java 拡張機能
    Java 拡張機能は、複数の JAR ファイルで構成されます。 アプレットの MANIFEST ファイルでは、これらの raw Java 拡張機能は Implementation-URL を介して指定されます。 インストール時に、これらの Java 拡張機能の JAR ファイルは、ダウンロードおよび検証されてから、Java 2 Runtime の lib/ext ディレクトリにコピーされます。
  2. Java インストーラ
    Java 拡張機能は、Java インストーラを利用してインストールされます。 Java インストーラは、JAR ファイルとしてバンドルする必要があります。また、生成された JAR ファイルは、アプレットの MANIFEST ファイルの Implementation-URL に指定する必要があります。 インストール時に、JAR ファイルのダウンロードおよび検証が行われます。その後、JAR ファイル内の Java インストーラの main-class が実行されて、インストーラが起動します。 Java インストーラによって、インストーラ内の Java 拡張機能が Java 2 Runtime (lib/ext) の適切な場所にコピーされます。
  3. ネイティブインストーラ
    Java 拡張機能は、ネイティブインストーラを利用してインストールされます。 ネイティブインストーラは、JAR ファイルとしてバンドルする必要があります。また、生成された JAR ファイルは、アプレットの MANIFEST ファイルの Implementation-URL に指定する必要があります。 インストール時に JAR ファイルのダウンロードおよび検証が行われ、次にネイティブインストーラが起動します。 ネイティブインストーラによって、インストーラ内の Java 拡張機能が Java 2 Runtime (lib/ext) の適切な場所にコピーされます。

Java 拡張機能インストールが適正にダウンロードおよびインストールされることを保証するため、Java 拡張機能インストールを JAR ファイルとしてバンドルし、アプレットの MANIFEST 内の Implementation-URL に指定する必要があります。 各 Java 拡張機能は、JAR ファイルとしてバンドルすること、および「オプションパッケージのバージョン管理」に従って、MANIFEST ファイル内に適切なバージョン情報を含めることが必要です。 次に例を示します。

  1. raw Java 拡張機能
    Extension-Name: javax.help
    Specification-Vendor: Sun Microsystems, Inc
    Specification-Version: 1.4
    Implementation-Vendor-Id: com.sun
    Implementation-Vendor: Sun Microsystems, Inc
    Implementation-Version: 1.4.0_01
    この場合、これは raw Java 拡張機能として認識され、lib/ext ディレクトリに直接コピーされます。
  2. Java インストーラ
    Extension-Name:javax.help
    Specification-Vendor:Sun Microsystems, Inc
    Specification-Version: 1.4
    Implementation-Vendor-Id:com.sun
    Implementation-Vendor:Sun Microsystems, Inc
    Implementation-Version: 1.4.0-beta2
    Main-Class:com.sun.javahelp.installer
    
    この場合、MANIFEST に Main-Class が存在するため、Java インストーラとして扱われ、Main-class が呼び出されます。 Java インストーラによって、Java 拡張機能が適切な lib/ext ディレクトリにコピーされます。 ただし、lib/ext ディレクトリにコピーする各 Java 拡張機能にも、適切なバージョン情報を含める必要があります。 次に例を示します。
    Extension-Name:javax.help
    Specification-Vendor:Sun Microsystems, Inc
    Specification-Version: 1.4
    Implementation-Vendor-Id:com.sun
    Implementation-Vendor:Sun Microsystems, Inc
    Implementation-Version: 1.4.0-beta2

    このため、lib/ext ディレクトリ内のすべての JAR ファイルの MANIFEST ファイルを確認することで、拡張機能のバージョン情報を判別できます。

  3. ネイティブインストーラ
    Extension-Name:javax.help
    Specification-Vendor:Sun Microsystems, Inc
    Specification-Version: 1.4
    Implementation-Vendor-Id:com.sun
    Implementation-Vendor:Sun Microsystems, Inc
    Implementation-Version: 1.4.0-rc1
    Extension-Installation: installer.exe
    この場合、MANIFEST 内に Extension-Installation が存在するため、ネイティブインストーラとして扱われ、インストーラ自体が起動します。 ネイティブインストーラによって、Java 拡張機能が適切な lib/ext ディレクトリにコピーされます。 ただし、Java インストーラの場合と同様、lib/ext ディレクトリにコピーする各 Java 拡張機能にも、適切なバージョン情報を含める必要があります。 次に例を示します。
    Extension-Name:javax.help
    Specification-Vendor:Sun Microsystems, Inc
    Specification-Version: 1.4
    Implementation-Vendor-Id:com.sun
    Implementation-Vendor:Sun Microsystems, Inc
    Implementation-Version: 1.4.0-rc1

    このため、lib/ext ディレクトリ内のすべての JAR ファイルの MANIFEST ファイルを確認することで、拡張機能のバージョン情報を判別できます。

詳細な手順

Java Plug-in を使用して Java アプレットと共にオプションパッケージを配備するには、以下の手順に従います。

I. オプションパッケージのインストーラ JAR ファイルを作成します。

A. オプションパッケージのインストーラを取得します。Java Plug-in では、Java、Native、Raw という 3 つのタイプのインストーラをサポートしています。 以下に従い、インストールタイプに対して正しいマニフェスト属性を使用してください。

Java: Main-Class
Native: Extension-Installation
Raw: マニフェスト属性なし

B. オプションパッケージのマニフェストファイルを作成します。 以下は、ネイティブインストーラ (jai-1_1_1-lib-win-jre.exe) を使用するオプションパッケージ Java Advanced Imaging API (jai_win.jar) のマニフェストの例です。 この例がネイティブインストーラとして認識される理由は、マニフェスト属性 Extension-Installation を使用しているからです。

Manifest-Version:1.0
Extension-Name: javax.media.jai
Extension-Installation: jai-1_1_1-lib-win-jre.exe
Specification-Version: 1.1
Specification-Vendor: Sun Microsystems. Inc
Implementation-Version: 1.1.1
Implementation-Vendor: Sun Microsystems, Inc
Implementation-Vendor-Id: com.sun

C. インストーラをオプションパッケージのマニフェストファイルとバンドルし、オプションパッケージのインストール JAR ファイルにします。 JAR ファイルには必ず拡張子 .jar を付けてください。 また、オプションパッケージやインストールタイプによっては、オプションパッケージのインストール用 JAR ファイルにオプションパッケージ JAR ファイルを含めたり、Web サーバでオプションパッケージ JAR ファイルを実行したりする必要があります。 オプションパッケージのインストールとオプションパッケージそのものは両方とも JAR ファイルにバンドルされ、適切なバージョン管理情報が格納されていなければなりません。

jar cmfv manifest-addition jar-file.jar input-file(s)

D. JAR ファイルに署名します。

JAR ファイルに署名できるようになるには、証明書発行局 (Thawte、VeriSign) から RSA 証明書を取得しなければなりません。 以下に、JAR ファイルへの署名に使用するツールとコマンドをいくつか示します。 以下に挙げたものがすべてではありません。

詳細は、Plug-in のドキュメントにある「RSA 署名付き証明書を使用したアプレットの署名方法」およびその他の関連ドキュメントを参照してください。

keytool を使用して RSA keypairkeystore を生成します。

keytool -genkey -keyalg rsa -alias MyCert -validity 360

keytool を使用して keystore に証明書をインポートします。

keytool -import -file <path>/mycerts/my_veri.p12

jarsigner を使用して JAR ファイルに署名します。

jarsigner InstallMyOptPkg.jar MyCert

jarsigner を使用して JAR ファイルの署名が適切かどうかを確認します。

jarsigner -verify -verbose -certs InstallMyOptPkg.jar

Eでき上がった JAR ファイル (およびその他の必要な JAR ファイル) を Web サーバに置き、ユーザがダウンロードできるようにします。 URL は、テストアプレットのマニフェストファイルにあるマニフェスト属性 <extension>-Implementation-URL の中で指定されています。

II. アプレットの JAR ファイルと HTML ファイルの作成

A. オプションパッケージの機能を使用するアプレットを作成します。

B. アプレットのマニフェストファイルを作成します。 以下は、アプレットのマニフェストファイルがオプションパッケージ Java Advanced Imaging API への依存性を宣言している例です。

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

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

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

C. アプレットが使用する *.class ファイル (およびその他のサポートしているファイル) とアプレットのマニフェストファイルを JAR ファイルにバンドルします。 JAR ファイルには必ず拡張子 .jar を付けてください。

jar cmfv manifest-addition jar-file.jar input-file(s)

D. アプレットの HTML ページを作成します。 前述の JAR ファイル名を ARCHIVE パラメータに設定します。 必要な形式に関する詳細は、「Java Plug-in における OBJECTEMBED および APPLET タグの使用」を参照してください。

OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="200" height="200" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,0">
<PARAM NAME="code" VALUE="myapplet.class">
<PARAM NAME ="archive" VALUE = "myapplet.jar">
<PARAM NAME="type" VALUE="application/x-java-applet;version=1.4">
<PARAM NAME="scriptable" VALUE="false">
<COMMENT>
<EMBED type="application/x-java-applet;version=1.4" width="200"
height="200" align="baseline" code="myapplet.class" archive="myapplet.jar"
pluginspage="http://java.sun.com/products/plugin/1.4/plugin-install.html">
<NOEMBED>
</COMMENT>
Optional Package Deployment Using Java Plug-in
</NOEMBED></EMBED>
</OBJECT>

E. でき上がった HTML ページを使用してアプレットをロードします。
アプレットの実行時に Java Plug-in によって Java Security Warning (オプションパッケージがインストールされていない場合) が表示され、アプレットが http://someserver.com/some.jar からのオプションパッケージ name のインストールを必要としていることが通知されます。 オプションパッケージのインストールを許可すると、インストーラが <jre>¥lib¥ext ディレクトリに JAR ファイルをインストールします。 インストールが完了したらアプレットを実行できます。

稼動方法

Java 拡張機能を使用してアプレットを配備する際、アプレットの MANIFEST ファイルに格納された Java 拡張機能情報が検査されます。 拡張機能の更新アルゴリズムは、「オプションパッケージのバージョン管理」に示されたアルゴリズムに基づいています。 更新が必要な場合、Java 拡張機能インストールのダウンロードおよび検証が行われて、拡張機能が適正に署名されていることが確認されます。 有効な場合、Plug-in によりセキュリティダイアログがポップアップし、次の 3 つのオプションが提供されます。

  1. 常に許可する: このオプションを選択すると、拡張機能インストールの JAR に「AllPermission」が付与されます。 同じ証明書を使用して署名されたアプレットおよび拡張機能はすべて、以後自動的に信頼されます。この証明書に再度遭遇した場合、セキュリティダイアログは表示されません。 この決定は、Java Plug-in コントロールパネルで変更できます。
  2. このセッションで許可する: このオプションを選択すると、拡張機能インストールに「AllPermission」が付与されます。 同じ証明書を使用して署名されたアプレットおよび拡張機能はすべて、同じブラウザセッション内で自動的に信頼されます。
  3. 許可しない: このオプションを選択すると、拡張機能インストールが取り消されます。

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

セキュリティ

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

既知の制限