Java Platform, Standard Editionデプロイメント・ガイド
目次      

11 Java Rich Internet Application

ここでは、Rich Internet Application (RIA)をアプレットまたはJava Web Startアプリケーションのどちらにするかを決定する際に役立つ情報を提供します。RIAはインターネットを利用するアプリケーションです。

このトピックには、次の項があります。

11.1 Java RIAについて

Javaテクノロジベースのソリューションは、適切な設計方針で開発されると高い柔軟性を発揮します。配備メカニズムや実行コンテキストに基づいて、2つのタイプのRIAを利用できます。

  1. アプレット – これらのソリューションはWebブラウザのコンテキストで実行されます。セッションcookie、DOMアクセスなどのブラウザの機能を利用します。アプレットを配備するには、Java Network Launch Protocol (JNLP)を使用するか、appletタグ属性を使用します。

  2. Java Web Startアプリケーション - Java Web Startアプリケーションは、最初はブラウザから配備されます。アプリケーションがダウンロードされ、ユーザーがセキュリティ証明書を受け入れると、このアプリケーションはほぼスタンドアロン・アプリケーションと同様に動作します。Java Web Startを使用してユーザーのデスクトップから実行されている場合は、アプリケーションへの更新が自動的にダウンロードされます。

11.1.1 設計

RIAをブラウザの内部にアプレットとして配備するか、またはブラウザの外部にJava Web Startアプリケーションとして配備するかの決定が、ソリューションの設計に影響していました。しかし、正しく構造化されたプログラムはブラウザの内部または外部のどちらにも容易に配備できます。

アプリケーションの設計中に従うべき重要な手法が、コンポーネント・ベースのアーキテクチャの使用です。従来のアプリケーションは、トップ・レベルのFrameを含むユーザー・インタフェースをmainメソッド内で構築する傾向がありました。このプログラミング方法では、アプリケーションが独自のフレームを作成することが前提になるため、ブラウザ内でのアプリケーションの容易な再配備が妨げられます。ブラウザ内でアプレットとして実行される場合は、そのアプレットが暗黙的にアプリケーションのユーザー・インタフェースを保持すべきコンテナになるため、トップ・レベルのFrameは必要ないか、または望ましくありません。

かわりに、アプリケーションの開発中は、まとめて作成できる1つ以上のコンポーネントにその機能を構成することを試みてください。この場合の「コンポーネント」という用語はAWT Componentクラス、Swing JComponentクラス、または別のサブクラスのサブクラスであるGUI要素を指します。ユーザー・インタフェースを構築したり、返したり、表示したりする様々なメソッドの観点からアプリケーションを表現するのではなく、それぞれがユーザー・インタフェースの各部分を自身に追加するさまざまなComponentサブクラスの観点からアプリケーションを表現してください。それにより、その時点では単なるコンポーネント(たとえば、メニュー・バー)であるアプリケーションを、任意の種類のコンテナに追加できます。このコンテナは、トップ・レベルのFrameまたはAppletである可能性があります。この手法およびアーキテクチャを使用すると、アプリケーションをブラウザの内部または外部のどちらも容易に再配備できるようになり、さらにアプリケーションの開発サイクルに大きな影響を与えることなく、この配備の決定を基本的にいつでも変更できるようになります。

SwingSet3のデモは、コンポーネントを1つのまとまった単位でレイアウトする方法を示す例です。このデモは、ダウンロード可能なJDK 8のデモおよびサンプルのバンドルに含まれています。ButtonDemoクラスのコンストラクタは、必要なすべてのユーザー・インタフェース・コンポーネントをインスタンス化し、1つのマスター・パネルにレイアウトします。DemoModuleクラスは、このマスター・パネルをアプレットとして表示する役割のみを果たします。この設計により、ButtonDemoを再利用したり、別のアプレットまたはアプリケーションに容易に移植したりできるようになります。

アプレットとJava Web Startアプリケーションのどちらを開発するかを決める場合は、11.2項「Rich Internet Application決定ガイド」を参照してください。

