注:この Java Plug-in ガイドでは、Java SE 6 update 10 リリースより前にリリースされた機能について説明します。最新情報については、Java Rich Internet Application の開発および配備を参照してください。
注: Java 拡張機能は、「オプションパッケージ」、「標準拡張機能」、または単に「拡張機能」とも呼ばれます。
このセクションでは、次のトピックについて説明します。
Implementation-URL
JAR ファイルのマニフェスト
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 つのマニフェストファイルに指定されている必要があります。
これらの各マニフェストファイルについての詳しい説明は次のとおりです。
アプレットに 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 ファイルを持つ拡張機能の場合、Extension-List
の名前と、関連するマニフェスト属性の接頭辞が、拡張機能 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.j3dj3dcore-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 は次のようになります。
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
Extension-Name: javax.mediax2 つの JAR ファイル
Specification-Vendor: Sun Microsystems, Inc Specification-Version: 1.1
Implementation-Vendor-Id: com.sun
Implementation-Vendor: Sun Microsystems, Inc
Implementation-Version: 1.1.2
mediax_core.jar
と mediax_codec.jar
を持つ別のバージョンの拡張機能 javax.mediax-2
があるとします。この場合、2 つの 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 インストーラは、JAR ファイルとしてバンドルする必要があります。また、生成された JAR ファイルを、アプレットの JAR マニフェストファイルの Implementation-URL
に指定する必要があります。インストール時に、JAR ファイルのダウンロードおよび検証が行われます。そのあと、JAR ファイル内の Java インストーラの Main-Class
が実行されて、インストーラが起動します。Java インストーラによって、インストーラにバンドルされている拡張機能 JAR ファイルが Java Runtime の適切な場所 (<jre>/lib/ext
) にコピーされます。
これはアプリケーション JAR ファイルですが、そのマニフェスト内の属性は、アプレットマニフェストの Extension-List
に指定されている拡張機能 JAR ファイルの属性と同じになります。ただし、Main-Class
属性が追加されます。
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 Runtime の適切な場所 (<jre>/lib/ext
) にコピーされます。
これはアプリケーション JAR ファイルですが、そのマニフェスト内の属性は、アプレットマニフェストの Extension-List
に指定されている拡張機能 JAR ファイルの属性と同じになります。ただし、Extension-Installation
属性が追加されます。
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 用のこれらの拡張機能設定手順に従ってください。
各拡張機能は 1 つ以上の JAR ファイルで構成されます。各 JAR ファイルには、バージョン情報の入ったマニフェストファイルが含まれていることと (「各拡張機能 JAR ファイルのマニフェスト」を参照)、署名が付いていることが必要です。(これの例外 (ネイティブ/Java インストーラで複数の JAR ファイルをインストール) を参照してください。)
一連のファイルから JAR ファイルを作成するには、次のコマンドを使用します。
% jar cmf my_manifest my_jar input_files
jar
ツールの詳細については、プラットフォームに応じたツールとユーティリティードキュメントを参照してください。
JAR ファイルに署名する手順は多少複雑になります。手順の概要は次のとおりです。
keytool -genkey
オプションを使って鍵ペアを生成します。keytool -certreq
を使って、VeriSign や Thawte などの認証局 (CA) に対する証明書要求を生成します。この要求を CA に電子メールで送ります。CA は、要求者の身分情報を確認したあと、証明書チェーンを電子メールで返送します。この証明書チェーンをファイルにコピーします。keytool -import
オプションを使用して、チェーンをキーストア内にインポートできます。jarsigner
ツールを使って JAR ファイルに署名し、署名されたことを -verify
オプションで確認できます。keytool
と jarsigner
の詳細については、プラットフォームに応じたツールとユーティリティードキュメントを参照してください。
このトピックの詳細と例については、「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 ファイルにまとめます。この例では、.exe
インストーラにバンドルされているので、拡張機能 JAR ファイルを含める必要はありません。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.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
を付けてください。
アプレットの 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/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 の配備」を参照してください。
Implementation-URL
JAR ファイルに適切な署名が行われなかった場合、Java Plug-in は失敗しますが、エラーメッセージは表示されません。<jre>/lib/ext
に混在することになります。これは予測不可能な結果をもたらします。 Main-class
を終了させないことを確認してください。場合によっては、Java インストーラが AWT ウィンドウを作成して制御を別のスレッドに切り替え、そのあとすぐ Main-class
から戻ることもあります。Main-class
から制御が返されると、Java インストーラがインストール処理中であっても、アプレットのロードおよび起動が即座に行われます。この場合、拡張機能がインストールされていないため、アプレットのロードに失敗します。