オプションパッケージは、Java クラスとそれに関連するネイティブコードのパッケージです。拡張機能を使うことにより、アプリケーションの開発者はコアプラットフォームの機能を拡張できます。拡張機能メカニズムにより、ブートストラップクラスとほとんど同じように Java Virtual Machine からオプションパッケージクラスを利用できます。ブートストラップクラスは、コアプラットフォームを実装しているクラスであり、jre/lib/rt.jar およびほかのいくつかの重要な jar ファイルにあります。これらの jar ファイルには、java.lang、java.io などの公開 API のクラス、およびプラットフォームの国際化およびローカリゼーションの機能をサポートするクラスが格納されます。ブートストラップクラスと同様に、オプションパッケージのクラスはクラスパスに置く必要はありません。拡張機能メカニズムにより、必要なオプションパッケージが Java 2 Runtime Environment または JDK にインストールされていない場合は、指定された URL から取得することもできます。
オプションパッケージは、JAR ファイルの形で提供され、すべての JAR ファイルはオプションパッケージになり得ます。JAR ファイルがオプションパッケージの役割を果たすのは、次の 2 つの場合です。
VM は、ある名前のクラスを探すとき、最初にブートストラップクラスを検索します。ブートストラップクラスの中に目的のクラスがない場合は、次にインストール型オプションパッケージからそのクラスを検索します。ブートストラップクラスからもインストール型オプションパッケージからも見つからない場合は、アプリケーションまたはアプレットが参照しているダウンロード型オプションパッケージを検索します。ブートストラップクラスとオプションパッケージクラスのどちらでもクラスを検索できない場合は、VM はクラスパスだけを検索します。
インストール型オプションパッケージは、次のディレクトリに置かれた JAR ファイルです。
lib/ext
(JRE 内)jre/lib/ext
(JDK 内)このディレクトリに JAR ファイルを置いておけば、CLASS PATH に明示的に含めなくても、中に含まれるクラスをブートストラップクラスの一部であるかのようにアプレットおよびアプリケーションから使用できます。
インストール型オプションパッケージのネイティブコードバイナリは、存在する場合には次のディレクトリに置きます
jre\bin
(Microsoft Windows)jre/lib/<arch>
(Solaris オペレーティング環境)<arch>
は、Solaris プロセッサアーキテクチャーで、sparc
か i386
です。また、ネイティブライブラリは、Microsoft Windows と Solaris オペレーティング環境の両方で jre/lib/ext/<arch> ディレクトリに置かれます。Microsoft Windows システムでは <arch> は i386 です。jre/lib/ext/<arch> ディレクトリは、jre\bin または jre/lib/<arch> のあとに検索されます。
Java VM は、特定の名前のクラスを探すとき、最初に実行環境でそのクラスを検索します。標準の実行環境のクラスから検出できなかった場合は、VM はオプションパッケージのディレクトリに置かれているすべての JAR ファイルから検索します。
インストール型オプションパッケージとなる特別な JAR ファイルや、それに含まれるクラスがあるわけではありません。jre/lib/ext
に置かれることによってインストール型オプションパッケージとなります。
インストール型オプションパッケージの JAR ファイルのマニフェスト属性には、そのオプションパッケージクラスを使うアプレットで利用できるバージョンとベンダーの情報が指定されている必要があります。バージョンとベンダーの情報を指定する属性については、「オプションパッケージのバージョン管理」で説明します。マニフェストの例を次に示します。
Manifest-version: 1.0 Extension-Name: javax.extension Specification-Version: 1.0 Specification Vendor: Sun Microsystems, Inc. Implementation-Vendor: Sun Microsystems, Inc. Implementation-Vendor-Id: com.sun Sealed: true
Java Plug-in では、アプレットの実行時にこのバージョンとベンダーの情報を使って、アプレットに必要なオプションパッケージがインストールされていること、最新のバージョンであること、アプレットに適したベンダーのオプションパッケージであることが確認されます。インストールされていない場合、またはインストールが不正な場合は、適切なオプションパッケージのダウンロードを要求するプロンプトが表示されます。詳細は、「オプションパッケージのバージョン管理」を参照してください。
目的のクラスがシステムクラスからもインストール型オプションパッケージ内のクラスからも見つからない場合は、ダウンロード型オプションパッケージ内のクラスが検索されます。
ダウンロード型オプションパッケージは、別の JAR ファイルのマニフェスト内の Class-Path ヘッダーフィールドで指定される JAR ファイルです。ダウンロード型オプションパッケージのクラスは、参照する JAR ファイルのクラスで使用されます。ある JAR ファイルにアプレットが含まれていて、その JAR ファイルのマニフェストで、そのアプレットのオプションパッケージとなる JAR ファイル (複数の場合もあり) を参照しているというのが典型的な例です。同様に、オプションパッケージ同士で互いに参照し合う場合もあります。
Class-Path ヘッダーの例を次に示します。
Class-Path: servlet.jar infobus.jar acme/beans.jar
この場合、ファイル servlet.jar
、infobus.jar
、および acme/beans.jar
に含まれるクラスが、マニフェストにこのヘッダーが含まれる JAR ファイルのクラスのオプションパッケージになります。Class-Path フィールドに URL を指定した場合、その URL は、アプレットまたはアプリケーションが含まれる JAR ファイルの URL からの相対 URL になります。
インストール型オプションパッケージと違って、ダウンロード型オプションパッケージとなる JAR ファイルが置かれる位置には何の意味もありません。ダウンロード型オプションパッケージは、特定の場所に置かれるからではなく、ほかの JAR ファイルのマニフェストの Class-Path ヘッダーの値として指定されるからオプションパッケージなのです。
インストール型オプションパッケージとダウンロード型オプションパッケージのもう 1 つの違いは、JAR ファイルに含まれているアプレットやアプリケーションだけがダウンロード型オプションパッケージを利用できるという点です。JAR ファイルに含まれていないアプレットやアプリケーションは、ダウンロード型オプションパッケージを参照するマニフェストを持ちません。
VM は、特定のクラスを探すとき、最初にシステムクラスとインストール型オプションパッケージを検索します。目的のクラスがシステムクラスからもインストール型オプションパッケージ内のクラスからも見つからない場合は、アプリケーションまたはアプレットのマニフェストで参照しているダウンロード型オプションパッケージを検索します。目的のクラスがインストール型オプションパッケージの中から見つかった場合は、アプレットやアプリケーションのマニフェストファイルでダウンロード型オプションパッケージを参照していても、ダウンロード型オプションパッケージはダウンロードされません。
拡張機能メカニズムでは、ダウンロード型オプションパッケージは JRE または JDK のディレクトリ構造にインストールされません。ダウンロード型オプションパッケージは、ダウンロードされてもインストール型オプションパッケージにはなりません。
ダウンロード型オプションパッケージの場合、インストール型オプションパッケージとは異なり、ネイティブコードを含むことはできません。