Peta Walkers

HOME> ソフトウェア > ペタクローン

ペタクローン Java Web Start

Java Web Start対応状況

結論から言うとペタクローン0.3はJava Web Startには対応していません。

Java Web Startとは、Javaによるアプリケーションをネットワークを通じて配信することができるソフトウェアです。

乱暴に言えばブラウザで音声ファイルにアクセスするとプレーヤーのソフトが起動して再生されるように、 Java Web Startのファイル(JNLP)にブラウザでアクセスするとJava Web Startが起動してJavaアプリケーション を実行することができます。

ブラウザ、Javaで連想するJavaアプレットとは違いますが、Java Web Startでアプレットを実行することもできるようです。

exeなどの実行ファイルをブラウザから開いて実行することとの違いは、

Java Web Startは何でも動かせると思っていましたが少し違うようです。

Java Web Startの要件

サーバ

Java Web StartのJNLPファイルをapplication/x-java-jnlp-fileの MIMEタイプで送信するように設定していなければいけません。

このような設定がされているWebサーバは一般的ではないようなので、.htaccessを 使えるサーバ、またはサーバ管理者の協力が必要です。

ただし、MIMEタイプの設定ができなくてもJNLPをダウンロードしてLaunch(ダブルクリック)すれば Java Web Startが起動し、実行することができます。

Javaアプリケーション

Java Web Startで実行するためにはいくつか条件があります。

  1. クラスやリソースをJARファイルにまとめておく(複数可)
  2. JNLPファイルを記述する
  3. JNIを使用しているJARがある場合はJARに電子署名が必要
  4. セキュリティーの警告を無くしたい場合もJARに電子署名が必要
リソース

ペタクローン0.3ではアイコンの画像データを通常のファイルから読み取っているため、 Java Web Startで利用できません。カスタマイズしやすさみたいなものを考慮していましたが、 どうやら裏目に出たみたいです。JARに入れた場合はClassLoaderを使って、

ClassLoader cl = this.getClass().getClassLoader();
Icon icon = new ImageIcon(cl.getResource("hoge.png"));

とする方法があるようです。ペタクローンはSWTを使っていますので、org.eclipse.swt.graphics.Imageorg.eclipse.swt.graphics.ImageDataで書く必要があります。

ところがcl.getResource("hoge.png")の戻り値であるURLを直接引数にとるコンストラクタが無いため、 迂回するコードを書く必要があります。

JNLP

JNLP(Java Network Launching Protocol)の中身はごく簡単なXMLです。

JNLPで<resource>という要素があります。 ここで画像ファイルも直接指定できれば良いと思ったのですが、できない理由はセキュリティでしょうか?

Java Web Startのかっこ悪いスプラッシュが表示されますが、<icon kind="splash"...で 変えられるようです。

何気にサンプルでは<application-desc main-class="Main" />などとなっていますが、 メインクラスがデフォルトパッケージでなければパッケージ名も必要です。 これで1回エラーを起こしてしまいました。^_^;;

SWT

SWTはJNIを使ってDLLなどのネイティブメソッドを呼び出しているため、電子署名が必要です。 JARはJava SDKに含まれているkeytoolで鍵を生成し、jarsignerで署名できます。

    鍵の生成>>keytool -genkey -alias hoge
自己署名証明>>keytool -selfcert -alias hoge
 JARへの署名>>jarsigner native.jar hoge

まとめ

Java Web Startを使って起動するにはリソースへのアクセスを意識して作る必要があるようです。

SWTのDLLもJARに入れなければいけません。無事にロードできるか心配ですが、 EclipseのSWT FAQにも 載っているので大丈夫でしょう。

Java Web Startを使えばユーザーはインストールや更新の手間を省くことができて便利そうです。 シンプルなアプリケーションはそのままJava Web Startで動作しますが、 対応させたい場合は基本的にJava Web Startを意識して作る必要があります。

ペタクローン0.3ではプラグイン機構も用意している(まだ機能していません)ので、 ここんところはどうするんだろうというのもあります。

Java Web Startはインストールや更新のためだけに使うのではなく、LAN上のサーバーサイドアプリケーションの 延長として使ってみるとおもしろいかもしれないです。

HOME> ソフトウェア > ペタクローン