NetBeans IDEでJavaFXアプリケーションを作成すると、実行可能JARファイルの他に、JNLPファイルとHTMLファイル群が生成されます。いつもは実行可能JARファイルだけを取り出していますが、今回はJava Web Startでアプリケーションを実行できるかを試みてみました。
NetBeans IDEのJavaFXアプリケーションで生成されるファイル
まず、JavaFXアプリケーションで生成されるファイルは次となります。
プロジェクト基点ディレクトリ +-- dist +-- AnalogClockSvg.jar +-- AnalogClock.jnlp +-- AnalogClock.html +-- web-files +-- dtjava.js +-- *.png, *.gif
- dtjava.js は、2000行強のJavaScriptで、いろいろ環境の検査(バージョンチェック)をしてくれますが、複雑です。
Webサーバーにdist以下を丸ごと配置
CentOS 6.8 の Apache Webサーバー(httpd)は、デフォルトでJava Web Startに必要なMIME設定がされていたので、ドキュメントルートの下にディレクトリを設けてdist以下を丸ごと配置しました。
次に、dist下のHTMLファイルのURLをWebブラウザ(Windows 10上でFirefox 64bit版を使用)で開きました。
ですが、このページのリンク(click to launch this app as webstart)をクリックすると、「To view the content on this page, please click here to install JavaFX.」のWebページ内ダイアログが表示されてしまいました。このダイアログの[OK]を押すと、Java(JRE)のダウンロードページへ誘導されてしまいます。
NetBeans が生成したHTMLファイル(とそこで利用されるJavaスクリプトファイル)は、いろいろバージョンチェックをしていおり、Javaプラグインがインストールされていない(Firefox 64bit版はNPAPIプラグインを非サポートのため、Javaプラグインが動作しない)ことを検知して、ダウンロードページへ誘導したものと思われます。
EdgeでHTMLファイルのURLを開くと次の画面となります。
リンクをクリックすると次の画面が表示されます。NetBeansが生成したdtjava.jsファイルには、firefox, chrome, IE, opera, webkitの識別はありましたが、Edgeの識別は見当たりません。そのため、先のFirefoxのようなダウンロードページへの誘導はなかったのかと思われます。
[はい]で進むと、Java Web Startの実行に移りますが、セキュリティで実行がブロックされてしまいます。
これは、Java実行環境(JRE)のセキュリティ仕様通りです。Java SE 7u51以降、Java Web Startアプリケーションを実行するための条件は次となっています。
Oracleの説明ページ
Javaからセキュリティ・プロンプトが表示される場合はどうすればよいですか。
信頼できる認証局の証明書で電子署名するサービスと価格の情報が掲載されているWebページがありました。
個人ではなかなかに敷居が高いですね。安いところでも年間数万円の費用となります。
個人レベルでの実験等で、信頼できる認証局の電子署名がない場合は、例外サイト・リストの設定をしてJava Web Startの実行ができるようにする暫定処置があります。以降に記述します。
JNLPファイルのみ利用
HTMLファイル(とそこから呼ばれるJavaScriptファイル)は使用せずに、JNLPファイルとJARファイルだけを使います。ブラウザからはJNLPファイルのURLを直接叩きます。
NetBeans IDEの生成したJNLPファイルには、codebase属性が未記載のためか、JNLPファイルと同じ場所にあるJARファイルのダウンロードが失敗します。そこで、手でcodebase属性を追記します。
- <jnlp spec="1.0" xmlns:jfx="http://javafx.com" href="AnalogClock.jnlp"> + <jnlp codebase="http://www.torutk.com:8086/app/analogclock/" spec="1.0" xmlns:jfx="http://javafx.com" href="AnalogClock.jnlp">
信頼できる認証局の電子署名がない場合の回避策(例外サイト・リスト)
信頼できる認証局の電子署名がないと、Java Wet Startの実行がブロックされてしまいますが、回避策が提供されています。
クライアント側のJava実行環境(JRE)に、例外サイト・リストとしてJNLPとJARをダウンロードするサーバーを登録しておくことで、そのサーバーからダウンロードして実行するJavaアプリケーションは電子署名がなくても実行可能となります。
Windows 10の場合、コントロールパネル > プログラム > Java で「Javaコントロール・パネル」を実行し、[セキュリティ]タブ > サイト・リストの編集 からサーバーのURLを登録します*1。
実行ボタンを押すと、アプリケーションが実行されます。
デフォルトではsandboxで実行されます。
JavaFXアプリケーションをSandboxで実行すると、背景が透明化されません。うーむ?
JARファイルに自己署名をして、JNLPにall-permissionsを追加して実行すると、背景が透明化されました((NetBeans IDEでは、プロジェクトのプロパティからビルド→デプロイメントで「無制限のアクセスをリクエスト(署名有効化」にチェックを付けると、ビルド時にJARファイルへ電子署名(自己署名)とJNLPファイルのsecurityタグを追加してくれます。)。
背景の透明化には、ローカルリソースの操作が発生しているようです。
all-permissionsを指定した場合の実行時のダイアログは次になります。
JNLPファイルにall-permissiosを指定し、JARファイルに電子署名がないと、起動時に例外が発生してしまいます。