|
JavaTM Web アプリケーション
|
Java Web アプリケーションの開発および配備 > Java Web アプリケーション配備アドバイス
目次
Java Network Launching Protocol (JNLP) は、アプレットおよび Java Web Start アプリケーションを配備するための統合された機構を提供します。JNLP を使用して起動されたソリューションには、次のような、自由に使用できる強力な機能があります。
ブラウザの互換性の問題を回避するために、配備ツールキット (deployJava.js) は、アプレットおよび Java Web Start アプリケーションを配備するために必要な HTML を自動的に生成する JavaScript 関数を提供します。開発者は、さまざまなブラウザにわたって一貫性のある方法でソリューションを配備するために、これらの関数を呼び出すようにしてください。
このスクリプトは、次の public 関数を含む、deployJava という名前の 1 つのオブジェクトを公開します。
getJREs()
- 現在インストールされている JRE バージョンのリストを返します。installLatestJRE()
- 最新の JRE のインストールをトリガーします。 installJRE(requestVersion)
- 指定された requestVersion
、指定された requestVersion
に一致する最新バージョン、または最新の JRE のインストールをトリガーします。 versionCheck(version)
- getJREs()
で検出される、現在インストールされている JRE バージョンの中に一致する JRE バージョンが存在する場合は true を返します。writeAppletTag(attributes, parameters)
- 指定された属性とパラメータを含む APPLET タグを出力します。parameters 引数はオプションです。 runApplet(attributes, parameters, minimumVersion)
- 適切な JRE がインストールされたあと、アプレットを実行することを保証します。 isWebStartInstalled(minimumVersion)
- 指定された minimumVersion
の Java Web Start のインストールが見つかった場合は true を返します。createWebStartLaunchButton(jnlp, minimumVersion)
- 指定された JNLP URL の起動ボタンを出力します。このボタンクリックされると、適切な JRE がインストールされたあと、JNLP アプリケーションを起動することが保証されます。setInstallerType(type)
- 優先されるインストールのタイプ (null、オンライン、カーネル) を設定します。 setAdditionalPackages(packageList)
- カーネルインストーラで使用される追加パッケージのリストを設定します。上記の public 関数のバージョン、属性、およびパラメータの詳細な説明については、「deployJava.js」を参照してください。
配備セキュリティーポリシーの最近の変更では、Java Plug-in アプレットは、クライアントマシン上に配備された最新の Java バージョンでのみ正常に動作します。Java SE 6 Update 10 では、必要なバージョン (1.6.0_10) 以降が存在しない場合、Java カーネルを自動的にダウンロードするように指定できます。Java カーネルは、Java Runtime Environment に絶対に必要な Java クラスのコアセットです。アプレットからの要求に従って、ダウンロード用の追加パッケージが指定されることもあります。
アプレットは、APPLET タグを使用して配備できます。配備を設定するためのパラメータは、APPLET タグへの属性およびパラメータとして指定できます。
deployJava
の runApplet()
関数を使用して、このアプレットを起動する前に、クライアントマシン上で最小限の Java Runtime Environment が確実に使用可能になるようにします。
<script src="http://java.com/js/deployJava.js"></script> <script> var attributes = {codebase:'http://java.sun.com/products/plugin/1.5.0/demos/jfc/Java2D', code:'java2d.Java2DemoApplet.class', archive:'Java2Demo.jar', width:710, height:540} ; var parameters = {fontSize:16} ; var version = '1.6' ; deployJava.runApplet(attributes, parameters, version); </script>
上のコードにより、1 つのパラメータ (fontSize) を使用して、JRE Version 1.6.0 以降で Java 2D アプレットが起動されます。
Java カーネルおよび追加パッケージのインストールをトリガーするには、deployJava.runApplet() 関数の前に次の行を追加します。
deployJava.setInstallerType('kernel'); // include any required packages as shown below deployJava.setAdditionalPackages('javax.swing, javax.xml');
Java 2D デモアプレットを実行するには、次のリンクをクリックします。
JNLP を使用してアプレットを配備するには、次のように、APPLET タグで jnlp_href パラメータを指定します。
<applet width="300" height="300" code="com.mycompany.MyApplet">
<param name="jnlp_href" value="my_applet.jnlp">
</applet>
この例では、my_applet.jnlp には、次の配備情報が含まれています。
<?xml version="1.0" encoding="UTF-8"?>
<jnlp href="my_applet.jnlp">
<information>
<title>My Applet</title>
<vendor>My Company, Inc.</vendor>
<offline-allowed />
</information>
<resources>
<j2se version="1.4+"
href="http://java.sun.com/products/autodl/j2se" />
<jar href="my_applet.jar" main="true" />
<extension name="SomeExtension"
href="http://some.server.com/some_extension.jnlp" />
</resources>
<applet-desc
name="My Applet"
main-class="com.mycompany.MyApplet"
width="300"
height="300">
</applet-desc>
</jnlp>
APPLET タグと JNLP ファイルによって、同じ情報を指定するための重複した機構が提供されます。たとえば、幅、高さ、コードなどを、JNLP ファイルと APPLET タグの両方の属性として指定できます。最終的な配備情報を決定するために、さまざまな属性に対して次の規則が適用されます。
width
および height
: これらの属性は常に <applet>
タグから取得され、JNLP ファイルからは取得されません。これは、Web ページ上に表示すべきアプレットの大きさはブラウザがもっともよく認識しており、ページに相対的な幅や高さ (たとえば、width="50%"
) をサポートできるのはブラウザのみであることを前提にしています。
codebase
: 次のいずれかを実行することをお勧めします。
<applet>
タグがコードベースを暗黙的に指定できるようにするか、または 詳細は、「コードベースの決定」を参照してください。
code
: <applet>
タグ内の code
属性は無視されます。
<param>
タグを使用して指定されたアプレットパラメータはすべて、JNLP ファイルで指定されたアプレットパラメータとマージされます。<applet>
タグと JNLP ファイルの両方で同じパラメータが指定されている場合は、java_arguments
と java_version
パラメータを除き、<applet>
タグのパラメータが JNLP ファイルのパラメータを上書きします。
java_arguments
パラメータと java_version
パラメータは JNLP アプレットでは必要ありません。代わりに、JRE バージョンを要求するか、またはコマンド行引数を JVM に引き渡すための JNLP ファイルの機構が使用されます。JNLP ファイルからのコマンド行引数や JRE バージョン要求によって、アプレットの HTML で指定された値が上書きされます。
image
や boxbgcolor
などの希望する特定のパラメータを、アプレットの起動プロセスの早い時期に JNLP ファイルにではなく HTML に指定すると、最初に JNLP ファイルを個別にダウンロードする必要がなくなり、Web ページがロードされるとただちに使用可能になるため有利になる場合があります。
Java Web Start アプリケーションは、そのアプリケーションのタイトル、ベンダー、Java バージョン、jar ファイル、およびメインクラスのみを記述した jnlp ファイルを作成することによって簡単に配備できます。次に、最小限の jnlp ファイルの例を示します。
<jnlp> <information> <title>Notepad</title> <vendor>Sun Microsystems</vendor> </information> <resources> <java version="1.4+"/> <jar href="http://java.sun.com/products/javawebstart/apps/notepad.jar"/> </resources> <application-desc main-class="Notepad"/> </jnlp>
次に、Web ページでこの jnlp ファイルへのリンクを指定することによって、アプリケーションを簡単に配備できます。
<a href="http://java.sun.com/products/javawebstart/apps/notepad.jnlp">Launch Notepad</a>
jnlp ファイルにその他の多くの要素を追加すると、アプリケーションのユーザーの操作性、セキュリティー、および更新プロセスを制御したり、Java Network Launching Protocol (JNLP) のその他のいくつかの機能を利用したりすることができます。
Java Web Start は自動ダウンロード機構を使用して、アプリケーションを実行するために必要なバージョンの JRE をダウンロードできますが、アプリケーションで、特定のバージョンに追加された JNLP や Java Web Start の高度な機能を使用する場合は、Java Web Start を起動する前に少なくともそのバージョンがインストールされるように保証することが必要になります。
アプリケーションが (1.5.0 で導入された) SingleInstance Service を使用するとします。単に <jnlp spec="1.5.0".../> と指定して、1.4.2 以前のみがインストールされているシステムでアプリケーションが失敗するのに任せるのではなく、deployJava JavaScript を使用して、Java Web Start を起動する前に少なくとも Version 1.5.0 がインストールされるように保証できます。
<script src="http://java.com/js/deployJava.js"></script> <script> var url = "http://java.sun.com/products/javawebstart/apps/notepad.jnlp"; deployJava.createWebStartLaunchButton(url, '1.6.0'); </script>
Java™ Web Start を使用したメモ帳のデモを実行するには、「起動」ボタンをクリックします。
バージョンに対する特定の要件がないアプリケーションの場合は、minimumVersion を指定しないでこの関数を使用できます。
<script> var url = "http://java.sun.com/products/javawebstart/apps/notepad.jnlp"; deployJava.createWebStartLaunchButton(url); </script>
同じマシン上でさまざまな Java Plug-in アプレットを実行するために複数の JRE が必要な場合は、各 JRE をバージョン順にインストールすることをお勧めします。もっとも古いバージョンを最初にインストールし、もっとも新しいバージョンを最後にインストールするようにしてくださいこれにより、動的な clsid {8AD9C840-044E-11D1-B3E9-00805F499D93} が、マシン上の最新バージョンの JRE を使用していないオブジェクトタグで使用されるという問題が回避されます。
SSV のサポートを備えた JRE 5.0u6 からは、マシン上の最新バージョンの JRE が使用されるため、上の問題は発生しません。さらに、新しい動的なバージョンの clsid {CAFEEFAC-FFFF-FFFF-FFFF-ABCDEFFEDCBA} が追加されました。この新しい動的な clsid がオブジェクトタグで使用されている場合は、JRE のインストール順序とは独立に、最新バージョンの JRE が使用されます。
インストール順序は、Java Web Start には影響を与えません。いずれの場合も、実行されるバージョンの Java Web Start は、システム上のもっとも高いバージョンの JRE に含まれます。
Java Web Start アプリケーションまたは Java Plug-in アプレットでアクセスされるリソースは、クライアントマシン上の配備キャッシュ内にキャッシュされる可能性があります。このキャッシュの形式または内容は、バージョンごとに変更される可能性があるため、これを前提にすることは良い方法ではありません。
スタンドアロンのプログラムを Java Web Start または Java Plug-in に移植するとき、コードが本質的に SystemClassLoader によってロードされることを前提にしていると、問題が発生することがあります。Java Plug-in では、リソースは PluginClassLoader (これが sun.applet.AppletClassLoader を拡張し、それがさらに java.net.URLClassLoader を拡張する) によってロードされます。Java Web Start では、リソースは JNLPClassLoader (JDK 6 の時点では、これが java.net.URLClassLoader を拡張する) によってロードされます。
使用されている ClassLoader にアクセスするには、次のコードを使用します。
ClassLoader cl = Thread.getCurrent().getContextClassLoader();
ClassLoader.getResource() によって URL が返されますが、この URL が FileURL に対する JarURL であることを前提にして、次に基盤となるファイルパスを検索するためにその FileURL を分解しようとするコードはすべて失敗します。リソースにアクセスするための正しい方法は、使用されている ClassLoader のタイプにかかわらず正しい内容を返す getResourceAsStream() を使用してリソースにアクセスすることです。リソースがすでにキャッシュされている場合は、そのリソースの内容がキャッシュから直接返されるため、リソース自体への余分なネットワーク接続は発生しません。
Java 配備キャッシュの内容を直接変更することはお勧めしません。キャッシュは Java Web Start/Java Plug-in の非公開実装であるため、いつでも変更される可能性があります。
多くのアプリケーションおよびライブラリは、プロパティーファイルやその他の「リソース」を、それらのリソースを使用している jar ファイルと同じディレクトリに含めることによって配備しようとし、次に "getResource()" から返された URL を分解してこれらのファイルへのパスを生成できることを期待します。開発者はこれが必要な理由として、アプリケーションがこれらのプロパティーファイルやその他の「リソース」を、そのアプリケーションの以降の起動での使用のためにあとで変更できるようにするためであると主張します。開発者は、Web 配備のアプリケーションに移植するときに、これらをアプリケーションの jar ファイルに再パッケージ化する必要があることに気付き、それが「デフォルトの」内容のみであると見なして、ほかのいくつかの機構のうちの 1 つを使用して (ファイルを書き込むか、設定 API または JNLP PersistenceService のどちらかを使用することによって) クライアントマシン上の変更されたバージョンを持続させます。
アプリケーションが大きい場合は、そのアプリケーションのうちの起動に必要な部分のみをダウンロードしたあと、残りをオンデマンドでダウンロードすると有効なことがあります。このプロセスのことを、遅延ダウンロードと呼びます。
Java Web Start は遅延ダウンロードをサポートしていますが、これを使用している開発者はほとんどいません。アプリケーションによっては、この方法によって、ダウンロードや起動時間が大幅に改善される場合があります。遅延ダウンロードを効果的に使用するには、Java Web Start が、特定のリソースへの要求を解決するためにどの jar をダウンロードするかを認識している必要があります。以前のバージョンの Java Web Start でこの情報を提供するには、部品とパッケージの複雑な指定が必要でした。バージョン 6.0 からは、Jar インデックスを使用して同じ処理を実現できます。
Jar インデックスは、必要な jar のみをダウンロードするための簡単かつ効果的な方法であり、存在しないリソースが要求された場合にすべてをダウンロードすることを回避できます。「Jar インデックス」を参照してください。
Java Plug-in には遅延ダウンロードのサポートが組み込みまれており (つまり、ダウンロードがデフォルトで遅延される)、さらに Jar インデックスもサポートしています。また、開発者も個々のクラスを使用しようとせずに、代わりにそれらを JAR としてパッケージ化するようにしてください。
Copyright © 2008 Sun Microsystems, Inc. All Rights Reserved. フィードバック |
|