ブラウザではJava Plug-inのサポートが縮小中または撤廃中であるため、既存のJavaアプレットをJava Web Startに移行することを検討してください。Java Web Startでは、Java Network Launching Protocol (JNLP)を使用して、アプリケーションをダウンロードしてローカルに実行します。
アプレットAPIおよびJava Plug-inは、JDK 8で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。 アプレットおよび埋込みJavaFXアプリケーションに代わるものには、Java Web Startおよび自己完結型アプリケーションがあります。
Java Web Startに移行すると、Webブラウザとは独立してアプリケーションを起動できます。 ユーザーがオフラインの場合やブラウザにアクセスできない場合、デスクトップ・ショートカットでアプリケーションを起動できるため、ユーザーはネイティブ・アプリケーションと同じ操作性を得られます。
この章の内容は次のとおりです。
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>
ノート: JDK 8で使用可能およびサポートされていますが、将来のリリースで削除される準備として、アプレットAPIは非推奨としてマークされています。 アプレットの代わりに、Java Web Startや自己完結型アプリケーションなどの代替手段を検討してください。
使用しているアプレットを移行する最善の方法は、それをスタンドアロンのJavaアプリケーションに書き直してから、Java Web Startテクノロジでデプロイすることです。 アプレットを書き直して結果となるアプリケーションをテストすると、変換されたアプレットが期待どおりに機能することを確認でき、アプリケーションでJava Web Startの機能を利用できます。
必要とされる主な作業は、使用しているapplet
クラスをアプリケーションのmain
クラスに変換することです。 アプレットのinit
およびstart
メソッドは存在せず、かわりにアプリケーションのmain
メソッドの先頭にアプリケーションを初期化します。
移行をすばやく開始するには、main
メソッドを元のapplet
クラスに追加し、アプレットのinit
メソッドおよびstart
メソッドから通常コールされるアプレット初期化コードのコールを開始します。 applet
クラスにmain
メソッドがある場合、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アプレットで使用可能な共通ドキュメント・オブジェクト・モデル(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チュートリアルの「クッキー」を参照してください。
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)
の場合、ターゲット引数はJava Web Startテクノロジによって無視されます。
AppletContext.showStatus(String status)
の場合、Java Web Startテクノロジを使用して起動すると、Java Web Start AppletContainer
によってホストされるアプレットの下にあるJLabel
テキストが設定されます。
AppletContext.showDocument
と同様に、Java Web Startアプリケーションでは、BasicService.showDocument
APIを使用して、システムのデフォルトのWebブラウザを使用してHTMLページを表示できます。
Java Plug-inアプレットの場合:
AppletContext.showDocument(URL url) AppletContext.showDocument(URL url, String target)
For a Java Web Start application:
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を自動ダウンロードできます。 同じサポートをJava Web Startテクノロジで使用可能にするには、Java Web Start CLSID
を使用します。 Javaチュートリアルの「JREソフトウェアの存在の確認」を参照してください。
Java Web Startアプリケーションの拡張機能をデプロイする場合は、JNLP拡張機能プロトコル・メカニズムを使用します。 「JSR 56: Javaネットワーク起動プロトコルとAPI」、セクション3.8 "拡張記述子"を参照してください。
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ネットワーク起動プロトコルとAPI」、セクション5.4とセクション4.7の"署名されたアプリケーション"とセクション4.7の"拡張リソース"を参照してください。