Ark SiteColumn & Report Arkアーキテクチャ
TOP Arkレビュー 番外編3

Arkレビュー番外編
社外の目を通してArkアーキテクチャを評価してきたArkレビュー。
今回はJava総合テクノロジーサイト「J's Cafe」管理人からの特別寄稿をお届けします。


最近は Java だけでなく ConceptBase にも手を染めている、J's Cafe運営担当のNです。今回はこの記事を特別にArkサイトに寄稿し、皆さまと一緒にJavaデスクトップアプリケーションの将来性を見つめ直す機会になることを期待しています。

Java Web StartとJNLP
はじめに、Java Web Start(以下、JWS) と JNLP について説明します。JWSとは、JavaアプリケーションをWebブラウザから起動する技術です。また、そのためのクライアントツールを指す場合もあります。JWSは Windows/Solaris(SPARC/x86)/Linux 版を Sun Microsystems がリリースしています。また、2001年9月末にリリースされた Mac OS X 10.1にもJWSは標準搭載されました。

JNLP(Java Network Launching Protocol) は、JWSを支える基盤技術です。JNLPのXML形式のメッセージには、Javaアプリケーションの名前や説明、JARファイルのURL、メインメソッドのあるクラス名などが含まれています。

これで一体何ができるのか?って思われますよね。それでは次の章以降で詳しく説明していきます。

Just Arks with Java Web Start

オフィスサイトトップページ
Arkサイトの読者の皆さんの中には、もう既にJWSのデモページを見たことがある方もいらっしゃるかもしれませんね。あのデモページを覚えている方なら、「あのデモアプリケーションが一太郎ArkとCalcArkとPrezArkに置き換わったら...」なんて考える方もいるのでは?実は私もそう考えて、部門内サーバーに右にあるようなWebページ(以下、オフィスサイト)を作ってみました。

このオフィスサイトのそれぞれのアプリケーションのアイコンをクリックすると、JWSが起動された後、一太郎ArkやPrezArkがダウンロードされて起動するわけです。ダウンロードされた一太郎ArkなどのJARファイルは、ローカルのハードディスク上にキャッシュされます。また、この一太郎Arkはもちろん一太郎Arkなのです(つまり、Javaアプレットではないのです)から、Webブラウザを終了してもそのまま使用できます。

また、このオフィスサイトから再度どれかアプリケーションを起動することになったとします。すると、初回同様JWSの起動画面が表示されますが、今度はダウンロードは行われずにローカルにキャッシュされたアプリケーションが起動されます。サーバーからダウンロードして起動するよりも高速に起動できます。さらに、JWSはアプリケーションを起動するたびにWebサーバー上のプログラムファイルが最新であるか調べています。従って、アプリケーションをバージョンアップする場合はWebサーバー上のプログラムファイルを更新するだけで、クライアント側はアプリを利用する際に自動的にバージョンアップされるわけです。TCO削減にはうってつけかもしれません。

しかも、クライアントはWindowsマシンだけでなく、LinuxマシンもこのオフィスサイトからJust Arksを利用できますし、Mac OS Xマシンからも利用できます(ただし動作保証対象外です)。まさに、「夢のイントラネットオフィススイート」といっても過言ではないかもしれません。

しかし現実にはJWSはまだまだ未熟です。このオフィスサイトを試験的に作成してぶつかった壁をいくつか紹介しながら、これらの技術の今後について考えることができれば幸いです。

サーバー側の準備
今回はLinux+Apacheで部門内サーバーを設置していると仮定して説明します。上のオフィスサイトトップページに貼り付けてあるそれぞれのアプリケーションのアイコンは、拡張子が.jnlpのファイルにリンクしています。まず、.jnlpファイルについて簡単に解説します。

