Java™ Rich Internet Application 配備アドバイス

Rich Internet Application の開発および配備 > Rich Internet Application 配備アドバイス

目次

統合された配備メカニズム - Java Network Launch Protocol

Java SE 6 update 10 リリース以降の Java Network Launch Protocol (JNLP) は、Rich Internet Application (RIA – アプレットと Java Web Start アプリケーション) を配備するための統一されたメカニズムを提供します。JNLP を使用して起動された RIA には、次のような、自由に使用できる強力な機能があります。

配備ツールキットスクリプト

配備ツールキットスクリプトは、ブラウザの互換性の問題を回避できるように、RIA の配備に必要な HTML を自動生成する JavaScript 関数を提供します。開発者は、さまざまなブラウザにわたって一貫性のある方法でソリューションを配備するために、これらの関数を呼び出すようにしてください。

このスクリプトは、次の public 関数を含む、deployJava という名前の 1 つのオブジェクトを公開します。

これらの public 関数の詳しい説明については、人間が読める形式の配備ツールキットを参照してください。RIA の配備に関する詳細については、Java チュートリアルの次のレッスンを参照してください。

Java Plug-in アプレットの配備

古い Java Plug-in では、アプレットは常にクライアントマシンにインストールされた最新版の JRE を使って実行されます。この動作の詳細については、古い配備セキュリティーポリシーを参照してください。

Java SE 6 update 10 リリースで導入された次世代 Java Plug-in では、指定された最小バージョンの JRE がまだクライアントにインストールされていなければ、配備ツールキットの使用時にオンラインのインストーラが自動的にダウンロードされるように指定できます。指定された最小バージョンの JRE が存在しない場合は、www.java.com から最新版の JRE がダウンロードされます。

APPLET タグの属性の使用

アプレットは、APPLET タグを使用して配備できます。配備を設定するためのパラメータは、APPLET タグへの属性およびパラメータとして指定できます。

deployJavarunApplet() 関数を使用して、アプレットを起動する前に、クライアントマシン上で最小限の Java Runtime Environment が確実に使用可能になるようにします。

<script src="https://www.java.com/js/deployJava.js"></script>
<script>
    var attributes = {codebase:'http://sample-url/Java2D',
                      code:'java2d.Java2DemoApplet.class',
                      archive:'Java2Demo.jar',
                      width:710, height:540} ;
    var parameters = {fontSize:16, permissions:'sandbox'} ;
    var version = '1.6' ;
    deployJava.runApplet(attributes, parameters, version);
</script>

上記のサンプルコードは、2 つのパラメータ (fontSize および permissions) を使ってアプレットを起動する方法を示しています。permissions パラメータは、そのアプレットがセキュリティーサンドボックス内で実行されるのか (値を sandbox に設定する)、そのサンドボックスの外側にあるリソースへのアクセス権を必要とするのか (値を all-permissions に設定する) を決めます。

Java カーネルおよび追加パッケージのインストールをトリガーするには、deployJava.runApplet() 関数のに次の行を追加します。

   deployJava.setInstallerType('kernel');
   deployJava.setAdditionalPackages('javax.swing, javax.xml');

 

JNLP の使用

JNLP を使用してアプレットを配備するには、次のように、APPLET タグで jnlp_href パラメータを指定します。

    
 <script src="https://www.java.com/js/deployJava.js"></script>
 <script> 
    var attributes = { code:'java2d.Java2DemoApplet',  width:710, height:540} ; 
    var parameters = {jnlp_href: 'java2d.jnlp'} ; 
    deployJava.runApplet(attributes, parameters, '1.6'); 
 </script>
 

この例では、java2d.jnlp には、次の配備情報が含まれています。

 <?xml version="1.0" encoding="UTF-8"?>
<jnlp href="java2d.jnlp">
<information>
<title>Java2D Demo</title>
<vendor>My Company, Inc.</vendor>
<offline-allowed />
</information>
<resources>
<j2se version="1.4+"
href="http://java.sun.com/products/autodl/j2se" />
<jar href="Java2Demo.jar" main="true" />
<!-- Specify if using JNLP extensions <extension name="SomeExtension"
href="http://some.server.com/some_extension.jnlp" /> -->
</resources>
<applet-desc
name="Java2D Demo"
main-class="java2d.Java2DemoApplet"
width="710"
height="540">
</applet-desc>
</jnlp>


