先月は特別編として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ではコードベースの記述が省略可能になりました。実際にサンプルで確かめてみましょう。

サンプルのソース (こちらからダウンロードできます)
nocodebase.html
nocodebase.jnlp
WebStartDemo.java

 Web Startで実行するアプリケーションは、単にラベルでHello, Web Start!と表示するだけのアプリケーションです。

リスト1●WebStartDemo.java
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は以下のようになります。