11.1.2 開発

構築しようとするクライアント・アプリケーションの種類を決定したら、次の段階はその構築です。アプレットの場合は、第12章「アプレット開発者ガイド」を使用してアプレットを設定し、ブラウザとアプレットに相互に通信させ、ほかのアプレットと通信させます。Java Web Startアプリケーションの場合は、「Java Web Start開発者ガイド」を使用します。

デバッグは、開発の自然な一部です。Java IDEまたはJavaデバッガの使用に加えて、Java Consoleのデバッグ機能や、JVMのトレースおよびログ機能を使用できます。詳細は、第22章「Javaコンソール、トレースおよびロギング」を参照してください。

Javaチュートリアルに含まれる配備のコースは、RIAの開発や配備についてより詳しく学ぶための包括的なリソースです。

11.1.3 デプロイメント

アプリケーションのJARファイルを有効な公開鍵証明書で署名し、実行時アクセス権をJARファイル・マニフェストに指定することはきわめて重要です。これらの要素を含めずに配備されるアプリケーションは、実行が許可されない可能性があります。

配備は、複数の段階から成るプロセスです。次の表で、デプロイメントに関連する手順の概要を示します。詳細は、11.3項「Rich Internet Application配備アドバイス」を参照してください。

  • JNLPファイル: JNLPファイルは、JNLPを使用して配備されるJava Web Startアプリケーションおよびアプレットのために作成されます。RIAがユーザーのシステム上のリソースへのアクセスを必要とする場合は、security要素をJNLPファイルに含めます。それ以外の場合、RIAはセキュリティ・サンドボックス内で実行されます。JNLPファイルについては、「JNLPファイルの構文」を参照してください。

  • JARファイル・マニフェスト: JARファイル・マニフェストには、JARファイルとそれに含まれるファイルに関するセキュリティと構成の情報が含まれています。マニフェスト属性により、RIAにセキュリティを追加できます。詳細は、第26章「セキュリティ用のJARファイル・マニフェストの属性」を参照してください。

  • セキュリティ証明書: RIAは、それらがセキュリティ・サンドボックス内で実行されるにしても、ユーザーのシステムへのアクセスを必要とするにしても、初回起動時に実行を許可するようユーザーに要求します。認識されている認証局からの証明書を使用してRIAのJARファイルに署名し、タイムスタンプを押してください。詳細は、23.5項「セキュリティ・ダイアログ」および23.1項「Javaクライアントのセキュリティ・レベルの設定」を参照してください。

  • JARインデックス: 必要になるまでアプリケーションでJARファイルがダウンロードされないようにするには、JARインデックスを使用します。JARインデックスは、アプレットとJava Web Startアプリケーションの両方で使用できます。Jarインデックスでは、メインのJARファイルに、ほかのJARファイルにどのパッケージが存在するかを通知するインデックス・ファイルが含まれます。リソースの遅延ローディング時、ベースとなるクラス・ローダーは、そのインデックスを使用してどのJARファイルをダウンロードするかを調べます。JARファイルに署名する前に必ずインデックスを作成するようにしてください。

  • Pack200圧縮: Pack200圧縮を使用してJARファイルのダウンロード時間を最小限に抑える方法については、30.2項「Pack200で圧縮されたJARファイルの配備」を参照してください。

  • 配備ツールキット: アプリケーションを起動するために必要なブラウザ間のJavaScriptを使用してWebページを設定するには、配備ツールキットを使用します。配備ツールキットは基本的に、さまざまなブラウザにわたって一貫してアプレットが配備されることを保証する、一連のJavaScript関数です。

共通の実行環境を提供し、ユーザーがアクセスするアプリケーションを管理する企業では、デプロイメント・ルール・セット機能によって、一部のアプリケーションはセキュリティ・プロンプトなしで実行されることを許可し、その他のアプリケーションは自動的にブロックされるというルールを作成できます。この機能は、組織で内部的に使用されることを目的としています。詳細は、第28章「デプロイメント・ルール・セット」を参照してください。

