プライマリ・コンテンツに移動
Java Platform, Standard Editionデプロイメント・ガイド
リリース10
E94981-01
目次へ移動
目次

前
次

6 JavaアプレットからJava Web StartおよびJNLPへの移行

ブラウザではJava Plug-inのサポートが縮小中または撤廃中であるため、既存のJavaアプレットをJava Web Startに移行することを検討してください。Java Web Startでは、Java Network Launching Protocol (JNLP)を使用して、アプリケーションをダウンロードしてローカルに実行します。

アプレットAPIおよびJava Plug-inは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットおよび埋込みJavaFXアプリケーションに代わるものには、Java Web Startおよび自己完結型アプリケーションがあります。

Java Web Startに移行すると、Webブラウザを使用せずにアプリケーションを起動できます。ユーザーがオフラインの場合やブラウザにアクセスできない場合、デスクトップ・ショートカットでアプリケーションを起動できるため、ユーザーはネイティブ・アプリケーションと同じ操作性を得られます。

この章の内容は次のとおりです。

既存のJavaアプレットの移行

Java Web Startテクノロジにはアプレットのサポートが組み込まれています。アプレットの再コンパイルを行わずに、使用しているアプレットをJava Web Startテクノロジで実行できます。JNLP applet-desc要素を使用してアプレットのHTMLタグをJava Network Launching Protocol (JNLP)ファイルに変換するだけです。次に例を示します。

<resources>
  <jar href="SwingSet2.jar"/>
</resources>
<applet-desc main-class="SwingSet2Applet" name="SwingSet" width="625" height="595">
  <param name="param1" value="value1"/>
  <param name="param2" value="value2"/>
</applet-desc>

注意:

アプレットAPIは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットのかわりに、Java Web Startまたは自己完結型アプリケーションなどの代替を検討してください。

JavaアプレットからJava Web Startアプリケーションへの書直し

使用しているアプレットを移行する最善の方法は、それをスタンドアロンのJavaアプリケーションに書き直してから、Java Web Startテクノロジでデプロイすることです。アプレットを書き直して結果となるアプリケーションをテストすると、変換されたアプレットが期待どおりに機能することを確認でき、アプリケーションでJava Web Startの機能を利用できます。

必要とされる主な作業は、使用しているappletクラスをアプリケーションのmainクラスに変換することです。アプレットのinitおよびstartメソッドがなくなるため、かわりにアプリケーションのmainメソッドの開始時にアプリケーションを初期化します。

移行を迅速に始めるには、mainメソッドを元のappletクラスに追加してから、本来ならアプレットのinitおよびstartメソッドからそれが呼び出されるアプレット初期化コードの呼出しを開始します。mainメソッドがappletクラスに含まれていれば、Java Web Startテクノロジを使用してその起動を開始できます。その後、ゆっくりとappletクラスへの依存関係を削除し、それをアプリケーションのmainクラスに完全に変換できます。

特別な考慮事項