.jnlpファイルは、サーバーからダウンロードされるアプリケーションに関する説明が記述されたXML形式のファイルです。例えば一太郎Arkの場合には、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<jnlp
  spec="1.0"
  codebase="http://servername/office"
  href="ark11.jnlp">
  <information>
    <title>Ichitaro Ark 1.1</title>
    <vendor>Justsystem Corp.</vendor>
        :
        :
  </information>
        :
        :
  <security>
    <all-permissions/>
  </security>
        :
        :
  <application-desc main-class="jp.co.justsystem.ark.Ark"/>
</jnlp>

ark11.jnlp の内容の抜粋

クライアントのWebブラウザがこのark11.jnlpファイルをHTTPでダウンロードする際に、Webサーバーとの間で「このXMLファイルの記述内容に沿ってJavaアプリケーションを起動する」という取り決めができていれば良いわけです。その取り決めのベースとなるMIMEタイプの設定が、"application/x-java-jnlp-file"です。

サーバーはこの.jnlpファイルを要求された際に「MIMEタイプが"application/x-java-jnlp-file"だよ」とクライアントに教え、クライアントのWebブラウザはそのMIMEタイプを見てヘルパーアプリケーションとして登録されたJWSクライアントツールを起動する、というのがJNLPの骨格となる部分です。

従って、まずWebサーバー側に「.jnlpファイルを要求されたらMIMEタイプは"application/x-java-jnlp-file"と教えるんだよ」という設定が必要です。Apacheの場合はmime.typesという設定ファイルに次の1行を追加し、リロードさせます。

application/x-java-jnlp-file    jnlp

クライアント側の準備
クライアント側には、JWSクライアントツールをインストールしなければなりません。2001年10月現在のクライアントツールのバージョンは1.0.1_01です。Windows版の国際化版JWSクライアントツールはJREを含んでいるのでファイルサイズが約8.7MBありますが、これをSun Microsystemsのサイトからダウンロードし、インストールします。なお、Linux版のJWSクライアントツールでは、JREをあらかじめインストールしておく必要があります。その代わり、ダウンロードファイルサイズは約1MBです。

Just Arks各アプリには署名が必要
サーバー側、クライアント側それぞれの準備ができたら、オフィスサイト経由でCalcArkを起動してみます。Java Web Startの起動ロゴが表示され、サーバーから.jarファイルのダウンロードが始まります。期待に胸を躍らせていると...


おっと、セキュリティエラーとのこと。JWSでは、Java Appletのセキュリティモデルと同様、ローカルマシンのシステムへのアクセスを要求する行為(例えばプログラム側が特定するファイルの読み書き)を禁じているのです。今回の場合、一太郎ArkをはじめとするJust Arks各アプリケーションは、ローカルマシンのハードディスクに存在する設定ファイルを読み書きする機能がJWSのセキュリティモデルに抵触しています。セキュアなアーキテクチャはいかにもJavaらしく頼もしいのですが、Just Arksが起動できないのでは困ります。

JWSアーキテクチャで動作するアプリケーションを作成する上で、このセキュリティモデルに対応する方法は2つ用意されています。上のエラーメッセージからも想像できますが、1つ目はアプリケーションに署名を行うことです。2つ目はシステムへのアクセスを限定的に許可するJNLP APIを用いてアプリケーションを作成することです。

今回は、Just Arksの動作にあまり変更を加えないよう、.jarファイルに署名を行うことにします。JDKには、keytoolとjarsignerというツールがあります。keytoolは、公開鍵と秘密鍵を作成したり、署名の証明書を作成するツールです。また、jarsignerはその名の通り、.jarファイルに署名を行うツールです。なお、署名を行うには証明書が必要ですが、ベリサインなどの商用認証局に証明書を発行してもらうと費用が掛かります。今回はイントラネット利用ということで、自分で証明書を発行します。前出のオフィスサイトの画面でも、証明書をダウンロードできるようにしてあることがおわかりでしょうか。

Windows版クライアントについて
さて、サーバー側で署名済み.jarファイルの準備ができました。改めてCalcArkをクリックすると、先ほどとは少し異なるダイアログが表示されます。