現在のセキュリティ要件を満たしていないためにブロックされてしまうRIAを実行する必要があるユーザー向けに、例外サイト・リスト機能が用意されています。このリストに記載されたサイトから起動されるRIAは、実行を許可するようユーザーに求めます。詳細は、第29章「例外サイト・リスト」を参照してください。

RIAの配備がどのように行われるかを理解するには、第24章「Rich Internet Application配備プロセス」を参照してください。

11.2 Rich Internet Application決定ガイド

アプレットとJava Web Startアプリケーションは両方ともWeb経由で起動されるため、標準のアプリケーションより配布が簡単です。どちらの実行にもユーザーの許可が必要となるため、ユーザーがアプリケーションの実行に関して十分な情報に基づいた判断を下せるように、それらが信頼できる認証局からの有効な証明書を使って署名されていることが重要です。RIAは、ユーザーによって起動および許可されるときに拡張アクセスが要求されないかぎり、高度に管理された方法でしかユーザーのシステムにアクセスできません。

次の表は、アプレットとJava Web Startアプリケーションの相違点の要約です。

機能 アプレット Java Web Start
Javaバージョン 個々のアプレットが、使用するJavaプラットフォームの正確なバージョン(またはバージョンの範囲)を指定する可能性があります。Java Plug-inは、静的バージョン要求(「8.0 update 2」など)とファミリ・バージョン要求(「8.0ファミリ」など)の両方をサポートするとともに、Internet Explorerでの静的およびファミリClassIDなどの下位互換性メカニズムもいくつかサポートしています。詳細は、12.2.2項「Java Runtime Environmentバージョンの選択」を参照してください。 Java Web Startもまた、システムにインストールされている最新のJavaバージョンからのみ使用されますが、Java Web Start実行のバージョンは、使用されているJavaプラットフォームのバージョンには関係ありません。Java Web Startアプリケーションは、使用するJavaプラットフォームの正確なバージョン(またはバージョンの範囲)を指定できます。
Cookie Java Plug-inアプレットはブラウザと同じセッションで実行されるため、すでにブラウザ・セッションに格納されている「持続的な」cookieと「セッション」cookieの両方にアクセスできます。 Java Web Startは、ブラウザ・プロセスの外部で実行されます。ブラウザによって格納された「持続的な」cookieには(WindowsのWinINet APIを使用して)アクセスできますが、java.net.CookieManagerjava.net.CookieHandlerのAPIを使用してそのアプリケーションに設定されていないかぎり「セッション」cookieにはアクセスできません。
ブラウザとの対話 Java Plug-inには、アプレットが共通DOM APIを使用して現在のブラウザ・セッションと対話する機能が含まれています。JavaチュートリアルのアプレットのWebページのDOMの操作に関するトピックを参照してください。また、Javaアプレットはアプレットと同じWebページにあるJavaScript関数を呼び出すことができ、Webページ上のJavaScriptコードはそのページに埋め込まれたJavaアプレットと対話できます。JavaチュートリアルのアプレットからのJavaScriptコードの呼出しに関するトピックおよびJavaScriptコードからのアプレット・メソッドの呼出しに関するトピックを参照してください。 Java Web Startは、特定のURLを表示するためにデフォルト・ブラウザを呼び出す機能に制限されています(「JNLP API」を参照)。
Java Runtime アプレットは、ほかのアプレットの起動に使用されるパラメータに影響を与えることなく、その特定のアプレット・インスタンスを起動するために使用されるJavaランタイム・パラメータを指定できます。また、下位互換性のために、Javaコントロール・パネルでのJavaランタイム・パラメータの指定もサポートされています。 Java Web Startアプリケーションは、そのアプリケーションを起動するために使用されるJavaランタイム・パラメータを(制限付きで)制御できます。
JNLP API Java Network Launching Protocol (JNLP)を使用して起動されたアプレットは、サンドボックス・アプリケーションに永続ストレージ、ダウンロードの制御、ファイル入出力などへのアクセスを許可するJNLP APIにアクセスできます。 Java Web Startは、JNLP APIにアクセスできます。
ショートカット ドラッグ可能なアプレットを開発できます。draggableパラメータを指定して開発されたJavaアプレットはブラウザの外部にドラッグでき、Java Web Startアプリケーションに動的に変換できます。Javaアプレットをドラッグするには、[Alt]キーとマウスの左ボタンを押しながらマウスをドラッグします。ブラウザの外部でアプリケーションを起動するために使用できるデスクトップ・ショートカットを追加できます。詳細は、Javaチュートリアルのドラッグ可能なアプレットの開発に関するトピックを参照してください。 Java Web Startアプリケーションは、ブラウザには関係なく、そのアプリケーションをオンラインまたはオフラインのどちらでも再実行できるショートカットをインストールできます。

