注: Java 拡張機能は、「オプションパッケージ」、「標準拡張機能」、または単に「拡張機能」とも呼ばれます。
このセクションでは、次のトピックについて説明します。
Implementation-URL
JAR ファイルのマニフェスト
Java アプレットは、Java 拡張機能を使用してユーザに追加の機能を提供します。アプレットは Java Plug-in を使って、さまざまな Java 拡張機能 (JavaHelp、Java 3D、Java Media Framework など) の Java 2 Runtime Environment へのインストールをトリガできます。このドキュメントでは、Java Plug-in で「インストール型 Java 拡張機能」(「バンドル型 Java 拡張機能」に相対するもの) を配備する基本的な手順を示します。Java 拡張機能の稼動方法の詳細は、「Java 拡張機能機構」を参照してください。
拡張機能を使用するアプレットは、マニフェストを含む署名付きの JAR ファイルとしてパッケージ化されます。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 つのマニフェストファイルに指定する必要があります。
これらの各マニフェストファイルについて、以下に詳しく説明します。
アプレットに 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://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 が配備されます。それぞれが 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.jar
、j3dcore.jar
、j3dutils.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 拡張機能の識別に関する注意事項インストールされた拡張機能
|
ここでは、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
Specification-Vendor
Specification-Version
Implementation-Vendor-Id
Implementation-Vendor
Implemenation-Version
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-Name
、Specification-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 インストールでは、個々の拡張機能 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
mediaz-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.jar
と mediax_codex.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.2Extension-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 インストールプログラムは、JAR ファイルとしてバンドルする必要があります。また、生成された JAR ファイルを、アプレットの JAR マニフェストファイルの Implementation-URL
に指定する必要があります。インストール時に、JAR ファイルのダウンロードおよび検証が行われます。その後、JAR ファイル内の Java インストールプログラムの Main-Class
が実行されて、インストールプログラムが起動します。Java インストールプログラムによって、インストールプログラムにバンドルされている拡張機能 JAR ファイルが Java 2 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 ファイルに、適切なバージョン情報が含まれている必要があります。
ネイティブインストールプログラムを通して拡張機能をインストールすることもできます。ネイティブインストールプログラムは、JAR ファイルとしてバンドルする必要があります。また、生成された JAR ファイルを、アプレットの JAR マニフェストファイルの Implementation-URL
に指定する必要があります。インストール時に JAR ファイルのダウンロードおよび検証が行われ、次にネイティブインストールプログラムが起動します。ネイティブインストールプログラムによって、インストールプログラムにバンドルされている拡張機能 JAR ファイルが Java 2 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 によりセキュリティダイアログがポップアップし、次の 3 つのオプションが提供されます。
Implementation-URL
JAR ファイルに AllPermission
が付与されます。以後、同じ証明書を使用して署名されたアプレットや拡張機能は、すべて自動的に信頼されます。この証明書に再度遭遇した場合、セキュリティダイアログは表示されません。この決定は、Java Plug-in コントロールパネルで変更できます。Implementation-URL
JAR ファイルに AllPermission
が付与されます。同じ証明書を使用して署名されたアプレットや拡張機能はすべて、同じブラウザセッション内で自動的に信頼されます。ユーザがセキュリティダイアログでオプションを選択すると、対応するセキュリティコンテキスト内で、拡張機能インストールが実行されます。拡張機能が正しくインストールされないかぎり、アプレットは起動できません。
Java 拡張機能は Java 2 Runtime の <jre>/lib/ext
ディレクトリにダウンロードおよびインストールされるため、それぞれ署名されていることが必要です。拡張機能のインストール後に、ポリシーファイルを介して Java 拡張機能に適切なアクセス権が付与されます。
Java Plug-in とともに使用する拡張機能を設定するには、次の手順に従ってください。
各拡張機能は 1 つ以上の JAR ファイルで構成されます。各 JAR ファイルには、バージョン情報の入ったマニフェストファイルが含まれていることと (「各拡張機能 JAR ファイルのマニフェスト」を参照)、署名が付いていることが必要です。(ネイティブまたは Java のインストールプログラムによって複数の JAR ファイルをインストールする場合の例外)
一連のファイルから JAR ファイルを作成するには、次のコマンドを使用します。
% jar cmf my_manifest my_jar input_files
jar
ツールの詳細については、プラットフォームに応じた『JDK ツールとユーティリティ』ドキュメントを参照してください。
JAR ファイルに署名する手順は多少複雑になります。手順の概要は次のとおりです。
keytool -genkey
オプションを使って鍵ペアを生成します。keytool -certreq
を使って、認証局 (CA) に対する証明書要求を生成します。認証局には、VeriSign や Thawte などがあります。この要求を CA に電子メールで送ります。CA は、要求者の身分情報を確認したあと、証明連鎖を電子メールで返送します。この証明連鎖をファイルにコピーします。keytool -import
オプションを使用して、連鎖をキーストア内にインポートします。jarsigner
ツールを使って JAR ファイルに署名し、署名されたことを -verify
オプションで確認します。keytool
と jarsigner
の詳細については、プラットフォームに応じた『JDK ツールとユーティリティ』ドキュメントを参照してください。
このトピックの詳細と例については、「RSA 署名付き証明書を使用したアプレットの署名方法」の章を参照してください。その章ではアプレットの JAR ファイルに署名する手順が説明されていますが、拡張機能の JAR ファイルに署名する手順も同じです。
Implementation-URL
JAR ファイルを作成/取得する手順 I で説明した拡張機能 JAR ファイルが Implementation-URL
JAR ファイルです。
Main-Class
属性を含めます。Extension-Installation
属性を含めます。ここでは、アプレットで 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
ディレクトリにインストールされます。
jai_codec.jar
jai_core.jar
mlibwrapper_jai.core
上記の .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 ファイルにまとめます。拡張機能 JAR ファイルを含める必要はありません。この例では、これらのファイルは .exe
インストールプログラムにバンドルされているためです。JAR ファイルの名前には必ず拡張子 .jar
を付けてください。
jai_win.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.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
を付けてください。
アプレットの HTML ページを作成します。手動で作成するか、JDK に付属している HtmlConverter
を使って作成できます。HtmlConverter
を使用することをお勧めします。手動で作成する場合は、手順について「Java Plug-in での OBJECT
、EMBED
、および 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/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"
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.4">
<PARAM NAME = "scriptable" VALUE = "false">
<COMMENT>
<EMBED
type = "application/x-java-applet;version=1.4"
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.com/jai_win.jar
からの拡張機能 javax.media.jai
のインストールを必要としていることが通知されます。拡張機能をインストールするアクセス権が付与されている場合は、インストールプログラムによって JAR ファイルが <jre>/lib/ext
ディレクトリにインストールされます。インストールが完了したらアプレットを実行できます。
Java Media Framework を Java 拡張機能として配備する場合の、実際に動作する完全な例についは、付録 5「完全な例 Java 拡張機能としての Java Media Framework の配備」を参照してください。
Implementation-URL
JAR ファイルに適切な署名が行われなかった場合、Java Plug-in は失敗しますが、エラーメッセージは表示されません。<jre>/lib/ext
に混在することになります。これは予測不可能な結果をもたらします。 Main-class
を終了させないことを確認してください。場合によっては、Java インストールプログラムが AWT ウィンドウを作成して制御を別のスレッドに切り替え、そのあとすぐ Main-class
に戻ることもあります。Main-class
から制御が返されると、Java インストールプログラムがインストール処理中であっても、アプレットのロードおよび起動が即座に行われます。この場合、拡張機能がインストールされていないため、アプレットのロードに失敗します。