APPLET タグの属性および JNLP パラメータの使用

古い Java Plug-in と新しい Java Plug-in で実行されるアプレットを配備するには、APPLET タグの属性と JNLP パラメータを次の例に示すように指定します。

var attributes = {codebase:'http://sample-url/Java2D',
                      code:'java2d.Java2DemoApplet.class', archive:'Java2Demo.jar', width:710, height:540} ; 
var parameters = {fontSize:16, jnlp_href:'java2d.jnlp'} ; 
var version = '1.6' ; 
deployJava.runApplet(attributes, parameters, version);  

最終的な配備情報の決定

APPLET タグと JNLP ファイルによって、同じ情報を指定するための重複したメカニズムが提供されます。たとえば、幅、高さ、コードなどを、JNLP ファイルと APPLET タグの両方の属性として指定できます。最終的な配備情報を決定するために、さまざまな属性に対して次の規則が適用されます。

 

Java Web Start アプリケーションの配備

Java Web Start アプリケーションは、そのアプリケーションのタイトル、ベンダー、Java バージョン、jar ファイル、およびメインクラスのみを記述した JNLP ファイルを作成することによって簡単に配備できます。Java Web Start アプリケーションの JNLP ファイルの例を、次に示します。

<jnlp spec="0.2 1.0"
      codebase="http://sample-url/desktop/javawebstart/apps"
      href="notepad.jnlp">
   <information> 
      <title>Notepad App</title> 
      <vendor>Sun Microsystems, Inc.</vendor>
      <homepage href="http://sample-url/desktop/javawebstart/demos.html"/>
      <description>Notepad Demo Description</description>
      <description kind="short">Notepad Demo Short Description</description>
      <icon href="images/notepad.gif"/>
      <offline-allowed/> 
   </information> 
   <resources>
      <j2se version="1.3+" href="http://javadl.sun.com/webapps/jawsautodl/AutoDL/j2se"/>
      <j2se version="1.3+"/>
      <jar href="notepad.jar" main="true" download="eager"/>
   </resources>
   <application-desc main-class="Notepad"/>
</jnlp> 

次に、Web ページでこの JNLP ファイルへのリンクを指定することによって、アプリケーションを簡単に配備できます。

<a href="http://sample-url/desktop/javawebstart/apps/notepad.jnlp">Launch Notepad</a>

JNLP ファイルにその他の多くの要素を追加すると、アプリケーションのユーザーの操作性、セキュリティー、および更新プロセスを制御したり、Java Network Launching Protocol (JNLP) のその他のいくつかの機能を利用したりすることができます。

アプリケーションで、特定のバージョンに追加された 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="https://www.java.com/js/deployJava.js"></script>
<script>
        var url = "http://sample-url/desktop/javawebstart/apps/notepad.jnlp";
    deployJava.createWebStartLaunchButton(url, '1.5.0');
</script>

バージョンに対する特定の要件がないアプリケーションの場合は、minimumVersion を指定しないでこの関数を使用できます。

<script>
    var url = "http://sample-url/desktop/javawebstart/apps/notepad.jnlp";
    deployJava.createWebStartLaunchButton(url);
</script>
  

RIA のロード動作のカスタマイズ

RIA のロード動作をカスタマイズして、スプラッシュ画面やカスタマイズされたロード進捗インジケータを提供することで、ロード処理中にエンドユーザーの注意を引き、測定可能な進捗情報を伝えます。詳細は、次のトピックを参照してください。

配備に関するその他の考慮事項

JRE のインストール順序

同じマシン上でさまざまな 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 には影響を与えないはずです。いずれの場合も、システム上のもっとも高いバージョンの JRE に、実行されるバージョンの Java Web Start が含まれます。

ClassLoader とリソースへのアクセス

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 © 1993, 2013, Oracle and/or its affiliates. All rights reserved.