Java Web StartとJava Plug-inの固有の差異の詳細は、12.5項「Java Network Launching ProtocolへのJavaアプレットの移行」を参照してください。

11.3 Rich Internet Application配備アドバイス

ここでは、JNLP、デプロイメント・ツールキットおよびデプロイメントに関する決定を行う際に注意すべきその他の考慮事項の情報を提供します。

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

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

  • JNLP拡張機能へのアクセス– Java Binding for the OpenGL API (JOGL)、JavaFXのシーン・グラフNASA World Wind Java SDK (惑星および惑星外視覚化システム)などの強力なJNLP拡張機能が、アプレットおよびJava Web Startアプリケーションから使用できるようになりました。

  • JNLP APIへのアクセス–アプレットおよびJava Web StartアプリケーションはJNLP APIにアクセスして、持続的記憶領域(PersistenceService)、遅延ダウンロードされた部品(DownloadService)、ローカル・ファイル・システム(FileOpenServiceFileSaveService)、その他の機能へのユーザーによって管理されたアクセスを実現できます。JNLP APIの使用法に関する詳しい手順については、JavaチュートリアルのJNLP APIを使用したクライアントへのアクセスに関するレッスンを参照してください。

  • バージョンの選択、その他多数の機能–Java Plug-inのアーキテクチャに基づいて構築されているため、JNLPを使用して起動されたアプレットは、JREバージョンの選択、JVMへのコマンド行引数やシステム・プロパティの引き渡しなどの、以前Java Web Startアプリケーションから使用できたすべての機能を利用できます。

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


ヒント:

この項は、従来のアプリケーションのリファレンスとして提供されており、配備ツールキットの古いバージョンについて説明します。最新の配備ツールキットの詳細は、第19章「ブラウザでのデプロイメント」を参照してください。

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

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

  • createWebStartLaunchButton(jnlp, minimumVersion) - 指定されたJNLP URLの起動ボタンを出力します。このボタンがクリックされると、適切なJREがインストールされたあと、JNLPアプリケーションを起動することが保証されます。

  • createWebStartLaunchButtonEx(jnlp, minimumVersion) - 指定されたJNLP URLの起動ボタンを出力します。このボタンがクリックされると、適切なJREがインストールされたあと、JNLPアプリケーションを起動することが保証されます。JNLPファイルでcodebase属性の値を指定する必要はありません。この関数を使用するには、Java SE 6 update 18リリースがクライアント上に存在する必要があります。Java SE 6 update 18リリースがクライアント上に存在しない場合、ユーザーはその必要なソフトウェアをインストールするよう指示されます。

  • getBrowser() - 現在実行中のブラウザの名前を返します。

  • getJREs() - 現在インストールされているJREのバージョン文字列の配列を返します。

  • installJRE(requestVersion) - 指定されたrequestVersion、指定されたrequestVersionに一致する最新バージョン、または最新のJREのインストールをトリガーします。

  • installLatestJRE() - 最新のJREのインストールをトリガーします

  • isPlugin2() - 次世代Java Plug-inがデフォルトかどうかを判定します。

  • isWebStartInstalled(minimumVersion) - 指定されたminimumVersionのJava Web Startのインストールが検出可能な場合はtrueを返します。

  • launch- JNLPアプリケーションを起動します。

  • runApplet(attributes, parameters, minimumVersion) - 適切なJREがインストールされていることを確認したあと、アプレットを実行します。

  • setAdditionalPackages(packageList) - カーネル・インストーラで使用される追加パッケージのリストを設定します。

  • setInstallerType(type) - 優先するインストールのタイプ(null、online、kernel)を設定します。

  • versionCheck(version) - (getJREs()関数で検出されるJREのうちで)一致するJREのバージョンが現在インストールされている場合は、trueを返します。

  • writeAppletTag(attributes, parameters) - 指定された属性とパラメータを含むappletタグを出力します。parameters引数はオプションです。