移行時に考慮すべき事項を次に示します。

  • Java Web Startアプリケーションは、Web ブラウザ内では実行されません。ブラウザ上でアプレットになんらかの依存関係がある場合(ブラウザを使用したJavaからJavaScriptまたはJavaScriptからJavaへの通信など)、通信コードは機能しません。影響を受けるAPIには次が含まれます。

    • JavaからJavaScriptへの通信用のJSObject API (netscape.javascript.JSObject.*)は、Java Web Startアプリケーションでは機能しません。

    • Java Plug-inアプレットに使用できる共通Document Object Model (DOM) API (com.sun.java.browser.dom.*およびorg.w3c.dom.*)は、Java Web Startアプリケーションでは使用できません。

  • Java Plug-inテクノロジと同様に、Java Web Startテクノロジでもスタートアップ性能を向上させるためにアプリケーションJARおよびアプリケーションによってダウンロードされたリソースをキャッシュに格納します。

  • Java Web Startテクノロジは、Internet Explorer (IE)のcookieストアを使用することにより、Windows上で永続cookieのサポートを提供し、cookieを扱う際の動作はIEのcookie制御により決定されます。LinuxおよびSolaris上では、Java Web Startテクノロジは独自のcookieストア実装を使用することにより、永続cookieのサポートを提供します。JavaチュートリアルのCookiesを参照してください。

  • JNLP applet-desc要素でアプレットを配備した場合は、Java Web Startテクノロジが提供するAppletContainerを使用してアプレットが作成されます。アプレットがApplet.getAppletContext()を呼び出すと、Java Web Startテクノロジが提供するAppletContainerContextが返されます。次のリストは、Java Plug-inのAppletContextとJava Web StartのAppletContextの間には実装におけるわずかな違いを示しています。

    • 次のアプレット永続性APIメソッドは、Java Web Startテクノロジでは実装されません。

      AppletContext.getStream(String key)
      AppletContext.getStreamKeys()
      AppletContext.setStream(String key, InputStream s)
      

      Java Web Startアプリケーションでは、クライアント・システムでデータをローカルに格納する際にJNLP永続性サービスAPIを使用できます。PersistenceServiceインタフェースを参照してください。

    • AppletContext.showDocument(URL url, String target)では、target引数がJava Web Startテクノロジによって無視されます。

    • AppletContext.showStatus(String status)では、それがJava Web Startテクノロジで起動されると、アプレットを下回るJLabelテキストが設定され、Java Web StartのAppletContainerによってホストされます。

  • AppletContext.showDocumentと同様に、BasicService.showDocument APIを使用すれば、Java Web StartアプリケーションでシステムのデフォルトWebブラウザを使用してHTMLページを表示できます。

    Java Plug-inアプレットの場合:

    AppletContext.showDocument(URL url)
    AppletContext.showDocument(URL url, String target)
    

    Java Web Startアプリケーションの場合:

    BasicService.showDocument(URL url)
    

    BasicServiceインタフェースを参照してください。

  • アプレットで、次の呼出しを使用してリソースを取得した場合:

    Applet.getImage(URL url)
    Applet.getImage(URL url, String name)
    Applet.getAudioClip(URL url)
    Applet.getAudioClip(URL url, String name)
    AppletContext.getAudioClip(URL url)
    AppletContext.getImage(URL url)
    

    Java Web Startテクノロジでのベストプラクティスは、アプリケーションJARファイルにそれらのリソースを入れておき、JNLPClassLoaderを使用してそれらにアクセスすることです。

    ClassLoader cl = this.getClass().getClassLoader();
    URL url = cl.getResource(url);
    Image im = Toolkit.getDefaultToolkit().createImage(url);
    

    JARファイルからのリソースの取得を参照してください。

  • pack200 JARパック・ツールは、Java Web StartとJava Plug-inの両方のテクノロジでサポートされています。すでにアプレットJARをpack200でデプロイしている場合は、Java Web Startテクノロジへの移行時に何も変更する必要はありません。

  • Java Plug-inテクノロジのOBJECTタグを使用すると、プラグインCLSIDが含まれているクライアント・マシンでJavaが使用できるかどうかを検出し、必要に応じて自動ダウンロードできます。同じサポートをJava Web Startテクノロジで使用可能にするには、Java Web Start CLSIDを使用します。JavaチュートリアルのJREソフトウェアの存在の確認を参照してください。

  • Java Web Startアプリケーションの拡張機能をデプロイする場合は、JNLP拡張機能プロトコル・メカニズムを使用します。JSR 56: Java Network Launching Protocol and APIのセクション3.8「Extension Descriptor」を参照してください。

    Java Plug-inテクノロジによるJNLP拡張機能メカニズムの利点の1つは、アプリケーションが実行しているJREのバージョンに関係なく、インストールされた拡張機能が、システムで実行されているすべてのJava Web Startアプリケーションで利用できるようになることです。Java Plug-inテクノロジでは、同じJREバージョンで実行されているアプレットしかインストールされた拡張機能を使用できません。

  • 署名付きJARファイルでは、Java Plug-inテクノロジと同様に、アプリケーションJARファイルに署名し、JNLPファイルを使用してアプリケーションがすべてのアクセス権で実行されるように要求できます。Java Plug-inテクノロジでは、異なる証明書でアプレットJARに署名できます。Java Web Startテクノロジでは、1つのJNLPファイルに含まれているすべてのJARファイル(jarおよびnativelib要素)の署名には同じ証明書を使用する必要があります。これにより、起動中にユーザーに提示する証明書はJNLPファイルごとに1つで済むため、ユーザー管理が簡略化されます。異なる証明書で署名されたJARを使用する必要がある場合は、それらをコンポーネント拡張機能のJNLPファイルに入れて、メインJNLPファイルから拡張機能ファイルを参照できます。JSR 56: Java Network Launching Protocol and APIのセクション5.4「Signed Applications」およびセクション4.7「Extension Resources」を参照してください。