アプレットのキャッシングを使用すると、ユーザがアプレットを参照するたびにアプレットが不必要にダウンロードされないようにすることができます。
以前のバージョンの Java Plug-in では、ブラウザがほかのすべての Web ドキュメントに使用するキャッシュと同じキャッシュを利用することにより、ディスクキャッシング機能をサポートしていました。この方法は、通常のアプレットの利用では問題ありませんが、大きなアプレットは、ほかのドキュメントの場所を確保するためにキャッシュからフラッシュされる可能性があります。ブラウザには、アプレットファイルがその後も使用されるかどうかの情報がないためです。したがって、このキャッシング方法は、大きなビジネスアプレットに必要とされるような場合には向きません。
今回のリリースでは、これに代わるアプレットのキャッシング形式を採用しました。この形式では、アプレット開発者は、作成するアプレットを「固定」状態にするかどうかを決定できます。「固定」状態にすると、ブラウザが上書きできないディスクの 2 次キャッシュ内に保持されるようにすることができます。「固定」アプレットがダウンロードされるのは、それらのアプレットがサーバ上で更新された場合だけです。それ以外の場合、アプレットは、常に簡単にロードできます。起動パフォーマンスを向上させるため、中心となるビジネスアプリケーションを提供するアプレットは「固定」状態で作成することをお勧めします。
この新しい機能を利用するには、次のようにして Java Plug-in を指定する EMBED タグあるいは OBJECT タグ内に新しい "cache_option" 値、"cache_archive" 値、および "cache_version" を含めます。
<OBJECT ....>
<PARAM NAME="archive" VALUE="...">
....
<PARAM NAME="cache_option" VALUE="...">
<PARAM NAME="cache_archive" VALUE="...">
<PARAM NAME="cache_version" VALUE="...">
</OBJECT>
または
<EMBED ....
archive="..."
....
cache_option="..."
cache_archive="..."
cache_version="...">
|
cache_option
cache_option 属性は、次の 3 つのうちのいずれかの値をとります。
- No
- アプレットのインストールを無効にします。ブラウザまたはプラグインキャッシュを使わずに、ファイルを常に Web サーバからダウンロードします。
- Browser
- ブラウザのキャッシュからアプレットを実行します (デフォルト)。
- Plugin
- 新しい Java Plug-in キャッシュからアプレットを実行します。
cache_archive
cache_archive 属性には、キャッシュするファイルの一覧を含めます。
<PARAM NAME="cache_archive" VALUE="a.jar,b.jar,c.jar">
APPLET タグ内の archive 属性と同様に、cache_archive 属性内の jar ファイルの一覧に完全な URL は含まれませんが、ファイルは常に EMBED/OBJECT タグに指定した codebase からダウンロードされます。
cache_archive 属性と archive 属性の JAR ファイルの一覧が類似したものになる可能性はありますが、同じ JAR ファイルを含めることはできません。可能なケースは 2 つあります。
- JAR ファイルの一覧を cache_archive に含め、archive には含めない。この場合、JAR ファイルは cache_option に従ってキャッシュされる
- JAR ファイルの一覧を archive に含め、cache_archive には含めない。この場合、JAR ファイルはネイティブのブラウザキャッシュを使用してキャッシュされる。キャッシュは最小限に抑えられる
cache_option および cache_archive は、EMBED/OBJECT タグごとに 1 回だけ指定できます。また、両方の属性を指定する必要があります。cache_archive と cache_option のいずれかを指定しない場合は、Java Plug-in では通常どおり archive 属性を使ってアプレットが処理されます。
cache_version
cache_version は、キャッシュされるファイルのバージョンリストを含むオプション属性です。
<PARAM NAME="cache_version" VALUE="1.2.0.1, 2.1.1.2, 1.1.2.7">
各バージョン番号の形式は X.X.X.X で、X は 16 進数の 0 から F までになります。各バージョン番号は、cache_archive 内の jar ファイルに対応します。
アプレットのキャッシュ更新アルゴリズム
デフォルトでは、cache_version 属性が指定されていないと、次のいずれかの場合にキャッシュが更新されます。
- 以前に cache_archive がキャッシュされたことがない
- Web サーバ上の cache_archive の "Last-Modified" が、アプレットキャッシュのローカルに格納された "Modification-Date" よりも新しい
- Web サーバ上の cache_archive の "Content-Length" が、アプレットキャッシュのローカルに格納された "Content-Length" とは異なる
ただし、状況によっては、HTTP/HTTPS 経由で Web サーバから返された "Last-Modified" が、アプレットの実際のバージョンを反映していない場合があります。たとえば、Web サーバがクラッシュしてすべてのファイルが復元された場合、Web サーバ上の cache_archive は異なる修正日付を保持します。この場合、cache_archive が更新されていないとしても、すべての Java Plug-in クライアントに対し、cache_archive の再ダウンロードが強制されます。
バージョンの更新を強く施行する場合、アプレットを配備する際に cache_version 属性を使用することをお勧めします。アプレットのキャッシュは、次の場合に更新されます。
- EMBED タグあるいは OBJECT タグ内の cache_archive に対応する cache_version が、アプレットのキャッシュのローカルに格納された cache_version よりも大きい
デフォルトの更新とは異なり、cache_version は、cache_archive の "Modification-Date" および "Content-Length" を取得するために Web サーバに余分な接続を確立することはありません。このため、大抵の場合、パフォーマンスが向上します。
セキュリティ
固定アプレットは、ローカルにキャッシュされますが、元のコードベースおよび署名者により定義されたセキュリティポリシーに準拠します。
既知の制限
- HTTP と HTTPS の両方をアプレットのキャッシュに使用できます。ただし、HTTPS がプロトコルの場合には、cache_version を使用する必要があります。これは、HTTPS が Java Plug-in ではブラウザのネイティブ API を使用するため、およびブラウザのネイティブ API は Modification-Date および Content-Length などの情報を適正に返さない場合があるためです。その結果、cache_version なしで HTTPS を使用すると、アプレットをロードするたびに cache_archive に対しダウンロードが強制される可能性があります
- Java Plug-in のキャッシュを使用した、マニフェストの Class-Path 変数で指定された JAR ファイルのキャッシングは、現時点ではサポートされません
- JAR ファイルは、archive または cache_archive のいずれかにリストする必要がありますが、両方にリストしてはなりません
- cache_archive に指定するパスは、アプレットのコードベースに対する相対 URL にする必要があります。cache_archive では、絶対 URL はサポートされていません
|