これらのpublic関数の詳しい説明については、人間が読める形式の配備ツールキットを参照してください。

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

この項では、アプリケーションの配備を計画する際に考慮すべき追加のアイテムに関する情報を提供します。

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

Java Web StartアプリケーションまたはJava Plug-inアプレットでアクセスされるリソースは、クライアント・マシン上の配備キャッシュ内にキャッシュされる可能性があります。このキャッシュの形式または内容は、バージョンごとに変更される可能性があるため、これを前提にすることは良い方法ではありません。

スタンドアロンのプログラムをJava Web StartまたはJava Plug-inに移植するとき、コードが本質的にSystemClassLoaderによってロードされることを前提にしていると、問題が発生することがあります。Java Plug-inでは、リソースはPluginClassLoader (java.net.URLClassLoaderを拡張する)によってロードされます。Java Web Startでは、リソースはJNLPClassLoader (java.net.URLClassLoaderを拡張する)によってロードされます。

使用されているClassLoaderにアクセスするには、次のコードを使用します。

ClassLoader cl = Thread.getCurrent().getContextClassLoader();

リソースにアクセスするための正しい方法は、使用されているClassLoaderのタイプにかかわらず正しい内容を返すgetResourceAsStream()を使用してリソースにアクセスすることです。リソースがすでにキャッシュされている場合は、そのリソースの内容がキャッシュから直接返されるため、リソース自体への余分なネットワーク接続は発生しません。

Javaデプロイメント・キャッシュの内容を直接変更することはお薦めしません。キャッシュはJava Web StartおよびJava Plug-inの非公開実装であるため、いつでも変更される可能性があります。

11.4 Rich Internet Applicationの動作に影響を与えるプロパティ

次の表に、RIAの動作を制御するためにJNLPファイルで指定できるプロパティを示します。

プロパティ 指定できる値 説明
javaws.cfg.jauthenticator true、false、all trueまたはallを指定すると、Java Web StartソフトウェアによってデフォルトのJAuthenticatorがインストールされなくなります。
jnlp.concurrentDownloads integer JARファイルの並行ダウンロードのスレッド数
jnlp.packEnabled true、false trueは、アプリケーションのJARファイルがPack200ツールを使って圧縮されたことを示します。詳細は、30.2項「Pack200で圧縮されたJARファイルの配備」を参照してください。
jnlp.versionEnabled true、false trueは、Version Downloadが可能になるようにアプリケーションのJARファイルがバージョン管理されていることを示します。

Version Downloadは、アプレットおよびJava Web Startアプリケーションで特定のJARファイルの特定のバージョンが使用されることを要求する機能です。

このプロパティがtrueに設定されているときにJARバージョンが指定された場合は、次の命名規則を使用して、サーバーにバージョン化されたJARファイルがないかどうかチェックされます。

<file> ::= <name> "__" <options> ".jar"
  <options> ::= "V" <version-id>

Note: sample.jarのバージョン1.0にはsample__V1.0.jarという名前を付ける必要があります。

バージョン化されたJARファイルが見つからない場合は、元のJARが使用されます。


目次      

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.