ブラウザでは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 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 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」を参照してください。