「このアプリケーションには署名がされているけれど、証明書が信用できないから実行しないように」とのこと。JWSクライアントツールには、著名な商用認証局が発行するRoot Certificatesがあらかじめ多数登録されています。もしJ's Cafe Webmasterがそのような著名な認証局から発行された証明書を付けて署名していれば、その証明書の発行元の信憑性はRoot Certificateによって保証されますから、「この証明書は信用できない」などとは言われないことでしょう。ここは、J's Cafe Webmasterを信用できる、という前提で起動処理を続行します。無事にCalcArkが起動しました。

いったんCalcArkを終了します。そして再びCalcArkを起動します。すると次のダイアログが表示されます。


ここで、「デスクトップ」「[スタート]メニュー」の両方ともチェックして「はい」ボタンをクリックすると、WindowsのデスクトップにCalcArkのアイコンが作成され、スタートメニューにもCalcArkが登録されます。


ただ、私が実際にスタートメニューからCalcArkを起動してみたところ、最初に動作するJWSが強制終了してしまったのが少し残念です。気を取り直してCalcArkを再々起動すると、今度はJWS、CalcArkとも何事もなかったように起動しました。

また、JWSはアプリケーションを起動する際に、ローカルにダウンロードしたアプリケーションの.jarファイルとサーバー上の.jarファイルを比較し、更新されていればサーバー側の.jarファイルをダウンロードして起動します。試しに touch コマンドでサーバー側の CalcArk の.jarファイルのタイムスタンプを更新し、CalcArkを起動したところ、早速最新版をダウンロードして起動しました。

Windows版JWSクライアントツールでは、proxy経由でインターネットに接続している場合などにはその設定が必要です。また、バージョン1.4(2001年9月現在、β2版)など複数バージョンのJ2SEがインストールされている場合に、JWSクライアントツールそのものが起動しない、という現象にも遭遇しました。

JWSの利点と欠点
では簡単にJWSの利点と欠点についてまとめてみましょう。

まず利点ですが、
  • Javaアプレットよりも高機能なJavaアプリケーションを、Java2のきめ細かなセキュリティモデルの下で配布・提供できる。
  • サーバーに常に最新バージョンを置くだけで、クライアントマシンのアプリケーションのバージョンアップが可能。
  • JavaアプリケーションなのでクライアントOSを問わず利用できる。
といったところでしょうか。次に欠点あるいは現時点での問題点ですが、
  • 一般ユーザーにはJavaアプレットとJWS、さらにJava Plug-Inと、Java技術の3つの見え方に混乱する可能性がある。
  • JWSはクライアントマシンに必ずインストールしなければならない。
  • 常に最新バージョンのアプリケーションの利用を強制されてしまう。バージョンアップをしない、という選択肢が用意されていない。
  • .jnlpファイルを解読するとサーバー上のJARファイルの置き場所が判明してしまう。
などが挙げられます。また、Just Arks利用時の問題点として、プラグインの配布には全く利用できない、というのがあります。これについては、Just Arksのそれぞれのアプリケーションに「JNLP対応のプラグインダウンロードプラグイン」を作成するか、プラグインマネージャのJNLP対応を行うことで、プラグインサイトから最新プラグインをダウンロードできる、という世界を構築できるかもしれません。

終わりに
さて、Java Web Startについておわかりいただけたでしょうか。また、JWSはJNLP上に成り立っているという関係も理解していただけましたか。JWSとJNLPは比較的シンプルな仕様ですが、新しいJavaアプリケーションの配布方法として、今後の仕様拡張や完成度の向上に期待していきたいと思います。


注意事項
  • 弊社製品を無断で複写・複製・改変・配布することは、その形態を問わず固く禁じます。
  • クライアントマシンのOSを問わず、Just Arksおよび一太郎ArkとJava Web Startを組み合わせた使用については動作保証しておりません。
リソース

TOP Arkレビュー 番外編3