「Java」Java Web Start (JWS) を使ってみた

今更感が否めないですが、Java Web Start ( JWS ) を使ってみたので、その時のメモ。

[ 環境情報 ]
Windows 7 SP1
Java SE 8
Internet Explorer 11
Apache HTTP Server 2.2.22

今回は Swing アプリケーションで試したので、手順としては以下の感じになります。

1. Swing アプリケーションの作成
2. JNLP ファイルの作成
3. アプリケーション起動用の Web ページの作成
4. Web サーバ ( 今回は Apache を使用 ) の導入

もちろん、JWS も RIA ( リッチ・インターネット・アプリケーション ) になるので、以下のあたりの制限を受ける感じになります。今回は「ローカルの Apache」、「keytool、jarsigner で自己署名」、「例外サイト・リストに追加」でやってます。

・【Java 7 u51 関連情報(1)】Java 7 Update51におけるRIAの新しいセキュリティ要件について (Oracle Technology Network Japan Blog)
https://blogs.oracle.com/otnjp/entry/java_7_u51_update_info

・アプリケーション開発時の考慮点
http://docs.oracle.com/javase/jp/7/technotes/guides/javaws/developersguide/development.html#intro

---- 上記ページから抜粋 -----
安全なサンドボックス内で実行されるように記述されたアプリケーションには、次の制限が適用される。
・ローカルディスクにアクセスできない。
・すべての JAR ファイルを同一ホストからダウンロードする必要がある。
・ネットワーク接続は、JAR ファイルのダウンロード元のホストに対してのみ有効になる。
・セキュリティーマネージャーはインストールできない。
・ネイティブライブラリは使用できない。
システムプロパティーへのアクセスが制限される。アプリケーションは、JNLP ファイル内に定義されたすべてのシステムプロパティーに対する読み取り/書き込みアクセス権を持つほか、アプレットからアクセス可能なプロパティーセットに対する読み取り専用アクセス権を持つ。
---- 上記ページから抜粋 -----


1. Swing アプリケーションの作成

■ Test.java ( パネルにボタン追加して、ボタン押下にダイアログ表示する )

package test;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Test {
	public static void main(String[] args) {
		JFrame frame = new JFrame("swing test");
		frame.setBounds(200, 200, 100, 100);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel panel = new JPanel();
		JButton button = new JButton("Button");
		panel.add(button);
		frame.getContentPane().add(panel);

		button.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				JPanel panel = new JPanel();
				JOptionPane.showMessageDialog(panel, "dialog");
			}
		});

		frame.setVisible(true);
	}
}

コンパイル、.jar ファイルの作成、自己署名しておく。

javac test\Test.java
jar cf test.jar test\*
keytool -genkeypair -keystore keystore -storepass password -alias test
jarsigner -keystore keystore -storepass password test.jar test


2. JNLP ファイルの作成

■ swingtest.jnlp

<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File for SwingSet2 Demo Application -->
<jnlp
  spec="6.0+"
  codebase="http://localhost/jws"
  href="swingtest.jnlp">
  <information>
    <title>swing test</title>
    <vendor>test</vendor>
  </information>
  <security>
      <all-permissions/>
  </security>
  <resources>
    <j2se version="1.6+"/>
    <jar href="test.jar"/>
  </resources>
  <application-desc main-class="test.Test"/>
</jnlp> 


3. アプリケーション起動用の Web ページの作成

■ index.html

<html>
<body>
<a href="swingtest.jnlp">swingtest.jnlp</a>
</body>
</html>


4. Web サーバ ( 今回は Apache を使用 ) の導入

以下から適当なバージョンをダウンロードして、インストールする。

・Download - The Apache HTTP Server Project
http://httpd.apache.org/download.cgi

< Apache インストールディレクトリ >\htdocs\jws に、上記で作成した test.jar、swingtest.jnlp、index.html を配置する。


上記で作業は完了です。あとは「http://localhost/jws/index.html」にアクセスして、"swingtest.jnlp" をクリックすれば、JWS を使用して Swing アプリケーションが起動するはず。


ドキュメント的には以下になりますね。

Java Web Start 開発者ガイド
http://docs.oracle.com/javase/jp/7/technotes/guides/javaws/developersguide/contents.html

※ Web ブラウザ経由だけでなく、javaws コマンドなるものもあるんですね・・・これはまた時間ある時試してみよう。

・javaws コマンド行
http://docs.oracle.com/javase/jp/7/technotes/tools/share/javaws.html


以上です。