先月は特別編としてJavaOneレポートをお送りしましたが、今月からまたJava SE 7徹底理解に戻ります。
今月紹介するのは、デプロイメントに関する機能です。
Java SEにおけるデプロイメントといえば、Java Web StartとAppletの2つです。最近はWeb StartもAppletもあまり使われていない技術ですが、JavaFXの登場により今後使用される場面も増えるかもしれません。
しかし、Web StartやAppletを使う場合、セキュリティの問題があることも事実です。
以前より、アップデートしていない古いJREの脆弱性を利用した攻撃が多く報告されています。最近だと、OS Xに感染するFlashbackがなどが話題になっています(関連記事)。Web StartやAppletを使用する場合は、ぜひ最新版のJREを使用するようにしてください。
コードベースの省略
Java Web Startでアプリケーションを実行する場合、JNLPファイルを記述する必要があります。JNLPファイルには、アプリケーションのクラスロードを行う場所を示すコードベースを記述します。
JNLPに関しては、本連載のJava SE 6u10の新機能その9で解説したので、そちらをご参照ください。
Appletの場合、コードベースがHTMLファイルが配置されている場所と同じであれば省略可能です。しかし、Web Startを使用する場合、コードベースは必ず記述しなくてはなりませんでした。
これに対し、Java SE 7ではコードベースの記述が省略可能になりました。実際にサンプルで確かめてみましょう。
Web Startで実行するアプリケーションは、単にラベルでHello, Web Start!と表示するだけのアプリケーションです。
package net.javainthebox.webstart;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
public class WebStartDemo {
public WebStartDemo() {
JFrame frame = new JFrame("Java Web Start Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
frame.setSize(360, 100);
JLabel label = new JLabel("Hello, Web Start!", JLabel.CENTER);
label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 24));
frame.add(label);
frame.setVisible(true);
}
public static void main(String... args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new WebStartDemo();
}
});
}
}
このアプリケーションをhttp://www.javainthebox.net/nocodebase/に配置するとすると、JNLPは以下のようになります。