デベロッパーズコーナー:Javaプログラミングを極める「Java Web Start(その1)」
2002年11月27日作成
Javaプログラミングを極める
第3回:Java Web Start(その1)
(株)日本ユニテック
太田 純
<この記事はDigital Xpress 2002 Vol.9(6-7月号)に掲載されたものです>
今回はJ2SE (Java 2 Platform Standard Edition) 1.4の新機能Java Web Startを取り上げます。Java Web Startは、JavaアプリケーションをWebブラウザから起動する技術であり、開発者とユーザの両方に利益をもたらす可能性を持っています。 |
さまざまなWebサイトを見ていると、マルチメディアデータを提供するのに2つの方法があることに気付きます(図1参照)。一つはプラグイン方式で、Webページに埋め込んで表示するものです。この場合、HTML文書中でOBJECTタグやEMBEDタグを使用してデータを指定する方法が採られます。もう一つの方法はヘルパーアプリケーションを利用する方式で、Aタグのリンク先にマルチメディアデータそのものを指定します。この方法を使うとヘルパーアプリケーションとして登録されているプログラム、QuickTime
PlayerやRealPlayerなどが起動され、そのアプリケーションがデータの再生を行うわけです。
図1:プラグイン方式とヘルパーアプリケーション方式
さて、みなさんご存じのとおり、クライアント側で動作するJavaプログラムをWebから配布するための一般的な方法はAppletとして作成することです。この場合、HTML文書中にAPPLETタグを書くか、またはOBJECTタグやEMBEDタグを使用してJava Plug-inを指定し、プラグイン方式で実行するわけです。J2SE 1.4に加えられた新機能の一つに「Java Web Start」があります。Java Web Startは、Javaプログラムをヘルパーアプリケーションの形態で実行します。つまり、ブラウザに表示されたリンクをクリックすることで、Javaアプリケーションを実行するというわけです。プラグイン方式とは異なり、ブラウザを閉じてしまってもアプリケーションの実行が中断されることはありません。ワンクリックでダウンロードと実行ができる点も他のヘルパーアプリケーションと変わりありません。実行したアプリケーションは「Java Web Startアプリケーションマネージャ」に登録されるので、再度ダウンロード元のページを開かなくても実行できます。Java Web Startという機能自体は2000年12月にリリースされたものなので、それほど新しいというわけではありませんが、今回J2SEと統合されたことにより、さらに広い範囲で利用されていくことが期待できます。(注1)
Java言語は当初はAppletを利用してクライアントサイドでプログラムを実行する目的で作られたわけですが、最近ではサーバサイドでのJavaの利用に注目が集まり、Java関連の雑誌記事などでもサーバサイドの技術に焦点を当てたものが多くなっています。そして、HTMLベースで作成する軽量なクライアントこそが常に最善のものだと思い込んでいる人も少なくないかもしれません。しかし、現実にオフィスで利用されるアプリケーションでHTMLベースのものが多く使われているわけではありません。ワープロ、表計算ソフト、電子メールソフト、どれをとってもHTMLベースでは実現できない機能を利用して、使いやすいGUIを実現しているわけです。Java
Web StartテクノロジはHTML文書と同様に簡単にクライアントへ配布でき、同時にローカルアプリケーションと同様の使いやすいGUIを利用可能にする技術だと言えます。たとえば、クライアントサイドから直接Webサービスを呼び出して、取得したデータに対してユーザがカスタマイズしたビューを提供するような用途では、Java
Web Startが非常に優れた手段となるでしょう。
JNLP
Java Web Startが扱うアプリケーションは、通常Java Application(注2)であり、public
static void main(String[] args) がエントリポイントになります。しかし、Aタグのリンク先に指定するのはこのmainメソッドを持つclassファイルやjarファイルではなく、JNLPファイルというものです。JNLPは、Java
Network Launching Protocol & APIの略です。JNLPファイルには、アプリケーションが含まれるjarファイルや、起動に必要な条件、起動パラメータなどを指定できます。JNLPファイルのMIMEタイプは「application/x-java-jnlp-file」となっています。クライアント側ではInternet
ExplorerとNetscape Navigator 4.xについてはセットアップされたときにJNLPファイルに対してJava
Web Startが起動されるように設定されます。J2SE 1.4.0のセットアップではNetscape 6.xに対しては自動設定されません。Windows環境の場合、jnlpファイルを最初に起動するときにJNLPFileとして開くように指示すれば、その後は問題なく開けるようになります。動作環境によっては手動でサポートアプリケーションを指定しなければならない場合もあります。
Webサーバ側はほとんどの場合、MIMEタイプの設定を手動で行う必要があります。たとえば、Apache HTTP Serverの場合はmime.typesファイルにJNLPファイルに関する行を追加します。
application/x-java-jnlp-file jnlp |
Microsoft Internet Information Server (IIS)の場合はインターネットサービスマネージャを使用して「既定のWebサイト」のプロパティの「HTTPヘッダー」において拡張子jnlpとMIMEタイプの関連付けを行うとよいでしょう。詳細については各Webサーバのマニュアルを参照してください。
正しく関連付けを行っても「サーバから誤ったMIME タイプが返されました」というエラーが発生する場合があります。これは、Java
Web Startが読み込もうとしたファイルになんらかの理由でアクセスできなかった場合です。本当は「ファイルが見つかりませんでした」あるいは「ファイルにアクセスできません」といったメッセージのほうがより正しいはずですが、Java
Web StartはエラーメッセージがHTML形式で返ってきたのを見てファイル形式が違うことを示すエラーを出力するようです。主な原因となるのは次の2点です。確認してみてください。
-
クライアント側のプロキシの設定が正しくない。プロキシサーバの設定が正しいかどうか確認してください。場合によっては「Java
Web Startアプリケーションマネージャ」においてメニューの[ファイル]-[設定]を開いてプロキシの設定を行う必要があるかもしれません。
-
サーバ側のアクセス権の設定が正しくない。匿名アクセスの許可の設定などが適切になされているか確認してください。
さて、JNLPファイルはXMLファイルであり、図2に示した構造となっています。JNLPファイルはUTF-8エンコーディングにする必要があります。日本語を含める場合は注意してください。実際のファイル例はリスト1に示しました。図2では、3レベル目(文書要素の孫)より下位の要素は省略しています。図の中の、塗りつぶした二重丸は選択項目(DTDで"|"
で表される)であることを示しています。また、要素名に付けた?、*、+ は出現回数を示す記号で、DTDの要素宣言で使うのと同じ意味で使っています。すなわち、?
は0回または1回、* は0回以上、+ は1回以上です。
図2:JNLPファイルの構造
この図からわかるとおり、JNLPファイルは大きく分けて4つの部分から構成されています。
1.information要素
2.security要素
3.resources要素
4.application-desc要素、またはそれと置き換えるアプリケーション記述要素。
では、この4つを簡単に説明しましょう。
1.information要素の中にはJava Web Startによって表示されるアプリケーションの情報を含めます。アプリケーションのタイトル(title要素)、作成者(vendor要素)などがあります。この部分は余計な説明を書くよりも、実際のJNLPファイルであるリスト1と図3、図4の表示例を比べたほうがよく理解できるでしょう。
2.security要素の中には、アプリケーションが動作するために必要となるセキュリティ設定を記述します。とは言っても、現在のJNLPではすべてのアクセスを要求する書き方しかすることができません。securityの設定がないアプリケーションは、Appletと同じsand
box内での実行に制限されます。つまり、ローカルディスクへのアクセスが制限され、ネットワーク接続はダウンロード元のホストに限定されるわけです。security設定を行うアプリケーションは、必ず署名されたjarファイルで配布される必要があります。セキュリティに関する事柄は本連載の次回の記事でさらに扱います。
3.resources要素の中では、アプリケーションを含むjarファイル(jar要素)や、起動に必要なJ2SEのバージョン(j2se要素)、起動時に指定するシステムプロパティ値(property要素)などを指定します。アプリケーションはclassファイルではなく、必ずjarファイルとして配信される必要があります。
4.最後のappliction-desc要素にはmainメソッドを含むクラス名(application-desc要素のmain-class属性)、起動時の引数(argument要素)などを指定します。applet-descという要素も準備されており、既存のAppletをJava
Web Startに移行するための手段として利用することができます。
リスト1:JNLPファイルサンプル(JWSTest.jnlp)
<?xml version="1.0"?>
<jnlp spec="1.0+" codebase="http://jun-o76i20n8ef3/samples"
href="JWSTest.jnlp">
<information>
<title>JWS Test Application</title>
←アプリケーションのタイトル
<vendor>UTRI</vendor>
←作成者
<homepage href="http://jun-o76i20n8ef3/samples/JWSTest.html"/>
<description>Java Web Start
Sample Application</description> ←説明
<description kind="short">Java
Web Start サンプルです。XMLファイルを取得して内容を表示します。</description>
<icon href="JWSTest.jpg"/>
←アイコン
</information>
<resources>
<j2se version="1.2+"/>
←必要なJ2SEのバージョン
<jar href="JWSTest.jar"/>
←jarファイル
</resources>
<application-desc main-class="jp.co.utj.samples.JWSTest"/>
←mainメソッドを持つクラス
</jnlp> |
図3:アプリケーション起動中の画面表示
図4:Java Web Startアプリケーションマネージャ
次回は、実際にJava Web Startで動作するアプリケーションを記述し、特にXMLを扱う場合の考慮事項を扱っていきます。
(注1) Java Web Startを動作させるために必要なJava環境はJ2SE
1.2.2以上となっています。Java Web Startについての詳細は、以下のサイトを参照してください。
http://java.sun.com/products/javawebstart/ja/index_ja.html
(注2)本稿では、J2SEが規定するスタンドアロンプログラムの形態を指すのに「Application」という表記を使い、一般的な用語としての「アプリケーション」と区別しています。「アプリケーション」にはApplicationとApplet両方が含まれます。
関連サービス
IT技術およびIT製品の可用性調査・検証業務