前回に引き続き,今回もJava SE 6u10の目玉機能である次世代Java Plug-inの紹介を行います。今回はJNLPのサポートについて解説していきます。

JNLPはJava Network Launching Protocol & APIの略でJ2SE 1.2に導入されました。また,JNLPのの仕様はJSR 56 Java Network Launching Protocol & API Specificationにおいて策定されています。

もともとはJava Web Startでのアプリケーションのデプロイメント,実行のために使用されてきましたが,JSR 58では当初からアプレットのデプロイメント,実行も見据えた仕様になっています。しかし,長らくアプレットのための仕様が実装されて来ませんでした。今回紹介している次世代Java Plug-inがはじめてアプレットのためのJNLPを実装したのです。

JNLPというと,ネットワークを介したデプロイメントと実行に焦点があたりがちですが,実際にはそれだけではありません。JNLPの中にAPIという言葉が入っていることを見逃すわけにはいきません。

JNLP APを使用することで,アプリケーションがサンドボックスで実行していても,遅延ダウンロードやパーシステンス,ローカルファイルへのアクセスなどが可能になります。次世代Java Plug-inではJNLP APIも実装しているので,このような機能を使用することも可能です。

JNLP APIに関しては次回に譲るとして,今回はアプレットでJNLPを使用する方法について紹介していきます。

JNLPファイルの構造

JNLPにおいて,最も重要なのがJNLPファイルです。JNLPファイルにはXMLでアプリケーションのメタデータを記述します。

Java Web Startの場合,JNLPファイルからアプリケーション実行に必要なJARファイルを取得し,メインクラスを実行します。

アプレットの場合,HTMLドキュメント中に<applet>タグがあると,ブラウザは<applet>タグの内容をJava Plug-inに引き渡します。Java Plug-inは前回紹介したようにパラメータからJNLPファイルの場所を取得し,JNLPファイルをダウンロードします。JNLPファイルが取得できたら,Java Web Startと同様に必要なJARファイルをロードし,アプレットを実行します。

このように,Java Web Startでもアプレットであっても,JNLPの基本の部分は同じです。本解説では,アプレット特有の部分に関して解説を加えることにします。今回扱わないJNLPの部分についてはJava Web Startガイドを参照してください。

JNLPファイルの大まかな構造は以下のようになっています。

<jnlp>
  <information>
    ...
  </information>

  <security>
    ...
  </security>

  <update>
    ...
  </update>

  <resources>
    ...
  </resources>

  <application-desc> ... </application-desc>
    or
  <component-desc> ... </component-desc>
    or
  <installer-desc> ... </installer-desc>
    or
  <applet-desc> ... </applet-desc>

</jnlp>

<security>要素と<update>要素はオプションですが,それ以外の要素は必須です。<application-desc>などの四つの要素は用途により,一つを選択します。もちろん,アプレットの場合は<applet-desc>要素を使用します。

これらの要素のうち,<information>要素,<security>要素,<update>要素はJava Web Startでもアプレットでも同じです。そこで,それ以外の要素に関してアプレット特有の部分を解説していきます。

なお,JNLPにもバージョンがあり,現在のバージョンは6.0.10です。また,JNLPファイルのDTDは前述したJSR 56からダウンロードできるSpecificationのAppendixに示されています。