JBKプラグインが行うアプレットの独自キャッシュを説明します。
従来のJBKプラグインはブラウザのキャッシュ機能を用いてアプレットをキャッシュします。“2.3.6 アプレットのダウンロード方式の指定”にあるように、ブラウザの機能を用いてダウンロードされたファイルはブラウザのローカルキャッシュに保存されます。しかしブラウザのローカルキャッシュであるため、キャッシュの容量が一杯になるとブラウザが自動的にキャッシュをクリアしてしまいます。このため、Webサーバのアプレットを更新していないにも関わらず不必要にアプレットがダウンロードされる場合があります。
このような状況を防ぐため、JBKプラグインでは新たにアプレットの独自キャッシュを用意しました。後述の設定を行うことで、アプレットはブラウザのローカルキャッシュではなくJBKプラグインの独自キャッシュに保存されるようになります。独自キャッシュに保存されたアプレットが自動的に削除されることはありませんので、Webサーバのアプレットが更新されないうちは不要なダウンロードが行われることはありません。ブラウザのキャッシュを用いて不便を感じている場合には、アプレットの独自キャッシュを使用されることをお勧めします。
独自キャッシュの使用可能条件
JBKプラグインの独自キャッシュは以下の条件においてのみ使用可能です。
ダウンロードに使用するプロトコル:HTTPプロトコル、HTTPSプロトコル
独自キャッシュの対象ファイル(デフォルト状態)
Webサーバからダウンロードされたクラスファイル
HTMLファイルのJBKプラグイン用のタグのARCHIVE属性に記述されているJARファイル
JBKプラグイン用のタグの記述方法は“2.2.3 HTMLファイルの作成”を参照してください。
java.applet.AppletクラスのgetImage()メソッドを用いてWebサーバからダウンロードされたイメージファイル(GIF、JPEGなど)
この3種類以外のファイルを独自キャッシュの対象にしたい場合には、アプリケーションからJBKプラグインのキャッシュAPIを呼び出す必要があります。詳しくは“JBKプラグインのキャッシュAPI”を参照してください。
独自キャッシュの設定方法
JBKプラグインの独自キャッシュを使用する場合には、jbkplugin.propertiesの中に以下の行を記述してください。
jbk.plugin.www.plugin_cache.enable=<独自キャッシュを使用する/しない> |
各プロパティには、以下の情報を設定します。
jbk.plugin.www.plugin_cache.enable
独自キャッシュを使用するかどうかを指定するプロパティです。<独自キャッシュを使用する/しない>には、以下のどちらかを記述します。
独自キャッシュを使用します。
独自キャッシュを使用しません。従来どおりブラウザキャッシュが使用されます。
デフォルト状態では、jbk.plugin.www.plugin_cache.enableの値はfalse(従来どおりの動作)に設定されています。
jbk.plugin.www.plugin_cache.dir
独自キャッシュの保存フォルダを指定するプロパティです。<独自キャッシュの保存フォルダ>には、独自キャッシュの保存フォルダの絶対パスを指定します。デフォルト状態の設定は以下のようになっています。
${user.home}\applet_cache |
これは、ユーザープロファイルフォルダにある“applet_cache”フォルダを表します(${user.home}は、ユーザープロファイルフォルダを表すプロパティです)。
jbk.plugin.www.plugin_cache.dir.freespace
独自キャッシュの保存フォルダの空き容量を指定するプロパティです。独自キャッシュの保存フォルダがあるドライブの空き容量がこのプロパティに指定された値以下になると、ダウンロードされたファイルは独自キャッシュに保存されなくなります。
<独自キャッシュの保存フォルダの空き容量指定>には独自キャッシュの保存フォルダの空き容量を指定します。次の2種類の指定の仕方が可能です。
絶対値指定
数値のみを指定すると空き容量をバイト数で指定したことになります。空き容量をキロバイト数あるいはメガバイト数で指定する場合には、数値の後ろにそれぞれ'K'あるいは'M'を付けてください。'K'や'M'は小文字で指定してもかまいません。
割合指定
数値の後ろに'%'を付けて指定すると、空き容量をそのドライブの総容量に占める割合で指定したことになります。
デフォルト状態では、jbk.plugin.www.plugin_cache.dir.freespaceの値は1%に設定されています。
例
空き容量の指定例
# バイト数指定の例 |
jbk.plugin.www.plugin_cache.update
独自キャッシュの更新条件を指定するプロパティです。<独自キャッシュの更新条件>には、以下のどちらかを記述します。
Webサーバ上のファイルの更新日時がキャッシュ内のファイルの更新日時よりも新しい場合に、キャッシュの更新を行います。
Webサーバ上のファイルの更新日時がキャッシュ内のファイルの更新日時と異なる場合に、キャッシュの更新を行います。
デフォルト状態では、jbk.plugin.www.plugin_cache.updateの値はnewerに設定されています。
jbk.plugin.www.plugin_cache.accelerate
独自キャッシュの更新条件がnewerに設定されているときに、サーバへの問い合わせ処理を高速化するかどうかを指定するプロパティです。<更新条件が“newer”のときの高速化を行う/行わない>には、以下のどちらかを記述します。
Webサーバへの問い合わせに“If-Modified-Since:”ヘッダをつけて問い合わせを行います。サーバからのダウンロード容量が削減されるため、キャッシュ使用時の処理が高速化されます。
従来どおりWebサーバに問い合わせを行い、キャッシュ使用時にはWebサーバからのダウンロードを打ち切ってキャッシュファイルからの読み込みを行います。
デフォルト状態では、jbk.plugin.www.plugin_cache.accelerateの値はfalseに設定されています。
独自キャッシュの動作
JBKプラグインの独自キャッシュの動作は次のようになります。
Webサーバからダウンロードしようとするファイルが独自キャッシュに保存されていない場合、JBKプラグインはそのファイルをWebサーバからダウンロードし、同時に独自キャッシュに保存します。
Webサーバからダウンロードしようとするファイルが独自キャッシュに保存されている場合、JBKプラグインは独自キャッシュに保存されているファイルの更新日付とサイズを確認します。
Webサーバにあるファイルと独自キャッシュに保存されているファイルの更新日付の関係がjbk.plugin.www.plugin_cache.updateで指定されている条件に当てはまる場合、JBKプラグインはそのファイルをWebサーバからダウンロードし、同時に独自キャッシュに保存します。
Webサーバにあるファイルと独自キャッシュに保存されているファイルのサイズが異なる場合にも、JBKプラグインはそのファイルをWebサーバからダウンロードし、同時に独自キャッシュに保存します。
これ以外の場合には、JBKプラグインはファイルをWebサーバからダウンロードせず、代わりに独自キャッシュに保存されているファイルをロードします。
jbk.plugin.www.plugin_cache.accelerateがtrueで設定されていた場合、キャッシュファイルが存在しているときには、Webサーバに“If-Modified-Since:”ヘッダをつけて問い合わせを行い、“304~Not~Modified”の応答が帰ってきた場合は独自キャッシュに保存されているファイルをロードします。
JBKプラグインは独自キャッシュに保存したファイルを削除しません。独自キャッシュに保存されたファイルを削除する必要がある場合には、ユーザがそのファイルを手動で削除する必要があります。
独自キャッシュの保存フォルダがあるドライブの空き容量がjbk.plugin.www.plugin_cache.dir.freespaceに指定された値以下になった場合には、JBKプラグインはダウンロードしたファイルを独自キャッシュに保存しません。なお、ファイルがキャッシュに保存されなくてもファイルのダウンロードは正常に行われますので、このような場合でもアプレットが動作しなくなることはありません。
JBKプラグインのキャッシュAPI
JBKプラグインの独自キャッシュが正しく動作するには、アプレット上の異なる2つのスレッドからWebサーバ上の同じファイルを同時にダウンロードすることがない(ファイルの同時ダウンロードが発生しない)、ということが保証されている必要があります。
デフォルトで独自キャッシュの対象となっている3種類のファイル(クラスファイル、JARファイルおよびイメージファイル)は、同時ダウンロードが発生しないことがJava VM内部で保証されています。これら以外のファイルは、ユーザがそのファイルの同時ダウンロードが発生しないことを保証できる場合に限り、アプレットからJBKプラグインのキャッシュAPIを呼び出してそのファイルを独自キャッシュの対象とすることができます。
JBKプラグインのキャッシュAPIは次のとおりです。
クラス名
com.fujitsu.jbk.plugin.browser.www.PluginCacheController
(extends java.lang.Object)
メソッド:
getInstance
PluginCacheControllerのインスタンスを返します。
public static PluginCacheController getInstance() |
PluginCacheControllerのインスタンス
getCachedURL
引数で渡されたURLのファイルを独自キャッシュの保存対象にします。
public URL getCachedURL(URL origURL) |
独自キャッシュの保存対象にしたいURLのオブジェクト
独自キャッシュの保存対象となったURLのオブジェクト。このオブジェクトを用いてダウンロードを行うことで、そのURLのファイルが独自キャッシュの保存対象となります。
PluginCacheControllerクラスのクラスファイルは、JBKプラグインの開発用jarファイルに格納されています(JBKをインストールしたフォルダ配下の“classes\jbkstd.jar”になります)。このクラスを使用したアプレットのクラスをコンパイルする場合は、クラスパスにJBKプラグインの開発用jarファイルが含まれていることを確認してください。
例
JBKプラグインのキャッシュAPIを呼び出す実装例
通常のダウンロード処理の例
// URLオブジェクトの作成 URL url = new URL(/* ダウンロードするファイルのURL */); // URLConnectionの取得 URLConnection conn = url.openConnection(); // ダウンロード用の入力ストリームの取得 InputStream in = conn.getInputStream(); /* 以下InputStreamを用いたファイルの読込み処理 */ |
JBKプラグインのキャッシュAPIを用いたダウンロード処理の例
// import文 import com.fujitsu.jbk.plugin.browser.www.PluginCacheController; |
// URLオブジェクトの作成 URL url = new URL(/* ダウンロードするファイルのURL */); // 独自キャッシュを使用するためのURLオブジェクトの取得 try { url = PluginCacheController.getInstance().getCachedURL(url); } catch (Throwable ignore) { // ここで発生したエラーに対しては何も行わなくてもよい。 // 独自キャッシュが働かなくてもファイルのダウンロードは // 問題なく行えるので、アプリケーションは正常動作できる。 } // URLConnectionの取得 URLConnection conn = url.openConnection(); // ダウンロード用の入力ストリームの取得 InputStream in = conn.getInputStream(); /* 以下InputStreamを用いたファイルの読込み処理 */ |
独自キャッシュについて
JBKプラグインの独自キャッシュに保存されたファイルは、ブラウザのキャッシュには保存されません。
JBKプラグインは独自キャッシュに保存したファイルを削除しません。独自キャッシュに保存されたファイルを削除する必要がある場合には、JBKプラグインを使用しているブラウザを全て終了させてから、独自キャッシュの保存フォルダ内のファイルをユーザが手動で削除してください。
独自キャッシュの対象ファイルは、次のタイミングでダウンロードされます。
デフォルトの独自キャッシュ対象ファイル(先に挙げたクラスファイル、JARファイルおよびイメージファイル)は、Java VM起動後の初回使用時にのみ更新条件が確認され、更新が必要ならばダウンロードされます。これらのファイルはJava VMによってロードされるとメモリ上にキャッシュされ、以降はJava VMが終了するまでメモリ上のデータが使用されます。
JBKプラグインのキャッシュAPIを用いて独自キャッシュ対象となったファイルは、続けて呼び出されるURLConnectionのgetInputStream()メソッド実行時に更新条件が確認されます。更新が必要ならば、そのInputStreamでファイルを読み込む際にファイルがダウンロードされます。
java.applet.AppletContextクラスのshowDocument()メソッドを呼び出してダウンロードしたHTMLファイルは、JBKプラグインのキャッシュAPIを用いても独自キャッシュの対象にはなりません。必ずブラウザのローカルキャッシュに保存されます。
ファイルをダウンロードした際にWebサーバから返されるHTTPのヘッダに以下の設定のどれかが行われている場合には、JBKプラグインはそのファイルをキャッシュに保存しません。
"Pragma"フィールドに"no-cache"が指定されている。
"Cache-Control"フィールドに"no-cache"あるいは"no-store"が指定されている。
なお、JBKプラグインは"Cache-Control"フィールドの"max-age"指定を用いたキャッシュ制御は行いません。
HTTPのヘッダ情報の詳細は、HTTP/1.1の仕様を参照してください。
独自キャッシュの保存フォルダには、PluginCacheController.iniというファイルが生成されます。このファイルは、JBKプラグインが独自キャッシュの管理に使用するファイルです。このファイルを編集すると独自キャッシュの動作が保証されなくなりますので、このファイルはユーザが編集しないようにしてください。
Windows Vista/Windows 7上で独自キャッシュ機能を用いる場合は、独自キャッシュの保存フォルダは、ユーザプロファイルのLocalLowフォルダ配下に設定してください。"${user.home}"が、ユーザープロファイルフォルダを表すプロパティです。
Webサーバにファイルを要求する際に、“GET”メソッドで要求したものだけが、JBKプラグインの独自キャッシュに保存されます。 “POST”メソッドで要求したものは、独自キャッシュには保存されません。
ファイルをダウンロードした際に、Webサーバから返されるHTTPのヘッダに"Last-Modified"フィールドまたは"Content-Length"フィールドがない場合には、そのファイルはJBKプラグインの独自キャッシュには保存されません。