Java Platform Standard Edition

デプロイメント・ガイド

リリース9

E90918-01(原本部品番号:E61695-03)

2017年9月

JavaおよびJavaFXアプリケーションの構築、パッケージ化およびデプロイの方法。アプリケーション・パッケージを作成するためのJavaパッケージャ・ツール、アプリケーションを配布するためのJava Web Startテクノロジ、およびJava Web Startアプリケーションの実行方法を管理するためのJavaコントロール・パネルについて説明します。

Java Platform, Standard Editionデプロイメント・ガイド, リリース9

E90918-01

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

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

第I部 デプロイメントの基本

1 はじめに

- 基本的な手順

- 実行環境の選択

- パッケージの作成

- パッケージ化ツール

- NetBeans IDE

- Antタスク

- Javaパッケージャ・コマンド行ツール

- Webページの作成

- アプリケーションの配布

- 基本より高度な情報

第II部 パッケージ化

2 自己完結型アプリケーションのパッケージ化

- はじめに

- 自己完結型アプリケーション・パッケージの利点および欠点

- 基本

- 自己完結型アプリケーション構造

- 基本的なビルド

- ドロップイン・リソースを使用したパッケージのカスタマイズ

- カスタム・リソースの準備

- 組込みリソースの置換

- カスタマイズのオプション

- 基本パッケージのプラットフォーム固有のカスタマイズ

- macOS

- 自己完結型アプリケーションへの引数の受渡し

- ファイルと自己完結型アプリケーションの関連付け

- 複数のエントリ・ポイントのサポート

- JREのカスタマイズ

- モジュラ・アプリケーションのパッケージ化

- インストール可能なパッケージ

- インストール可能なパッケージのタイプ

- EXEパッケージ

- MSIパッケージ

- DMGパッケージ

- Linuxパッケージ

- デプロイメント・シナリオの処理

3 JavaFX Antタスク

- JavaFX Antタスクを実行するための要件

- JavaFX Ant要素

- JavaFX Antタスクの使用

- Antスクリプトの例

- JavaFX Hello Worldの例のデプロイ

- 自己完結型アプリケーションとしてのJavaFX Hello Worldの例のデプロイ

- 外部JARファイルを使用したJavaFXアプリケーションのデプロイ

- 自己完結型アプリケーションのJVMオプションのオーバーライド

- JavaFX Antタスク・リファレンス

- <fx:csstobin>

- <fx:deploy>

- <fx:jar>

- <fx:signjar>

- JavaFX Antヘルパー・パラメータ・リファレンス

- <fx:add-modules>

- <fx:application>

- <fx:argument>

- <fx:association>

- <fx:bundleArgument>

- <fx:callback>

- <fx:callbacks>

- <fx:fileset>

- <fx:htmlParam>

- <fx:icon>

- <fx:info>

- <fx:jvmarg>

- <fx:jvmuserarg>

- <fx:limit-modules>

- <fx:module-path>

- <fx:param>

- <fx:permissions>

- <fx:platform>

- <fx:preferences>

- <fx:property>

- <fx:resources>

- <fx:runtime>

- <fx:secondaryLauncher>

- <fx:splash>

- <fx:template>

第III部 Java Web Startテクノロジ

4 Java Web Startテクノロジの概要

- Java Web Startの概要

- Java Web Startの利点

- Java Web Startの入手先

- Java Web Startソフトウェアの使い方

- Webブラウザからの起動

- デスクトップのアイコンおよび「スタート」メニューからの起動(Microsoft WindowsおよびGNOME 2.0+を実行するLinuxの場合)

- プロキシ・サーバーまたはファイアウォール環境でのJava Web Startソフトウェアの使用

- Webサーバーの設定

- Java Web Startプロトコル・ハンドラのインストール

- Chromeのプロトコル・ハンドラのインストール

- Firefoxのプロトコル・ハンドラのインストール

5 アプリケーション開発時の考慮点

- Webデプロイメントの概要

- JARファイルからのリソースの取得

- JNLP APIを使用したクライアントへのアクセス

- セキュリティとコード署名

- テスト証明書によるJARファイルの署名

- JNLPファイルのエンコード方式

- HTTPS証明書の動的ダウンロード

6 JavaアプレットからJava Web StartおよびJNLPへの移行

- 既存のJavaアプレットの移行

- JavaアプレットからJava Web Startアプリケーションへの書直し

- 特別な考慮事項

7 JNLPファイルの構文

- JNLPファイルの構文の概要

- JNLPファイルの例

- JNLPの要素

- jnlp要素

- information要素

- security要素

- update要素

- resources要素

- application-desc要素

- applet-desc要素

- component-desc要素

- installer-desc要素

8 JNLP APIの例

- BasicServiceサービスの使用

- ClipboardServiceサービスの使用

- DownloadServiceサービスの使用

- DownloadService2サービスの使用

- DownloadServiceListenerサービスの実装

- FileOpenServiceサービスの使用

- FileSaveServiceサービスの使用

- IntegrationServiceサービスの使用

- PrintServiceサービスの使用

- PersistenceServiceサービスの使用

- FileContentsの使用

- JNLPRandomAccessFileの使用

- SingleInstanceServiceサービスの使用

- ExtendedServiceサービスの使用

第IV部 デプロイメントの構成およびモニタリング

9 Javaコントロール・パネル

- Javaコントロール・パネルの概要

- Javaコントロール・パネルの「一般」タブ

- Javaコントロール・パネルの「更新」タブ

- 更新のチェックのスケジュール

- Java Update Scheduler

- Javaコントロール・パネルの「デスクトップ設定」タブ

- 「デスクトップ設定」の編集

- Javaランタイム・パラメータ

- classpathまたはcpの設定

- アサーションのサポートの有効化および無効化

- トレースおよびロギングのサポート

- Java Plug-inでのアプレットのデバッグ

- デフォルトの接続タイム・アウト

- Javaコントロール・パネルの「Webの設定」タブ

- 「例外サイト・リスト」タブ

- 「デプロイメント・ルール・セット」タブ

- 「一時ファイルの設定」タブ

- 「ネットワーク設定」タブ

- 「Javaキャッシュ・ビューア」タブ

- Javaコントロール・パネルの「セキュリティ」タブ

- 一般的なセキュリティ設定タブ

- 「証明書の管理」タブ

- ユーザー・レベルの証明書

- システム・レベルの証明書

- Javaコントロール・パネルの「詳細」タブ

- 「デバッグ」

- 「Javaコンソール」

- 「ショートカットの作成」

- 「JNLPファイル/MIMEのアソシエーション」

- 「アプリケーションのインストール」

- 「実行環境セキュリティ設定」

- 「混合コード(サンドボックス内実行vs.信頼済)セキュリティ検証する」

- 「署名付きコード証明書失効チェックを実行」

- 「次を使用した署名付きコード証明書失効のチェック」

- TLS証明書失効チェックを実行

- 「次を使用した署名付きコード証明書失効のチェック」

- 「高度なセキュリティ設定」

- 「その他」

10 デプロイメント・ルール・セット

- デプロイメント・ルール・セットの概要

- ルール・セットの作成

- ルールの定義

- <ruleset>

- <rule>

- <id>

- <certificate>

- <checksum>

- <jnlp-checksum>

- <action>

- <message>

- <customer>

- JavaScriptコード(LiveConnect)からの呼出しのルールを設定する

- 混合コードのルールを設定する

- 証明書のハッシュを取得する

- ルール・セットのパッケージ化

- ルール・セットのインストール

- アクティブなルール・セットの表示

- セキュリティに関する考慮事項

- 例

- Javaデプロイメント・ルール・セットのDTD

はじめに

このガイドでは、JavaおよびJavaFXアプリケーションの構築、パッケージ化およびデプロイに関する情報を提供します。

対象読者

このドキュメントは、JavaまたはJavaFXアプリケーションを作成し、そのアプリケーションをリモート・システム上のユーザーにデプロイする必要があるアプリケーション開発者を対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティへの取り組みについては、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)にアクセスしてください。

Oracle Supportへのアクセス

サポートをご購入のOracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info、聴覚に障害があるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連ドキュメント

他のJDK 9ガイドについては、Oracle JDK 9ドキュメントを参照してください。

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

第I部 デプロイメントの基本

この部のトピックでは、デプロイメント・プロセスに関する一般情報、およびJavaとJavaFXアプリケーションのデプロイに使用できるツールを提供します。

- はじめに

1 はじめに

このトピックでは、JavaおよびJavaFXアプリケーションのデプロイの基本について説明します。

この項の内容は次のとおりです。

- 基本的な手順

- 実行環境の選択

- パッケージの作成

- Webページの作成

- アプリケーションの配布

- 基本より高度な情報

基本的な手順

アプリケーションを公開する準備はできていますか。次の基本的なデプロイメントの手順に従います。

1. ユーザーによるアプリケーションへのアクセスおよびアプリケーションの実行方法を決定します。

アプリケーションは、ユーザーのデスクトップでのデプロイ、Webページへの埋込み、またはブラウザからの起動が可能です。

注意:
アプレットAPIおよびJava Plug-inは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットおよび埋込みJavaFXアプリケーションに代わるものには、Java Web Startおよび自己完結型アプリケーションがあります。

2. アプリケーション・パッケージを作成します。

アプリケーション・パッケージは、次のアイテムで構成されます。

- アプリケーションの実行に必要なJARファイル。アプリケーションをWebページに埋め込んだりブラウザから起動したりする場合、有効な署名証明書を使用してJARファイルに署名する必要があります。

- Webページに埋め込まれたりブラウザから起動されるアプリケーションのデプロイメント記述子またはJNLPファイル。

- 自己完結型アプリケーションのJRE。Javaパッケージ化ツールではjlinkツールを使用してカスタム・ランタイムが作成され、パッケージのサイズが縮小されます。

3. アプリケーションをWebページに埋め込んだりブラウザから起動したりする場合、Webページを設定します。

Webページには、ページに埋め込まれたアプリケーションを実行するためのHTML要素またはJavaScriptコードが必要です。Java Web Startを使用してブラウザからアプリケーションを起動するには、JavaScriptコードが必要です。Javaパッケージ化ツールによって、Webページにコピーできる、両方のタイプを実行するためのJavaScriptコードのあるHTMLファイルが生成されます。

4. ユーザーがアクセスする場所にパッケージをコピーします。

Webページに埋め込まれたりブラウザから起動されるアプリケーションには、通常、Webサーバーが使用されます。デスクトップおよび自己完結型アプリケーションは、ユーザーに直接配信したり、アプリケーション・ストアを介して使用可能にしたりすることができます。

実行環境の選択

JavaおよびJavaFXアプリケーションは、複数の実行環境で実行できます。ユーザーによるアプリケーションへのアクセス方法によって、アプリケーションのデプロイ方法が決まります。次のオプションを使用できます。

- ネイティブ・アプリケーションとして起動
ユーザーは、自己完結型アプリケーションをインストールし、メニューまたはデスクトップ・ショートカットから起動できます。

- デスクトップ・アプリケーションとして起動
ユーザーは、Java起動ツールを使用してコマンド行から、またはアプリケーションのJARファイルをダブルクリックして、アプリケーションを起動できます。

- ブラウザから起動
ユーザーは、ブラウザ内のリンクをクリックして、アプリケーションをダウンロードおよび起動できます。

- Webページで表示
Webページがロードされると、アプリケーションが起動します。

注意:
アプレットAPIおよびJava Plug-inは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットおよび埋込みJavaFXアプリケーションに代わるものには、Java Web Startおよび自己完結型アプリケーションがあります。

それぞれの環境には、メリットとデメリットがあります。

パッケージの作成

デフォルトでは、Javaパッケージ化ツールにより、アプリケーションの実行に必要な次のファイルのコレクションが生成されます。

- アプリケーションJARファイル(または大規模なアプリケーションの複数のJARファイル)
Webページに埋め込まれたりブラウザから起動されるアプリケーションには、有効な署名証明書を使用して署名する必要があります。パッケージ化ツールまたはjarコマンドは、JARファイルへの署名に使用できます。

- デプロイメント記述子を含むJNLPファイル
デプロイメント記述子は、アプリケーション・コンポーネント、プラットフォーム要件および起動ルールを記述するXMLファイルです。

- Webページからアプリケーションの埋込みや起動を行うJavaScriptコードを含むHTMLファイル

アプリケーションは、プラットフォーム固有の自己完結型アプリケーションとしてパッケージ化することもできます。自己完結型アプリケーションには、すべてのアプリケーション・リソース、JREおよび起動ツールが含まれます。これらのアプリケーションでは、オペレーティング・システムのネイティブ・アプリケーションと同じインストールおよび起動操作が提供されます。

自己完結型アプリケーションは、zipファイルまたはインストール可能なパッケージとして配布できます。Windowsの場合はEXEまたはMSI、macOSの場合はDMG、PKGまたはmac.appStore、Linuxの場合はRPMまたはDEBです。

自己完結型アプリケーションには次の利点があります。

- ターゲット・プラットフォームのネイティブ・アプリケーションと似ています。
ユーザーは、使い慣れたインストーラでアプリケーションをインストールし、通常の方法で起動します。

- 互換性が煩わしくありません。
アプリケーションで使用されるJREのバージョンは、アプリケーション開発者によって制御されます。

- JREをインストールする必要なしに、新しいシステムに簡単にデプロイされます。

- ZIPまたはユーザー・レベルのインストーラを使用すると、管理権限がなくてもデプロイメントが行われます。

自己完結型アプリケーションのパッケージ化では、自己完結型アプリケーション・パッケージの生成方法について説明します。

パッケージ化ツール

アプリケーションのパッケージ化には、次の3つの異なるツールが使用できます。

- NetBeans IDE

- Antタスク

- Javaパッケージャ・コマンド行ツール

NetBeans IDE

Netbeans IDEを使用すると、多くの作業が行われます。「プロジェクト・プロパティ」を開いて、JavaFXアプリケーション・シーンの優先ディメンションを指定します。「消去してビルド」を使用してプロジェクトをビルドします。アプリケーション・パッケージはdistフォルダに生成されます。アプリケーションをテストするには、このフォルダを開き、実行環境に応じてHTML、JNLPまたはJARファイルをダブルクリックします。

自己完結型アプリケーションをパッケージ化するには、NetBeans IDEでbuild.xmlスクリプトをカスタマイズします。基本的なビルドを参照してください。

Antタスク

別のIDEを使用している場合、JDKに含まれているAntタスクを使用して、ビルド後のステップとしてJavaパッケージ化を追加できます。例1-1は、JavaFXの例Colorful CirclesのAntパッケージ・タスクを示しています。Colorful Circlesの完全な例は、ColorfulCircles.zipファイルをダウンロードします。

nativeBundles="all"属性を<fx:deploy> Antタスクに追加すると、使用可能なすべてのパッケージ(スタンドアロン・アプリケーション・パッケージ、実行中のプラットフォームに応じた1つ以上の自己完結型アプリケーション・パッケージ、およびWebデプロイメント・パッケージ)が作成されます。インストール可能なパッケージは、パッケージ化の際に使用可能なサード・パーティ製のソフトウェアに基づいて作成されます。たとえば、Windows上にInno SetupとWiXの両方がある場合、3つのパッケージ(アプリケーションが含まれるフォルダ、.exeインストーラ・ファイルおよび.msiインストーラ・ファイル)を取得します。nativeBundles属性を含む単純なAntタスクを例1-1に示します。

アプリケーションをWebページに埋め込んだりブラウザから起動したりする場合、必要なJARマニフェスト属性を<fx:jar>タスクおよび<fx:signjar>タスクに含めます。

注意:
Javaパッケージャ・ツールの<fx:signjar>タスクは、将来のリリースでの削除に備えてJDK 9で非推奨です。また、これは、マルチリリースJARファイルでも動作しません。かわりに標準的なAnt signjarタスクを使用してください。

例1-1 ColorfulCirclesアプリケーションのすべてのパッケージを作成するAntタスク

<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${JAVA_HOME}/lib/ant-javafx.jar"/>

<fx:jar destfile="dist-web/ColorfulCircles.jar">
<fx:application mainClass="colorfulcircles.ColorfulCircles"/>
<fileset dir="build/classes/">
<include name="**"/>
</fileset>
</fx:jar>

<fx:deploy width="800" height="600" outdir="dist-web"
outfile="ColorfulCircles" nativeBundles="all">
<fx:info title="Colorful Circles"/>
<fx:application name="Colorful Circles example"
mainClass="colorfulcircles.ColorfulCircles"/>
<fx:resources>
<fx:fileset dir="dist-web" includes="ColorfulCircles.jar"/>
</fx:resources>
</fx:deploy>

Javaパッケージャ・コマンド行ツール

Antを使用できない場合またはコマンド行ツールを使用する場合、JDKに付属のJavaパッケージャ・ツールを使用します。Javaパッケージャ・ツールには、アプリケーションをパッケージ化するためのいくつかのコマンドがあります。Java Platform, Standard Editionツール・リファレンスのjavapackagerを参照してください。

迅速なテスト・ビルドを行うには、javapackager -makeallコマンドを使用できます。このコマンドに簡単なオプションを追加すると、次の例に示すように、ソース・コードがコンパイルされ、javapackager -createjarコマンドとjavapackager -deployコマンドが結合されます。

javapackager -makeall -appclass colorfulcircles.ColorfulCircles
-name "Colorful Circles" -width 800 -height 600

注意:
Javaパッケージャ・ツールの-makeallコマンドは、将来のリリースでの削除に備えてJDK 9で非推奨です。

コマンドは単純なプロジェクトを迅速にビルドすることのみを目的としているため、-makeallコマンドがサポートしているコマンドの動作をカスタマイズするオプションは限られています。-makeallコマンドでは、入力ファイルと出力ファイルについて次のことを前提としています。

- ソース・ファイルおよび他のリソース・ファイルは、メイン・プロジェクト・ディレクトリの下のsrcという名前のディレクトリに配置する必要があります。

- 作成されるパッケージは、常にdistという名前のディレクトリに生成され、ファイル名はすべてdistという接頭辞で始まります。

- デフォルトでは、-makeallコマンドは自己完結型アプリケーション・パッケージをビルドしようとします。これが不可能な場合、他の実行モードにデプロイできるように、JAR、HTMLおよびJNLPファイルが生成されます。

注意:

Webページに埋め込まれたJavaFXアプリケーションの場合、ステージの幅および高さを常に指定する必要があります。

アプリケーションが稼働する準備ができている場合、-makeallコマンドではなく-createjarおよび-deployコマンドを使用します。-createjarおよび-deployコマンドには、かなり多くのオプションがあります。たとえば次のように、-deployコマンドに-nativeオプションを追加して、自己完結型アプリケーション・パッケージを作成できます。

javapackager -deploy -native -outdir packages -outfile ColorfulCircles
-srcdir dist -srcfiles ColorfulCircles.jar
-appclass colorfulcircles.ColorfulCircles

ヒント:

Antタスクでは、Javaパッケージャ・ツールよりオプションの柔軟性がさらに高くなります。

Webページの作成

アプリケーションをWebページに埋め込んだりブラウザから起動したりする場合、ユーザーがアプリケーションにアクセスできるWebページを設定する必要があります。Webページに埋め込まれたアプリケーションを実行するには、Java Plug-inを使用します。ブラウザから起動されたアプリケーションを実行するには、Java Web Startを使用します。

注意:

アプレットAPIおよびJava Plug-inは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットおよび埋込みJavaFXアプリケーションに代わるものには、Java Web Startおよび自己完結型アプリケーションがあります。

Webページに埋め込まれ、実行にJava Plug-Inを使用するアプリケーションには、<applet>要素か<object>要素、またはJavaScriptコードを使用できます。ブラウザからアプリケーションを起動するためにJava Web Startを呼び出すリンクまたはボタンを作成するには、JavaScriptコードを使用します。Javaパッケージ化ツールによって、Webページにコピーできる、両方のタイプを実行するためのJavaScriptコードが生成されます。

パッケージ化ツールによって生成されるHTMLページは、アプリケーションの単純なテスト・ページです。これには、アプリケーションの起動および埋込みを行うサンプルJavaScriptコードが含まれており、これを自身のWebページにコピーできます。手動でコピーを行わないようにするには、JavaScriptコードを既存のWebページに挿入するためのアプリケーションのパッケージ化のHTMLテンプレートを使用することを検討します。

アプリケーションの配布

使用中のアプリケーション・パッケージおよびWebページがある場合、それらを適切な場所にコピーして、アプリケーションをユーザーが使用できるようにします。

- アプリケーションをWebページに埋め込んだりブラウザから起動したりする場合、パッケージおよびWebページを、それらがロードされるWebサーバーにコピーします。

- アプリケーションがデスクトップ・アプリケーションである場合、ユーザーがダウンロードする場所にアプリケーションをコピーします。自己完結型アプリケーションでは、インストール可能なパッケージおよび必要なJREが提供され、ユーザーにとってアプリケーションのインストールおよび実行が容易になります。

基本より高度な情報

このトピックでは、パッケージ化ツールで提供されるデフォルトの処理を利用する、単純なアプリケーションのデプロイに必要な最低限の情報を提供します。より高度なアプリケーションには、たとえば次のような追加の要件があります。

- アプリケーションのロード時に表示されるカスタム・スプラッシュ画面を含める。

- アプリケーションのロード中に表示されるカスタム進捗バーを含める。

- アプリケーションと、アプリケーションが埋め込まれるWebページとの間の通信に、JavaScriptコードを使用する。

- 埋込みJavaFXコンテンツを含むSwingおよびSWTアプリケーションをデプロイする。

- アプリケーションの実行が安全であることをユーザーに保証するための、セキュリティ・ダイアログおよびダイアログに含まれる警告の数を最小限にする。

また、Javaチュートリアルの「デプロイメント」コースでも、Webページに埋め込まれたアプリケーションやブラウザから起動されたアプリケーションのデプロイに役立つ情報を提供しています。

第II部 パッケージ化

この部のトピックでは、パッケージ化プロセスおよび使用可能なパッケージ化ツールについて説明します。

- 自己完結型アプリケーションのパッケージ化

- JavaFX Antタスク

2 自己完結型アプリケーションのパッケージ化

このトピックでは、自己完結型アプリケーションのパッケージの生成方法について説明します。自己完結型アプリケーションには、JavaやJavaFXアプリケーション、およびアプリケーションの実行に必要なJREが含まれます。自己完結型パッケージは、Linux、macOSおよびWindowsを実行するシステムへの配布用に作成できます。

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

- はじめに

- 自己完結型アプリケーション・パッケージの利点および欠点

- 基本

- インストール可能なパッケージ

- デプロイメント・シナリオの処理

はじめに

Javaパッケージ化ツールでは、いくつかの形式の自己完結型アプリケーション・パッケージの組込みサポートが提供されています。基本パッケージは、すべてのアプリケーション・リソースおよびJREを含むハード・ドライブ上の単一のフォルダです。パッケージはそのまま再配布することができ、インストール可能なパッケージ(たとえばEXEやDMG形式)をビルドできます。

プロセスの観点からは、自己完結型アプリケーション・パッケージの作成は、基本的なアプリケーション・パッケージの作成と似ていますが、次の点が異なります。

- <fx:deploy> Antタスクまたはjavapackager -deployコマンドにnative引数を渡すことで、自己完結型アプリケーション・パッケージを明示的に要求する必要があります。

- 自己完結型アプリケーション・パッケージは、実行を意図しているオペレーティング・システム上にビルドする必要があります。特定の形式でパッケージをビルドするために、前提条件ツールが使用可能である必要があります。

- 自己完結型アプリケーション・パッケージは、JDK 7 Update 6以降を使用した場合のみビルドできます。JDK 9のJavaパッケージャは、アプリケーションをJDK 9ランタイム・イメージとパッケージ化します。JDK 8またはJDK 7 JREをアプリケーションとパッケージ化するには、JDK 8 Javaパッケージャを使用します。

基本的な自己完結型アプリケーション・パッケージを作成することは容易ですが、特定の配布方法に最適なユーザー操作性を実現するように自己完結型アプリケーション・パッケージを調整するには、通常、労力と、トピックに関する深い理解が必要です。

自己完結型アプリケーション・パッケージの利点および欠点

自己完結型アプリケーション・パッケージを使用することがアプリケーションのデプロイに最適な方法であるかどうかの判断は、要件に応じて異なります。

自己完結型アプリケーション・パッケージには次の利点があります。

- ユーザーは、使い慣れたインストーラでアプリケーションをインストールし、通常の方法で起動します。

- アプリケーションで使用するJREのバージョンを制御します。

- JREをインストールする必要なしに、アプリケーションを新しいシステムにデプロイできます。

- ZIPまたはユーザー・レベルのインストーラを使用すると、管理権限がなくてもデプロイメントが行われます。

- アプリケーションのためにファイルの関連付けを登録できます。

- セカンダリ・ランチャのサポートにより、アプリケーション・スイートを単一の自己完結型アプリケーション・パッケージにバンドルできます。

自己完結型アプリケーション・パッケージには次の欠点があります。

- 「ダウンロードして実行」ユーザー操作
Webデプロイメントとは異なり、ユーザー操作は「Webからアプリケーションを起動」に関するものではありません。「ダウンロード、インストールして実行」プロセスの1つで、ユーザーは、アプリケーションを起動するために追加のステップが必要になることがあります。たとえば、ユーザーは、ブラウザまたはオペレーティング・システムのセキュリティ・ダイアログを受け入れたり、ダウンロード・フォルダからアプリケーション・インストーラを検索および起動したりする必要がある場合があります。

- ダウンロード・サイズが大きい
一般に、自己完結型アプリケーション・パッケージのサイズは、JREのプライベート・コピーが含まれているため、スタンドアロン・アプリケーションのサイズより大きくなります。

- ターゲット・プラットフォーム当たりのパッケージ
自己完結型アプリケーション・パッケージは、プラットフォーム固有で、ビルドしたシステムと同じシステムにのみ作成できます。Windows、LinuxおよびmacOSで自己完結型アプリケーション・パッケージを配信するには、3つのすべてのプラットフォーム上にプロジェクトをビルドする必要があります。

- アプリケーションの更新は開発者の担当
Web配備されたJavaアプリケーションは、アプリケーションの更新が使用可能になるとすぐに、Webからその更新を自動的にダウンロードします。Javaの自動更新メカニズムでは、毎年数回、最新のセキュアなバージョンへのJREの更新を処理します。自己完結型アプリケーションには、自動更新の組込みサポートがありません。

基本

各自己完結型アプリケーション・パッケージには、次のアイテムが含まれています。

- 一連のJARファイル内のアプリケーション・コード、およびその他のアプリケーション・リソース(データ・ファイル、ネイティブ・ライブラリ)

- このアプリケーションのみで使用されるJREのコピー

- アプリケーションのネイティブ・ランチャ。1つのパッケージに対する複数のランチャがサポートされています

- アイコンなどのメタデータ

複数のパッケージ形式が可能です。パッケージのいくつかのタイプに組込みサポートが提供されます。たとえば、ZIPファイルとしてアプリケーションを配布する場合、フォルダとしてパッケージ化された自己完結型アプリケーションの後処理によって独自のパッケージを構築することもできます。

自己完結型アプリケーション構造

自己完結型アプリケーション・パッケージの基本形式は、図2-1の例などのハード・ドライブ上の単一フォルダです。パッケージのいずれかをインストールすると、結果は同じコンテンツのフォルダとなります。

図2-1 自己完結型アプリケーション・パッケージの例

自己完結型アプリケーション・フォルダの内部構造は、プラットフォーム固有で、将来変更される可能性があります。ただし、次のアイテムはすべてのプラットフォームに適用され、変更されない可能性があります。

- アプリケーション・パッケージは、アプリケーション・ディレクトリ構造を保持してフォルダとして含まれます。

- JREのコピーは別のフォルダとして含まれ、JREディレクトリ構造は保持されます。

ディレクトリ構造が保持されるため、アプリケーションは、アプリケーションJARまたはjava.homeシステム・プロパティに相対的なパスを使用して外部リソースをロードできます。

注意:

Javaパッケージ化ツールではjlinkツールを使用してアプリケーションのカスタムJREが生成されます。デフォルトで含まれないものが必要な場合、次の後処理ステップとしてコピーできます。インストール可能なパッケージの場合、自己完結型アプリケーション・フォルダへの格納後に実行されるconfigスクリプトからこれを行うことができます。ドロップイン・リソースを使用したパッケージのカスタマイズを参照してください。

基本的なビルド

自己完結型アプリケーションを作成する最も容易な方法は、デプロイメント・タスクを変更することです。実行中のプラットフォームのすべてのタイプの自己完結型アプリケーション・パッケージの作成を要求するには、次の例に示すように、nativeBundles="all"を<fx:deploy>タスクに追加します。

<fx:deploy width="${javafx.run.width}" height="${javafx.run.height}"
nativeBundles="all"
outdir="${basedir}/${dist.dir}" outfile="${application.title}">
<fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
<fx:resources>
<fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>
</fx:resources>
<fx:info title="${application.title}" vendor="${application.vendor}"/>
</fx:deploy>

作成する正確なパッケージ形式を指定することもできます。値imageを使用して、基本パッケージ(EXEインストーラを要求するにはexe、DMGインストーラを要求するにはdmgなど)を作成します。属性値の完全なリストは、Antタスク・リファレンスの<fx:deploy>エントリのnativeBundles属性を参照してください。

Javaパッケージャ・ツールを使用して、ネイティブ・パッケージを作成することもできます。-nativeオプションを-deployコマンドと一緒に使用して、特定の形式を要求できます。Java Platform, Standard Editionツール・リファレンスのjavapackagerコマンドを参照してください。

例2-1は、BrickBreakerアプリケーションに適用可能なすべての自己完結型アプリケーション・パッケージの生成に使用される、-deployコマンドとともに使用する-nativeオプションの使用を示しています。-deployコマンドは入力としてJARファイルが必要であるため、dist/BrickBreaker.jarがすでにビルドされていることを前提としています。

例2-1 自己完結型アプリケーション・パッケージを生成するJavaパッケージャ・コマンド

javapackager -deploy -native -outdir packages -outfile BrickBreaker
-srcdir dist -srcfiles BrickBreaker.jar -appclass brickbreaker.Main
-name "BrickBreaker" -title "BrickBreaker demo"

ドロップイン・リソースを使用したパッケージのカスタマイズ

パッケージ化ツールでは、アプリケーション・アイコンまたは構成ファイルなどのパッケージを作成するいくつかの組込みリソースを使用します。生成されるパッケージをカスタマイズする1つの方法は、組込みリソースをカスタマイズされたバージョンで置き換えることです。

次のアクションが必要です。

- カスタム・リソースの準備

- 組込みリソースの置換

カスタム・リソースの準備

どのリソースが使用されているかを詳細に理解するには、verbose="true"属性を<fx:deploy>に追加するか、-vオプションをjavapackager -deployコマンドに渡すことによって、冗長モードを有効にします。

冗長モードには、次のアクションが含まれます。

- 次のアイテムが印刷されます。

- 生成しているパッケージに使用される構成リソースのリスト

- 各リソースの役割

- 目的のカスタム・リソース名

- 自己完結型パッケージの作成に使用される構成ファイルおよびリソースのコピーは、一時フォルダに保存されます。これらのファイルをカスタマイズの開始点として使用できます。

次の例は、重要な部分を太字にして、冗長モードのサンプル出力を示しています。

Using base JDK at: /Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk
Using default package resource [Bundle config file] (add
package/macosx/Info.plist to the class path to customize)
Using default package resource [icon] (add package/macosx/DemoApp.icns
to the class path to customize)
Creating app bundle: /tmp/test/TestPackage/bundles/DemoApp.app
Config files are saved to /var/folders/rd/vg2ywnnx3qj081sc5pn9_
vqr0000gn/T/build7039970456896502625.fxbundler/macosx. Use them
to customize package.

構成ファイルのコピーを取得して、必要に合せて調整できるようになります。たとえば、構成ファイルInfo.plistを取得し、ローカライズされたパッケージ名を追加できます。

注意:

カスタマイズを行った後、冗長モードを無効にするか、サンプル構成ファイルを削除するカスタム・クリーンアップ・アクションを追加することをお薦めします。

組込みリソースの置換

パッケージ化ツールは、組込みリソースに戻す前にクラス・パスでカスタマイズされたリソースを検索します。Javaパッケージャには、デフォルトでクラス・パスに追加された"." (現在の作業ディレクトリ)があります。そのため、アプリケーション・アイコンを置き換えるには、javapackagerが実行されるディレクトリ(通常はルート・プロジェクト・ディレクトリ)の./package/macosx/DemoApp.icnsにカスタム・アイコンをコピーします。

タスク定義がロードされると、Java Antタスクのクラス・パスが定義されます。パスant-javafx.jarの前のルックアップに追加のパスを追加する必要があります。

例2-2に、カスタム・リソースのパスに"."を追加する方法を示します。

カスタマイズ化されたリソースを指定した後、冗長ビルド出力は、リソースが使用されていることをレポートします。たとえば、アプリケーションにカスタム・アイコンを追加した場合、例2-3に示すように、冗長出力はその追加内容をレポートします。

例2-2 JavaFX Antタスクのリソースのカスタマイズの有効化

<fx:bundleArgument arg="dropinResourcesRoot" value="."/>

例2-3 カスタマイズされたアイコン・リソースの追加後の冗長出力

Using base JDK at: /Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk
Using default package resource [Bundle config file] (add
package/macosx/Info.plist to the class path to customize)
Using custom package resource [icon] (loaded from
package/macosx/DemoApp.icns on class path)
Creating app bundle: /tmp/test/TestPackage/bundles/DemoApp.app

カスタマイズのオプション

自己完結型アプリケーション・パッケージをカスタマイズするには、既存のJavaFX Ant要素の多くが使用されます。異なるパッケージには異なるパラメータ・セットが必要で、同じ要素が異なる役割を持つ場合があります。表2-1に、カスタマイズ・オプションおよび関連する属性のいくつかを紹介します。要素およびその属性の詳細な説明は、JavaFX Antヘルパー・パラメータ・リファレンスを参照してください。

表2-1 Ant要素および属性を使用したカスタマイズ・オプション

要素

説明

<fx:application>

アプリケーション記述子。これを使用して、名前やバージョンなど、アプリケーション属性を設定します。

<fx:preferences>

アプリケーションのデプロイメント・プリファレンス。これを使用して、ショートカットの要求やシステム・アプリケーション・メニュー内のエントリなど、インストール・オプションを設定します。

<fx:fileset>

標準的なAnt FileSetタイプの拡張子。これを使用して、指定されたリソースのタイプを識別します。

<fx:info>

ユーザーへのアプリケーションの説明。これを使用して、タイトルやアプリケーションのベンダーなど、システム・ダイアログ・ボックスに表示されるアプリケーション情報を定義します。

<fx:argument>

起動時にアプリケーションに渡される引数。

<fx:association>

アプリケーションに関連付けるファイルのタイプ。

<fx:jvmarg>

JVMに渡され、アプリケーションの実行に使用されるJVM引数(たとえば大きいヒープ・サイズなど)。

<fx:jvmUserArg>

JVMに渡され、アプリケーションの実行に使用される、ユーザー変更可能なJVM引数。

<fx:property>

アプリケーションを実行するJVMで設定されるプロパティ。

<fx:runtime>

アプリケーション用に生成されるJavaランタイムのカスタマイズ。これを使用して、ランタイムへのモジュールの追加、モジュールの場所の指定、およびコマンド行ツールの包含を行います。

基本パッケージのプラットフォーム固有のカスタマイズ

自己完結型アプリケーション・パッケージの基本形式の作成およびカスタマイズは非常に簡単なプロセスですが、次の点に注意してください。

- 異なるプラットフォームには異なるアイコン・タイプが必要です。
たとえば、Windowsでは.ico形式が必要で、Linuxでは.png形式およびmacOSでは.icns形式が必要です。Linuxではランチャにアイコンは埋め込まれておらず、かわりに.desktopファイルがアイコンを参照します。

- JavaFXアプリケーションでは、アイコンをアプリケーション・ステージに追加して、アイコンが実行時に設定されていることを確認します。たとえば、JavaFXアプリケーションのstart()メソッドに次のコードを追加します。

stage.getIcons().add(new
Image(this.getClass().getResourceAsStream("app.png")));

- アプリケーションを配布する場合、出力フォルダのファイルに署名します。
たとえば、Windowsでは、signtool.exeを使用して起動ツールの実行ファイルに署名できます。

macOS

macOSで生成されるパッケージは"application bundle"です。

いくつかの構成パラメータがアプリケーション・バンドルのInfo.plistファイルに配置され、次のルールに従う必要があります。

- アプリケーションID (IDが指定されていない場合はメイン・クラス名)はCFBundleIdentifierとして使用されます。

- アプリケーション・バージョンはCFBundleShortVersionStringとして使用されます。

macOSのGatekeeperにより、このコードがオブジェクティブCまたはJavaのどちらで実装されているかに関係なく、デフォルトで信頼されていないコードの実行が阻止されます。

ユーザーは実行するアプリケーションを手動で有効にできますが、これは完璧なユーザー操作ではありません。最適なユーザー操作を得るには、AppleからDeveloper ID証明書を取得します。Macバンドラでは、証明書を使用して.appフォルダに署名します。ローカル・ユーザー情報が証明書の名前と異なる場合、例2-4に示すように、バンドル引数mac.signing-key-user-nameを設定する必要がある可能性があります。Apple DeveloperサイトのDeveloper ID and Gatekeeperを参照してください。

例2-4 mac.signing-key-user-nameの使用例

// Using javapackager tool
javapackager ... -Bmac.signing-key-user-name="Jane Appleseed"

// Using Ant tasks
<fx:deploy>
//...
<fx:bundleArgument arg="mac.signing-key-user-name" value="Jane Appleseed"/>
//...
</fx:deploy>

自己完結型アプリケーションへの引数の受渡し

コマンドラインから自己完結型アプリケーションが起動される際に、アプリケーションに引数を渡すことができます。引数が指定されていない場合は、アプリケーションに渡す引数のセットを定義することもできます。デフォルトの引数を定義するには、javapackager deployコマンドで-argumentオプションを使用するか、アプリケーション・パッケージの作成時にAntタスクで<fx:argument>要素を使用します。コマンドラインから入力された引数は、デフォルトの引数に優先されます。アプリケーションがランチャ・アイコンから起動される場合、デフォルトの引数が使用されます。

ファイルと自己完結型アプリケーションの関連付け

アプリケーションのファイルの関連付けを登録するように自己完結型アプリケーションのインストーラを設定できます。Antタスクで<fx:association>要素を使用して、アプリケーションによって処理できるファイルを識別します。ファイルの関連付けは、ファイル拡張子またはMIMEタイプに基づきます。

次の例では、アプリケーションをMIMEタイプがapplication/x-vnd.MyAppFileのファイルに関連付けます。

<fx:info title="Association example">
<fx:association mimetype="application/x-vnd.MyAppFile" description="Sample Test Files">
</fx:association>
</fx:info>

複数のエントリ・ポイントのサポート

自己完結型アプリケーションのパッケージを構築して、複数のエントリ・ポイントを持つ製品スイートをサポートできます。各エントリ・ポイントには独自のショートカットまたはアイコンがあります。<fx:application>要素のmainClass属性では、プライマリ・エントリ・ポイントを識別します。<fx:deploy>タスクで<fx:secondaryLauncher>要素を使用して、各セカンダリ・エントリ・ポイントを定義します。

注意:

複数のエントリ・ポイントは、WindowsおよびLinuxアプリケーションに対してのみサポートされます。

次の例では、WindowsのTestSuiteアプリケーションのエントリ・ポイントを定義します。

<fx:deploy outdir="test/apps" nativeBundles="image">
<fx:application name="TestSuite Sample"
mainClass="samples.TestSuite"/>

<fx:info title="Test Suite"/>

<fx:secondaryLauncher
mainClass="samples.TestSuite"
name="Suite Applications"/>
shortcut="true"/>

<fx:secondaryLauncher name="Editor">
<fx:bundleArgument arg="icon" value="../resources/editor.ico"/>
</fx:secondaryLauncher>

<fx:secondaryLauncher name="Spreadsheet">
<fx:bundleArgument arg="icon" value="../resources/spreadsheet.ico"/>
</fx:secondaryLauncher>
</fx:deploy>

JREのカスタマイズ

Javaパッケージ化ツールではjlinkツールを使用して自己完結型アプリケーションのランタイムが生成されます。コマンド行ツール、および必要に応じて追加モジュールを追加します。

デフォルトでは、java.exeなどのコマンド行ツールは、自己完結型アプリケーション・パッケージにバンドルされているJREから削除されます。生成されたJREでこれらのツールを保持するには、<fx:runtime>要素のstrip-native-commands属性をfalseに設定します。

JREのサイズを最小限にするには、jlinkツールを使用して、アプリケーションの実行に必要なパッケージのみを含むカスタム・ランタイムを生成します。追加モジュールが必要な場合は、<fx:add-modules>要素を使用してそのモジュールをランタイムに追加します。複数のモジュールを追加するには、単一の<fx:add-modules>要素をカンマ区切りのモジュールのリストとともに使用するか、モジュールごとに別個の<fx:add-modules>要素を使用します。

次の例にはコマンド行ツールが含まれ、jdk.packager.servicesおよびjavafx.controlsからモジュールが追加されます。

<fx:runtime strip-native-commands="false">
<fx:add-modules value="jdk.packager.services,javafx.controls"/>
</fx:runtime>

モジュラ・アプリケーションのパッケージ化

Javaパッケージャ・ツールを使用して、モジュラ・アプリケーションおよび非モジュラ・アプリケーションをパッケージ化します。

モジュラ・アプリケーションは自己完結型アプリケーションとしてパッケージ化できます。それらは、Java Web Startアプリケーションとしてはパッケージ化できません。モジュラ・アプリケーションのメイン・モジュールを識別するには、<fx:secondaryLauncher>要素のmodule属性を設定します。

次の例では、HelloWorldModularというアプリケーションのメイン・モジュールを識別します。

<fx:secondaryLauncher name="HelloWorldModular"
module="hello.world"
mainClass="com.sample.app.HelloWorld">
</fx:secondaryLauncher>

インストール可能なパッケージ

配布を簡略化するために、自己完結型アプリケーションをプラットフォーム固有のインストール可能なパッケージにラップすることができます。サード・パーティ製ツールの可用性に応じて、Javaパッケージ化ツールでは、いくつかの形式のインストール可能なパッケージの組込みサポートが提供されています。

この章の他の項で説明されているように、インストール・プロセスのユーザー操作の調節は、特定のインストーラ・テクノロジに固有です。ただし、必要なインストーラのタイプを決定する必要があります。その決定に役立つ考慮事項は次のとおりです。

- システム全体のインストールとユーザーごとのインストールのどちらですか。
システム全体のインストールの結果、パッケージが共有の場所にインストールされ、システム上のどのユーザーも使用できるようになります。通常は管理権限が必要で、インストール・プロセス中は、高いインストーラ権限を承認するOSプロンプトなど、追加のステップが必要になると考えられます。

ユーザーごとのインストールでは、パッケージをプライベート・ユーザー・ディレクトリにコピーし、管理権限は必要ありません。このタイプのインストールでは、できるだけ少ないダイアログを表示することができ、ユーザーに管理権限がなくてもプログラムを実行できます。

ユーザー・レベルまたはシステム・レベルのインストール可能なパッケージが要求されるたびに、ビルド手順自体には管理権限は必要ありません。

- クリックスルー・ライセンスが必要ですか。
一部のインストール可能なパッケージでは、インストールの開始前にライセンス・テキストの表示をサポートしています。インストール・プロセスは、ユーザーがライセンスを受け入れた後にのみ開始します。

- どのメニューとデスクトップの統合が必要ですか。
ユーザーは、アプリケーションを容易に起動できる必要があります。そのため、デスクトップのショートカットを配置したり、メニュー内のアプリケーションのリストにアプリケーションを追加することが必要です。

現在の実装には、簡略化するための多くの前提があります。たとえば、インストーラは、パッケージをインストールする場所を選択するようユーザーに要求することはありません。開発者も、インストール場所の制御は限られており、システム全体またはユーザーごとのインストールのみ指定できます。

デフォルトの前提ではニーズを満たさない場合、構成ファイル・テンプレートを調整する(ドロップイン・リソースを使用したパッケージのカスタマイズを参照)か、基本的な自己完結型アプリケーションをパッケージ化してからそれをインストール可能なパッケージに自分でラップすることにより、詳細なカスタマイズが可能になります。

インストール可能なパッケージのタイプ

ターゲット・オペレーティング・システムおよび使用可能なパッケージ化ツールに基づいて、自己完結型アプリケーションのインストール可能なパッケージを作成します。

次の表に、サポートされているインストール可能なパッケージ形式およびその作成に必要なツールを示します。

表2-2 インストール可能なパッケージ形式およびツール前提条件

パッケージ形式

インストールの場所(デフォルト・モードは太字)

クリックスルー・ライセンス

前提条件

EXE

ユーザーごと: %LOCALAPPDATA%

システム: %ProgramFiles%

あり(オプション)

- Windows

- Inno Setup 5以降

MSI

ユーザーごと: %LOCALAPPDATA%

システム: %ProgramFiles%

特別なサポートはなし

- Windows

- WiX 3.0以降

DMG

ユーザーごと: ユーザーのデスクトップ・フォルダ

システム: /Applications

あり(オプション)

- macOS

PKG

ユーザーごと: ユーザーのデスクトップ・フォルダ

システム: /Applications

あり(オプション)

- macOS

RPM

ユーザーごと: サポートなし

システム: /opt

特別なサポートはなし

- Linux

- RPMBuild

DEB

ユーザーごと: サポートなし

システム: /opt

特別なサポートはなし

- Linux

- Debianパッケージ化ツール

EXEパッケージ

EXEパッケージを生成するには、Inno Setup 5以降をインストールし、PATHで使用可能にする必要があります。使用可能であることを検証するには、ビルドを起動するコマンド行またはビルド・スクリプトからiscc.exeの実行を試行します。

デフォルトでは、生成されたパッケージには次の特性があります。

- 管理権限は必要ありません。

- 最少のダイアログ数になるよう最適化されます。

- プログラム・メニューまたはデスクトップ・ショートカット、あるいはその両方から参照されます。

- インストールの終わりにアプリケーションを起動します。

図2-2は、Windows上にインストール中の自己完結型JavaFXアプリケーションの一般的なダイアログ・ボックスを示しています。

図2-2 Windowsの自己完結型JavaFXアプリケーションのインストール・ダイアログ

カスタマイズのヒント:

- システム全体のインストールを選択した場合、ユーザーは管理権限を持っている必要があり、インストールの終わりにアプリケーションは起動しません。

- クリックスルー・ライセンスはサポートされています。.rtfファイルが必要です。

- インストール・ダイアログに表示されるイメージを、アプリケーション・アイコンとは異なるものにできます。
現在のバージョンのInno Setupでは、イメージが55x58ピクセルの最大サイズのビットマップ・ファイルであることを想定しています。

- JavaFXアプリケーションでは、アイコンをアプリケーション・ステージに追加して、アイコンが実行時に設定されていることを確認できます。

- 生成される.exeパッケージに署名できます。
信頼できる認証局(TSA)から証明書を取得してから、Windowsのsigntool.exeユーティリティを使用してコードに署名する必要があります。

- Windowsスクリプト・ファイルを使用して、起動ツール実行可能ファイルに署名するためなど、.exeファイルに自己完結型アプリケーション・フォルダをラップする前に、微調整できます。

カスタム・イメージの追加およびWindowsスクリプト・ファイルの指定の技術は、ドロップイン・リソースを使用したパッケージのカスタマイズで説明されています。アイコンをJavaFXアプリケーションのアプリケーション・ステージに追加するには、基本パッケージのプラットフォーム固有のカスタマイズを参照してください。

注意:

生成されたパッケージがインストールされたアプリケーションのリストに表示されている間は、Windowsインストーラ(MSI)テクノロジは使用されず、GUIDを使用する必要はありません。詳細は、Inno SetupのFAQを参照してください。

MSIパッケージ

Windows Installer XML (WiX)ツールセット(WiXとも呼ばれる)を使用して、MSIパッケージが生成されます。WiX 3.8以降が必要で、PATHで使用できる必要があります。検証するには、ビルドを起動するコマンド行またはビルド・スクリプトからcandle /?の実行を試行します。

デフォルトでは、生成されたMSIパッケージには次の特性があります。

- エンタープライズ・デプロイメント・ツールを使用したデプロイメント用に最適化されます。

- システム全体の場所にインストールします。

- クリックスルーUIがなく、進捗ダイアログのみが表示されます。

- プログラム・メニューまたはデスクトップ・ショートカット、あるいはその両方から参照されます。

- インストール・プロセス以外で作成されても、インストール・フォルダのすべてのファイルを削除します。(WiX 3.5以降が必要です。)

- アプリケーション識別子のUpgradeCodeとしての使用を試行します。
アプリケーション識別子が有効なGUIDではない場合、UpgradeCodeのランダムなGUIDが生成されます。

- ProductCodeをランダムに生成します。

固定製品コードを使用したり、MSIパッケージにカスタムUIを追加するには、ドロップイン・リソースを使用したパッケージのカスタマイズで説明されているように、Javaパッケージャで使用されるWiXテンプレート・ファイルをカスタマイズします。カスタムUIについては、WiXドキュメントも参照してください。

ネットワーク上でMSIパッケージを配布する場合、最適なユーザー操作のためにこれに署名します。

起動ツール実行可能ファイルに署名するためなど、.msiファイルに自己完結型アプリケーション・フォルダをラップする前に、微調整することもできます。

DMGパッケージ

デフォルトでは、DMGパッケージは単純なドラッグ・アンド・ドロップのインストール操作を提供しています。図2-3は、インストール中のデフォルト動作の例を示しています。

図2-3 macOSのデフォルト・インストーラの例

インストール・ウィンドウの外観をカスタマイズするために、カスタム・バックグラウンド・イメージを指定できます。

バックグラウンド・イメージに異なるディメンションがあるか、アイコンを別に配置する必要がある場合、インストール・ビュー内の要素のサイズおよび位置を変更するために使用されるDMG設定スクリプトをカスタマイズする必要もあります。ドロップイン・リソースを使用したパッケージのカスタマイズを参照してください。

図2-4 macOSのインストール可能なパッケージのカスタマイズされた外観の例

自己完結型アプリケーション・フォルダをラップする前に微調整するには、アプリケーション・フォルダが移入された後で実行する独自のbashスクリプトを指定します。そのようなアクションのスクリプトを、パッケージへのローカリゼーション・ファイルの追加として使用できます。図2-4は、調整されたアプリケーション・インストーラの例を示しています。

Gatekeeperフレンドリなパッケージを作成するには、DMGパッケージのアプリケーションに署名する必要があります。DMGファイル自体には署名する必要はありません。Macバンドラはアプリケーションの署名を処理します。ローカル・ユーザー情報が証明書の名前と異なる場合、例2-4に示すように、バンドル引数mac.signing-key-user-nameを設定する必要がある可能性があります。

アプリケーションに手動で署名するために、macOSで説明されている技術を使用して、アプリケーション・バンドルが移入された後で実行する構成スクリプトを指定できます。サンプルDemoAppの場合、構成スクリプトはpackage/macosx/DemoApp-post-image.shにあり、次の例に示すようなコンテンツがあります。

echo "Signing application bundle"
#Move to the folder containing application bundle
cd ../images/dmg.image
#do sign
codesign -s "Developer ID Application" *.app
echo "Done with signing"

DMGインストーラは、テキスト形式で提供されたクリックスルー・ライセンスもサポートしています。リッチ・テキスト形式の使用が必要な場合、license.plistファイルを外部で準備し、ドロップイン・リソースを使用したパッケージのカスタマイズで説明されている技術を使用してパッケージに追加します。

DMGパッケージを作成するには、サード・パーティ製ツールは必要ありません。

Linuxパッケージ

Linuxのインストール・パッケージの生成では、インストール・パッケージのビルドに必要なネイティブ・ツールがインストールされていることを前提としています。RPMパッケージの場合、通常、これはRPMBuildパッケージおよびその依存を意味します。DEBパッケージの場合、dpkg-debおよび依存が必要です。

パッケージをビルドするには、管理権限は必要ありません。

デフォルトでは、生成されたパッケージには次の特性があります。

- アプリケーションを/optディレクトリにインストールします。

- ショートカットをアプリケーション・メニューに追加します。

- Linuxパッケージの通常の動作であるインストール用のUIはありません。

カスタマイズのヒント:

- アプリケーション・メニューの特定のカテゴリにアプリケーションを配置するには、<fx:info>のcategory属性を使用します。
デスクトップ・メニューの仕様を参照し、カテゴリ名のリストはウィンドウ・マネージャのドキュメントを参照してください。

- アイコンは.pngファイルである必要があります。

- ドロップイン・リソースを使用したパッケージのカスタマイズで説明されている技術を使用してビルド・テンプレート・ファイルを調整することによって、高度なカスタマイズが可能です。
使用可能なオプションの詳細は、DEB/RPMのパッケージ化ガイドを参照してください。

デプロイメント・シナリオの処理

次の特性を持つJavaFXアプリケーションがあるシナリオを考えてみます。

- サード・パーティ製ライブラリをいくつか使用します。

- サード・パーティ製ライブラリの1つはJNIを使用し、System.loadLibrary()を使用してプラットフォーム固有のネイティブ・ライブラリをロードします。

- 大きい1GBのヒープが必要です。

インストールに管理権限が必要ない自己完結型アプリケーションとして、このアプリケーションをパッケージ化する必要があります。

アプリケーションがスタンドアロン・アプリケーションとして正しく動作すること、メインJARファイルがdistフォルダにビルドされること(<fx:jar>を使用)、およびサード・パーティ製ライブラリがdist/libディレクトリにコピーされることを前提としています。

自己完結型アプリケーション・パッケージを構築する方法の1つが例2-5に示され、次のアクションで構成されます。

- すべてのアプリケーションJARファイルを含めます。

- 現在のプラットフォームに適用可能なネイティブ・ライブラリを、タイプ・データのリソースとして追加します。
ファイルセットのベース・ディレクトリがライブラリを含むフォルダに設定されていることを確認します。これにより、ライブラリが最上位のアプリケーション・フォルダに確実にコピーされます。

- <fx:preferences install="false"/>を使用して、ユーザー・レベルのインストールを要求します。

最上位のアプリケーション・フォルダがライブラリ検索パスに追加されるため、System.loadLibrary()を使用できます。

例2-5は、<fx:deploy>タスクの例を示しています。

例2-5 <fx:deploy>タスクの例

<fx:deploy nativeBundles="all" width="600" height="400"
outdir="${basedir}/dist" outfile="NativeLibDemo">
<fx:application name="NativeLib Demo" mainClass="${javafx.main.class}"/>

<fx:resources>
<!-- include application jars -->
<fx:fileset dir="dist" includes="*.jar"/>
<fx:fileset dir="dist" includes="lib/*.jar"/>

<!-- native libs for self-contained application -->
<!-- assume they are stored as
native/windows/x86/JNativeHook.dll
native/linux/x86_64/libJNativeHook.so
.... -->
<!-- ensure libraries are included as top level elements
to get them on java.library.path -->
<fx:fileset dir="${basedir}/native/${os.name}/${os.arch}"
type="data">
<include name="*.dll"/>
<include name="*.jnilib"/>
<include name="*.so"/>
</fx:fileset>
</fx:resources>

<!-- Custom JVM setup for application -->
<fx:platform>
<fx:jvmarg value="-Xmx1024m"/>
<fx:jvmarg value="-verbose:jni"/>
<property name="my.property" value="something"/>
</fx:platform>

<!-- request user level installation -->
<fx:preferences install="false"/>
</fx:deploy>

3 JavaFX Antタスク

この章では、Antを使用してJavaおよびJavaFXアプリケーションをパッケージ化する方法を示します。

アプリケーションをパッケージ化するために推奨されている方法は、JavaFX AntタスクおよびJavaパッケージャ・ツールです。

この章のトピックは、次のとおりです:

- JavaFX Antタスクを実行するための要件

- JavaFX Ant要素

- JavaFX Antタスクの使用

- Antスクリプトの例

次の2つのAntタスク・リファレンスの項も参照してください。

- JavaFX Antタスク・リファレンス

- JavaFX Antヘルパー・パラメータ・リファレンス

JavaFX Antタスクを実行するための要件

これらのタスクを使用するには、ant-javafx.jarファイルが必要です。これは次の場所にあります。

- JDK 7 Update 6以降では、jdk_home/libにあります。

- スタンドアロンJavaFXインストールでは、javafx-sdk-home/libにあります。

JavaFX Ant要素

Ant要素には、JavaFX AntタスクおよびAntヘルパー・パラメータの2つのカテゴリがあります。

JavaFX Antタスク

JavaFX Antタスクは次のタスクを実行します。

- ダブルクリック可能なJARファイルの作成

- Web StartアプリケーションまたはWebページに埋め込まれたアプリケーションのHTMLページおよびデプロイメント記述子の作成

- アプリケーションへのデジタル署名(必要な場合)

- CSSファイルのバイナリ形式への変換

- 自己完結型アプリケーション・パッケージの構築

要素は、JavaFX Antタスク・リファレンスで説明されています。

Antヘルパー・パラメータ

Antヘルパー・パラメータはJavaFX Antタスクで使用されます。ヘルパー・パラメータは、JavaFX Antヘルパー・パラメータ・リファレンスで説明されています。

JavaFX Antタスクの使用

AntスクリプトでJavaFX Antタスクを使用するには、その定義をロードする必要があります。例3-1のbuild.xmlファイルに例を示しています。

例3-1に関する注意は次のとおりです:

- 一部のJavaFXタスクの短縮名が一部のシステム・タスクで使用される短縮名と同じであるため、例3-1に太字で示したfx: namespaceを宣言していることを確認します。

- ドロップイン・リソースを使用してカスタマイズを簡略化するために、現在のディレクトリ(".")がクラスパスに追加されます。ドロップイン・リソースを使用したパッケージのカスタマイズを参照してください。

JavaFX Antタスク定義がロードされた後は、javafx.ant.versionプロパティを、AntタスクAPIのバージョンの確認に使用できます。バージョン番号については次のリストを使用します。

- バージョン1.0: JavaFX 2.0 SDKに付属

- バージョン1.1: JavaFX 2.1 SDKに付属

- バージョン1.2: JavaFX 2.2 SDKおよびJDK 7 Update 6に付属

例3-1 JavaFX Antタスク定義のロード

<project name="JavaFXSample" default="default" basedir="."
xmlns:fx="javafx:com.sun.javafx.tools.ant">
<target name="default">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath=".:${JAVA_HOME}/lib/ant-javafx.jar"/>
</target>
</project>

Antスクリプトの例

この項の内容は次のとおりです。

- JavaFX Hello Worldの例のデプロイ

- 自己完結型アプリケーションとしてのJavaFX Hello Worldの例のデプロイ

- 外部JARファイルを使用したJavaFXアプリケーションのデプロイ

- 自己完結型アプリケーションのJVMオプションのオーバーライド

JavaFX Hello Worldの例のデプロイ

Antスクリプトを使用したJARファイルとしてJavaFX Hello Worldの例をデプロイするには、次の手順に従います。

1. アプリケーションの例を格納するディレクトリを作成します。次の手順では、ディレクトリC:\exampleを使用します。

2. 例3-2をC:\example\src\HelloWorld.javaとして保存します。

3. 例3-3をC:\example\build.xmlとして保存します。

4. ファイルbuild.xmlで、JAVA_HOMEプロパティの値を変更することによって、コンピュータにインストールされるJDKの場所を指定します。強調表示されたテキストをJDKのフルパスに変更します。

<property name="JAVA_HOME" value="C:\\Java\\jdk-9"/>

5. コマンド行プロンプトで、ディレクトリをC:\exampleに変更します。JavaFX HelloWorldの例をコンパイル、ビルドおよびデプロイするには、次のコマンドを実行します。

ant

6. 例を実行するには、コマンド行プロンプトで、ディレクトリをC:\example\distに変更し、次のコマンドを実行します。

java -jar HelloWorld.jar

例3-2 HelloWorld.java

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorld extends Application {

@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});

StackPane root = new StackPane();
root.getChildren().add(btn);

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}

例3-3 JavaFX Hello Worldの例をデプロイするAntスクリプト

<?xml version="1.0" encoding="UTF-8" ?>

<project name="JavaFX Hello World Example" default="default" basedir="."
xmlns:fx="javafx:com.sun.javafx.tools.ant">

<property name="JAVA_HOME" value="C:\\Java\\jdk-9"/>
<property name="build.src.dir" value="src"/>
<property name="build.classes.dir" value="classes"/>
<property name="build.dist.dir" value="dist"/>

<target name="default" depends="clean,compile">

<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${JAVA_HOME}/lib/ant-javafx.jar"/>

<fx:application id="HelloWorldID"
name="JavaFXHelloWorldApp"
mainClass="HelloWorld"/>

<fx:resources id="appRes">
<fx:fileset dir="${build.dist.dir}" includes="HelloWorld.jar"/>
</fx:resources>

<fx:jar destfile="${build.dist.dir}/HelloWorld.jar">
<fx:application refid="HelloWorldID"/>
<fx:resources refid="appRes"/>
<fileset dir="${build.classes.dir}"/>
</fx:jar>

<fx:deploy width="300" height="250"
outdir="." embedJNLP="true"
outfile="helloworld">

<fx:application refId="HelloWorldID"/>

<fx:resources refid="appRes"/>

<fx:info title="JavaFX Hello World Application"
vendor="Oracle Corporation"/>

</fx:deploy>

</target>

<target name="clean">
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${build.dist.dir}"/>

<delete>
<fileset dir="${build.classes.dir}" includes="**/*"/>
<fileset dir="${build.dist.dir}" includes="**/*"/>
</delete>

</target>

<target name="compile" depends="clean">

<javac includeantruntime="false"
srcdir="${build.src.dir}"
destdir="${build.classes.dir}"
fork="yes"
executable="${JAVA_HOME}/bin/javac"
source="9"
debug="on">
</javac>
</target>

</project>

自己完結型アプリケーションとしてのJavaFX Hello Worldの例のデプロイ

自己完結型アプリケーションとしてJavaFX Hello Worldの例をデプロイするには、属性nativeBundles="all"を、build.xmlスクリプトの要素<fx:deploy>に追加します。

<fx:deploy width="300" height="250"
outdir="." embedJNLP="true"
outfile="helloworld"
nativeBundles="all">

前の項で説明されているように、JavaFX Hello Worldの例をコンパイル、ビルドおよびデプロイします。Antスクリプトでは、適用可能なすべての自己完結型アプリケーション・パッケージを作成し、ディレクトリC:\example\bundles\JavaFXHelloWorldAppに格納します。(名前JavaFXHelloWorldAppは、<fx:application>要素のname属性の値です。)たとえば、WindowsでJavaFX Hello Worldの例をデプロイする場合、Antスクリプトは、ファイル・ブラウザでダブルクリックすることで実行できる、C:\example\bundles\JavaFXHelloWorldApp\JavaFXHelloWorldApp.exeという名前のアプリケーションを作成します。

Antスクリプトが自己完結型アプリケーションを作成する方法をカスタマイズできます。自己完結型アプリケーションのパッケージ化を参照してください。

外部JARファイルを使用したJavaFXアプリケーションのデプロイ

JavaFX Ensemble8サンプル・アプリケーションには、Apache Luceneが必要です。例3-4は、自己完結型アプリケーションとしてEnsemble8をデプロイし、それにApache Lucene JARファイルを含める方法を示しています。

Antスクリプトの次の行によって、srcディレクトリに含まれるリソースが、コンパイルされたJavaクラス・ファイルを含むディレクトリにコピーされます。リソースは、Antスクリプトがサンプル・アプリケーションをコンパイルした後でコピーされます。

<copy todir="${build.classes.dir}">
<fileset dir="src/app/resources"/>
<fileset dir="src/generated/resources"/>
<fileset dir="src/samples/resources"/>
</copy>

Antスクリプトの次の行には、Apache Lucerne JARファイル(libディレクトリに格納)が含まれています。

<fx:resources id="appRes">
<fx:fileset dir="${build.dist.dir}"
includes="ensemble8.jar"/>
<fx:fileset dir="lib"/>
<fx:fileset dir="${build.classes.dir}"/>
</fx:resources>

<fx:jar destfile="${build.dist.dir}/ensemble8.jar">
<fx:application refid="ensemble8"/>
<fx:resources refid="appRes"/>
</fx:jar>

例3-4 Ensemble8サンプル・アプリケーションをデプロイするAntスクリプト

<?xml version="1.0" encoding="UTF-8" ?>

<project name="Ensemble8 JavaFX Demo Application" default="default" basedir="."
xmlns:fx="javafx:com.sun.javafx.tools.ant">

<property name="JAVA_HOME" value="C:\\Java\\jdk-9"/>

<path id="CLASSPATH">
<pathelement location="lib/lucene-core-3.2.0.jar"/>
<pathelement location="lib/lucene-grouping-3.2.0.jar"/>
<pathelement path="classes"/>
</path>

<property name="build.src.dir" value="src"/>
<property name="build.classes.dir" value="classes"/>
<property name="build.dist.dir" value="dist"/>

<target name="default" depends="clean,compile">

<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${JAVA_HOME}/lib/ant-javafx.jar"/>

<fx:application id="ensemble8"
name="Ensemble8"
mainClass="ensemble.EnsembleApp"/>

<fx:resources id="appRes">
<fx:fileset dir="${build.dist.dir}" includes="ensemble8.jar"/>
<fx:fileset dir="lib"/>
<fx:fileset dir="${build.classes.dir}"/>
</fx:resources>

<fx:jar destfile="${build.dist.dir}/ensemble8.jar">
<fx:application refid="ensemble8"/>
<fx:resources refid="appRes"/>
</fx:jar>

<fx:deploy outdir="." embedJNLP="true"
outfile="ensemble8"
nativeBundles="all">

<fx:application refId="ensemble8"/>

<fx:resources refid="appRes"/>

<fx:info title="Ensemble8 JavaFX Demo Application"
vendor="Oracle Corporation"/>

</fx:deploy>

</target>

<target name="clean">
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${build.dist.dir}"/>

<delete>
<fileset dir="${build.classes.dir}" includes="**/*"/>
<fileset dir="${build.dist.dir}" includes="**/*"/>
</delete>

</target>

<target name="compile" depends="clean">

<javac includeantruntime="false"
srcdir="${build.src.dir}"
destdir="${build.classes.dir}"
fork="yes"
executable="${JAVA_HOME}/bin/javac"
source="9"
debug="on"
classpathref="CLASSPATH">
</javac>

<!-- Copy resources to build.classes.dir -->

<copy todir="${build.classes.dir}">
<fileset dir="src/app/resources"/>
<fileset dir="src/generated/resources"/>
<fileset dir="src/samples/resources"/>
</copy>

</target>

</project>

自己完結型アプリケーションのJVMオプションのオーバーライド

自己完結型アプリケーションのJVMオプションをオーバーライドするには、設定ノードでそれを指定してから、app.preferences.idシステム・プロパティでこのノードの名前を設定します。次の例では、<fx:jvmuserarg>要素で指定された-Xmsおよび-Xmx JVMオプションをオーバーライドします。これらのオプションがオーバーライドされたことを確認するために、アプリケーションは、(-Xmsおよび-Xmxオプションの値に基づいて)メモリー割当てプールの初期サイズおよび最大サイズを表示します。

1. アプリケーションの例を格納するディレクトリを作成します。次の手順では、ディレクトリC:\memexampleを使用します。

2. 例3-5をC:\memexample\src\MemoryExamplePreferences.javaとして保存します。

次の文では、オプション-Xmsおよび-Xmxの値をコンピュータに格納するjava.util.prefs.Preferencesノードを取り出します。

prefs = Preferences.userRoot().node(System.getProperty("app.preferences.id")).node("JVMUserOptions");

このノードの名前はapp.preferences.id/JVMUserOptionsです。app.preferences.idプロパティの値は、<fx:application>要素のid属性の値です。この例では、app.preferences.idの値はMemoryTestAppIDです。自己完結型アプリケーションを実行すると、起動ツール・プログラムはシステム・プロパティを自動的に設定します。ただし、クラスを直接実行する場合、システム・プロパティとしてapp.preferences.idの値を指定する必要があります。たとえば、コマンド行からこのクラスを実行する場合、app.preferences.idの値を次のように指定します。

java -cp classes -Dapp.preferences.id=MemoryTestAppID

この例では、Antビルド・スクリプトはMemoryTestPreferencesクラスを実行し、app.preferences.idプロパティの値を設定します。

たとえば、Microsoft Windowsを使用している場合、このクラスは、WindowsレジストリにComputer\HKEY_CURRENT_USER\Software\JavaSoft\Prefs\MemoryTestAppID\JVMUserOptionsという名前の設定ノードを作成します。

3. 例3-6をC:\memexample\src\MemoryExample.javaとして保存します。

4. 例3-7をC:\memexample\build.xmlとして保存します。

このAntスクリプトは、MemoryTestPreferencesクラスをコンパイルおよび実行し、app.preferences.idプロパティの値を設定します。

<java fork="true" jvm="${env.JAVA_HOME}\bin\java"
classname="MemoryTestPreferences" classpath="${build.classes.dir}">
<sysproperty key="app.preferences.id" value="MemoryTestAppID"/>
</java>

5. ファイルbuild.xmlで、JAVA_HOMEプロパティの値を変更することによって、コンピュータにインストールされるJDKの場所を指定します。強調表示されたテキストをJDKのフルパスに変更します。

<property name="JAVA_HOME" value="C:\\Java\\jdk-9"/>

6. コマンド行プロンプトで、ディレクトリをC:\memexampleに変更します。この例をコンパイル、ビルドおよびデプロイするには、次のコマンドを実行します。

ant

7. メモリー・テスト・アプリケーションを実行するには、C:\memexample\bundles\bundles/JavaFXMemoryTestAppに格納されているアプリケーションの1つを実行します。

メモリー割当てプールの初期サイズおよび最大サイズに加えて、この例では、使用しているJVM引数を表示します。

-Djava.library.path=C:\memexample\bundles\JavaFXMemoryTestApp\app\
-Dapp.preferences.id=MemoryTestAppID
-Xms2048m
-Xmx2048m

Antビルド・スクリプトは、<fx:jvmuserarg>要素を使用して、メモリー割当てプールの初期サイズと最大サイズをそれぞれ31mと64mに指定します。ただし、この例のAntスクリプトは、アプリケーションの実行前に、Preferencesノードに2048mと2048mの優先的な値を格納する別のプログラムを実行するため、それらの値がかわりに使用されます。

例3-5 MemoryExamplePreferences.java

import java.util.prefs.Preferences;

public class MemoryTestPreferences {
private Preferences prefs;

public void setPreferences() {

// This will define a node in which the preferences can be stored
prefs = Preferences.userRoot().node(System.getProperty("app.preferences.id")).node("JVMUserOptions");

// now set the values
prefs.put("-Xmx", "2048m");
prefs.put("-Xms", "2048m");

}

public static void main(String[] args) {
MemoryTestPreferences myPrefs = new MemoryTestPreferences();
myPrefs.setPreferences();
}
}

例3-6 MemoryExample.java

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.stage.Stage;

import java.lang.management.ManagementFactory;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;

public class MemoryTest extends Application {

@Override
public void start(Stage primaryStage) {
String startMemory = Long.toString(Runtime.getRuntime().totalMemory());
String maxMemory = Long.toString(Runtime.getRuntime().maxMemory());

System.out.println("Start memory: " + startMemory);

System.out.println("Max memory: " + maxMemory);

final Label startMemoryLabel = new Label("Start memory: ");
TextField startMemoryTextField = new TextField(startMemory);
startMemoryTextField.setPromptText(startMemory);

Label maxMemoryLabel = new Label("Max memory: ");
final TextField maxMemoryTextField = new TextField(maxMemory);
maxMemoryTextField.setPromptText(maxMemory);

Label jvmArgumentsLabel = new Label("JVM Arguments");
ListView<String> jvmArguments = new ListView<>(FXCollections.observableArrayList(ManagementFactory.getRuntimeMXBean().getInputArguments()));
jvmArguments.setPrefSize(450, 150);

Button btn = new Button();
btn.setText("Update Preferences");
btn.setOnAction(event -> {
Preferences prefs = Preferences.userRoot().node(System.getProperty("app.preferences.id")).node("JVMUserOptions");
String start = startMemoryTextField.getText();
if (start == null || start.isEmpty()) {
prefs.remove("-Xms");
} else {
prefs.put("-Xms", start);
}

String max = maxMemoryTextField.getText();
if (max == null || max.isEmpty()) {
prefs.remove("-Xmx");
} else {
prefs.put("-Xmx", max);
}

try {
prefs.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
});

GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
grid.getColumnConstraints().setAll(
new ColumnConstraints(Region.USE_PREF_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_PREF_SIZE, Priority.NEVER, HPos.RIGHT, false),
new ColumnConstraints(Region.USE_PREF_SIZE, Region.USE_COMPUTED_SIZE, Integer.MAX_VALUE, Priority.ALWAYS, HPos.LEFT, true)
);

grid.addRow(0, startMemoryLabel, startMemoryTextField);
grid.addRow(1, maxMemoryLabel, maxMemoryTextField);
grid.addRow(2, jvmArgumentsLabel, jvmArguments);
grid.add(btn, 1, 3);
grid.setMinSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);

Scene scene = new Scene(grid);

primaryStage.setTitle("Memory test");
primaryStage.sizeToScene();
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}

例3-7 メモリー・テスト用のAntスクリプトの例

<?xml version="1.0" encoding="UTF-8" ?>

<project name="JavaFX Hello World Example" default="default" basedir="."
xmlns:fx="javafx:com.sun.javafx.tools.ant">

<property environment="env"/>
<property name="env.JAVA_HOME" value="C:\\Java\\jdk-9"/>
<property name="build.src.dir" value="src"/>
<property name="build.classes.dir" value="classes"/>
<property name="build.dist.dir" value="dist"/>

<target name="default" depends="clean,compile">

<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${env.JAVA_HOME}/lib/ant-javafx.jar"/>

<fx:application id="MemoryTestAppID"
name="JavaFXMemoryTestApp"
mainClass="MemoryTest"/>

<fx:resources id="appRes">
<fx:fileset dir="${build.dist.dir}" includes="MemoryTest.jar"/>
</fx:resources>

<fx:jar destfile="${build.dist.dir}/MemoryTest.jar">
<fx:application refid="MemoryTestAppID"/>
<fx:resources refid="appRes"/>
<fileset dir="${build.classes.dir}"/>
</fx:jar>

<fx:deploy width="300" height="250"
outdir="." embedJNLP="true"
outfile="memorytest"
nativeBundles="image">

<fx:platform>
<fx:jvmuserarg name="-Xms" value="31m"/>
<fx:jvmuserarg name="-Xmx" value="64m"/>
</fx:platform>

<fx:application refId="MemoryTestAppID"/>

<fx:resources refid="appRes"/>

<fx:info title="JavaFX Hello World Application"
vendor="Oracle Corporation"/>

</fx:deploy>

</target>

<target name="clean">
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${build.dist.dir}"/>

<delete>
<fileset dir="${build.classes.dir}" includes="**/*"/>
<fileset dir="${build.dist.dir}" includes="**/*"/>
</delete>

</target>

<target name="compile" depends="clean">

<javac includeantruntime="false"
srcdir="${build.src.dir}"
destdir="${build.classes.dir}"
fork="yes"
executable="${env.JAVA_HOME}/bin/javac"
source="9"
debug="on">
</javac>

<!-- Set preferences -->

<java fork="true" jvm="${env.JAVA_HOME}\bin\java"
classname="MemoryTestPreferences" classpath="${build.classes.dir}">
<sysproperty key="app.preferences.id" value="MemoryTestAppID"/>
</java>
</target>

<target name="jar" depends="compile">
<jar destfile="dist/MemoryTest.jar"
basedir="classes"/>
</target>

</project>

UserJvmOptionsService APIは、自己完結型アプリケーションにJVMオプションを設定するための代替方法を提供します。このAPIをアプリケーションから呼び出して、現在の設定を取得し、次回のアプリケーション起動時に設定を更新できます。

JavaFX Antタスク・リファレンス

次のアイテムは、主なJavaFX Antタスクを構成します。

- <fx:csstobin>
高速に処理するためにCSSファイルをバイナリ形式に変換します。

- <fx:deploy>
再配布用のアプリケーション・パッケージを構築します。デフォルトでは、デプロイ・タスクでベース・アプリケーション・パッケージが生成されますが、要求された場合は自己完結型アプリケーション・パッケージも生成できます。

- <fx:jar>
1つ以上のアプリケーションJARファイルを作成します。

- <fx:signjar>
アプリケーションにデジタル署名を提供します。

注意:
Javaパッケージャ・ツールの<fx:signjar>タスクは、将来のリリースでの削除に備えてJDK 9で非推奨です。また、これは、マルチリリースJARファイルでも動作しません。かわりに標準的なAnt signjarタスクを使用してください。

アイテムはアルファベット順です。

<fx:csstobin>

説明

CSSファイルのセットをバイナリ形式(BSS)に変換します。

親要素

なし。

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

outdir

出力ファイルが生成されるディレクトリの名前。

String

はい

ネストした要素として受け入れるパラメータ

- <fx:fileset>

<fx:csstobin>タスクの使用例

例1   CSSファイルのバイナリへの変換

この例では、出力ツリー内のすべてのCSSファイルをバイナリ形式に変換します。

<fx:csstobin outdir="build/classes">
<fileset dir="build/classes" includes="**/*.css"/>
</fx:csstobin>

<fx:deploy>

説明

Webデプロイメントおよびスタンドアロンのアプリケーションの両方のパッケージを生成します。パッケージには、一連のJARファイル、1つのJNLPファイルおよび1つのHTMLファイルが含まれています。

親要素

なし。

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

embeddedHeight

存在する場合、この値は、幅/高さではなく、Javascript/HMTLコードに使用されます。埋込みデプロイメント・モードにのみ影響します。

埋込みアプリケーションの相対ディメンションを指定する場合に使用します。

String

いいえ

embeddedWidth

embeddedHeightの説明と同じです。

String

いいえ

embedjnlp

trueの場合、JNLP記述子をWebページに埋め込みます。起動時に作成されるネットワーク接続数を削減し、起動時間の改善に役立てます。

Boolean

いいえ

デフォルトはfalseです。

extension

srcfilesで指定されたファイルを拡張子として扱います。存在する場合、デプロイメント記述子の一部のみが生成され、HTMLファイルは生成されません。

Boolean

いいえ

デフォルトはfalseです。

height

アプリケーションをWebページに埋め込むための、アプリケーション・シーンの高さ。

String

はい

includeDT

trueに設定した場合、配備ツールキットに関連するファイルは、outdirで指定されたディレクトリのweb-filesサブディレクトリにコピーされます。この設定は、オフライン開発には役立ちますが、本番用にはお薦めしません。

Boolean

いいえ

デフォルトはfalseです。

nativeBundles

値:

- all

- deb

- dmg

- exe

- image

- installer

- jnlp

- mac.appStore

- msi

- none

- pkg

- rpm

値allは、Antタスクが実行されるプラットフォームで適用可能なすべての自己完結型アプリケーション・パッケージを生成します。値installerは、インストール可能なパッケージのみを生成します。ディスク・イメージは生成しません。値jnlpは、Java Web Startアプリケーションの.jnlpおよび.htmlファイルのみを生成します。値noneは、自己完結型アプリケーション・パッケージを生成しません。その他の値は、特定のパッケージ・インストーラを生成します。

String

いいえ

デフォルトはnoneです。

offlineAllowed

値がtrueの場合、クライアント・システムがネットワークから切断されても、キャッシュされたアプリケーションが稼働できます。

Boolean

デフォルトはtrueです。

outdir

出力ファイルが生成されるディレクトリの名前。

String

はい

outfile

出力ファイルの接頭辞(拡張子なし)。

String

はい

placeholderref

アプリケーションが埋め込まれるWebページのプレースホルダ。これはJavaScript DOMオブジェクトである必要があります。

String

はい

プレースホルダの参照またはIDのいずれかが必要です。

placeholderid

コールバックで使用されます。アプリケーションが埋め込まれるWebページのプレースホルダのID。これを解決するには、JavaScript関数document.getElementById()が使用されます。

String

はい

プレースホルダの参照またはIDのいずれかが必要です。

signBundle

バンドラが生成されたバンドルに署名するよう要求するために、自己完結型アプリケーションで使用します。この属性は、署名をサポートしないバンドラでは無視されます。JDKの8u40リリース時には、macOSバンドラのみ署名をサポートしています。

Boolean

デフォルト値は、使用しているバンドラによって異なります。

updatemode

埋込みおよびWeb Startアプリケーションでアプリケーション更新の確認が実行される時期についての設定を示します。

alwaysの値は、アプリケーションを起動する前に常に更新の確認を行うことを意味します。

backgroundの値は、バックグラウンドでの更新の確認中にアプリケーションを起動することを意味します。

String

いいえ

デフォルトはbackgroundです。

width

アプリケーションをWebページに埋め込むための、アプリケーション・シーンの幅。

String

はい

ネストした要素として受け入れるパラメータ

- <fx:platform>

- <fx:preferences>

- <fx:application>

- <fx:permissions>

- <fx:template>

- <fx:callbacks>

- <fx:info>

- <fx:resources>

- <fx:bundleArgument>

- <fx:secondaryLauncher>

- <fx:runtime>

<fx:deploy>タスクの使用例

例1   最小限の<fx:deploy>タスク

これは、<fx:deploy> Antタスクの単純な例です。HTMLファイルおよびJNLPファイルをweb-distディレクトリに生成し、生成されたファイルの接頭辞としてFishを使用します。

<fx:deploy width="600" height="400"
outdir="web-dist" outfile="Fish"
offlineAllowed="false">
<fx:info title="Sample application"/>
<fx:application refid="myapp"/>
<fx:resources refid="myresources"/>
</fx:deploy>

例2   プリローダーを使用したアプリケーションの<fx:deploy>タスク

次のAntタスクは、プリローダーを使用した単純なアプリケーションの配布可能なパッケージを作成します。アプリケーションおよびそのリソースの詳細は、タスクの<fx:application>および<resource>要素で定義されます。

出力パッケージの場所は、<fx:deploy>タスクのoutdir属性によって定義されます。新しいファイルは、outfile属性で指定されたname接頭辞を使用して生成されます。このタスクの実行の結果として、次のファイルがweb-distフォルダに作成されます。

- preloader.jar

- helloworld.jar

- App.jnlp

- App.html

注意:

デフォルトでは、デプロイメント・パッケージは、java.comから補助ファイルを使用して、Webデプロイメントをサポートします。これにより、アプリケーションがWebでデプロイする最適な方法を常に使用できるようになるため、これは優先的な方法です。ただし、閉じているネットワークでアプリケーションをテストする場合、これらのファイルをアプリケーション・パッケージに含めることができます。これを行うには、includeDT="true"を、<fx:deploy> Antタスクの属性として渡します。

<fx:deploy width="600" height="400"
outdir="web-dist" outfile="App">
<fx:info title="Sample application"/>
<fx:application name="SampleApp"
mainClass="testapp.MainApp"
preloaderClass="testpreloader.Preloader">
<fx:param name="testVariable" value="10"/>
</fx:application>
<fx:resources>
<fx:fileset requiredFor="preloader" dir="dist">
<include name="preloader.jar"/>
</fx:fileset>
<fx:fileset dir="dist">
<include name="helloworld.jar"/>
</fx:fileset>
</fx:resources>
</fx:deploy>

例3   セカンダリ・ランチャでの<fx:deploy>タスク

この例では、メモリー制約のある環境でアプリケーションを起動するために使用できるセカンダリ・ランチャを含む、自己完結型アプリケーションのパッケージを作成します。　メイン・ランチャではJVMオプションは設定されません。セカンダリ・ランチャはオプションを渡して、使用されるメモリー量を制限します。

<fx:deploy outdir="../samples/test/ant" nativeBundles="image">
<fx:application name="Secondary Launcher Sample"
mainClass="hello.Test"/>

<fx:resources>
<fx:fileset dir="../samples/test/resources" includes="mainApp.jar"/>
</fx:resources>

<fx:info title="Secondary Launcher Test"/>

<fx:secondaryLauncher
mainClass="hello.Test"
name="Standard Launch"/>

<fx:secondaryLauncher name="Memory Constrained">
<fx:jvmarg="-xmx64m"/>
</fx:secondaryLauncher>
</fx:deploy>

例4   カスタム・ランタイムを含むモジュラ・アプリケーションの<fx:deploy>タスク

<fx:deploy outdir="${bundles.dir}"
outfile="MinesweeperFX"
nativeBundles="all"
verbose="true"

<fx:runtime strip-native-commands="false">
<fx:add-modules value="java.base"/>
<fx:add-modules value="jdk.packager.services,javafx.controls"/>
<fx:limit-modules value="java.sql"/>
<fx:limit-modules value="jdk.packager.services,javafx.controls"/>
<fx:module-path value="${java.home}/../images/jmods"/>
<fx:module-path value="${build.dir/modules"/>
</fx:runtime>

<fx:application id="MinesweeperFX"
name="MinesweeperFX"
module="fx.minesweeper"
mainClass="minesweeper.Minesweeper"
version="1.0">
</fx:application>

<fx:secondaryLauncher name="Test2"
module="hello.world"
mainClass="com.greetings.HelloWorld">
</fx:secondaryLauncher>
</fx:deploy>

<fx:jar>

説明

アプリケーションをJARファイルにパッケージ化します。含める一連のファイルは、ネストされた<fx:fileset>パラメータによって定義されます。<fx:jar>タスクは、JARファイルへのJARマニフェストの埋込みも行います。

JARアーカイブの作成に加えて、このタスクは次のことも行います。

- JavaFXランタイムの存在を検出するJavaFXアプリケーション用のJavaFX起動ツールを埋め込み、環境を設定し、アプリケーションを実行します。

- JARファイルでマニフェストを作成します。

生成されるJARファイルは、ダブルクリックによる起動をサポートします。

親要素

なし。

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

codebase

JNLPファイルのhref属性で指定されているすべての相対URLの基本となる場所。

String

いいえ

destfile

出力JARファイルへのパス(場所および名前)。

String

はい

ネストした要素として受け入れるパラメータ

- <fx:platform>

- <fx:fileset>

- <fx:application>

- <fx:info>

- <fx:resources>

- <fx:permissions>

<fx:jar>の使用例

例3-3および次の例を参照してください。

例1   単純なアプリケーションの<fx:jar> Antタスク

この例は、<fx:jar> Antタスクを使用して、カスタム・プリローダーなしに単純なアプリケーションのメイン・アプリケーションJARファイルを作成する方法を示しています。生成されるJARファイルは、次の2つのアクションを実行します。

- java -jar application.jarとして起動時にクラスパスで必要なすべてのリソースを使用して、またはJARファイルをダブルクリックして、test.MyApplicationを起動します。

- JavaFXランタイムの場所を自動的に検出し、使用できない場合はインストールするようユーザーに要求するか、プラットフォームがサポートされていない場合はレポートします。

<!-- Expect definition of JavaFX ant tasks is already imported -->

<fx:jar destfile="dist/application.jar">
<!-- Details about application -->
<fx:application name="Sample JavaFX application"
mainClass="test.MyApplication"/>

<!-- Define what auxilary resources are needed -->
<fx:resources>
<fx:fileset dir="dist" includes="lib/*.jar"/>
</fx:resources>

<!-- What to include into result jar file?
Everything in the build tree -->
<fileset dir="build/classes"/>

<!-- Customize jar manifest (optional) -->
<manifest>
<attribute name="Implementation-Vendor" value="Samples Team"/>
<attribute name="Implementation-Version" value="1.0"/>
</manifest>
</fx:jar>

<fx:signjar>

説明

注意:
Javaパッケージャ・ツールの<fx:signjar>タスクは、将来のリリースでの削除に備えてJDK 9で非推奨です。また、これは、マルチリリースJARファイルでも動作しません。かわりに標準的なAnt signjarタスクを使用してください。

証明書の付いたアプリケーションJARファイルにデジタル署名します。

BLOBとしてJARファイルに署名します。つまり、すべてのエントリに別々に署名するのではなく、JARファイルは単一のバイナリ・オブジェクトとして署名されます。

親要素

なし。

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

alias

キーの別名。

String

はい

destdir

出力ファイルの場所。

String

はい

keypass

秘密鍵のパスワード。

String

はい

keystore

キーストア・ファイル名。

File

はい

jar

署名するJARファイル*。

String

いいえ

この属性またはネストされた<fx:fileset>要素が必要です。

storepass

キーストアの整合性を確認したり、ロックを解除したりするためのパスワード

String

はい

storetype

キーストア・タイプ。

String

いいえ

デフォルトはjksです。

verbose

冗長出力を有効にする。

Boolean

いいえ

デフォルトはfalseです。

*注意:

<fx:signjar jar="path/to/jar/folder/jarname" .../>

は、次を簡単で便利にした構文です。

<fx:signjar ...>
<fileset dir="path/to/jar/folder" file="jarname"/>
</fx:signjar>

ネストした要素として受け入れるパラメータ

- <fx:fileset>

<fx:signjar>の使用例

例1   JARファイルへの署名

次のAntコードのスニペットは、BLOB技術として新しい署名を使用してJARファイルに署名する方法を示しています。

<fx:signjar destdir="dist"
keyStore="sampleKeystore.jks" storePass="****"
alias="javafx" keyPass="****">
<fileset dir='dist/*.jar'/>
</fx:signjar>

JavaFX Antヘルパー・パラメータ・リファレンス

ヘルパー・パラメータは、「JavaFX Antタスク・リファレンス」で説明されているJavaFXタスクによって使用されるタイプです。このリファレンス・ページには次の要素があります。

- <fx:add-modules>

- <fx:application>

- <fx:argument>

- <fx:association>

- <fx:bundleArgument>

- <fx:callback>

- <fx:callbacks>

- <fx:fileset>

- <fx:htmlParam>

- <fx:icon>

- <fx:info>

- <fx:jvmarg>

- <fx:limit-modules>

- <fx:module-path>

- <fx:param>

- <fx:permissions>

- <fx:platform>

- <fx:preferences>

- <fx:property>

- <fx:resources>

- <fx:runtime>

- <fx:secondaryLauncher>

- <fx:splash>

- <fx:template>

アイテムはアルファベット順です。

<fx:add-modules>

説明

自己完結型アプリケーションに対して生成されたランタイムに追加するモジュールのリスト。すべてのモジュールをカンマ区切りリストを使用して単一インスタンスの<fx:add-modules>で追加するか、追加するモジュールごとに1つのインスタンスの<fx:add-modules>を使用できます。

親要素

- <fx:runtime>

パラメータ

要素の属性を、その説明、データ型、および属性が必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

value

ランタイムに含める1つ以上のモジュール。モジュールが複数ある場合はカンマで区切ります。

String

いいえ

ネストした要素として受け入れるパラメータ

なし。

<fx:add-modules>の使用例

例1   jdk.packager.servicesおよびjavafx.controlsのモジュールをランタイムに含める

単一インスタンスの<fx:add-modules>を使用します。

<fx:runtime>
<fx:add-modules value="jdk.packager.services,javafx.controls"/>
</fx:runtime>

モジュールごとに1つのインスタンスの<fx:add-modules>を使用します。

<fx:runtime>
<fx:add-modules value="jdk.packager.services"/>
<fx:add-modules value="javafx.controls"/>
</fx:runtime>

<fx:application>

説明

基本的なアプリケーション記述子。アプリケーションの主なコンポーネントおよびパラメータのデフォルト・セットを定義します。

親要素

- <fx:deploy>

パラメータ

要素の属性を、その説明、データ型、および要素が必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

daemon

アプリケーションがデーモンまたはサービスとしてインストールされているかどうかを示します。

Boolean

いいえ

デフォルト値はfalseです。

id

HTMLでのアプリケーションへのJavaScript参照を取得するために使用できるアプリケーションID。同じIDが、Antタスクのアプリケーション・オブジェクトの参照に使用できます(refidを使用)。

String

いいえ

mainClass

javafx.application.Applicationを拡張する、メイン・アプリケーション・クラスの修飾名。

String

はい

module

モジュラ・アプリケーションのメイン・モジュール。これは、アプリケーションの初期モジュール・グラフを構築する際、デフォルトのルート・モジュールとして使用されます。

String

はい(モジュラ・アプリケーションをバンドルする場合)。アプリケーションがモジュラでない場合は無効です。

name

アプリケーションの短縮名。自己完結型アプリケーションの場合、出力パッケージの名前も定義します。

String

いいえ

デフォルト値はメイン・アプリケーション・クラスから導出されます。

preloaderClass

javafx.application.Preloaderを拡張する、プリローダー・クラスの修飾名。

String

いいえ

デフォルトは、JavaFXランタイムに付属しているプリローダーです。

refid*

--

参照

いいえ

toolkit

特定のUIツールキットを使用するアプリケーションの設定を示します。使用可能な値は次のとおりです。

- fx

- swing

String

いいえ

デフォルト値はfxです。

version

パッケージされているアプリケーションのバージョン。

String

いいえ

デフォルト値は1.0です。

* refidが使用される場合、他のパラメータは指定できません。

ネストした要素として受け入れるパラメータ

- <fx:argument>

- <fx:htmlParam>

- <fx:param>

<fx:application>の使用例

例1   非モジュラ・アプリケーションのアプリケーションの説明

<fx:application id="HelloWorldID"
name="JavaFXHelloWorldApp"
mainClass="HelloWorld"/>

例2   モジュラ・アプリケーションのアプリケーションの説明

<fx:application id="MinesweeperFX"
name="MinesweeperFX"
module="fx.minesweeper"
mainClass="minesweeper.Minesweeper"/>

完全なAntスクリプトの例は、例3-3を参照してください。

<fx:argument>

説明

デプロイメント記述子の<fx:argument>要素に挿入される名前なし引数。Antスクリプトにリストされているのと同じ順序で、複数の引数が引数のリストに追加されます。

親要素

- <fx:application>

パラメータ

なし。

ネストした要素として受け入れるパラメータ

なし。

<fx:argument>の使用例

例1   様々な名前なし引数の受渡し

<fx:application name="Sample app"
mainClass="test.MyApplication">
<!-- unnamed arguments -->
<fx:argument>Something</fx:argument>
<!-- value with spaces that are generated at build time -->
<fx:argument>JRE version: ${java.version}</fx:argument>
<!-- example of value using a special character -->
<fx:argument>true &amp; false</fx:argument>
</fx:application>

<fx:association>

説明

ファイル拡張子またはMIMEタイプを自己完結型アプリケーションに関連付けます。この要素の複数のインスタンスがサポートされています。

親要素

- <fx:info>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

description

アプリケーションに関連付けられているタイルのタイプの説明。説明が提供されていない場合、application-name Fileが使用されます。

String

いいえ

extension

1つ以上のファイル拡張子をアプリケーションに関連付けることができます。aaa bbb cccのように、各値をスペースで区切ります。ワイルドカード記号は使用できません。

String

バンドラによって異なります脚注1

mimetype

アプリケーションに関連付けるファイルのMIMEタイプ。ワイルドカード記号は使用できません。Windowsでは1つの値のみ使用でき、LinuxまたはmacOSにはスペースで区切って複数の値を指定できます。

String

バンドラによって異なります脚注2

icon

このアプリケーションに関連付けられているファイルのアイコンを含むファイルの名前。アイコンの形式はWindowsでは.ico、Linuxでは.png、macOSでは.icnsにする必要があります。ファイル名が指定されていない場合、アプリケーションのアイコンが使用されます。

String

いいえ

脚注1

Windowsでは必須です。macOSではextensionまたはmimetypeを指定する必要があります。

脚注2

Linuxでは必須です。macOSではextensionまたはmimetypeを指定する必要があります。

ネストした要素として受け入れるパラメータ

なし。

<fx:association>の使用例

例1   ファイルと自己完結型アプリケーションの関連付け

この例では、Windows上の自己完結型アプリケーションをファイル拡張子が.aaaまたは.bbbのファイルに関連付けて、説明とアイコンを指定します。

<fx:info title="Association example">
<fx:association extension="aaa bbb" description="MyApp Data Files"
icon="MyApp.ico">
</fx:association>
</fx:info>

<fx:bundleArgument>

説明

自己完結型アプリケーションの作成に使用されるバンドラの引数を指定します。各バンドラ・タイプに、独自の引数セットがあります。

親要素

- <fx:deploy>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

arg

バンドラ引数の名前。

String

はい

value

バンドラ引数の値。

String

はい

自己完結型アプリケーション・バンドラの引数

バンドラの各タイプ(macOS、LinuxおよびWindows)には、独自の引数のセットがあります。

一般的なバンドラ引数

dropinResourcesRoot

バンドラ固有のドロップイン・リソースを検索するディレクトリ。たとえば、macOSの場合、現在のディレクトリでInfo.plistファイルを検索するには、次を使用します。

<fx:bundleArgument arg="dropinResourcesRoot" value="."/>

ファイルが現在のディレクトリで見つかります: package/macosx/Info.plist。

preferencesID

ユーザーがオーバーライドできるJVMオプションを確認するための<fx:preferences>要素のID。

macOSアプリケーション・バンドラ引数

icon

起動ツールおよびその他の支援ツールに使用するデフォルト・アイコンへのパス。ファイル形式は.icnsです。

mac.bundle-id-signing-prefix

プロパティが足りないバイナリがファイル(拡張子.plistを使用するplist)をリストしているか、既存の署名がバンドル内に見つかった場合に、署名付きバイナリに適用される接頭辞。

mac.category

アプリケーションのカテゴリ。カテゴリは、Apple Developer Webサイトにあるカテゴリ・リスト内に含まれている必要があります。

mac.CFBundleIdentifier

CFBundleIdentifierのinfo.plistファイルに格納された値。この値は、グローバルに一意である必要があり、文字、数字、ドットおよびダッシュのみを含む必要があります。DNS順序の反転をお薦めします(例: com.example.application.my-application)。

mac.CFBundleName

Macメニュー・バーに表示されるアプリケーションの名前。16文字未満の名前をお薦めします。デフォルトは、<fx:application>要素のname属性です。

mac.CFBundleVersion

アプリケーションのバージョン番号は内部的に使用されます。値は1つ以上3つ以下の整数である必要があり、1.3や2.0.1のようにピリオド(.)で区切ります。<fx:application>要素のversion属性の値とは別の値を指定できます。version属性に有効な値が指定されていて、mac.CFBundleVersion引数が指定されていない場合、version属性の値が使用されます。どちらも指定されていない場合、100がバージョン番号として使用されます。

mac.signing-key-developer-id-app

開発者IDまたはGatekeeper署名に使用する署名キーの名前。Apple Developer Webサイトから標準のキーをインポートした場合、そのキーがデフォルトで使用されます。キーを識別できない場合、アプリケーションは署名されません。

macOS DMG (ディスク・イメージ)バンドラ引数

licenseFile

バンドラによって表示または記録される使用許諾契約(EULA)の場所。パスはパッケージ化されたアプリケーション・リソースに相対的です。

mac.CFBundleVersion

アプリケーションのバージョン番号は内部的に使用されます。値は1つ以上3つ以下の整数である必要があり、1.3や2.0.1のようにピリオド(.)で区切ります。<fx:application>要素のversion属性の値とは別の値を指定できます。version属性に有効な値が指定されていて、mac.CFBundleVersion引数が指定されていない場合、version属性の値が使用されます。どちらも指定されていない場合、100がバージョン番号として使用されます。

mac.dmg.simple

AppleScriptコードの実行に依存するDMGカスタマイズ手順をスキップするかどうかを示すフラグ。trueに設定して、手順をスキップします。trueに設定されている場合、ディスク・ウィンドウにバックグラウンド・イメージがないため、アイコンが所定の位置に移動しません。systemWide引数もtrueに設定されている場合、ルート・アプリケーション・フォルダのシンボリック・リンクがDMGファイルに追加されます。systemWide引数がfalseに設定されている場合、アプリケーションのみがDMGファイルに追加され、デスクトップのリンクは追加されません。

macOS PKGバンドラ引数

licenseFile

バンドラによって表示または記録される使用許諾契約(EULA)の場所。パスはパッケージ化されたアプリケーション・リソースに相対的です。

mac.CFBundleVersion

アプリケーションのバージョン番号は内部的に使用されます。値は1つ以上3つ以下の整数である必要があり、1.3や2.0.1のようにピリオド(.)で区切ります。<fx:application>要素のversion属性の値とは別の値を指定できます。version属性に有効な値が指定されていて、mac.CFBundleVersion引数が指定されていない場合、version属性の値が使用されます。どちらも指定されていない場合、100がバージョン番号として使用されます。

mac.signing-key-developer-id-installer

開発者IDまたはGatekeeper署名に使用する署名キーの名前。Apple Developer Webサイトから標準のキーをインポートした場合、そのキーがデフォルトで使用されます。キーを識別できない場合、アプリケーションは署名されません。

Mac App Storeバンドラ引数

mac.app-store-entitlements

アプリケーションが動作する資格を含むファイルの場所。ファイルは、Appleによって指定されている形式である必要があります。ファイルへのパスは、絶対的な語で指定することも、Antファイルに相対的に指定することもできます。資格を指定しない場合、アプリケーションは、通常のアプレット・サンドボックスよりもより厳しいサンドボックスで動作し、ネットワーク・ソケットおよびすべてのファイルへのアクセスが拒否されます。

mac.CFBundleVersion

アプリケーションのバージョン番号は内部的に使用されます。値は1つ以上3つ以下の整数である必要があり、1.3や2.0.1のようにピリオド(.)で区切ります。<fx:application>要素のversion属性の値とは別の値を指定できます。version属性に有効な値が指定されていて、mac.CFBundleVersion引数が指定されていない場合、version属性の値が使用されます。どちらも指定されていない場合、100がバージョン番号として使用されます。このバージョンが既存のアプリケーションのアップグレードである場合、値は以前のバージョン番号より大きくする必要があります。

mac.signing-key-app

Mac App Storeのアプリケーション署名キーの名前。Apple Developer Webサイトから標準のキーをインポートした場合、そのキーがデフォルトで使用されます。キーを識別できない場合、アプリケーションは署名されません。

mac.signing-key-pkg

Mac App Storeのインストーラ署名キーの名前。Apple Developer Webサイトから標準のキーをインポートした場合、そのキーがデフォルトで使用されます。キーを識別できない場合、アプリケーションは署名されません。

Linuxバンドラ引数

icon

起動ツールおよびその他の支援ツールに使用するデフォルト・アイコンのパス。ファイル形式は.pngです。

linux.bundleName

作成するRPMまたはDEBパッケージの名前。

Windows EXEおよびMSIバンドラ引数

icon

起動ツールおよびその他の支援ツールに使用するデフォルト・アイコンのパス。ファイル形式は.icoです。

licenseFile

バンドラによって表示または記録される使用許諾契約(EULA)の場所。パスはパッケージ化されたアプリケーション・リソースに相対的です。

win.menuGroup

<fx:preferences>要素のmenu属性がtrueの場合、アプリケーションをインストールするメニュー・グループ。menuがfalseの場合、この引数は無視されます。

<fx:bundleArgument>の使用例

次の例では、生成されたWindowsインストーラ・パッケージ(MSIファイル)がサンプル・アプリケーションという名前のメニュー・グループに「スタート メニュー」のショートカットを作成することを指定します。バンドラが<fx:deploy>要素のnativeBundles属性を持つMSIファイルを作成することを指定する必要があります。

<fx:deploy outdir="." outfile="helloworld" nativeBundles="msi">
<fx:platform basedir="${JAVA_HOME}"/>
<fx:application refId="HelloWorldID"/>
<fx:resources refid="appRes"/>
<fx:info title="Hello World Example" vendor="Oracle Corporation"/>
<fx:bundleArgument arg="win.menuGroup" value="Sample Applications"/>
</fx:deploy>

<fx:callback>

説明

ユーザー操作のカスタマイズに使用できるJavaScriptコールバックを定義します。

親要素

- <fx:callbacks>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

name

コールバックのイベントの名前。

String

はい

refid*

--

参照

いいえ

* refidが使用される場合、他のパラメータは指定できません。

ネストした要素として受け入れるパラメータ

<TEXT>

<fx:callback>の使用例

例1   JavaScript関数をコールするコールバック

この例では、コールバックは、Webページに埋め込まれたアプリケーションのHTMLスプラッシュ画面を作成するために使用されます。イベントonGetSplashがトリガーされると、JavaScript関数customGetSplashが実行されます。

<fx:callbacks>
<fx:callback name="onGetSplash">customGetSplash</fx:callback>
</fx:callbacks>

例2   JavaScriptが挿入されたコールバック

この例では、コールバックは、<fx:callback>要素自体でJavaScriptコードを使用して定義されます。

<fx:callbacks>
<fx:callback name="onLoadHandler">
function () {perfLog(0, "onLoad called");}
</fx:callback>
</fx:callbacks>

例3   複数のコールバック

<fx:callbacks>
<fx:callback name="onJavascriptReady">callAppFunction</fx:callback>
<fx:callback name="onGetSplash">function(id) {}</fx:callback>
</fx:callbacks>

<fx:callbacks>

説明

ユーザー操作のカスタマイズに使用されるJavaScriptコールバックのコレクション。

親要素

- <fx:deploy>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

refid*

--

参照

いいえ

* refidが使用される場合、他のパラメータは指定できません。

ネストした要素として受け入れるパラメータ

- <fx:callback>

<fx:callbacks>の使用例

<fx:callback>の例を参照してください。

<fx:fileset>

説明

標準的なAnt FileSetタイプの拡張子。選択されたファイルのセットに関するオプションのメタ情報を指定するための手段を提供します。これには、次のものが含まれます。

- リソースのタイプ(type属性を参照)

- このリソースが適用可能なオペレーティング・システムおよびアーキテクチャ

- このリソースが必要なタイミング。ロード順序の最適化に役立ちます。

タイプに応じて、囲むタスクによってリソースが使用されない場合があります。

タイプ"jar"のファイルセットは、クラスパスに追加されるJARファイルのセットを含む必要があります。

タイプ"native"のリソースは、ネイティブ・ライブラリのセットを含むJARファイルである必要があります。また、ほとんどの場合、このリソースのオペレーティング・システムおよびアーキテクチャを設定することは意味があります。

タイプ"jnlp"のリソースは、外部のJNLP拡張子を定義するJNLPファイルを含む必要があります。

タイプ"license"のファイルセットは、任意のファイルを含めることができますが、実際に使用するときは追加の制限事項が適用されることがあります(たとえば、Macではプレーン・テキスト・ファイルである必要があり、WindowsではRTFである必要があるなど)。

タイプ"data"のファイルセットは、任意のファイルを含めることができます。

親要素

- <fx:jar>

- <fx:resources>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

arch

(<fx:fileset>が<fx:resources>の下でネストされる場合のみ使用されます。)

これらのリソースに対して適切なアーキテクチャを指定します。

String

いいえ

デフォルトはanyです。

dir

タスクで使用されるファイルを含むルート・ディレクトリを指定します。

String

はい

excludes

タスクから除外されるdirディレクトリのファイルを指定します。複数のファイルと一致するワイルド・カードとしてアスタリスク(*)を使用します(例: *test*)。

String

いいえ

includes

タスクに含まれるdirディレクトリのファイルを指定します。複数のファイルと一致するワイルド・カードとしてアスタリスク(*)を使用します(例: **/*.jar)。

String

いいえ

os

(<fx:fileset>が<fx:resources>の下でネストされる場合のみ使用されます。)

これらのリソースに対して適切なオペレーティング・システムを指定します。

String

いいえ

デフォルトはanyです。

requiredFor

(<fx:fileset>が<fx:resources>の下でネストされる場合のみ使用されます。)

リソースが必要なタイミングを定義します(ロードの優先度に影響します)。サポートされる値は次のとおりです。

- preloader - プリローダーの起動に必要なリソース(最初に実行するもの)。

- startup - アプリケーションの起動に必要なリソース。

- runtime - リソースはアプリケーションの起動には重要ではありませんが、後で必要になる可能性があります。

String

いいえ

デフォルトはstartupです。

type

(<fx:fileset>が<fx:resources>の下でネストされる場合のみ使用されます。)

セット内のリソースのタイプ。サポートされる値は次のとおりです。

- auto (autodetectの場合)

- data

- jar

- jnlp

- license

- native (ネイティブ・ライブラリを含むJARファイルの場合)

- icon

String

いいえ

デフォルトは拡張子に基づいて推測されます。

* refidが使用される場合、他のパラメータは指定できません。

ネストした要素として受け入れるパラメータ

なし(標準的なAnt要素を除く)。

<fx:htmlParam>

説明

HTMLページからの埋込みまたはWeb Startアプリケーションに渡されるパラメータ。パラメータの値は、JavaScriptを使用して実行時に計算できます。

親要素

- <fx:application>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

escape

文字列リテラル(true)またはJavaScript変数(false)として渡される値のために値を解釈する方法を定義します。

Boolean

いいえ

デフォルトはtrueで、これは値が文字列リテラルとして処理されることを意味します。

name

HTMLページからの埋込みまたはWeb Startアプリケーションに渡されるパラメータの名前。

String

はい

value

パラメータの値。値がパラメータとして渡される必要があるJavaScript変数の名前になることもあります。

JavaScript変数の場合、escapeがfalseに設定されていることを確認します。

String

はい

ネストした要素として受け入れるパラメータ

なし

<fx:htmlParam>タスクの使用例

例1   HTMLページから渡される様々なパラメータ

<fx:application name="Sample app"
mainClass="test.MyApplication">
<!-- Parameters passed from HTML page. Only applicable
for embeddeded and Web Start applications and unused when
run in a standalone and self-contained context.  -->
<!-- Parameter with name 'fixedParam', whose value is string
'(new Date()).getTime()' -->
<htmlParam name="fixedParam"
value="(new Date()).getTime()"/>
<!-- Parameter with name 'dynamicParam', whose value will be
the timestamp of the moment when the application is added
to the web page (value will be assigned the result
of execution of JavaScript code) -->
<htmlParam name="dynamicParam" escape="false"
value="(new Date()).getTime()"/>
</fx:application>

<fx:icon>

説明

アイコンを<fx:deploy>タスクに渡します(スプラッシュ画面のイメージ以外)。

この要素で指定されたアイコンは、Web Startおよびデスクトップ・アプリケーションに使用されます。

JavaFX 2.2では、タイプdefaultのアイコンのみが、自己完結型アプリケーションに使用されます。自己完結型アプリケーションのアイコンのカスタマイズ方法の詳細は、ドロップイン・リソースを使用したパッケージのカスタマイズを参照してください。

親要素

- <fx:info>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

depth

イメージの色深度(ピクセル当たりのビット数)。一般的な値は、8、16および24です。

String

いいえ

href

イメージの場所。

自己完結型アプリケーションの場合、サポートされるグラフィック形式は、オペレーティング・システムに応じて異なります。

- macOS: .icns

- Linux: .png

- Windows: .ico

自己完結型アプリケーションの独自のアイコンを指定する場合、属性height、widthおよびdepthの値は使用されません。カスタム・アイコンのサイズおよび色深度がオペレーティング・システムが必要とするものに対応していることを確認します。

Web Startアプリケーションの場合、サポートされるグラフィック形式は、.gif、.jpg、.pngおよび.icoです。

String

はい

height

イメージの高さ(ピクセル)。

String

いいえ

kind

アイコン・タイプ。サポートされる値は次のとおりです。

- default

- disabled

- rollover

- selected

- shortcut

Web Startアプリケーションの場合、この属性は、JNLPファイルのicon要素のkind属性に対応します。

デスクトップ・アプリケーションでは、この属性が指定されていないか、defaultとして設定されている場合、指定されるアイコンは、起動ツール(Windowsでは.exeファイル、macOSでは.appファイル)のアイコン、タスクバーまたはドック内のアイコン、および一部のインスタンスではインストーラ・パッケージ(DMGパッケージなど)のアイコンです。

String

いいえ

デフォルト値はdefaultです。

width

イメージの幅(ピクセル)。

String

いいえ

ネストした要素として受け入れるパラメータ

なし。

<fx:icon>の使用例

例1   <fx:icon>の使用

<fx:info title="Sample application">
<!-- icon to be used by default for anything but splash -->
<fx:icon href="shortcut.ico" kind="shortcut"
width="32" height="32" depth="8"/>
</fx:info>

<fx:info>

説明

ユーザーへのアプリケーションの説明。これらの詳細は、システムのダイアログ・ボックスに表示されます(表示する必要がある場合)。

親要素

- <fx:deploy>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

category

アプリケーション・カテゴリ。指定されたカテゴリのアプリケーションへのリンクを作成します。値のセマンティックスは、パッケージの形式に応じて異なります。

次に例を示します。

- Linuxでの自己完結型アプリケーションの場合、アプリケーションがリストされるアプリケーション・メニュー・カテゴリを定義するために使用されます。

- Mac: info.plistにキーが作成されます。

<key>LSApplicationCategoryType</key>
<string>unknown</string>

- Windowsでは、グループを作成します。たとえば、"My Music"を指定した場合、アプリケーションはC:\ProgramData\Microsoft\Windows\Start Menu\Programs\My Musicに作成されます。

String

いいえ

copyright

短いコピーライト文。

String

いいえ

description

アプリケーションを説明する短い文。

String

いいえ

license

ライセンス・タイプ(たとえばGPL)。JavaFX 2.2以降、この属性はLinuxバンドルでのみ使用されます。

String

いいえ

title

アプリケーションのタイトル。

String

はい

vendor

アプリケーションのプロバイダ。

String

はい

ネストした要素として受け入れるパラメータ

- <fx:icon>

- <fx:splash>

<fx:info>の使用例

例1   <fx:deploy>タスクで使用される<fx:info>パラメータ

<fx:info vendor="Uncle Joe" description="Test program"/>

<fx:jvmarg>

説明

アプリケーションを実行するJVMで設定されるJVM引数。複数回使用できます。値に空白文字が含まれる場合、さらに値をエスケープする必要はありません。

親要素

- <fx:platform>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

value

JVM引数の値。

String

はい

ネストした要素として受け入れるパラメータ

なし。

<fx:jvmarg>の使用例

例2「JVMオプションを指定する<fx:platform>パラメータ」を参照してください。

<fx:jvmuserarg>

説明

アプリケーションを実行するJVMで設定される、ユーザーがオーバーライド可能なJVM引数。複数回使用できます。値に空白文字が含まれる場合、さらに値をエスケープする必要はありません。

親要素

- <fx:platform>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

value

JVM引数の値。

String

はい

ネストした要素として受け入れるパラメータ

なし。

<fx:jvmuserarg>の使用例

例2「JVMオプションを指定する<fx:platform>パラメータ」を参照してください。

<fx:limit-modules>

説明

参照可能なモジュールのセットを、指定されたリストの推移閉包のモジュールおよびメイン・モジュール(存在する場合)、さらに、<fx:add-modules>要素で指定されたその他のモジュールに制限します。

親要素

- <fx:runtime>

パラメータ

要素の属性を、その説明、データ型、および属性が必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

value

参照可能なモジュールの領域を制限するために使用するモジュールのカンマ区切りのリスト。

String

いいえ

ネストした要素として受け入れるパラメータ

なし。

<fx:limit-modules>の使用例

例1   参照可能なモジュールをjdk.packager.servicesおよびjavafx.controlsに制限

<fx:limit-modules value="jdk.packager.services,javafx.controls"/>

<fx:module-path>

説明

生成されたランタイムに含めるアプリケーション・モジュールへのパス。

親要素

- <fx:runtime>

パラメータ

要素の属性を、その説明、データ型、および属性が必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

value

モジュールの場所のリスト。LinuxおよびmacOSの場合、コロン(:)を使用してパスを区切ります。Windowsではセミコロン(;)を使用します。

String

いいえ

ネストした要素として受け入れるパラメータ

なし。

<fx:module-path>の使用例

例1   Linuxで、${java.home}/../images/jmodsおよび${build.dir}/modulesのアプリケーション・モジュールを検出

<fx:runtime>
<fx:module-path value="${java.home}/../images/jmods:${build.dir}/modules"/>
</fx:runtime>

<fx:param>

説明

アプリケーションに渡されるパラメータ(アプリケーション・パッケージに埋込み)。

このタグは、自己完結型アプリケーションを含むスタンドアロン・アプリケーションには影響しません。

親要素

- <fx:application>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

name

パラメータの名前。

String

はい

value

パラメータの値。

String

はい

ネストした要素として受け入れるパラメータ

なし。

<fx:param>タスクの使用例

例1   様々なパラメータのタイプの受渡し

<fx:application name="Sample app"
mainClass="test.MyApplication">
<!-- parameter with name 'simpleParam' and fixed string value-->
<param name="simpleParam" value="something"/>
<!-- parameter with name 'complexParam' with value generated
at build time -->
<param name="complexParam" value="Compiled by ${java.version}"/>
<!-- parameter with name 'novalueParam' and no value -->
<param name="novalueParam"/>
</fx:application>

<fx:permissions>

説明

アプリケーションで必要なセキュリティ権限の定義。デフォルトでは、アプリケーションはサンドボックスで実行されます。高い権限を要求するには、アプリケーションJARファイルへの署名が必要です。

このオプションは、自己完結型アプリケーションを含むスタンドアロン・アプリケーションには影響しません。

親要素

- <fx:deploy>

- <fx:jar>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

elevated

falseに設定した場合、アプリケーションはサンドボックスで実行されます。

Boolean

いいえ

デフォルトはfalseです。

ネストした要素として受け入れるパラメータ

なし。

<fx:permissions>の使用例

例1   高い権限でのアプリケーションの実行

<fx:permissions elevated="true"/>

<fx:platform>

説明

アプリケーションのプラットフォーム要件を定義します。

親要素

- <fx:deploy>

- <fx:jar>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

refid*

--

参照

いいえ

j2se

アプリケーションで必要なJREの最小バージョン。

String

いいえ

デフォルトは、JavaFXをサポートしている任意のJREです。

* refidが使用される場合、他のパラメータは指定できません。

ネストした要素として受け入れるパラメータ

- <fx:jvmarg>

- <fx:property>

<fx:platform>の使用例

例1   バージョンを指定する<fx:platform>パラメータ

この例では、アプリケーションにJREバージョン9.0以降が必要です。

<fx:platform j2se="9.0"/>

例2   JVMオプションを指定する<fx:platform>パラメータ

この例では、アプリケーションは、JREバージョン9.0以降が必要で、"-Xmx400 -verbose:jni -Dpurpose="sample value"を使用して起動されたJVMで実行する必要があります。

<fx:platform j2se="9.0">
<fx:jvmarg value="-Xmx400m"/>
<fx:jvmarg value="-verbose:jni"/>
<property name="purpose" value="sample value"/>
</fx:platform>

例3   ユーザーがオーバーライド可能なJVMオプションを指定する<fx:platform>パラメータ

この例では、ヒープ・サイズのデフォルト値として-Xmx768mが渡されます。ユーザーは、ユーザー構成ファイルでこの値をオーバーライドできます。

<fx:platform>
<fx:jvmuserarg name="-Xmx" value="768m" />
</fx:platform>

<fx:preferences>

説明

アプリケーションのデプロイメント・プリファレンス。プリファレンスを表すことはできますが、たとえば次の場合のように、必ずしも満たされているわけではありません。

- あるプリファレンスが特定の実行モードでサポートされていない場合、パッケージャはそれを無視することがあります。

- あるプリファレンスがサポートされていない場合、JREはそれを無視することがあります。

- たとえば、ユーザーがデスクトップ・ショートカットを作成できるかどうかを求められた場合、要求を拒否することがあります。

親要素

- <fx:deploy>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

install

Installのtrueは、アプリケーションがシステムにインストールされることを意味し、falseは、アプリケーションが現在のユーザーのみにインストールされることを意味します。

自己完結型アプリケーションの場合、trueは、アプリケーション・パッケージがシステム全体のインストールを実行する必要がある開発者プリファレンスを示します。falseの場合、パッケージはユーザーごとのインストール用に生成されます。

パッケージャが要求されたパッケージ形式に対して異なるタイプのインストール・パッケージをサポートしていない場合、この値は無視されます。

Boolean

いいえ

Web Startおよび埋込みアプリケーションの場合、デフォルトはfalseです。

自己完結型アプリケーションの場合、デフォルト値は様々なパッケージ形式によって異なります。

installdirChooser

trueの場合、アプリケーションをインストールするディレクトリを選択するためのダイアログがユーザーに表示されます。falseの場合、アプリケーションのインストール場所を決定するためにinstall属性が使用されます。

Boolean

いいえ

デフォルトはfalseです。

menu

trueの場合、アプリケーションは、システムのアプリケーション・メニューへのエントリの追加を要求します。

Boolean

いいえ

デフォルトはfalseです。

refid*

--

参照

いいえ

shortcut

trueの場合、アプリケーションは、デスクトップ・ショートカットの作成を要求します。

Boolean

いいえ

デフォルトはfalseです。

* refidが使用される場合、他のパラメータは指定できません。

ネストした要素として受け入れるパラメータ

なし。

<fx:preferences>の使用例

例1   デスクトップ・ショートカットを追加する<fx:preferences>パラメータ

この例では、デスクトップ・ショートカットを作成する要求を示します。

<fx:preferences id="p1" shortcut="true"/>

例2   インストール済とマークする<fx:preferences>パラメータ

この例では、次の操作を行います。

- アプリケーションをアプリケーション・メニューに追加し、インストール済としてマークする(つまり、アプリケーションが「プログラムの追加と削除」にリストされる)Webデプロイメント記述子の作成を要求します。

- 自己完結型バンドルが作成された場合、システム全体にインストールされ、アプリケーション・エントリをアプリケーション・メニューに作成します。

<fx:preferences shortcut="false" install="true" menu="true"/>

例3   <fx:preferences>パラメータへのrefidの使用

この例では、例1「デスクトップ・ショートカットを追加する<fx:preferences>パラメータ」の<fx:preferences>パラメータへの参照を使用して、ショートカットを作成します。

<fx:resource refid="p1"/>

<fx:property>

説明

オプションの要素で、複数回使用できます。アプリケーションを実行するJVMで設定されるJavaプロパティ。

親要素

- <fx:platform>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

name

設定するプロパティの名前。

String

はい

value

設定するプロパティの値。

String

はい

ネストした要素として受け入れるパラメータ

なし。

<fx:resources>

説明

アプリケーションで使用するリソースのコレクション。一連のJavaFXファイルセット・フィルタとして定義されます。idまたはrefidを使用して再利用できます。

親要素

- <fx:deploy>

- <fx:jar>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

id

refid属性を使用した別の要素から参照できるID。

String

いいえ

refid*

--

参照

いいえ

* refidが使用される場合、他のパラメータは指定できません。

ネストした要素として受け入れるパラメータ

- <fx:fileset>

<fx:resources>の使用例

例1   idおよびrefid属性とともに使用される<fx:resources>パラメータ

この例では、両方の<fx:resources>要素がコレクションを定義し、distディレクトリのs.jarで構成されます。最初の<fx:resources>要素はid属性を使用し、2番目の<fx:resources>要素はrefid属性を使用して最初の要素を参照します。

<fx:resources id="aaa">
<fx:fileset dir="dist" includes="s.jar"/>
</fx:resources>
<fx:resources refid="aaa"/>

例2   拡張記述子の<fx:resources>の使用

署名および無署名のJARファイルを混在させる場合、この例に示すように、追加の<fx:deploy> Antタスクを使用して、各JARファイルに拡張記述子を生成し、メイン・ファイルのリソースとして処理することによって拡張記述子を参照します。

<!-- Prepare extension -->
<fx:deploy extension="true"
outdir="dist" outfile="other">
...
<fx:deploy>

<!-- Use it in the main descriptor -->
<fx:deploy outdir="web-dist" ...>
...
<fx:resources>
<fx:fileset dir="dist" includes="other.jnlp"/>
...
</fx:resources>
<fx:deploy>

追加の例は自己完結型アプリケーションのパッケージ化にあります。

<fx:runtime>

説明

自己完結型アプリケーション用に生成されるランタイム。jlinkツールを使用して、アプリケーションの実行に必要なパッケージのみを含むランタイムが生成され、オプションでjava.exeなどのコマンド行ツールを含めることができます。

JDK 9のJavaパッケージャは、JDK 9ランタイム・イメージを生成します。JDK 8またはJDK 7 JREをアプリケーションとパッケージ化するには、JDK 8 Javaパッケージャを使用します。

親要素

- <fx:deploy>

パラメータ

要素の属性を、その説明、データ型、および属性が必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

strip-native-commands

trueに設定した場合、java.exeなどのコマンド行ツールは、生成されたランタイムから削除されます。falseに設定した場合、コマンド行ツールは、生成されたランタイムに含まれます。

Boolean

いいえ

デフォルトはtrueです。

ネストした要素として受け入れるパラメータ

- <fx:add-modules>

- <fx:limit-modules>

- <fx:module-path>

<fx:runtime>の使用例

例1   コマンド行ツールを含むランタイムの生成

<fx:runtime strip-native-commands="false"/>

例2   jdk.packager.servicesおよびjavafx.controlsのモジュールをランタイムに含める

<fx:runtime>
<fx:add-modules value="jdk.packager.services,javafx.controls"/>
</fx:runtime>

例3   jdk.packager.servicesのモジュールを含めて、アプリケーション・モジュールの場所を指定

<fx:runtime>
<fx:add-modules value="jdk.packager.services"/>
<fx:module-path value="${java.home}/../images/jmods"/>
<fx:module-path value="${build.dir}/modules"/>
</fx:runtime>

<fx:secondaryLauncher>

説明

自己完結型アプリケーションのセカンダリ・エントリ・ポイントおよびモジュラ・アプリケーションのメイン・モジュールを識別します。スタンドアロン・アプリケーション、Webページに埋め込まれたアプリケーション、ブラウザから起動されたアプリケーションでは、このパラメータは無視されます。

このパラメータは、WindowsおよびLinuxアプリケーションに対してのみ有効です。

親要素

- <fx:deploy>

パラメータ

属性

説明

タイプ

必須

appDescription

アプリケーションの簡潔な説明。

String

いいえ

icon

アプリケーションのアイコン・ファイルのパス。

String

いいえ

mainClass

メイン・アプリケーション・クラスの修飾名。

String

いいえ

menu

アプリケーションが「スタート」メニューに追加されているかどうかを示すフラグ。

menu属性またはshortcut属性のどちらかをtrueに設定する必要があります。どちらの属性もfalseに設定されている場合、アプリケーションが「スタート」メニューに追加されます。

Boolean

いいえ

デフォルトはtrueです。

module

モジュラ・アプリケーションのメイン・モジュール。これは、アプリケーションの初期モジュール・グラフを構築する際、デフォルトのルート・モジュールとして使用されます。

String

はい(モジュラ・アプリケーションをバンドルする場合)。アプリケーションがモジュラでない場合は無効です。

name

アプリケーションの起動に使用するランチャの名前。

String

はい

shortcut

アプリケーションのショートカットがデスクトップに追加されているかどうかを示すフラグ。

menu属性またはshortcut属性のどちらかをtrueに設定する必要があります。どちらの属性もfalseに設定されている場合、アプリケーションが「スタート」メニューに追加されます。

Boolean

いいえ

デフォルトはfalseです。

title

アプリケーションのタイトル。

String

いいえ

vendor

アプリケーションを提供したベンダーの名前。

String

いいえ

version

アプリケーションのバージョン。

String

いいえ

ネストした要素として受け入れるパラメータ

- <fx:argument>

- <fx:bundleArgument>。<fx:secondaryLauncher>とともに使用する場合、icon引数のみが有効です

- <fx:jvmarg>

- <fx:jvmuserarg>

- <fx:property>

<fx:secondaryLauncher>の使用例

例1   セカンダリ・ランチャを使用した、非モジュラ・アプリケーションのタスクのデプロイ

例3「セカンダリ・ランチャでの<fx:deploy>タスク」を参照してください。

例2   モジュラ・アプリケーションのセカンダリ・ランチャ

<fx:secondaryLauncher name="HelloWorldModular"
module="hello.world"
mainClass="com.sample.app.HelloWorld">
</fx:secondaryLauncher>

<fx:splash>

説明

スプラッシュ画面として使用されるイメージの場所を渡します。現在、カスタムのスプラッシュ・イメージはWeb Startアプリケーションにのみ渡すことができ、このパラメータの使用は、スタンドアロン・アプリケーションやWebページに埋め込まれたアプリケーションには影響しません。

親要素

- <fx:info>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

href

イメージの場所。サポートされるグラフィック形式は、JPEG、GIFおよびPNGです。

String

はい

mode

デプロイメント・モード。サポートされる値は次のとおりです。

- any (しかし、現在はWeb Startモードでのみ機能します)

- webstart

String

いいえ

デフォルト値はanyです。

ネストした要素として受け入れるパラメータ

なし。

<fx:splash>の使用例

例1   <fx:splash>の使用

次の例では、様々なタイプのスプラッシュ・イメージが渡されます。

<fx:info title="Sample application">
<fx:splash href="http://my.site/custom.gif"/>
</fx:info>

<fx:template>

説明

前処理を行うテンプレート。テンプレートは、Webデプロイメントに必要なJavaScriptまたはHTMLスニペットに置き換えられるマーカーを含むHTMLファイルです。テンプレートの使用によって、アプリケーションを独自のWebページに直接デプロイできます。特にアプリケーションがページに密接に統合されている場合(たとえばWebページがアプリケーションへの通信にJavaScriptを使用する場合など)は、これにより開発プロセスが簡略化されます。

テンプレート・マーカーには、次のいずれかの形式があります。

- #XXX#

- #XXX(id)#

idはアプリケーションの識別子で、XXXは次のいずれかです。

- DT.SCRIPT.URL
配備ツールキット内のdtjava.jsの場所。デフォルトの場所は次のとおりです

https://java.com/js/dtjava.js。

- DT.SCRIPT.CODE
配備ツールキットのdtjava.jsを組み込むスクリプト要素。

- DT.EMBED.CODE.DYNAMIC
アプリケーションを特定のプレースホルダに埋め込むコード。コードをfunction()メソッド内にラップすることが期待されます。

- DT.EMBED.CODE.ONLOAD
onloadフックを使用してアプリケーションをWebページに埋め込むために必要なすべてのコード(dtjava.jsの組込みを除く)。

- DT.LAUNCH.CODE
アプリケーションを起動するために必要なコード。コードをfunction()メソッド内にラップすることが期待されます。

異なるアプリケーションを含むページを複数回処理できます(アプリケーション当たり1回)。混乱を避けるために、マーカーは、英数字の文字列で空白なしのアプリケーションIDを使用する必要があります。

入力ファイルと出力ファイルが同じ場合、テンプレートは適切な場所で処理されます。

親要素

- <fx:deploy>

パラメータ

要素の属性を、その説明、データ型、および必須かどうかの情報とともにリストします。" title="" width="100%">

属性

説明

タイプ

必須?

file

入力テンプレート・ファイル。

File

はい

tofile

出力ファイル(前処理後)。

File

いいえ

デフォルトは入力ファイルと同じです。

ネストした要素として受け入れるパラメータ

なし

<fx:template>の使用例

例1   <fx:deploy>タスクで使用される<fx:template>パラメータ

この例では、入力ファイルと出力ファイルの両方が指定される<fx:template>パラメータを示します。

<fx:template file="App_template.html" tofile="App.html"/>

例2   コンテキスト内の<fx:template>パラメータ

<fx:deploy placeholderId="ZZZ"
width="600" height="400"
outdir="dist-web" outfile="App1">
<fx:application id="myApp" name="Demo"
mainClass="fish.FishApplication"/>
<fx:template file="src/templates/EmbedApp_template.html"
tofile="dist-web/EmbedApp.html"/>
<fx:resources>
<fx:fileset requiredFor="startup" dir="dist" includes="*.jar"/>
</fx:resources>
</fx:deploy>

第III部 Java Web Startテクノロジ

この部のトピックでは、Java Web Startテクノロジについて、およびそのテクノロジを使用してJavaアプリケーションをデプロイする方法について説明します。

- Java Web Startテクノロジの概要

- アプリケーション開発時の考慮点

- JavaアプレットからJava Web StartおよびJNLPへの移行

- JNLPファイルの構文

- JNLP APIの例

4 Java Web Startテクノロジの概要

この章の内容は次のとおりです。

- Java Web Startの概要

- Java Web Startソフトウェアの使い方

- Webサーバーの設定

- Java Web Startプロトコル・ハンドラのインストール

Java Web Startの概要

Java Web Startは、任意のWebブラウザ上でクリックするだけでフル装備のアプリケーションを起動できる機能をユーザーに提供する、アプリケーション・デプロイメントのためのテクノロジです。ユーザーは、複雑なインストール手順に従わなくてもアプリケーションをダウンロードして起動できます。

Java Web Startでは、ユーザーはWebページ上のリンクをクリックしてアプリケーションを起動します。そのアプリケーションがコンピュータに存在しない場合は、Java Web Startにより、必要なすべてのファイルが自動的にダウンロードされます。ダウンロード後は、ファイルがコンピュータ上にキャッシュされるため、デスクトップ上のアイコンかブラウザ上のリンクを使用して、ユーザーは必要なときにいつでもアプリケーションを再起動できるようになります。どの方法でアプリケーションを起動しても、常に最新バージョンのアプリケーションが起動されます。

Java Web Startの基盤となるテクノロジは、Java Network Launching Protocol & API (JNLP)です。このテクノロジは、Java Community Process (JCP)を通じて開発が進められました。Java Web Startは、JNLP仕様のリファレンス実装(RI)です。JNLPテクノロジでは様々な標準が定義されています。アプリケーションの起動方法を記述するファイルの標準ファイル形式であるJNLPファイルもその1つです。JNLPの仕様については、JSR 56: Java Network Launching Protocol and APIを参照してください。

Java Web Startの利点

Java Web Startは、技術面での利点を数多く備えているため、アプリケーションのデプロイ用のプラットフォームとして非常に魅力的です。

それらの利点は次のとおりです。

- Java Web Startは、Java Platform, Standard Edition向けに記述されたアプリケーションのみを起動するように設計されています。したがって、ある単一のアプリケーションを特定のWebサーバー上で利用可能にするだけで、Windows 7+、Linux、macOSなど、様々なプラットフォーム上にそのアプリケーションをデプロイできるようになります。

- Java Web Startは、複数リビジョンのJava Platform, Standard Editionをサポートしています。したがって、各アプリケーションは、Java SE 9など、自身の動作に必要となる特定バージョンのプラットフォームを要求できます。競合を発生させずに、複数のアプリケーションを異なるプラットフォーム・リビジョンで同時に実行できます。

- Java Web Startを使用すると、Webブラウザを使用せずにアプリケーションを起動できます。この方法を使用すると、アプリケーションをオフラインで実行できます。オフライン状態では、ブラウザによるアプリケーションの起動は不便な場合や不可能な場合があります。また、デスクトップのショートカット経由でアプリケーションを起動することも可能です。この方法を使用すると、ネイティブ・アプリケーションと似た操作でWebデプロイされたアプリケーションを起動できます。

- Java Web Startは、Javaプラットフォームのセキュリティ機能を利用します。サンドボックス・アプリケーションは、ローカル・ディスクとネットワーク・リソースへのアクセスが制限された保護環境内で実行されます。アプリケーションの初回起動時には、ユーザーが実行に同意する必要もあります。

- Java Web Startで起動されたアプリケーションは、ローカルにキャッシュされます。したがって、ダウンロード済のアプリケーションは、従来の方法でインストールされたアプリケーションと同様に起動されます。

Java Web Startの入手先

Java Web StartはJava Platform, Standard Edition開発キット(JDK)およびJava Runtime Environment (JRE)に含まれており、Javaプラットフォームのセキュリティ機能が含まれています。

JDKおよびJREは、java.com Webサイトから入手できます。

Java Web Startソフトウェアの使い方

Java Web Startを使えば、JavaテクノロジベースのアプリケーションをWebから直接起動できます。アプリケーションの起動方法には、次の3通りがあります。

- Webブラウザからリンクをクリックすることで起動

- デスクトップのアイコンまたは「スタート」メニューから起動

- Javaキャッシュ・ビューアから起動

どの方法を使用した場合も、アプリケーションが起動されるたびに、Java Web StartはWebサーバーに接続し、アプリケーションの更新版があるかどうかをチェックします。

Webブラウザからの起動

WebブラウザにJNLPアプリケーションへのリンクを含むページを表示し、そのリンクをクリックします。

セキュリティ・ダイアログ・ボックスがポップアップし、アプリケーション・コードにだれがデジタル署名したかに基づいてアプリケーションの提供元に関する情報が表示され、要求されたアクセス・レベルも表示されます。アプリケーションが実行されるのは、そのベンダーをユーザーが信頼すると決めた場合だけです。

以上がJava Web Startの使い方に関するすべてですが、これはどのような仕組みで動作するのでしょうか。アプリケーションを起動するHTMLリンクは、実際のところ、単なる標準のHTMLリンクです。ただし、他のWebページを指すかわりに、JNLPファイルと呼ばれる特殊な設定ファイルを指しています。Webブラウザは、そのファイルのファイル拡張子またはMIMEタイプを検査し、そのファイルがJava Web Start用のものであることを認識します。その後に、ダウンロードされたJNLPファイルを引数としてJava Web Startを起動します。Java Web Startは、JNLPファイルの指示に従って、アプリケーションをダウンロード、キャッシュ、および実行します。

デスクトップのアイコンおよび「スタート」メニューからの起動(Microsoft WindowsおよびGNOME 2.0+を実行するLinuxの場合)

Java Web Startテクノロジでは、デスクトップ上と「スタート」メニュー内に、WebデプロイされたJavaテクノロジ・ベース・アプリケーションのショートカットを自動作成できます。ショートカットの設定の制御には、Javaコントロール・パネルを使用します。ショートカットは、Java Web Startキャッシュ・ビューアの、インストール・ショートカット・メニュー項目を使用して追加することも可能です。

プロキシ・サーバーまたはファイアウォール環境でのJava Web Startソフトウェアの使用

Java Web Startソフトウェアのプロキシ設定が正しくなかった場合、ファイアウォールの外側にあるアプリケーションを起動できません。Java Web Startソフトウェアは、システム上のデフォルト・ブラウザ(Microsoft Windows上ではInternet ExplorerまたはMozillaブラウザ、Solarisオペレーティング環境およびLinux上ではMozillaブラウザ)から、プロキシ設定を自動的に検出しようとします。Java Web Startテクノロジは、Webプロキシ自動設定スクリプトの大部分をサポートしています。ほとんどすべての環境でプロキシ設定を検出できます。

また、Javaコントロール・パネルの「ネットワーク設定」タブを使用して、プロキシ構成を表示または編集することもできます。

Webサーバーの設定

アプリケーションは、任意の標準Webサーバーからデプロイできます。Java Web Startは、HTTPプロトコルやWebサーバーといった既存のインターネット・テクノロジを利用します。このため、Java Web Startを使用してJavaテクノロジベースのアプリケーションをデプロイする際に、HTMLベースのコンテンツをデプロイする既存インフラストラクチャを再利用できます。

アプリケーションをクライアント・マシンにデプロイするために、アプリケーションを構成するすべてのファイルにWebサーバーからアクセスできることを確認します。これは通常、1つ以上のJARファイルと1つのJNLPファイルを、Webサーバーのディレクトリ内にコピーすることを必要とします。WebサイトでのJava Web Startのサポートの有効化は、HTMLベースのコンテンツのデプロイと似ています。さらに、Java Web Startを使用するには、Webサーバーがapplication/x-java-jnlp-file MIMEタイプをサポートするように構成されている必要があります。

手順1   Java Web StartのMIMEタイプを使用するようにWebサーバーを構成します。

多くのWebサーバーは、Java Web StartのMIMEタイプがデフォルトで構成されています。使用するWebサーバーで構成されていない場合は、.jnlpファイル拡張子を持つすべてのファイルがapplication/x-java-jnlp-file MIMEタイプに設定されるように構成します。

大部分のWebブラウザは、Webサーバーからコンテンツとともに送られてくるMIMEタイプに基づいて、各コンテンツの処理方法を判断します。サーバーがJNLPファイルに対してapplication/x-java-jnlp-file MIMEタイプを返さなかった場合、Java Web Startは起動されません。

MIMEタイプを追加する方法は、Webサーバーごとに異なります。たとえば、Apache Webサーバーの場合、.mime.types構成ファイルに次の行を追加します。

application/x-java-jnlp-file JNLP

使用しているWebサーバーの詳細については、付属のマニュアルを参照してください。

手順2   アプリケーションに対するJNLPファイルを作成します。

このファイルを作成する最も簡単な方法は、既存のJNLPファイルを必要に応じて変更することです。次の例に単純なJNLPファイルを示します。

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="9.0+"
codebase="http://example.com/demos/helloworld"
href="HelloWorld.jnlp">
<information>
<title>HelloWorld</title>
<description>HelloWorld demo application</description>
</information>

<resources>
<j2se version="9"/>
<jar href="HelloWorld.jar" size="47013" download="eager" />
</resources>

<application-desc main-class="HelloWorld"/>
</jnlp>

JNLPファイルの構文と形式については、JNLPファイルの構文で説明します。

手順3   Webサーバー上でアプリケーションをアクセスできるようにします。

JNLPファイル内に記載されたURLで、アプリケーションのJARファイルとJNLPファイルにアクセスできることを確認してください。

手順4   アプリケーション起動用Webページを作成します。

Webページを作成し、Java Web Startアプリケーションを起動する次のオプションのいずれかを含めます。

- 次の例に示すように、JNLPファイルへのリンクを使用します。

<a href="/some/path/HelloWorld.jnlp">Launch HelloWorld demo</a>

<a href="https://docs.oracle.com/javase/tutorialJWS/samples/deployment/dynamictree_webstartJWSProject/dynamictree_webstart.jnlp">Launch DynamicTree demo</a>

<a href="http://docs.oracle.com/javase/tutorialJWS/samples/deployment/dynamictree_webstartJWSProject/dynamictree_webstart.jnlp">Launch DynamicTree demo</a>

- 次の例に示すように、JavaScriptを使用します。

<script src="https://www.java.com/js/deployJava.js"></script>
<script>
var url = "https://docs.oracle.com/javase/tutorialJWS/samples/deployment/dynamictree_webstartJWSProject/dynamictree_webstart.jnlp";
deployJava.createWebStartLaunchButton(url, '1.6.0');
</script>

- 次の例に示すように、jnlp:スキーマを使用したリンクを使用します。

<a href="jnlp:https://docs.oracle.com/javase/tutorialJWS/samples/deployment/dynamictree_webstartJWSProject/dynamictree_webstart.jnlp">Launch DynamicTree demo</a>

- Javaパッケージャ・ツールによって生成されたHTMLファイルからJavaScriptコードをコピーします。
Javaパッケージャ・ツールを使用する場合、Webページの作成を参照してください。

Java Web Startプロトコル・ハンドラのインストール

Java Web Startには、カスタムURIスキームjnlp:およびjnlps:を処理するためのプロトコル・ハンドラが含まれています。Java Web Startアプリケーションを起動する直接的な方法として、これらのスキームを使用します。

プロトコル・ハンドラはWindowsおよびmacOSシステムに自動的にインストールされます。Linuxシステムには手動でインストールする必要があります。

- Chromeのプロトコル・ハンドラのインストール

- Firefoxのプロトコル・ハンドラのインストール

Chromeのプロトコル・ハンドラのインストール

Linux上でChromeブラウザを使用している場合、jnlpまたはjnlpsプロトコルを使用してJava Web Startアプリケーションを起動できるようにするプロトコル・ハンドラを手動でインストールします。

Linuxでは、xdg-openコマンドを使用して、ユーザーの優先アプリケーションのファイルまたはURLを開きます。プロトコル・ハンドラをインストールするには、jnlpまたはjnlpsプロトコルを含むURLに対してJava Web Startを使用するようにxdg-openを構成します。

1. テキスト・エディタを使用して、~/.local/share/applicationsディレクトリにjavaws.desktopというファイルを作成します。

2. 次の例に示すように文を含めます。

[Desktop Entry]
Encoding=UTF-8
Name=Java(TM) Web Launcher
Exec=jre-home/bin/javaws %U
Terminal=false
Type=Application
MimeType=x-scheme-handler/jnlp;x-scheme-handler/jnlps

3. ファイルを保存します。

4. 次のコマンドを実行します。

xdg-mime default javaws.desktop x-scheme-handler/jnlp
xdg-mime default javaws.desktop x-scheme-handler/jnlps

プロトコル・ハンドラをインストールした後は、URLにjnlpまたはjnlpsプロトコルが含まれる場合に、Java Web Startを使用してアプリケーションが起動されます。たとえば、次のURLは、JavaチュートリアルからDynamic Treeサンプルを起動します。

jnlps://docs.oracle.com/javase/tutorialJWS/samples/deployment/dynamictree_webstartJWSProject/dynamictree_webstart.jnlp

Firefoxのプロトコル・ハンドラのインストール

Linux上でFirefoxブラウザを使用している場合、jnlpまたはjnlpsプロトコルを使用してJava Web Startアプリケーションを起動できるようにするプロトコル・ハンドラを手動でインストールします。

プロトコル・ハンドラをインストールするには、Firefox構成にプロパティを追加します。

1. Firefoxのアドレス・バーにabout:configと入力します。
保証を無効にすることについての警告のページが表示された場合、「I'll be careful, I promise!」をクリックして構成ページへと続行します。

2. Booleanプロパティを追加します。

a. ページを右クリックし、「New」、「Boolean」を順に選択します。

b. 「New Boolean Value」ウィンドウで、名前network.protocol-handler.expose.jnlpを入力して「OK」をクリックします。

c. 値の「false」を選択し、「OK」をクリックします。

プロパティが構成に追加されます。

3. 前述の手順を繰り返して、値falseを持つプロパティnetwork.protocol-handler.expose.jnlpsを追加します。

jnlpまたはjnlpsプロトコルを使用するURLを入力するか、リンクをクリックすると、ファイルを開くために使用するアプリケーションを選択するよう求められます。「Java Web Start Launcher」を選択するか、jre-home/binのjavaws.exeファイルを参照します。

5 アプリケーション開発時の考慮点

この章の内容は次のとおりです。

- Webデプロイメントの概要

- JARファイルからのリソースの取得

- JNLP APIを使用したクライアントへのアクセス

- セキュリティとコード署名

- テスト証明書によるJARファイルの署名

- JNLPファイルのエンコード方式

- HTTPS証明書の動的ダウンロード

Webデプロイメントの概要

Java Web Startでデプロイ可能なアプリケーションを開発する方法は、Java Platform, Standard Edition向けのスタンドアロン・アプリケーションを開発する方法と、基本的には同じです。たとえば、アプリケーションのエントリ・ポイントは、通常のpublic static void main(String[] argv)です。

ただし、Webデプロイメント(アプリケーションを自動的にダウンロードして起動すること)をサポートし、アプリケーションを安全なサンドボックス内で実行するには、考慮する点がいくつかあります。

- アプリケーションは一連の署名付きJARファイルとして配信される必要がある。各JARファイル内のすべてのエントリに署名する必要がある。

- ファイルやイメージなど、すべてのアプリケーション・リソースは、JARファイルに格納する必要がある。リソースは、Java Platform, Standard EditionのgetResourceメカニズムを使用して参照される必要がある。

- 安全なサンドボックス内で実行されるように記述されたアプリケーションには、次の制限が適用される。

- ローカル・ディスクにアクセスできない。

- すべてのJARファイルを同一ホストからダウンロードする必要がある。

- ユーザー・プロンプトを使用しないネットワーク接続は、JARファイルのダウンロード元のホストに対してのみ有効になる。他のホストへの接続は、ユーザーからの承認を必要とする。

- セキュリティ・マネージャはインストールできない。

- ネイティブ・ライブラリは使用できない。

- システム・プロパティへのアクセスが制限される。アプリケーションは、JNLPファイル内に定義されたすべてのセキュア・システム・プロパティに対する読取り/書込みアクセス権を持つほか、アプレットからアクセス可能なプロパティ・セットに対する読取り専用アクセス権を持つ。

JNLP APIを使用すると、これらの制限の一部を克服してファイル・システムなどのシステム・リソースにアクセスできる。

- アプリケーションはSystem.exit呼出しを使用できる。

JARファイルからのリソースの取得

Java Web StartによってWebサーバーからクライアント・マシンに転送されるのは、JARファイルだけです。また、JARファイルをローカル・マシン上のどこに格納するかも判断されます。したがって、イメージや設定ファイルといったリソースへのディスク相対参照を、アプリケーション内で使用することはできません。

すべてのアプリケーション・リソースは、JNLPファイルのresourcesセクションに指定されたJARファイルから取得するか、WebサーバーへのHTTP要求を通じて明示的に取得する必要があります。JARファイル内にリソースを格納することをお薦めします。それらのリソースは、Java Web Startによってローカル・マシン上にキャッシュされるためです。

次のコード例は、JARファイルからイメージを取り出す方法を示したものです。

// Get current classloader
ClassLoader cl = this.getClass().getClassLoader();
// Create icons
Icon saveIcon  = new ImageIcon(cl.getResource("images/save.gif"));
Icon cutIcon   = new ImageIcon(cl.getResource("images/cut.gif"));
...

この例では、アプリケーションのJARファイルのいずれかに、次のエントリが存在することを前提にしています。

images/save.gif
images/cut.gif

JNLP APIを使用したクライアントへのアクセス

JNLP APIを使用して、クライアントのファイル・システムなどのリソースにアクセスできます。JNLPI APIを使用してクライアントにアクセスする方法の詳細は、次のトピックを参照してください。

- JNLP APIの例

- Javaチュートリアルの「Deployment」コースのトピックJNLP APIを使用したクライアントへのアクセス。サンプル・アプレットの情報は、Java Web Startアプリケーションにも当てはまります。

セキュリティとコード署名

Java Web Startは、次のセキュリティ上の問題に対応しています。

- ローカル・ファイルに影響を及ぼす可能性のある有害なコード(意図的かどうかにかかわらず)から、ユーザーを保護する

- ネットワーク上のデータに対してアクセスや破壊を試みる可能性のあるコードから、企業を保護する

Java Web Startで起動されたアプリケーションはデフォルトで、制限された環境内で実行されます。このため、記憶装置やローカル・ネットワークなど、ローカルのコンピューティング・リソースへのアクセスが制限されます。

Java Web Startがサポートするもう1つのセキュリティ機能は、デジタル・コード署名です。起動対象のアプリケーションが1つ以上の署名付きJARファイルとして配信された場合、Java Web Startは、それらのJARファイルの内容が署名後に変更されていないかどうか検証します。デジタル署名の検証に失敗した場合、そのアプリケーションは第三者によって改ざんされた可能性があるため、Java Web Startはアプリケーションの実行を中止します。

コード署名のサポートは、ユーザーとアプリケーション・サービス・プロバイダの双方にとって重要です。このサービスを使えば、ユーザーは、アプリケーションの提供元が信頼できるかどうかを検証できます。また、ユーザーによって信頼された署名付きのアプリケーションは、ローカル・ディスクへのアクセスなど、追加のシステム権限を要求することもできます。

Java Web Startは、アプリケーションを起動する前に、署名者の証明書に基づいて、アプリケーションの提供元を示すダイアログ・ボックスを表示します。これにより、ユーザーは、ダウンロードされたコードに追加の権限を許可するかどうかを、具体的な情報に基づいて決定できます。

アプリケーションのすべてのJARファイルが署名されていれば、JNLPファイル内に次の設定を含めることで、アプリケーションはクライアント・システムへの完全なアクセスを要求できるようになります。

<security>
<all-permissions/>
</security>

Java Web Startにおけるコード署名の実装は、コアJava Platform, Standard EditionのセキュリティAPIに基づいています。

開発者がJava Web Start用のコードに署名する方法は、Javaアプレットの場合と同じです。つまり、Java Platform, Standard Editionに付属する標準ツールjarsignerを使用します。jarsignerツールのマニュアルでは、コードの署名方法とテスト証明書の作成方法の具体例を示すとともに、署名に関するその他の問題について説明しています。

テスト証明書によるJARファイルの署名

テストの目的で、自己署名証明書を使用してJARファイルに署名できます。本番用には、信頼できる認証局によって発行されたコード署名証明書を使用します。

次に、自己署名テスト証明書を使用してJARファイルに署名する手順を示します。

1. SDKのkeytoolとjarsignerにパスが通っていることを確認します。これらのツールは、SDKのbinディレクトリに格納されています。

2. 新しいkeystore内に新しいキーを作成します。次のようにします。

keytool -genkey -keystore myKeystore -alias myself

パスワードや名前など、新しいキーに関する情報の入力を求められます。これによって、ディスクにmyKeystoreファイルが作成されます。

3. 次のように、自己署名テスト証明書を作成します。

keytool -selfcert -alias myself -keystore myKeystore

これによって、パスワードの入力を求められます。証明書の生成には数分かかります。

4. すべてが正常であることを確認します。キーストアの内容を一覧表示するには、次のコマンドを使用します。

keytool -list -keystore myKeystore

出力は次のようになります。

Keystore type: jks
Keystore provider: SUN

Your keystore contains 1 entry:

myself, Tue Jan 23 19:29:32 PST 2001, keyEntry,
Certificate fingerprint (MD5):
C2:E9:BF:F9:D3:DF:4C:8F:3C:5F:22:9E:AF:0B:42:9D

5. 次のように、テスト証明書を使用してJARファイルに署名します。

jarsigner -keystore myKeystore test.jar myself

この手順を、すべてのJARファイルに対して繰り返します。

自己署名テスト証明書はあくまでも内部テスト専用であることに注意してください。この証明書はユーザーの身元を保証できず、信頼性に欠けるためです。アプリケーションを本番環境に移す際には、VeriSignやThawteなどの認証局から信頼できる証明書を取得し、それを使用するようにしてください。

自己署名テスト証明書を使用して署名されたアプリケーションを実行するには、アプリケーションを実行するコンピュータで次のいずれかを実行します。

- アプリケーションの場所を、Javaコントロール・パネルから管理される例外サイト・リストに追加します。

- テスト証明書を、Javaコントロール・パネルを使用してユーザー署名者のCAストアにインポートするか、keytoolユーティリティを使用してシステム署名者のCAストアにインポートします。

JNLPファイルのエンコード方式

Java Platform, Standard Editionでサポートされている任意の文字エンコーディングでJNLPファイルをエンコードします。リストについては、Java Platform, Standard Edition国際化ガイドのサポートされているエンコーディングを参照してください。

JNLPファイルをエンコードするには、そのファイルのXML prologでエンコーディングを指定します。たとえば、次の行は、JNLPファイルをUTF-16でエンコードすることを示しています。

<?xml version="1.0" encoding="utf-16"?>

XML prologそのものは、UTF-8でエンコードする必要があります。

HTTPS証明書の動的ダウンロード

Java Web Startでは、ブラウザと同様の方法で証明書が動的にインポートされます。このため、Java Web Startでは、java.protocol.handler.pkgsシステム・プロパティを使用してSSLSocketFactoryとHostnameVerifierの両デフォルトを初期化するHTTPSハンドラが独自に設定されています。デフォルトの設定には、HttpsURLConnection.setDefaultSSLSocketFactoryとHttpsURLConnection.setDefaultHostnameVerifierが使用されます。

アプリケーション内でこれら2つのメソッドが使用されている場合、Java Web StartのHTTPSハンドラの初期化後にそれらのメソッドを呼び出すようにしてください。そうしないと、アプリケーションのカスタム・ハンドラが、Java Web Startのデフォルト・ハンドラで置き換えられてしまいます。独自にカスタマイズされたSSLSocketFactoryとHostnameVerifierが使用されるようにするには、次のいずれかを実行します。

1. 独自のHTTPSハンドラをインストールします(これにより、Java Web StartのHTTPSハンドラが完全に置き換えられます)。

2. HttpsURLConnection.setDefaultSSLSocketFactoryまたはHttpsURLConnection.setDefaultHostnameVerifierの呼出しを、必ず最初のHttpsURLConnectionオブジェクトが作成された後で行います(そうすれば、Java Web StartのHTTPSハンドラの初期化コードが最初に実行されます)。

6 JavaアプレットからJava Web StartおよびJNLPへの移行

ブラウザでは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アプレットの移行

- JavaアプレットからJava Web Startアプリケーションへの書直し

- 特別な考慮事項

既存のJavaアプレットの移行

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アプリケーションに書き直してから、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」を参照してください。

7 JNLPファイルの構文

この章の内容は次のとおりです。

- JNLPファイルの構文の概要

- JNLPファイルの例

- JNLPの要素

- jnlp要素

- information要素

- security要素

- update要素

- resources要素

- application-desc要素

- applet-desc要素

- component-desc要素

- installer-desc要素

JNLPファイルの構文の概要

このリリースで使用している形式は、「Java Network Launching Protocol & API Specification (JSR-56) version 6.0」に指定されている形式と同じです。リッチ・インターネット・アプリケーション(RIA)のJava Network Launch Protocol (JNLP)ファイルはXMLファイルです。すべての要素およびその属性は小文字で入力する必要があります。次の表は、JNLPファイルで最もよく使用される要素について説明しています。この形式の完全な説明については、仕様を参照してください。

要素

説明

属性

必須

jnlp

JNLPファイルでメインとなるXML要素。すべてjnlp要素に含まれています。

spec

そのJNLPファイルが適切に動作できる、JNLP仕様の最小バージョンを指定します。有効な値は、1.0、1.5、6.0、6.0.10、6.0.18、7.0、8.20、9または1.0+などのワイルドカードです。

codebase

JNLPファイルのhref属性で指定されているすべての相対URLの基本となる場所を指定します。

href

JNLPファイル自体のURLを指定します。

version

起動されたアプリケーションのバージョンとJNLPファイル自体のバージョンを指定します。

はい

information

アプリケーションとそのソースを説明する他の要素を含みます。

os

このinformation要素に対して適切なオペレーティング・システムを指定します。1.5.0で追加されました。

arch

このinformation要素に対して適切なアーキテクチャを指定します。1.5.0で追加されました。

platform

このinformation要素に対して適切なプラットフォームを指定します。1.5.0で追加されました。

locale

このinformation要素に対して適切なロケールを指定します。1.5.0で追加されました。

いいえ

title

アプリケーションのタイトルを指定します。

該当なし

いいえ

vendor

アプリケーションのプロバイダを指定します。

該当なし

いいえ

homepage

アプリケーションのホーム・ページ。

href

このアプリケーションの詳細情報が得られるURLを指定します。必須。

いいえ

description

アプリケーションを説明する短い文。

kind

説明のタイプを指定します。有効な値は、one-line、shortおよびtooltipです。

いいえ

icon

ユーザーがアプリケーションを識別できるようにアイコンを示します。

href

アイコン・ファイルのURLを指定します。次の形式のいずれかにできます: GIF、JPG、PNG、ICO。必須。

kind

アイコンの推奨される用途を示します。有効な値は、default、splashおよびshortcutです。

width

イメージの解像度を指定するために使用できます。

height

イメージの解像度を指定するために使用できます。

depth

イメージの解像度を指定するために使用できます。

いいえ

offline-allowed

クライアント・システムがネットワークから切断されてもこのアプリケーションが稼働できることを示します。

該当なし

いいえ

shortcut

使用すると、アプリケーションのデスクトップの統合に対する設定方法を示すことができます。1.5.0で追加されました。

online

使用すると、アプリケーションの設定で、作成するショートカットをオンラインで実行するか、オフラインで実行するかを示すことができます。

install

shortcut要素内で使用すると、インストール済と見なされることに関するアプリケーションの設定を示すことができます。値がtrueの場合、アプリケーションはインストール済と見なされることを選択しています。install属性のデフォルト値はfalseです。Windowsでは、これによってアプリケーションが「プログラムの追加と削除」パネルに表示されるかどうかが決まります。7.0で追加されました。

いいえ

desktop

使用すると、アプリケーションの設定で、ショートカットをユーザーのデスクトップに配置するかどうかを示すことができます。1.5.0で追加されました。

該当なし

いいえ

menu

使用すると、アプリケーションの設定で、メニュー項目をユーザーのスタート・メニューに配置するかどうかを示すことができます。1.5.0で追加されました。

sub-menu

使用すると、アプリケーションの設定で、メニュー項目を配置する場所を示すことができます。

いいえ

association

特定の拡張子および特定のMIMEタイプのプライマリ・ハンドラとしてオペレーティング・システムに登録する必要があることをJNLPクライアントに伝えるために使用できます。この要素を含める場合は、offline-allowed要素も含めるか、jnlp要素のhref属性を設定する必要があります。1.5.0で追加されました。

extensions

アプリケーションが処理するために登録が必要なファイル拡張子のリスト(スペース区切り)を含んでいます。

mime-type

アプリケーションが処理するために登録が必要なMIMEタイプを含んでいます。

いいえ

related-content

アプリケーションに統合できる関連コンテンツの追加部分を示します。1.5.0で追加されました。

href

関連コンテンツのURLを指定します。必須。

いいえ

update

JNLPクライアントがアプリケーションの更新を処理する方法の設定を示します。6.0で追加されました。

check

JNLPクライアントが更新を確認する必要がある時期についての設定を示します。有効な値は、always、timeoutおよびbackgroundです。

policy

アプリケーションの起動前に更新が可能であることがわかったとき、JNLPクライアントがアプリケーション更新を処理する方法の設定を示します。有効な値は、always、prompt-updateおよびprompt-runです。

いいえ

security

拡張権限を要求します。

該当なし

いいえ

all-permissions

すべてのアクセス権を使用できる状態でアプリケーションを実行できるよう要求します。

該当なし

いいえ

j2ee-application-client-permissions

J2EEアプリケーション・クライアント環境のセキュリティ仕様を満たす権限セットでアプリケーションが実行されるように要求します。

該当なし

いいえ

resources

アプリケーションに必要なすべてのリソースを示します。

os

このresources要素に対して適切なオペレーティング・システムを指定します。

arch

このresources要素に対して適切なアーキテクチャを指定します。

locale

このresources要素に対して適切なロケールを指定します。

はい

java (またはj2se)

アプリケーションの実行に使用するJavaのバージョンを指定します。java要素は6.0で追加されました。

version

使用するバージョンの範囲を順番にまとめたリストを示します。必須。

href

このJavaのバージョンの供給者とダウンロードできる場所を示すURL。

java-vm-args

Java起動時にアプリケーションがJNLPクライアントに使用させる標準の仮想マシンの引数と非標準の仮想マシンの引数の追加セットを示します。

initial-heap-size

Javaヒープの初期サイズを指定します。

max-heap-size

Javaヒープの最大サイズを指定します。

いいえ

jar

アプリケーションのクラス・パスの一部であるJARファイルを指定します。

href

JARファイルのURL。必須。

version

要求されたJARファイルのバージョン。バージョン・ベースのダウンロード・プロトコルを使用する必要があります。

main

このJARファイルにアプリケーションのmainメソッドを含むクラスが含まれているかどうかを示します。

download

このJARファイルを定期的または不定期に、あるいは進捗表示のためにダウンロードできることを示す場合に使用できます。

size

JARファイルのダウンロード可能なサイズをバイトで指定します。

part

使用すると、リソースをグループ化して同時にダウンロードできます。

いいえ。ただし、メインJNLPファイルがJARファイルを指定しない場合、リソース・セクションに少なくとも1つのjar要素があるコンポーネント拡張機能をJNLPファイルに含める必要があります。

nativelib

ルート・ディレクトリにネイティブ・ライブラリを含むJARファイルを指定します。

href

JARファイルのURL。必須。

version

要求されたJARファイルのバージョン。バージョン・ベースのダウンロード・プロトコルを使用する必要があります。

download

このJARファイルを不定期にダウンロードできることを示す場合に使用できます。

size

JARファイルのダウンロード可能なサイズをバイトで指定します。

part

使用すると、リソースを一緒にグループ化して同時にダウンロードできます。

いいえ

extension

このアプリケーションで使用する追加のcomponent-descまたはinstaller-descに対するポインタを含みます。

href

追加の拡張JNLPファイルのURL。必須。

version

追加の拡張JNLPファイルのバージョン。

name

追加の拡張JNLPファイルの名前。

いいえ

ext-download

extension要素で使用して、コンポーネント拡張機能の一部を示すことができます。

ext-part

拡張機能で見つかることが期待される部分の名前を示します。必須。

download

この拡張機能を定期的または不定期にダウンロードできることを示す場合に使用できます。

part

拡張機能を中に含めるための、このJNLPファイルの一部の名前を示します。

いいえ

package

どのJARファイルにどのパッケージを実装するかをJNLPクライアントに示す場合に使用できます。

name

指定部分のJARファイルに含まれるパッケージ名。必須。

part

指定のパッケージ名を含むJARファイルを含んでいる部分の名前。必須。

recursive

指定の部分で見つけることができる、指定の名前で始まるすべてのパッケージ名を指定する場合に使用できます。

いいえ

property

System.getPropertyとSystem.getPropertiesメソッドで使用できるシステム・プロパティを定義します。

name

システム・プロパティの名前。必須。

value

プロパティの値を示します。必須。

いいえ

application-desc

アプリケーションのJNLPファイルであることを示します。

main-class

アプリケーションのpublic static void main(String[])メソッドを含むクラス名。必須。

progress-class

DownloadServiceListenerの実装を格納するクラスの名前で、ダウンロードの進捗状況を示すために使用できます。6.0.18で追加されました。

type

デプロイするアプリケーションのタイプ。有効な値は、JavaおよびJavaFXです。デフォルトはJavaです。JavaFXアプリケーションを定義するために以前使用されていたXML拡張機能のかわりにこの属性を使用します。

JNLPファイルに次のいずれかの要素を含める必要があります。

- application-desc

- applet-desc

- component-desc

- installer-desc

argument

各argumentには、アプリケーションのmainメソッドに渡される追加の引数が(順番に)含まれています。

該当なし

いいえ

applet-desc

アプレットのJNLPファイルであることを示します。

注意: アプレットAPIは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットのかわりに、Java Web Startまたは自己完結型アプリケーションなどの代替を検討してください。

main-class

メインAppletクラスの名前。必須。

documentbase

URLとしてのアプレットのドキュメント・ベース。

name

アプレットの名前。必須。

width

アプレットの幅(ピクセル)。必須。

height

アプレットの高さ(ピクセル)。必須。

progress-class

DownloadServiceListenerの実装を格納するクラスの名前で、ダウンロードの進捗状況を示すために使用できます。6.0.18で追加されました。

JNLPファイルに次のいずれかの要素を含める必要があります。

- application-desc

- applet-desc

- component-desc

- installer-desc

param

アプリケーションに渡すことができるパラメータのセット。この要素は、applet-descまたはapplication-desc要素のサブ要素として使用できます。application-desc要素内で使用する場合、type属性がJavaFXに設定されている場合のみ値が使用されます。type属性がJavaに設定されている場合は、値が無視されます。

name

パラメータの名前。必須。

value

パラメータの値。必須。

いいえ

component-desc

コンポーネント拡張機能のJNLPファイルであることを示します。

progress-class

DownloadServiceListenerの実装を格納するクラスの名前で、ダウンロードの進捗状況を示すために使用できます。6.0.18で追加されました。

JNLPファイルに次のいずれかの要素を含める必要があります。

- application-desc

- applet-desc

- component-desc

- installer-desc

installer-desc

インストールされた拡張機能のJNLPファイルであることを示します。

main-class

インストーラのpublic static void main(String[])メソッドを含むクラス名。必須。

JNLPファイルに次のいずれかの要素を含める必要があります。

- application-desc

- applet-desc

- component-desc

- installer-desc

JNLPファイルはXMLドキュメントです。JNLPファイルの例を参照してください。

JNLPファイルの例

カスタマイズをあまり必要としない基本的なアプリケーションの場合、JNLPファイルを単純にできます。複雑なアプリケーションの場合は、JNLPファイルに追加要素を追加できます。

要素は、JNLP要素で説明されています。

基本的なJNLPファイル

この例は単純なJNLPファイルを示しています。ルート要素はjnlpで、この要素には2つのサブ要素resourcesおよびapplication-descがあります。

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="9">
<resources>
<jar href="https://docs.oracle.com/javase/tutorialJWS/samples/deployment/NotepadJWSProject/Notepad.jar" />
</resources>
<application-desc main-class="Notepad"/>
</jnlp>

アプリケーション・カスタマイズを含むJNLPファイル

この例は、アプリケーションの属性に対する設定を含むJNLPファイルの基本的なアウトラインを示しています。ルート要素はjnlpですが、この要素には、4つのサブ要素information、security、resources、application-descがあります。さらに、Java Web Startはapplet-desc要素を使用することで、アプレットの起動もサポートします。

<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File for SwingSet2 Demo Application -->
<jnlp
spec="6.0+"
codebase="http://my_company.com/jaws/apps"
href="swingset2.jnlp">
<information>
<title>SwingSet2 Demo Application</title>
<vendor>Sun Microsystems, Inc.</vendor>
<homepage href="docs/help.html"/>
<description>SwingSet2 Demo Application</description>
<description kind="short">A demo of the capabilities
of the Swing Graphical User Interface.</description>
<icon href="images/swingset2.jpg"/>
<icon kind="splash" href="images/splash.gif"/>
<offline-allowed/>
<association mime-type="application-x/swingset2-file"  extensions="swingset2"/>
<shortcut online="false" install="false">
<desktop/>
<menu submenu="My Corporation Apps"/>
</shortcut>
</information>
<information os="linux">
<title> SwingSet2 Demo on Linux </title>
<homepage href="docs/linuxhelp.html">
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+" java-vm-args="-esa -Xnoclassgc"/>
<jar href="lib/SwingSet2.jar"/>
</resources>
<application-desc main-class="SwingSet2"/>
</jnlp>

JNLPの要素

一般的に使用されるJNLPの要素については、次の各項で説明します。

- jnlp要素

- information要素

- security要素

- update要素

- resources要素

- application-desc要素

- applet-desc要素

- component-desc要素

- installer-desc要素

jnlp要素

spec属性: この属性が1.0以上でないと、このリリースで正しく動作しません。デフォルト値は1.0+です。したがって、通常はこの属性を省略してもかまいません。Java Web StartのJDK 9バージョンでは、バージョン9までのすべてのバージョンのspecがサポートされることに注意してください。 以前のバージョンのJava Web Startでは、JDKリリースの時点で使用可能であった仕様(spec)のバージョンのみがサポートされます。spec="9+"を指定するJNLPファイルは、このバージョンで動作しますが、以前のバージョンのJava Web Startでは動作しません。

codebase属性: JNLPファイルのhref属性に指定された相対URLはすべて、このURLを基準として処理されます。

href属性: 存在する場合、この属性は、アプリケーションのダウンロードおよび実行に使用されるJNLPファイルを示します。存在しない場合は、アプリケーションの起動に使用するメソッドによってはJava Web StartがJNLPファイルの場所を認識しない場合もあり、このことがセキュリティ・ダイアログ・ボックスに影響を及ぼす可能性があります。

information要素

os属性: この属性には、この要素のオペレーティング・システム名のリストが含まれます。os属性の詳細については、後述のresources要素の説明を参照してください。

title要素: アプリケーションの名前。

vendor要素: アプリケーション・ベンダーの名前。

homepage要素: 単一の属性hrefを含みます。これは、アプリケーションのホーム・ページを示すURLです。この要素は、Javaアプリケーション・キャッシュ・ビューアが、アプリケーションの詳細情報を含むWebページにユーザーをリダイレクトする際に使用されます。

description要素: アプリケーションに関する短い文。description要素は省略可能です。kind属性は、descriptionの用途を定義します。kindには、次の値が有効です。

- one-line: アプリケーションへの参照をリストまたは表の1行に表示する場合に、このdescriptionが使用されます。

- short: アプリケーションへの参照を表示する際に1段落分のスペースが取れる場合に、このdescriptionが使用されます。

- tooltip: アプリケーションへの参照をツールヒント内に表示する場合に、このdescriptionが使用されます。

個々の種類に対して指定可能なdescription要素は、1つだけです。kind属性を含まないdescription要素は、デフォルト値として使用されます。したがって、Java Web Startがshortの種類のdescription要素を必要としているが、それがJNLPファイル内に指定されていなかった場合、属性を含まないdescription要素のテキストが使用されます。

description要素に含まれるテキストは、プレーン・テキストでなければなりません。HTMLタグなどを含む形式はサポートされていません。

icon要素: GIF、JPEG、ICO、またはPNG形式のイメージ・ファイルへのHTTP URLを含みます。これらのアイコンは、次の場合にアプリケーションを表現するために使用されます。

- アプリケーション起動時にJava Web Startがアプリケーションをユーザーに表示する際

- Javaアプリケーション・キャッシュ・ビューア内

- デスクトップ・ショートカット内

ダウンロード中は64x64のアイコンが表示されます。Javaアプリケーション・キャッシュ・ビューア内とデスクトップ・ショートカット内では32x32のアイコンが使用されます。Java Web Startは、アイコンのサイズ変更を必要に応じて自動的に行います。

省略可能な属性widthとheightを使えば、イメージのサイズを指定できます。

省略可能なkind属性には、次の値のいずれかを指定できます。

- default: 指定されたイメージはJavaアプリケーション・キャッシュ・ビューア内で使用されます。また、icon要素に特定のkind属性が指定されていない場合にも使用されます。kind属性を指定しないことは、default値を指定することと同じです。

- splash: 指定されたイメージは、アプリケーションの2回目以降の起動時にスプラッシュ・イメージとして使用されます。リソースがダウンロードされる前の、アプリケーションの初回起動時は、デフォルトのスプラッシュ・イメージが使用されます。

- shortcut: 指定されたイメージは、デスクトップ・ショートカット内で使用されます。

JNLPファイルには、kind属性がそれぞれ異なる複数のicon要素を含めることができます。これにより、アプリケーションのアイコン・イメージを複数指定できます。

offline-allowed要素: 省略可能なoffline-allowed要素は、オフラインでのアプリケーション起動を許可するかどうかを示します。

offline-allowedが指定されている場合、Javaアプリケーション・キャッシュ・ビューアでアプリケーションをオフラインで起動できます。またアプリケーションをオフラインで起動するショートカットを作成できます。

アプリケーションをオフラインで起動した場合、更新のチェックは行われません。また、API呼出しBasicService.isOffline()はtrueを返します。

また、offline-allowed要素は、Java Web Startがアプリケーションの更新をチェックする方法も制御します。この要素が指定されていない場合(つまり、アプリケーションをオンラインで実行する必要がある場合)、Java Web Startは、更新版があるかどうかをチェックした後でアプリケーションを起動します。更新版が見つかった場合は、その新しいアプリケーションをダウンロードおよび起動します。したがって、ユーザーが実行するアプリケーションが常に最新版であることが保証されます。ただし、オフラインの場合、アプリケーションを実行することはできません。

offline-allowedが指定されている場合も、Java Web Startは更新版があるかどうかをチェックします。ただし、アプリケーションがダウンロード済であった場合、そのチェックは数秒でタイムアウトになります。タイムアウトになった場合、キャッシュ済のアプリケーションがかわりに起動されます。サーバーとの接続がある程度高速であれば、通常、最新版のアプリケーションが実行されますが、保証はありません。ただし、アプリケーションはオフラインで実行できます。

shortcut要素: 省略可能なshortcut要素を使用すると、アプリケーションのデスクトップ統合に対する設定方法を示すことができます。shortcut要素とそのサブ要素は、JNLPクライアントが使用する可能性のあるヒントを提供します。shortcut要素には省略可能なonline属性とinstall属性、および省略可能な2つのサブ要素desktopとmenuが含まれます。

association要素: 省略可能なassociation要素は、特定の拡張子および特定のMIMEタイプのプライマリ・ハンドラとしてオペレーティング・システムに登録する必要があることを示すJNLPクライアントへのヒントです。association要素にはextensionsおよびmime-type属性を指定する必要があります。association要素を含める場合は、offline-allowed要素も含めるか、アプリケーションを見つけて実行できるようにjnlp要素のhref属性を設定する必要があります。

related-content要素: 省略可能なrelated-content要素は、READMEファイル、ヘルプ・ページ、登録ページへのリンクなどの関連コンテンツの追加要素を、JNLPクライアントへのヒントとして説明します。アプリケーションは、このコンテンツをデスクトップ統合に含めるように要求します。related-content要素には、hrefとtitleの必須属性があります。次のサブ要素のいずれかを含めることもできます。

- description要素: 関連コンテンツの簡単な説明。

- icon要素: JNLPクライアントがユーザーへの関連コンテンツを識別するために使用できるアイコン。

security要素

各サンドボックス・アプリケーションは、アプレットのサンドボックスに類似した、制限された実行環境で実行されます。security要素を使うことで、無制限のアクセス権を要求できます。

all-permissions要素が指定された場合、アプリケーションはクライアント・マシンおよびローカル・ネットワークに対する完全なアクセス権を持ちます。すべてのJARファイルに署名する必要があります。ユーザーは、証明書を受け入れてアプリケーションの実行に同意するよう求められます。

update要素

update要素は、Java Web Startがアプリケーションの更新を処理する方法の設定を示します。

update要素には、次に示す2つの属性をオプションで含めることができます。

check属性: check属性は、JNLPクライアントが更新を確認する必要がある時期についての設定を示します。有効な値は次のとおりです。

- always: アプリケーションを起動する前に更新を確認します。

- timeout (デフォルト): アプリケーションを起動する前に、タイム・アウトになるまで更新を確認することを意味します。更新確認が完了せずにタイム・アウトした場合、アプリケーションの起動後に、更新確認がバックグラウンドで継続して行われます。

- background: バックグラウンドでの更新の確認中にアプリケーションを起動します。

policy属性: policy属性は、アプリケーションの起動前に更新が可能であることがわかったとき、JNLPクライアントがアプリケーション更新を処理する方法の設定を示します。有効な値は次のとおりです。

- always (デフォルト): ユーザーに通知することなく、更新をダウンロードします。

- prompt-update: ユーザーに更新バージョンをダウンロードして実行するかどうか、またはキャッシュされたバージョンを起動するかどうかを尋ねます。

- prompt-run: ユーザーに更新バージョンをダウンロードして実行するかどうか、またはキャンセルしてアプリケーションの実行を停止するかどうかを尋ねます。

次に例を示します。

<update check="always" policy="prompt-update">

resources要素

resources要素は、アプリケーションに含まれるJavaクラス・ファイル、ネイティブ・ライブラリ、システム・プロパティなど、すべてのリソースを指定するために使用します。 リソース定義を特定のオペレーティング・システム、アーキテクチャまたはロケールに制限するには、os、archおよびlocale属性を使用します。

os属性には、リソースのオペレーティング・システム名のリストが含まれます。たとえば、それぞれ異なるos属性を指定した複数のresources定義を使用して、複数のオペレーティング・システムのネイティブ・ライブラリを指定できます。

os属性には、スペースで区切られたオペレーティング・システム名のリストが含まれます。実行時に、osの値とos.nameシステム・プロパティの先頭が比較され、一致するものが検索されます。たとえば、os属性の値が「Windows」であれば、「Windows 8」および「Windows 10」の両オペレーティング・システムに一致します。

リストに指定するオペレーティング・システムの名前にスペースが含まれている場合は、スペースがオペレーティング・システム名の一部であることを示すためにバックスラッシュを使用します。次の例は、「Windows 8」および「Windows 10」に明確に一致します。

<resources os="Windows\ 8 Windows\ 10">
<jar href="hello.jar"/>
</resources>

resources要素に指定可能なサブ要素は、jar、nativelib、j2se、property、package、extensionの6つです。この開発者ガイドでは、package要素とextension要素については説明しません。

jar要素は、アプリケーションのクラス・パスに含めるJARファイルを指定します。  次に例を示します。

<jar href="myjar.jar"/>

ClassLoaderオブジェクトを使用して、jarファイルがJVMにロードされます。  通常、jarファイルには、特定のアプリケーションのコードを含むJavaクラスが含まれますが、getResourceメカニズムで使用できるアイコンや構成ファイルなどの他のリソースも含めることができます。

nativelib要素は、ネイティブ・ライブラリを含むJARファイルを指定します。次に例を示します。

<nativelib href="lib/windows/corelib.jar"/>

JNLPクライアントは、System.loadLibraryメソッドを使用して、JARファイルのルート・ディレクトリ(/)にある各ファイル・エントリが実行中のプロセスに確実にロードできるようにする必要があります。  各エントリには、プラットフォーム固有の共有ライブラリを正しい命名規約を使用して含める必要があります(Windowsの*.dll、SolarisやLinuxのlib*.soなど)。System.loadLibraryへの呼出しを実際に行うのは、アプリケーションの役目です。

通常、ネイティブ・ライブラリは、特定のオペレーティング・システムとアーキテクチャに対応したresources要素に含まれます。次に例を示します。

<resources os="SunOS" arch="sparc">
<nativelib href="lib/solaris/corelibs.jar"/>
</resources>

デフォルトでは、jarおよびnativelibリソースが定期的にダウンロードされます。つまり、これらはアプリケーションが起動される前にダウンロードされ、アプリケーションを実行しているJVMでローカルに使用可能になります。jarとnativelib要素では、リソースをlazyと指定することもできます。この設定にすると、アプリケーションの起動前にリソースをクライアント・システムにダウンロードする必要がなくなります。

download属性は、リソースが定期的にダウンロードされるか、不定期にダウンロードされるか、あるいは進捗のカスタム実装を含んでいるかの制御に使用します。次に例を示します。

<jarhref="sound.jar" download="lazy"/>
<nativelibhref="native-sound.jar" download="eager"/>

<jarhref="progress.jar" download="progress"/>

download="progress"が指定されているJARファイルは、定期的にダウンロードされます。また、他のリソースのダウンロード中に進捗を示すためにも使用できます。

j2se要素は、アプリケーションがサポートされるJava Platform, Standard Edition Runtime Environment (JRE)のバージョンおよびJava仮想マシンの標準パラメータを指定します。  複数のJREを指定する場合、サポート対象のJREを優先順にリストに示します。最も望ましいバージョンを最初に指定します。次に例を示します。

<j2se version="9" initial-heap-size="64m" max-heap-size="128m"/>
<j2se version="1.8.0_101+" href="http://java.sun.com/products/autodl/j2se" java-vm-args="-esa -Xnoclassgc"/>

version属性は、デフォルトでJava Platform Standard Editionのプラットフォーム・バージョン(仕様バージョン)を参照します。現時点で定義されているプラットフォーム・バージョンは、1.2、1.3、1.4、1.5、1.6、1.7、1.8および9です。(通常、プラットフォーム・バージョンには、マイクロ・バージョン番号(1.4.2など)は含まれません。)

正確な製品バージョン(実装バージョン)を、href属性を使用して指定することもできます(1.7.0_111や1.8.0_92など)。次に例を示します。

<j2se version="1.7.0_111" href="http://java.sun.com/products/autodl/j2se"/

または

<j2se version="1.8.0_92" href="http://java.sun.com/products/autodl/j2se"/>

プラットフォーム・バージョンが指定された場合(つまり、href属性が指定されなかった場合)、Java Web Startは、インストール済の非General Availability (GAマイルストン)のJREを、要求に一致するものとみなしません。たとえば、次の要求では、インストール済の9-ea JREは要求に一致するものとみなされません。

<j2se version="9+"/>

j2se要素のjava-vm-args属性は、javaの起動時に優先的に使用される仮想マシンの一連の引数を指定します。

<j2se version="9+" java-vm-args="-ea -Xincgc"/>

このバージョンでは、次のjava-vm-argsがサポートされます。

-d32,                                                          /* use a 32-bit data model if available (unix platforms only) */
-client,                                                       /* to select the client VM */
-server,                                                       /* to select the server VM */
-verbose,                                                      /* enable verbose output */
-version,                                                      /* print product version and exit */
-showversion,                                                  /* print product version and continue */
-help,                                                         /* print this help message */
-X,                                                            /* print help on non-standard options */
-ea,                                                           /* enable assertions */
-enableassertions,                                             /* enable assertions */
-da,                                                           /* disable assertions */
-disableassertions,                                            /* disable assertions */
-esa,                                                          /* enable system assertions */
-enablesystemassertions,                                       /* enable system assertions */
-dsa,                                                          /* disable system assertione */
-disablesystemassertions,                                      /* disable system assertione */
-Xmixed,                                                       /* mixed mode execution (default) */
-Xint,                                                         /* interpreted mode execution only */
-Xnoclassgc,                                                   /* disable class garbage collection */
-Xincgc,                                                       /* enable incremental garbage collection */
-Xbatch,                                                       /* disable background compilation */
-Xprof,                                                        /* output cpu profiling data */
-Xdebug,                                                       /* enable remote debugging */
-Xfuture,                                                      /* enable strictest checks, anticipating future default */
-Xrs,                                                          /* reduce use of OS signals by Java/VM (see documentation) */
-XX:+ForceTimeHighResolution,                                  /* use high resolution timer */
-XX:-ForceTimeHighResolution,                                  /* use low resolution (default) */
-XX:+PrintGCDetails,          /* Gives some details about the GCs */
-XX:+PrintGCTimeStamps,       /* Prints GCs times happen to the start of the application */
-XX:+PrintHeapAtGC,           /* Prints detailed GC info including heap occupancy */
-XX:+PrintTenuringDistribution,  /* Gives the aging distribution of the allocated objects */
-XX:+TraceClassUnloading,     /* Display classes as they are unloaded */
-XX:+CMSClassUnloadingEnabled,/* It needs to be combined with -XX:+CMSPermGenSweepingEnabled */
-XX:+CMSIncrementalPacing,    /* Automatic adjustment of the incremental mode duty cycle */
-XX:+UseConcMarkSweepGC,      /* Turns on concurrent garbage collection */
-XX:-ParallelRefProcEnabled,
-XX:+DisableExplicitGC,       /* Disable calls to System.gc() */
-XX:+UseG1GC,
-XX:+HeapDumpOnOutOfMemoryError,
-XstartOnFirstThread,
-XX:+UseG1GC,
-XX:+UseStringDeduplication,
-XX:+PrintStringDeduplicationStatistics,
-XX:+UseParallelOldGC,
-XX:-UseParallelOldGC",
-XX:+UseParallelOldGCCompacting",
-XX:-UseParallelOldGCCompacting",
-XX:+UseParallelGC,
-XX:-UseParallelGC,
-XX:+UseGCTimeLimit,
-XX:-UseGCTimeLimit,
-XX:+UseGCOverheadLimit,
-XX:-UseGCOverheadLimit,
-XX:+ScavengeBeforeFullGC,
-XX:-ScavengeBeforeFullGC,
-XX:+UseParallelScavenge,
-XX:-UseParallelScavenge,
-XX:-TransmitErrorReport,

次の文字列のいずれかで開始する任意の引数もサポートされます。

-ea,                          /* enable assertions for classes */
-enableassertions,            /* enable assertions for classes */
-da,                          /* disable assertions for classes */
-disableassertions,           /* disable assertions for classes */
-verbose,                     /* enable verbose output */
-Xms,                         /* set initial Java heap size */
-Xmx,                         /* set maximum Java heap size */
-Xss,                         /* set java thread stack size */
-XX:NewRatio,                 /* set Ratio of new/old gen sizes */
-XX:NewSize,                  /* set initial size of new generation */
-XX:MaxNewSize,               /* set max size of new generation */
-XX:PermSize,                 /* set initial size of permanent gen */
-XX:MaxPermSize,              /* set max size of permanent gen */
-XX:MaxHeapFreeRatio,         /* heap free percentage (default 70) */
-XX:MinHeapFreeRatio,         /* heap free percentage (default 40) */
-XX:UseSerialGC,              /* use serial garbage collection */
-XX:ThreadStackSize,          /* thread stack size (in KB) */
-XX:MaxInlineSize,            /* set max num of bytecodes to inline */
-XX:ReservedCodeCacheSize,    /* Reserved code cache size (bytes) */
-XX:MaxDirectMemorySize,
-XX:PrintCMSStatistics,               /* If > 0, Print statistics about the concurrent collections */
-XX:SurvivorRatio,                    /* Sets the ratio of the survivor spaces */
-XX:MaxTenuringThreshold,             /* Determines how much the objects may age */
-XX:CMSMarkStackSize,
-XX:CMSMarkStackSizeMax,
-XX:CMSIncrementalDutyCycleMin,       /* The percentage which is the lower bound on the duty cycle */
-XX:ParallelCMSThreads,
-XX:ParallelGCThreads,                /* Sets the number of parallel GC threads */
-XX:CMSInitiatingOccupancyFraction,   /* Sets the threshold percentage of the used heap */
-XX:+UseCompressedOops,               /* Enables compressed references in 64-bit JVMs */
-XX:GCPauseIntervalMillis,
-XX:MaxGCPauseMillis,                 /* A hint to the virtual machine to pause times */
-XX:+CMSIncrementalMode,              /* Enables the incremental mode */
-XX:StringDeduplicationAgeThreshold,
-XX:GCTimeLimit",
-XX:GCHeapFreeLimit",
-XX:MarkStackSize,
-XX:MarkStackSizeMax,
-XX:ConcGCThreads,

property要素はシステム・プロパティを定義します。これらのプロパティは、System.getProperty、System.setPropertiesの両メソッドを介して取得できます。これには2つの必須属性nameおよびvalueがあります。次に例を示します。

<property name="key" value="overwritten"/>

セキュアだとみなされるプロパティは、VMの起動後、アプリケーションの呼出し前に、Java Web Startによって設定されます。これらのプロパティは、呼び出されると-Dkey=value引数としてjavaコマンドに渡されます。次のプロパティはセキュアだとみなされます。

- 署名付きJNLPファイルに設定されているプロパティ

- 次の文字列のいずれかが前に付いた、署名されていないJNLPファイルに設定されているシステム・プロパティ: jnlp.、javaws.またはjavapi

- 事前定義されたセキュアなプロパティ:

sun.java2d.noddraw,
javaws.cfg.jauthenticator,
swing.useSystemFontSettings,
swing.metalTheme,
http.agent,
http.keepAlive,
sun.awt.noerasebackground,
sun.java2d.opengl,
sun.java2d.d3d,
java.awt.syncLWRequests,
java.awt.Window.locationByPlatform,
sun.awt.erasebackgroundonresize,
sun.awt.keepWorkingSetOnMinimize,
swing.noxp,
swing.boldMetal,
awt.useSystemAAFontSettings,
sun.java2d.dpiaware,
sun.awt.disableMixing,
sun.lang.ClassLoader.allowArraySyntax,
java.awt.smartInvalidate"
apple.laf.useScreenMenuBar,
java.net.preferIPv4Stack,
java.util.Arrays.useLegacyMergeSort",
sun.locale.formatasdefault,
sun.awt.enableExtraMouseButtons,
com.sun.management.jmxremote.local.only,
sun.nio.ch.bugLevel,
sun.nio.ch.disableSystemWideOverlappingFileLockCheck,
jdk.map.althashing.threshold

application-desc要素

application-desc要素は、JNLPファイルの起動対象が、アプレットではなくアプリケーションであることを示します。application要素には省略可能な属性main-class属性があり、アプリケーションのメイン・クラス(実行を開始する必要があるクラス)の名前を指定できます。

- Javaアプリケーションの場合、メイン・クラスはpublic static void main(String argv[])メソッドを含むクラスです。

- JavaFXアプリケーションの場合、メイン・クラスはjavafx.application.Applicationを拡張するクラスです。

main-class属性を省略できるのは、JNLPファイル内に指定された最初のJARファイルにMain-Class属性を含むマニフェスト・ファイルが含まれている場合です。

省略可能なtype属性を使用して、アプリケーションのタイプ(デフォルトのJavaまたはJavaFXのいずれか)を指定できます。Java Web Startでは、呼び出す方法を知るためにJavaFXアプリケーションであるかどうかがわかっている必要があります。

アプリケーションへの引数を指定するには、1つ以上のネストされたargument要素を含めます。次に例を示します。

<application-desc main-class="Main">
<argument>arg1</argument>
<argument>arg2</argument>
</application-desc>

アプレットの場合と同様に、1つ以上のparam要素を含めることによって、type属性がJavaFXに設定されたアプリケーションにパラメータを追加できます。次に例を示します。

<application-desc type="JavaFX" main-class="fxApp">
<param name="key1" value="value1"/>
<param name="key2" value="value2"/>
</application-desc>

(省略可能な) progress-class属性を使用すると、この名前のクラスがjavax.jnlp.DownloadServiceListenerインタフェースを実装することを示すことができます。このクラスは最初にロードし、ダウンロードされ検証される他のリソースの進捗を示すために使用できます。

applet-desc要素

Java Web Startは、Javaアプレットの起動をサポートします。このサポートにより、既存コードのJava Web Startへの移行が容易になります。

注意:
アプレットAPIは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。

アプレットは、application-desc要素ではなくapplet-desc要素を使用して起動されます。次に例を示します。

<applet-desc
documentBase="http://..."
name="TimePilot"
main-class="TimePilot.TimePilotApp"
width="527"
height="428">
<param name="key1" value="value1"/>
<param name="key2" value="value2"/>
</applet-desc>

アプレットを構成するJARファイルは、アプリケーションの場合と同様に、resources要素を使用して記述します。documentBaseを明示的に指定する必要があるのは、JNLPファイルがHTMLページに埋め込まれないからです。その他の属性はそれぞれ、特定のHTMLアプレット・タグ要素に対応します。

code属性のかわりにmain-class属性が使用されます。main-class属性にはAppletクラスの名前(.class拡張子は除く)を指定します。メインのJARファイル内のMain-Classマニフェスト・エントリからAppletクラスが検索可能である場合、この属性を省略してもかまいません。

(省略可能な) progress-class属性を使用すると、この名前のクラスがjavax.jnlp.DownloadServiceListenerインタフェースを実装することを示すことができます。このクラスは最初にロードし、ダウンロードされ検証される他のリソースの進捗を示すために使用できます。

注意:
アプレットは、Java Web Startで動作するためにJARファイル内にパッケージ化する必要があります。

component-desc要素

component-desc要素は、JNLPファイルがアプリケーションまたはアプレットではなく、アプリケーション、アプレットまたは他の拡張機能のリソースとして使用できる拡張機能であることを示します。

通常、コンポーネント拡張機能は、複数のアプリケーション間で共有される、または個別のセキュリティが必要なリソース・セットを取り除くために使用されます。

(省略可能な) progress-class属性を使用すると、この名前のクラスがjavax.jnlp.DownloadServiceListenerインタフェースを実装することを示すことができます。このクラスは最初にロードし、ダウンロードされ検証される他のリソースの進捗を示すために使用できます。

installer-desc要素

installer-desc要素は、JNLPファイルがアプリケーションを定義するインストーラの拡張機能であることを示します。この拡張機能のJNLPファイルは、アプリケーション、アプレットまたは他の拡張機能で最初に1度使用されると、その後は実行されません。

通常、インストーラの拡張機能は、ネイティブ・ライブラリをVMに単純にロードする以上に複雑な設定を必要とする、プラットフォーム固有のネイティブ・コードをインストールするために使用されます。

8 JNLP APIの例

JNLP APIは、標準のJava Platform Standard Edition API経由では入手不可能な追加情報を、アプリケーションに対して提供します。信頼できないアプリケーションに対しては、JNLP APIは、通常はセキュリティ・マネージャによって防止されるファイルの読取りと書込み、クリップボードやプリンタへのアクセスなどの操作のメソッドを提供します。

JNLP APIのpublicクラスおよびインタフェースは、libディレクトリのjavaws.jarファイルに含まれています。JNLP APIを使用しているソース・ファイルをコンパイルする際には、このJARファイルをクラス・パスに含める必要があります。たとえば、Windows上では次のようにします。

javac -classpath .;javaws.jar *.java

次のコード例は、JNLPサービスの使用方法を示しています。

- BasicServiceサービスの使用

- ClipboardServiceサービスの使用

- DownloadServiceサービスの使用

- DownloadService2サービスの使用

- DownloadServiceListenerサービスの実装

- FileOpenServiceサービスの使用

- FileSaveServiceサービスの使用

- IntegrationServiceサービスの使用

- PrintServiceサービスの使用

- PersistenceServiceサービスの使用

- FileContentsの使用

- JNLPRandomAccessFileの使用

- SingleInstanceServiceサービスの使用

- ExtendedServiceサービスの使用

BasicServiceサービスの使用

javax.jnlp.BasicServiceサービスは、環境に対する問合せおよび対話のための一連のメソッドを提供します。これらのメソッドは、AppletContextがJavaアプレットに提供するメソッドに似ています。

showURLメソッドはJNLP APIを使って、プラットフォーム上のデフォルト・ブラウザに対し、指定されたURLを表示するよう指示します。このメソッドは、要求が成功した場合にはtrueを返し、そうでない場合にはfalseを返します。

import javax.jnlp.*;
...

// Method to show a URL
boolean showURL(URL url) {
try {
// Lookup the javax.jnlp.BasicService object
BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
// Invoke the showDocument method
return bs.showDocument(url);
} catch(UnavailableServiceException ue) {
// Service is not supported
return false;
}
}

ClipboardServiceサービスの使用

javax.jnlp.ClipboardServiceサービスは、制限された実行環境で実行されているアプリケーションに対しても、システム全体の共有クリップボードにアクセスするためのメソッドを提供します。

Java Web Startは、クリップボードに格納されている内容(機密情報が含まれる可能性もある)へのアクセスや、そうした内容の上書きが信頼できないアプリケーションに許可されると、セキュリティ上の問題が発生する可能性があることをユーザーに警告します。

import javax.jnlp;
...

private ClipboardService cs;

try {
cs = (ClipboardService)ServiceManager.lookup
("javax.jnlp.ClipboardService");
} catch (UnavailableServiceException e) {
cs = null;
}

if (cs != null) {
// set the system clipboard contents to a string selection
StringSelection ss = new StringSelection("Java Web Start!");
cs.setContents(ss);
// get the contents of the system clipboard and print them
Transferable tr = cs.getContents();
if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try {
String s = (String)tr.getTransferData(DataFlavor.stringFlavor);
System.out.println("Clipboard contents: " + s);
} catch (Exception e) {
e.printStackTrace();
}
}
}

DownloadServiceサービスの使用

javax.jnlp.DownloadServiceサービスを使用すると、アプリケーションは自身のリソースをどのようにキャッシュするかを制御できます。

アプリケーションはこのサービスを使うことで、どのリソースがキャッシュされているかの確認、リソースの強制キャッシュ、およびキャッシュからのリソースの削除を行えます。

import javax.jnlp.*;
...

DownloadService ds;

try {
ds = (DownloadService)ServiceManager.lookup("javax.jnlp.DownloadService");
} catch (UnavailableServiceException e) {
ds = null;
}

if (ds != null) {

try {
// determine if a particular resource is cached
URL url =
new URL("http://www.example.com/draw.jar");
boolean cached = ds.isResourceCached(url, "1.0");
// remove the resource from the cache
if (cached) {
ds.removeResource(url, "1.0");
}
// reload the resource into the cache
DownloadServiceListener dsl = ds.getDefaultProgressWindow();
ds.loadResource(url, "1.0", dsl);
} catch (Exception e) {
e.printStackTrace();
}
}

DownloadService2サービスの使用

Java SE 6 update 18リリースで導入されたjavax.jnlp.DownloadService2サービスには次のメソッドがあります。

- getCachedResources – 指定されたバージョン、URL、およびリソース・タイプに一致する、キャッシュされたリソースをリストします。

- getUpdateAvailableResources–利用可能な更新が存在するリソースを確認し、一覧表示します。アプリケーションがバージョン・ダウンロード・プロトコルを使用している場合は、DownloadService2.ResourceSpecでバージョンを指定してください。それ以外の場合は、バージョンにnull値を指定します。

DownloadService2.ResourceSpecクラスのインスタンスは、確認するリソースの詳細を指定します。

import javax.jnlp.*;
...
DownloadService2 service = (DownloadService2)
ServiceManager.lookup("javax.jnlp.DownloadService2");

// create a new instance of ResourceSpec. In this example:
// - resource is downloaded from a directory on http://foo.bar.com:8080
// - version is 2. [0-9]+
// - resource type is JAR
ResourceSpec spec = new ResourceSpec("http://foo.bar.com:8080/.*", 2.*, service.JAR)

// returns all cached resources that match the given ResourceSpec
ResourceSpec results[] = service.getCachedResources(spec);

// returns all resources for which an update is available on the
// server http://foo.bar.com:8080.
results = service.getUpdateAvailableResources(spec);

DownloadServiceListenerサービスの実装

javax.jnlp.DownloadServiceListenerサービスは、アプリケーションのダウンロードの進捗を示すカスタマイズされたロード進捗インジケータを指定するためのメソッドを提供します。

FileOpenServiceサービスの使用

javax.jnlp.FileOpenServiceサービスが提供するメソッドを使えば、制限された実行環境で実行されているアプリケーションの場合でも、ローカル・ディスクからファイルをインポートできます。

このインタフェースの目的は、HTML使用時にWeb開発者に対して提供されるのと同じタイプのディスク・アクセス機能を、信頼できない可能性のあるWebデプロイ・アプリケーションに対して提供することです。HTMLフォームは、「開く」ダイアログ・ボックスの表示によるファイルの組込みをサポートしています。

import javax.jnlp.*;
...

FileOpenService fos;

try {
fos = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");
} catch (UnavailableServiceException e) {
fos = null;
}

if (fos != null) {
try {
// ask user to select a file through this service
FileContents fc = fos.openFileDialog(null, null);
// ask user to select multiple files through this service
FileContents[] fcs = fos.openMultiFileDialog(null, null);
} catch (Exception e) {
e.printStackTrace();
}
}

FileSaveServiceサービスの使用

javax.jnlp.FileSaveServiceサービスが提供するメソッドを使えば、制限された実行環境で実行されているアプリケーションの場合でも、ローカル・ディスクにファイルをエクスポートできます。

このインタフェースの目的は、Webブラウザが表示中の内容に関して提供するのと同レベルのディスク・アクセス機能を、信頼できない可能性のあるWebデプロイ・アプリケーションに対して提供することです。  ほとんどのブラウザは、「別名保存」ダイアログ・ボックスをユーザー・インタフェースの一部として提供しています。

import javax.jnlp.*;
...

FileSaveService fss;
FileOpenService fos;

try {
fos = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");
fss = (FileSaveService)ServiceManager.lookup
("javax.jnlp.FileSaveService");
} catch (UnavailableServiceException e) {
fss = null;
fos = null;
}

if (fss != null && fos != null) {
try {
// get a file with FileOpenService
FileContents fc = fos.openFileDialog(null, null);
// one way to save a file
FileContents newfc = fss.saveFileDialog(null, null,
fc.getInputStream(), "newFileName.txt");
// another way to save a file
FileContents newfc2 = fss.saveAsFileDialog(null, null, fc);

} catch (Exception e) {
e.printStackTrace();
}
}

「FileContentsの使用」も参照してください。

IntegrationServiceサービスの使用

javax.jnlp.IntegrationServiceサービスは、ショートカットをプログラムで管理するためのメソッドを提供します。アプリケーションではこのサービスを使用して次の操作を実行できます。

- デスクトップ・ショートカットの作成

- メニュー・ショートカットの作成

- ショートカットの問合せおよび削除

- MIMEタイプまたはファイル拡張子とのアプリケーションの関連付けの作成、問合せおよび削除

import javax.jnlp.*;
...

IntegrationService is = null;
try {
is = (IntegrationService) ServiceManager.lookup("javax.jnlp.IntegrationService");
} catch(UnavailableServiceException use){
...
}

// creates a desktop and system menu shortcut; returns true if the shortcuts
// were created successfully
boolean result = is.requestShortcut(true, true, null);

//removes all shortcuts for application
result = is.removeShortcuts();

// checks to see if there are shortcuts for the application
result = is.hasMenuShortcut() && is.hasDesktopShortcut());

// associates the application with the specified mime-type and file extensions
String mime = "x-application/aaa";
String [] exts = {"aaa", "abc"};
result = is.requestAssociation(mime, exts);

// checks if the application is associated with the specified mime-type and file extensions
result = is.hasAssociation(mime, exts);

// removes association between the application and the specified mime-type and file extensions
is.removeAssociation(mime, exts);

PrintServiceサービスの使用

javax.jnlp.PrintServiceサービスが提供するメソッドを使えば、制限された実行環境で実行されているアプリケーションの場合でも、印刷機能にアクセスできます。

アプリケーションはこのサービスを使うことで、印刷ジョブを発行できます。Java Web Startは、その要求をユーザーに表示し、ユーザーによって承認されると、その要求をプリンタのキューに追加します。

Java Web Start 5.0から、直接Java Printing APIが使用できるようになりました。サンドボックスでアプリケーションが実行されている場合、PrintPermissionの付与をユーザーに確認するセキュリティ・ダイアログ・ボックスがJava Web Startによって表示されます。JNLP Printing APIを使用する必要はなくなりました。どのJNLPアプリケーションでも、Java Printing APIにフル・アクセスできます。

import javax.jnlp.*;
...

PrintService ps;

try {
ps = (PrintService)ServiceManager.lookup("javax.jnlp.PrintService");
} catch (UnavailableServiceException e) {
ps = null;
}

if (ps != null) {
try {

// get the default PageFormat
PageFormat pf = ps.getDefaultPage();

// ask the user to customize the PageFormat
PageFormat newPf = ps.showPageFormatDialog(pf);

// print the document with the PageFormat above
ps.print(new DocToPrint());

} catch (Exception e) {
e.printStackTrace();
}
}

// Code to construct the Printable Document
class DocToPrint implements Printable {
public int print(Graphics g, PageFormat pageformat, int PageIndex){
// code to generate what you want to print
}
}

PersistenceServiceサービスの使用

javax.jnlp.PersistenceServiceサービスが提供するメソッドを使えば、制限された実行環境で実行されているアプリケーションの場合でも、クライアント・システム上にローカルにデータを格納できます。

このサービスは、cookieメカニズムがHTMLベースのアプリケーションに提供するサービスと類似するように設計されています。cookieを使用すると、少量のデータをローカルのクライアント・システムに保存できます。 そのデータはブラウザによって安全に管理でき、データを保存したページと同じURLのHTMLページによってのみ取得できます。

import javax.jnlp.*;
...

PersistenceService ps;
BasicService bs;

try {
ps = (PersistenceService)ServiceManager.lookup("javax.jnlp.PersistenceService");
bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
} catch (UnavailableServiceException e) {
ps = null;
bs = null;
}

if (ps != null && bs != null) {

try {
// find all the muffins for our URL
URL codebase = bs.getCodeBase();
String [] muffins = ps.getNames(url);

// get the attributes (tags) for each of these muffins.
// update the server's copy of the data if any muffins
// are dirty
int [] tags = new int[muffins.length];
URL [] muffinURLs = new URL[muffins.length];
for (int i = 0; i < muffins.length; i++) {
muffinURLs[i] = new URL(codebase.toString() + muffins[i]);
tags[i] = ps.getTag(muffinURLs[i]);
// update the server if anything is tagged DIRTY
if (tags[i] == PersistenceService.DIRTY) {
doUpdateServer(muffinURLs[i]);
}
}

// read in the contents of a muffin and then delete it
FileContents fc = ps.get(muffinURLs[0]);
long maxsize = fc.getMaxLength();
byte [] buf = new byte[fc.getLength()];
InputStream is = fc.getInputStream();
long pos = 0;
while((pos = is.read(buf, pos, buf.length - pos)) > 0) {
// just loop
}
is.close();

ps.delete(muffinURLs[0]);

// re-create the muffin and repopulate its data
ps.create(muffinURLs[0], maxsize);
fc = ps.get(muffinURLs[0]);
// don't append
OutputStream os = fc.getOutputStream(false);
os.write(buf);
os.close();

} catch (Exception e) {
e.printStackTrace();
}
}

void doUpdateServer(URL url) {
// update the server's copy of the persistent data
// represented by the given URL
...
ps.setTag(url, PersistenceService.CACHED);
}

FileContentsの使用

javax.jnlp.FileContentsオブジェクトは、ファイルの名前と内容をカプセル化します。 このクラスのオブジェクトは、FileOpenService、FileSaveServiceおよびPersistenceServiceによって使用されます。FileContentsのインスタンスを使用してファイルに対する読書きを行う方法の例を次に示します。

import javax.jnlp.*;
...

FileOpenService fos;

//Initialize fos (see Using the FileOpenService Service example)
...

if (fos != null) {

try {

// get a FileContents object to work with from the
// FileOpenService
FileContents fc = fos.openFileDialog(null, null);

// get the InputStream from the file and read a few bytes
byte [] buf = new byte[fc.getLength()];
InputStream is = fc.getInputStream();
int pos = 0;
while ((pos = is.read(buf, pos, buf.length - pos)) > 0) {
// just loop
}
is.close();

// get the OutputStream and write the file back out
if (fc.canWrite()) {
// don't append
OutputStream os = fc.getOutputStream(false);
os.write(buf);
}

} catch (Exception e) {
e.printStackTrace();
}
}

JNLPRandomAccessFileの使用

javax.jnlp.JNLPRandomAccessFileのインスタンスは、ランダム・アクセス・ファイルに対する読取りと書込みの両方をサポートします。ランダム・アクセス・ファイルの動作は、ファイル・システムに格納された大規模なバイト配列の動作に似ています。次のサンプル・コードは、JNLPRandomAccessFileのインスタンスを使ってランダム・アクセス・ファイルに対する書込みを行う方法を示したものです。

import javax.jnlp.*;
...

FileOpenService fos;

//Initialize fos (see Using the FileOpenService Service example)
...

if (fos != null) {
try {
// ask the user to choose a file to open
FileContents fc = fos.openFileDialog(null, null);

// attempt to increase the maximum file length
long grantedLength = fc.getLength();
if (grantedLength + 1024 > fc.getMaxLength()) {
// attempt to increase the maximum file size defined by
// the client
grantedLength = fc.setMaxLength(grantedLength + 1024);
}

// if we were able to increase the maximum allowable file size,
// get a JNLPRandomAccessFile representation of the file, and
// write to it
if (fc.getMaxSize() > fc.getLength() && fc.canWrite()) {
JNLPRandomAccessFile raf = fc.getRandomAccessFile("rw");
raf.seek(raf.length() - 1);
raf.writeUTF("Java Web Start!");
raf.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

SingleInstanceServiceサービスの使用

javax.jnlp.SingleInstanceServiceは、アプリケーションが自身をシングルトンとして登録し、また、アプリケーションの異なるインスタンスから渡された引数を処理するためのリスナーを登録する一連のメソッドを提供します。

import javax.jnlp.*;
...

SingleInstanceService sis;

...

try {
sis =
(SingleInstanceService)ServiceManager.lookup("javax.jnlp.SingleInstanceService");
} catch (UnavailableServiceException e) { sis=null; }

...

// Register the single instance listener at the start of your application

SISListener sisL = new SISListener();
sis.addSingleInstanceListener(sisL);

...

// Remember to remove the listener before your application exits

sis.removeSingleInstanceListener(sisL);
System.exit(0);

// Implement the SingleInstanceListener for your application

class SISListener implements SingleInstanceListener {
public void newActivation(String[] params) {

// your code to handle the new arguments here

...
}
}

ExtendedServiceサービスの使用

javax.jnlp.ExtendedServiceは、現在のJNLP APIに対する追加サポートを提供します。これを使用すると、アプリケーションは、クライアントのファイル・システムの特定のファイルを開くことができます。

import javax.jnlp.*;
...

ExtendedService es;

...

try {
es =
(ExtendedService)ServiceManager.lookup("javax.jnlp.ExtendedService");
} catch (UnavailableServiceException e) { es=null; }

...

// Open a specific file in the local machine

File a = new File("c:\somefile.txt");

...

// Java Web Start will pop up a dialog asking the user to grant permission
// to read/write the file c:\somefile.txt

FileContents fc_a = es.openFile(a);

// You can now use the FileContents object to read/write the file

...

// Open a specific set of files in the local machine

File[2] fArray = new File[2];

fArray[0] = a;
fArray[1] = new File("c:\anotherFile.txt");

// Java Web Start will pop up a dialog asking the user to grant permission
// to read/write files in fArray

FileContents[] fc_Array = es.OpenFiles(fArray);

// You can now read/write the set of files in fc_Array using the
// FileContents objects

}

javawsコマンドの使用の詳細は、Java Platform, Standard Editionツール・リファレンスのjavawsを参照してください。

第IV部 デプロイメントの構成およびモニタリング

この部のトピックでは、デプロイメント・オプションの構成に使用されるJavaコントロール・パネル、およびJavaデスクトップ環境の管理に使用されるデプロイメント・ルール・セットに関する情報を提供します。

- Javaコントロール・パネル

- デプロイメント・ルール・セット

9 Javaコントロール・パネル

Javaコントロール・パネルは、ブラウザに埋め込まれたりブラウザから起動されるJavaおよびJavaFXアプリケーションをコンピュータ上で実行する方法を制御するために使用されます。Javaコントロール・パネルの設定は、スタンドアロン・アプリケーションおよび自己完結型アプリケーションでは使用されません。

Javaコントロール・パネルには次のタブがあります。

- 一般

- 更新

- デスクトップ設定

- Webの設定

- セキュリティ

- 詳細

すべてのタブに検索フィールドが含まれています。このフィールドを使用して、入力した検索条件に関連する設定を検索します。

Javaコントロール・パネルの概要

Javaコントロール・パネルでは、ブラウザに埋め込まれたりブラウザから起動されるJavaおよびJavaFXアプリケーションの実行方法を管理する設定が保持されます。

注意:
アプレットAPIおよびJava Plug-inは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットおよび埋込みJavaFXアプリケーションに代わるものには、Java Web Startおよび自己完結型アプリケーションがあります。

JDK 9では、Javaコントロール・パネルはJavaFXアプリケーションとして書き直され、一部の機能の場所が変更されました。

Javaコントロール・パネルをコマンド行から起動するには、Windowsでは<JRE installation home>\bin\javacpl.exe、macOSまたはLinuxでは<JRE installation home>/bin/jcontrolと入力します。Javaコントロール・パネルには次の機能があります。

- ブラウザに埋め込まれたアプレットおよびJavaFXアプリケーションを実行するJava Plug-inや、JavaおよびJavaFXアプリケーションをネットワークを介して実行できるようにするJava Web Startで使用される一時ファイルを、表示および削除します。

- 常に最新のJava Runtime Environment (JRE)を使用できるようにJavaプラットフォームのバージョンを更新します。

- システム上のJREを管理し、そのランタイム・パラメータを設定します。

- 証明書を管理します。

- システムのアクティブなデプロイメント・ルール・セットを表示します(存在する場合)。

- システムの例外サイト・リストを管理します。

- プロキシ設定を構成します。

- ブラウザに埋め込まれたりブラウザから起動されるJavaおよびJavaFXアプリケーションの拡張セキュリティ制限を有効にします。

- デバッグ、アプレット処理およびその他の機能の設定を構成します。

- Javaコントロール・パネルで構成する設定を検索します。

Javaコントロール・パネルの「一般」タブ

「一般」タブには、実行しているJavaランタイム(JRE)のバージョンおよびJREのセキュリティ・ステータスが表示されます。

実行しているJREは、Javaのバージョン番号およびビルド番号によって識別されます。セキュリティ・ステータスは次の属性によって決定されます。

- セキュリティ・ベースライン - Javaの推奨される最小更新。

- 有効期限 - 次のクリティカル・パッチ・アップデートのスケジュール済リリースに関連する日付。有効期限後は、追加のセキュリティ修正を使用できる場合があります。

JREがセキュリティ・ベースラインより下であるか、有効期限を過ぎている場合、最新バージョンにアップグレードするよう薦められます。

Javaコントロール・パネルの「更新」タブ

「更新」タブでは、更新のチェックをいつ行うかが表示され、更新プロセスの設定を変更できます。

自動更新はMicrosoft WindowsおよびmacOSでのみサポートされています。更新機能は、Java Update Scheduler (jusched.exe)で動作して、最新のJava更新を提供します。JREを更新するには管理権限が必要です。

このタブから、インストールされているシステムJREを自動または手動で更新できます。複数のJREをインストールしている場合、「デスクトップ設定」タブにシステムJREとみなされるJREが表示されます。Javaコントロール・パネルの「デスクトップ設定」タブを参照してください。

「更新」タブでは、次の表に示すオプションが提供されます。両方のプラットフォームですべてのオプションが使用できるわけではありません。

オプション

説明

更新で次を行う前に通知する

更新が使用可能であることをいつ通知するかを示します。オプションは次のとおりです。

- ダウンロード - 更新がダウンロードされる前に通知します。

- インストール - 更新がダウンロードされた後、インストールされる前に通知します。

更新を自動的にチェックします(推奨)

更新のチェックが自動的に行われるかどうかを示します。このオプションはデフォルトで有効化されています。チェックがスケジュールされている時間が表示されます。スケジュールを設定するには、更新のチェックのスケジュールを参照してください。

今すぐ確認

クリックしたときに更新をチェックします。最終チェックの時間がボタンの上に表示されます。

最新バージョンのJavaのダウンロード元java.com

最新のJREをダウンロードできるリンクが提供されます。

更新のチェックのスケジュール

Javaコントロール・パネルの「更新」タブから、JREの自動更新の時間および頻度を設定します。手動チェックは同じタブからいつでも行えます。

JREを更新するには管理権限が必要です。次の手順は、Microsoft Windowsの場合です。macOSの場合は、使用できないオプションがあります。更新をチェックするには、次の手順を実行します。

1. 更新をすぐにチェックするには、「今すぐ確認」をクリックします。最終チェックの時間がボタンの上に表示されます。

2. 更新の自動チェックをスケジュールするには、次の手順を実行します。

a. 「更新を自動的にチェックします」を選択します。設定したスケジュールでJREが自動的に更新されます。

b. 「更新で次を行う前に通知する」ドロップダウン・リストから、更新のダウンロード前に通知するか、更新のダウンロード後のインストール前に通知するかを選択します。

c. 「更新の確認」に表示される日時をクリックして、更新のスケジュールを設定します。
「自動更新の詳細設定」ウィンドウが表示されます。

d. チェックを実行する頻度および日時を選択します。
「毎日」、「毎週」または「毎月」を選択します。日次更新の場合、更新をする時間を選択します。週次更新の場合、曜日と時間を選択します。月次更新の場合、曜日と時間を選択します。月次更新では、毎週チェックが行われ、更新が使用可能であることが30日以内に通知されます。ただし、更新が重要と見なされた場合は、リリースから1週間以内に通知されます。

e. 「自動更新の詳細設定」ウィンドウを閉じて、「更新」タブで選択を確認します。

f. 「適用」をクリックして変更を保存するか、「OK」をクリックして変更を保存してJavaコントロール・パネルを閉じます。

Java Update Scheduler

Microsoft Windowsプラットフォームでは、Java Update Scheduler (jusched.exe)は、「更新」タブで自動的に更新するオプションを選択したときに、自動更新を起動するために使用します。jusched.exeはバックグラウンド・プロセスとして実行され、ユーザーがあらかじめJavaコントロール・パネルの「更新」タブで定義した間隔でUpdate Managerを起動します。Update Managerでは、更新プロセスを調整します。

JDKまたはJREのインストール後、ユーザーがコンピュータを再起動すると、jusched.exeが起動します。通常、ユーザーには実行していることがわかりませんが、「Windows タスク マネージャ」の「プロセス」タブで確認できます。スケジューラを実行したくない場合は、「プロセス」タブの「プロセスの終了」ボタンを使用してプロセスを終了します。

Javaコントロール・パネルの「デスクトップ設定」タブ

「デスクトップ設定」タブには、システムにインストールされているJREに関する情報が表示され、ここでは、Webページに埋め込まれたりブラウザから起動されるアプリケーションの実行に使用するJREを選択できます。

次の表に、コンピュータで検出される各JREに対して表示される情報を示します。

設定

説明

Web対応

Java Plug-inまたはJava Web Startを使用してアプリケーションを実行する際に考慮するJREのバージョンを示すフラグです。Javaコントロール・パネルの設定は、スタンドアロン・アプリケーションまたは自己完結型アプリケーションには適用されません。JREのチェック・ボックスが選択されていない場合、Java Plug-inおよびJava Web StartはJavaアプリケーションの起動にJREを使用しません。ただし、これが有効とマークされていなくても、現在のJREが使用される可能性があります。

注意: Javaコントロール・パネルの「セキュリティ」タブの、ブラウザでのJavaコンテンツが無効になっている場合、「デスクトップ設定」タブでJREを有効にしても効果はありません。

プラットフォーム

JREのJavaプラットフォーム番号(1.8や9など)

製品

更新番号を含むJREの完全なバージョン番号(1.8.0_101など)

アーキテクチャ

JREのアーキテクチャ

タイプ

検出されたJREのタイプ。次のいずれかの値です。

- システム - Javaコントロール・パネルの起動に使用されたJRE

- ユーザー - 登録済のJREとユーザーが追加したJREのすべて

パス

JREへのフルパス

ランタイム・パラメータ

Java Plug-inのデフォルト起動パラメータをオーバーライドするために使用される、オプションのカスタム・オプション。Javaランタイム・パラメータを参照してください

表には常に少なくとも1エントリが存在します。そのエントリは、最新のインストール済JREです。これは、Javaコントロール・パネルに関連付けられたJREです。

Microsoft Windowsの場合は、コンピュータにインストールされているJREがすべて表示されます。Javaコントロール・パネルでは、レジストリを調べてJREを検索します。Solaris、LinuxおよびmacOSの場合は、Java Web StartまたはJava Plug-inがアプリケーションをデプロイするために使用しているJREは、登録済とみなされているJREです。「追加」および「削除」ボタンを使用して、表にリストされるJREを変更します。「デスクトップ設定」の編集を参照してください。macOSでは、現在インストールされているJREのみが表示され、JDKは含まれません。

「デスクトップ設定」の編集

「デスクトップ設定」タブの表のJREを追加または削除でき、各JREにランタイム・パラメータを設定できます。

次の機能をコンピュータのJREの管理に使用できます。

- ユーザーJREのランタイム・パラメータを変更するには、JREを選択し、「ランタイム・パラメータ」列のセルをクリックし、値を編集します。

- 表にJREを追加するには、「追加」をクリックします。JREの場所を参照し、ホーム・フォルダを選択します。

- 表からJREを削除するには、JREを選択し、「削除」をクリックします。
システムJREは削除できません。

Javaランタイム・パラメータ

Java Plug-inのデフォルトの起動パラメータをオーバーライドするには、Javaコントロール・パネルの「デスクトップ設定」タブに表示されたJREの「ランタイム・パラメータ」列でカスタム・オプションを指定します。

注意:
Java Plug-inは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。プラグインを必要とするアプレットおよび埋込みJavaFXアプリケーションに代わるものには、Java Web Startおよび自己完結型アプリケーションがあります。

classpathおよびcpの設定を除いて、構文は、javaコマンド行の呼出しのためのパラメータで使用されるものと同じです。

次の各項では、Javaランタイム・パラメータの例を示します。

- classpathまたはcpの設定

- アサーションのサポートの有効化および無効化

- トレースおよびロギングのサポート

- Java Plug-inでのアプレットのデバッグ

- デフォルトの接続タイム・アウト

コマンド行オプションの完全なリストは、Java Platform, Standard Editionツール・リファレンスのjavaコマンドを参照してください。

classpathまたはcpの設定

Java Plug-inでclasspathまたはcpを設定するには、次の形式を使用します。これは、javaコマンド行の形式とは少し異なります。javaコマンド行では、等号記号(=)のかわりに空白を使用します。

-classpath=path
-cp=path

次の例は、Windowsの場合のクラス・パスを示しています。

-cp=C:\apps\java\MyClasses;C:\java\OtherClasses

次の例は、Linuxの場合のクラス・パスを示しています。

-cp=apps/java/MyClasses:/java/OtherClasses

アサーションのサポートの有効化および無効化

システム・プロパティを使用して、アサーションのサポートを有効化および無効化します。

アサーションのサポートを有効にするには、次のシステム・プロパティを使用します。

-[ enableassertions | ea ][:<package name>"..." | : <class name> ]

Java Plug-inでアサーションを無効にするには、次のシステム・プロパティを使用します。

-[ disableassertions | da ][:<package name>"..." | : <class name> ]

アサーションはJava Plug-inのデフォルト設定では無効になっています。アサーションの効果は Java Plug-inの起動中に決定されます。Java Plug-inコントロール・パネルでアサーション設定を変更した場合は、ブラウザを再起動して新しい設定を有効にする必要があります。

Java Plug-inのJavaコードにも組込みアサーションがあるため、次のパラメータを使用して、Java Plug-inコードのアサーションを有効にすることができます。

-[ enableassertions | ea ]:sun.plugin

トレースおよびロギングのサポート

トレースとは、Javaコンソールでの任意の出力をトレース・ファイル(plugin<random-number>.traceまたはjavaws<random-number>.trace)にリダイレクトする機能のことです。次のパラメータを使用して、トレースを有効にします。

-Ddeployment.trace=true
-Ddeployment.trace.option=basic|net|security|ext|liveconnect

デフォルトのトレース・ファイル名を使用しない場合、次のパラメータを使用して、別の名前を指定します。

-Ddeployment.trace.filename=<tracefilename>

トレースと同様に、ロギングとはJavaコンソールでの任意の出力を、Java Logging APIを使用してログ・ファイル(plugin<random-number>.logまたはjavaws<random-number>.log)にリダイレクトする機能のことです。次のパラメータを使用して、ロギングを有効にします。

-Ddeployment.logging=true

デフォルトのログ・ファイル名を使用しない場合、次のパラメータを使用して、別の名前を指定します。

-Ddeployment.log.filename=<logfilename>

さらに、セッションごとにトレース・ファイルおよびログ・ファイルを上書きしないようにする場合、次のパラメータを使用できます。

-Ddeployment.outputfiles.overwrite=false

Javaコントロール・パネルによるトレースおよびロギングの設定は、Plug-inの起動時に有効になります。ただし、Plug-inの実行中にJavaコントロール・パネルで変更を加えても、再起動するまで有効にはなりません。

Java Plug-inでのアプレットのデバッグ

次のパラメータは、Java Plug-inでアプレットをデバッグするときに使用されます。

-Djava.compiler=NONE
-Xnoagent
-Xdebug
-Xrunjdwp:transport=dt_shmem,address=<connect-address>,server=y,suspend=n

<connect-address>には、後でJavaデバッガ(jdb)によってJVMへの接続に使用される任意の文字列(2502など)を指定できます。

注意:
アプレットAPIおよびJava Plug-inは、JDK 9で使用可能でありサポートされていますが、将来のリリースでの削除に備えて非推奨とマークされています。アプレットおよび埋込みJavaFXアプリケーションに代わるものには、Java Web Startおよび自己完結型アプリケーションがあります。

デフォルトの接続タイム・アウト

すべてのHTTP接続に対するデフォルトのネットワーク・タイムアウト値は、2分です。次のパラメータを使用して、この設定をオーバーライドできます。

-Dsun.net.client.defaultConnectTimeout=value-in-milliseconds

次の例に示すように、設定できる別のネットワーク機能プロパティは、sun.net.client.defaultReadTimeoutです。

-Dsun.net.client.defaultReadTimeout=value-in-milliseconds

注意:

Java Plug-inでは、デフォルトでsun.net.client.defaultReadTimeoutが設定されていません。設定する場合は、上記の「Javaランタイム・パラメータ」で設定してください。

次のネットワーク機能パラメータを使用して、java.net.URLConnectionで使用されるプロトコル・ハンドラに対して、接続および読取りタイムアウト値を設定することもできます。プロトコル・ハンドラによって設定されるデフォルト値は-1で、これはタイム・アウトが設定されていないことを意味します。

- sun.net.client.defaultConnectTimeoutは、ホストへの接続を確立する際のタイムアウト(ミリ秒)を指定します。たとえば、HTTP接続の場合は、HTTPサーバーへの接続を確立する際のタイムアウトのことです。FTP接続の場合は、FTPサーバーへの接続を確立する際のタイムアウトのことです。

- sun.net.client.defaultReadTimeoutは、リソースへの接続が確立されているときの、入力ストリームから読み取る際のタイムアウト(ミリ秒)を指定します。

Javaコントロール・パネルの「Webの設定」タブ

「Webの設定」タブには、Javaアプリケーションに対する権限、およびアプリケーションがネットワークに接続する方法に関する情報が表示されます。このタブでは、一時ファイルおよびJavaキャッシュを管理することもできます。

「Webの設定」タブには、次のタブがあります。

- 「例外サイト・リスト」タブ

- 「デプロイメント・ルール・セット」タブ

- 「一時ファイルの設定」タブ

- 「ネットワーク設定」タブ

- 「Javaキャッシュ・ビューア」タブ

「例外サイト・リスト」タブ

「Webの設定」タブの「例外サイト・リスト」タブを使用すると、リッチ・インターネット・アプリケーション(RIA)が通常はセキュリティ・チェックによってブロックされる場合でも実行されるRIAを管理できます。

リストに記載された場所からのRIAは、適切なセキュリティ・プロンプトを表示して実行されることが許可されます。リストを管理するには次のコントロールを使用します。

- 場所を追加するには「追加」をクリックします。

- 場所を削除するには、エントリを選択して「削除」をクリックします。

- エントリを編集するには、そのエントリをダブルクリックします。

- リストで検索条件が含まれるサイトを検索するには、「フィルタ」フィールドを使用します。

場所のURLの形式には次のルールが適用されます。

- プロトコルは必須です。
サポートされているプロトコルは、HTTPS (https://)、HTTP (http://)およびFILE (file:///)です。HTTPSをお薦めします。FILEおよびHTTPプロトコルはセキュリティ・リスクとみなされます。

- ドメインは必須です。
ワイルドカードはサポートされていません。ドメインのみを指定した場合は、そのドメインからのすべてのRIAが実行を許可されます。1つのドメインに複数のエントリを含めることができます(例: https://www.example.comとhttp://www.example.com)。

- ポート番号は、デフォルトのポートが使用されない場合にのみ必要です。

- パスはオプションです。
ワイルドカードはサポートされていません。パスがスラッシュで終わる場合(例: file:///C:\local\apps\)、そのディレクトリとすべてのサブディレクトリに含まれるRIAが実行を許可されます。パスがスラッシュで終わらない場合(例: file:///C:\local\apps\applet.html)、その特定のRIAのみが実行を許可されます。

- 形式は、RIA URLまたはhref属性に使用される形式と同じである必要があります。
たとえば、https://www.example.com/sample/app/sample1/../sample2およびhttps://www.example.com/sample//app/sample2はhttps://www.example.com/sample/app/sample2と一致するとはみなされません。

「デプロイメント・ルール・セット」タブ

「Webの設定」タブの「デプロイメント・ルール・セット」タブには、リッチ・インターネット・アプリケーション(RIA)の実行およびブロックを管理する、アクティブなデプロイメント・ルール・セットが表示されます。

アクティブなデプロイメント・ルール・セットがシステムにインストールされている場合、次の情報が表示されます。

- ルール・セットが有効であるという通知、またはルール・セットが無効であるという警告

- 「ルール」タブのルールを表示するテキスト・ボックス、および「証明書の詳細」タブのルール・セットの署名に使用された証明書に関する情報

- ルール・セットの署名のタイムスタンプ

- ルール・セットの場所

- ルール・セットの署名の有効期限

ルール・セットが使用可能な場合、それらのルールによって、RIAがセキュリティ・プロンプトなしで実行されるか、セキュリティ・プロンプトを表示して実行されるか、またはブロックされるかが判断されます。デプロイメント・ルールおよびルール・セットは、デプロイメント・ルール・セットで説明されています。

「一時ファイルの設定」タブ

「Webの設定」タブの「一時ファイルの設定」タブでは、Webページに埋め込まれたりWebページから起動されるアプリケーションのためにキャッシュされたファイルを管理できます。

このタブから、次のアクションを実行できます。

- 一時ファイルをコンピュータに保持するかどうかを選択します。

- 一時ファイルが保持される場所を設定します。

- キャッシュされるJARファイルの圧縮レベルを設定します。圧縮レベルが高いほど、ファイルが圧縮されます。

- 一時ファイルを格納するディスク領域の量を設定します。

- 「ファイルの削除」をクリックして「ファイルおよびアプリケーションの削除」ダイアログを表示し、一時ファイルを削除します。このダイアログから、削除するファイルのタイプを選択できます。

- 「トレースおよびログ・ファイル」

- 「キャッシュされたアプリケーションおよびアプレット」

- 「インストールされたアプリケーションおよびアプレット」

- 「デフォルトの復元」をクリックして、「一時ファイルの設定」ダイアログのデフォルト設定を復元します。

「ネットワーク設定」タブ

「Webの設定」タブの「ネットワーク設定」タブでは、ネットワークへの接続を構成できます。

使用可能なオプションを次の表に示します。

設定

説明

「ブラウザの設定を使用」

このオプションを選択すると、ブラウザのデフォルトのプロキシ設定を使用します。これがデフォルトの設定です。

「プロキシ・サーバーを使用」

このオプションを選択すると、使用するプロキシ・サーバーのアドレスおよびポート番号を指定します。ローカル・アドレスのプロキシ・サーバーをバイパスするオプションを使用できます。

異なるプロトコルに別のアドレスを指定するには、「詳細」をクリックします。プロキシ・サーバーをバイパスするアドレスを指定することもできます。

「自動プロキシ構成スクリプトを使用」

このオプションを選択すると、FindProxyForURL関数を格納しているJavaScriptファイル(.jsまたは.pac拡張子)のURLを指定します。FindProxyForURLには、接続要求に使用するプロキシ・サーバーを決定するロジックが含まれています。

「直接接続」

プロキシを使用しない場合は、このオプションを選択します。

「Javaキャッシュ・ビューア」タブ

「Webの設定」タブの「Javaキャッシュ・ビューア」タブには、Javaキャッシュに格納されたアプリケーション、リソースおよび削除済アプリケーションが表示されます。

このタブから、アイコンを使用するかアプリケーションを右クリックして、ユーザーまたはシステムに対して次のアクションを実行できます。

- アプリケーション:

- アプリケーションを実行します。

- アプリケーションのWebページにアクセスします。

- アプリケーションのJNLPファイルを表示します。

- アプリケーションへのショートカットをインストールします。

- リストからアプリケーションを削除します。アプリケーションは削除済アプリケーションのリストに移動します。

- リソース:

- リソースのJNLPファイルを表示します。

- リソースを削除します。

- 削除済アプリケーション:

- 削除済アプリケーションをインストールします。

- キャッシュからアプリケーションを削除します。

- リソースのJNLPファイルを表示します。

- 削除済アプリケーションをインストールします。

Javaコントロール・パネルの「セキュリティ」タブ

「セキュリティ」タブには、一般的なセキュリティ設定およびRIAの署名に使用される証明書に関する情報が表示されます。

「セキュリティ」タブには、次のタブがあります。

- 一般的なセキュリティ設定タブ

- 「証明書の管理」タブ

一般的なセキュリティ設定タブ

「セキュリティ」タブの「一般」タブには、実施されているセキュリティ設定が表示されます。このタブでは、セキュリティ・プロンプトを復元することもできます。

次の表に、使用可能なオプションを示します。

オプション

説明

ブラウザでJavaコンテンツを有効にする

ブラウザ内で実行されたりブラウザから起動されるJavaアプリケーションを有効にします。このようなタイプのアプリケーションが実行されないようにするには、このオプションを選択しません。このオプションはデフォルトで選択されます。

拡張セキュリティ制限を有効にする

アプリケーションの署名に使用される証明書の失効状態をシステムが確認できる必要があり、確認できない場合はアプリケーションがブロックされることを要求する追加の制限を追加します。

選択されていない場合、「署名者のCA」のキーストアに格納されている有効な証明書で署名され、メインJARファイルのマニフェストにPermissions属性が含まれているアプリケーションは、セキュリティ・プロンプトを表示して実行されることが許可されます。このオプションは、デフォルトでは選択されていません。

セキュリティ・プロンプトの復元

前に非表示にしたセキュリティ・プロンプトを復元します。選択内容の確認を求められたら、「すべて復元」をクリックします。次回アプリケーションを起動する際に、セキュリティ・プロンプトが表示されます。

システムのセキュリティを継続的に確保するには、非表示にされたプロンプトを定期的に復元することをお薦めします。それらのプロンプトを再度表示すると、アプリケーションを見直して、その実行が引き続き必要かどうかを確認する機会が与えられます。

「証明書の管理」タブ

実行するRIAの検証に使用されるユーザー・レベルおよびシステム・レベルの証明書は、「セキュリティ」タブの「証明書の管理」タブから管理できます。

このタブから、証明書の詳細をインポート、エクスポート、削除および表示できます。次のタイプの証明書の情報が提供されます。

- 信頼できる証明書 - 信頼できる署名済みRIAの証明書です。

- セキュア・サイト - セキュア・サイトの証明書です。

- 署名者のCA - 信頼できる証明書の署名者に対して証明書を発行する認証局(CA)の証明書です。

- セキュア・サイトのCA - セキュア・サイトの証明書を発行するCAの証明書です。

- クライアント認証 - クライアントによる、サーバーに対する自身の認証に使用される証明書です。

ユーザー・レベルの証明書

「証明書」ダイアログに表示されるボタンを使用して、ユーザー・レベルの証明書の詳細をエクスポート、インポート、削除および表示できます。詳細をエクスポート、削除または表示するには、まずリストから証明書を選択します。

次の表に、keystoreファイルのデフォルトの位置を示します。

表9-1 デフォルトのキーストアの位置

オペレーティング・システム

場所

Solaris、Linux、macOS

${user.home}/.java/deployment/security

Microsoft Windows

${deployment.user.home}\security

たとえば、Microsoft Windows 7では、ユーザーjsmithのデフォルトの位置は次のとおりです。

C:\Users\jsmith\AppData\LocalLow\Sun\Java\Deployment\security

デフォルトの位置以外の位置にユーザー・レベルのキーストアを指定するには、ユーザー・レベルのdeployment.propertiesファイルでプロパティを設定します。次の表では、証明書の各タイプに設定するプロパティについて説明します。

表9-2 ユーザー・レベルのキーストアの位置のプロパティ

証明書タイプ

プロパティ名

信頼できる証明書

deployment.user.security.trusted.certs

セキュア・サイト

deployment.user.security.trusted.jssecerts

署名者のCA

deployment.user.security.trusted.cacerts

セキュア・サイトのCA

deployment.user.security.trusted.jssecacerts

クライアント認証

deployment.user.security.trusted.clientcerts

システム・レベルの証明書

「証明書」ダイアログに表示されるボタンを使用して、システム・レベルの証明書の詳細をエクスポートおよび表示できます。システム・レベルの証明書は、エンド・ユーザーによってインポートまたは削除することはできません。

「信頼できる証明書」、「セキュア・サイト」、および「クライアント認証」の証明書には、keystoreファイルはデフォルトでは存在しません。次の表に、「署名者のCA」キーストア・ファイルのデフォルトの位置を示します。

表9-3 「署名者のCA」のキーストアのデフォルトの位置

オペレーティング・システム

場所

LinuxまたはmacOS

$JAVA_HOME/lib/security/cacerts

Microsoft Windows

$JAVA_HOME\lib\security\cacerts

次の表に、「セキュア・サイトのCA」キーストアのデフォルトの位置を示します。

表9-4 「セキュア・サイトのCA」のキーストアのデフォルトの位置

オペレーティング・システム

場所

Solaris、LinuxまたはmacOS

$JAVA_HOME/lib/security/jssecacerts

Microsoft Windows

$JAVA_HOME\lib\security\jssecacerts

デフォルトの位置以外の位置にシステム・レベルのキーストアを指定するには、システム・レベルのdeployment.propertiesファイルでプロパティを設定します。システム・レベルのdeployment.propertiesファイルはデフォルトでは存在しません。次の表では、証明書の各タイプに設定するプロパティについて説明します。

表9-5 システム・レベルのキーストアの位置のプロパティ

証明書タイプ

プロパティ名

信頼できる証明書

deployment.system.security.trusted.certs

セキュア・サイト

deployment.system.security.trusted.jssecerts

署名者のCA

deployment.system.security.trusted.cacerts

セキュア・サイトのCA

deployment.system.security.trusted.jssecacerts

クライアント認証

deployment.system.security.trusted.clientcerts

Javaコントロール・パネルの「詳細」タブ

「詳細」タブでは、JREで使用可能なオプションを設定できます。

次のオプションを使用できます。

- 「デバッグ」

- 「Javaコンソール」

- 「ショートカットの作成」

- 「JNLPファイル/MIMEのアソシエーション」

- 「アプリケーションのインストール」

- 「実行環境セキュリティ設定」

- 「混合コード(サンドボックス内実行vs.信頼済)セキュリティ検証する」

- 「署名付きコード証明書失効チェックを実行」

- 「次を使用した署名付きコード証明書失効のチェック」

- 「高度なセキュリティ設定」

- 「その他」

デバッグ

適切なチェック・ボックスを選択することによって、アプレットのライフサイクル例外のトレース、ロギングおよび表示を有効にします。ボックスが選択されていない場合、オプションは無効になっています。

Javaコンソール

「Javaコンソール」は、JavaアプレットおよびJava Web Startアプリケーション用のデバッグ補助機能です。System.outメッセージ、System.errメッセージ、トレースおよびロギングの出力がコンソールに表示されます。

コンソールの表示について、次の中から選択できます。

- 「コンソールを表示する」

- 「コンソールを表示しない」(デフォルト)

- 「コンソールを開始しない」

ショートカットの作成

このオプションでは、Java Web Start用にデスクトップにショートカットを作成するための次の選択肢が提供され、1つのみ選択します。

- 「常に許可する」

- 「信頼できない場合にユーザーに確認」(デフォルト)

- 「常にユーザーに確認」

- 「許可しない」

JNLPファイル/MIMEのアソシエーション

このオプションでは、ファイルをJNLP MIMEタイプに関連付けることができます。次の中から選択でき、1つのみ選択します。

- 「常に許可する」

- 「ユーザーに尋ねる」(デフォルト)

- 「許可しない」

アプリケーションのインストール

次の中から選択でき、1つのみ選択します。

- 「促された場合はインストール」(デフォルト)

- 「ショートカットが作成された場合はインストール」

- 「促されてショートカットがある場合はインストール」

- 「インストールしない」

Java Web Startを使用して起動されたJavaアプリケーションまたはアプレットは、クライアント・コンピュータ上にインストールすることもキャッシュすることもできます。Javaアプリケーションがキャッシュされる場合、Java Web Startはアプリケーション全体をキャッシュに格納します。アプリケーションは、Java Web Startがキャッシュを空にするときに、クライアント・コンピュータから削除されます。Javaアプリケーションがインストールされる場合、Windowsの「コントロール パネル」の「プログラムの追加と削除」アプレットにアプリケーションのエントリが表示されます。

Javaアプリケーションまたはアプレットでは、キャッシュとインストールのどちらを優先するのかを指定することができます。Javaアプリケーションでインストールを優先するように指定した場合は、そのように促されます。デフォルトでは、促されたJavaアプリケーションがクライアント・コンピュータにインストールされます。クライアント・コンピュータのデスクトップにショートカットを作成する場合は、Javaアプリケーションがインストールされるように指定することもできます。

実行環境セキュリティ設定

次の中から選択でき、複数を選択できます。

- 「ユーザーが署名済コンテンツにアクセス権を与えることを許可する」

- 「サンドボックス警告バナーを表示する」

- 「ユーザーがJNLPセキュリティ・リクエストを受け入れることを許可する」

- 「証明書が存在しないか1つのみ存在する場合にクライアント証明書の選択を尋ねない」

- 「サイト証明書でホスト名が一致しない場合に警告する」

- 「有効な場合でもサーバーからのサイト証明書を表示する」(デフォルトで選択されない)

「混合コード(サンドボックス内実行vs.信頼済)セキュリティ検証する」

次の中から選択でき、1つのみ選択します。

- 「有効 - 必要であれば警告を表示する」(デフォルトで選択)

- 「有効 - 警告を表示せずに、保護をかけて実行する」

- 「有効 - 警告は表示しないが、信頼できないコードは実行しない」

- 「検証を無効にする(非推奨)」

署名付きコード証明書失効チェックを実行

署名付きのアプレットまたはJava Web Startアプリケーションが実行される前に、JARファイルの署名に使われた証明書をチェックして、失効しているものがないことを確認できます。すべての証明書をチェックすることも、アプリケーションのパブリッシャからの証明書のみをチェックすることもできます。証明書が失効している場合、その証明書で署名されているRIAの実行は許可されません。このチェックを無効にすることもできますが、それはお薦めできません。次の中から選択でき、1つのみ選択します。

- 「発行者の証明書のみ」

- 「信頼チェーンのすべての証明書」(デフォルトで選択)

- 「チェックしない(非推奨)」

次を使用した署名付きコード証明書失効のチェック

次のオプションは、証明書が失効しているかどうかを判断するために使用するものを示しており、1つのみ選択します。

- 「証明書失効リスト(CRL)」

- 「オンライン証明書ステータス・プロトコル(OCSP)」

- 「CRLとOCSPの両方」(デフォルトで選択)

「署名付きコード証明書失効チェックを実行」で「チェックしない」を選択した場合、この設定は無視されます。

TLS証明書失効チェックを実行

署名付きアプレットまたはJava Web Startアプリケーションがセキュア・サーバーから実行される前に、セキュア・サーバーの認証に使用された証明書をチェックして、失効しているものがないことを確認できます。すべての証明書をチェックすることも、サーバーからの証明書のみをチェックすることもできます。証明書が失効している場合、その証明書で署名されているRIAの実行は許可されません。このチェックを無効にすることもできますが、それはお薦めできません。次の中から選択でき、1つのみ選択します。

- 「サーバー証明書のみ」

- 「信頼チェーンのすべての証明書」(デフォルトで選択)

- 「チェックしない(非推奨)」

次を使用した署名付きコード証明書失効のチェック

次のオプションは、セキュア・サーバーの証明書が失効しているかどうかを判断するために使用するものを示しており、1つのみ選択します。

- 「証明書失効リスト(CRL)」

- 「オンライン証明書ステータス・プロトコル(OCSP)」

- 「CRLとOCSPの両方」(デフォルトで選択)

「TLS証明書失効チェックを実行」で「チェックしない」を選択した場合、この設定は無視されます。

高度なセキュリティ設定

次の中から選択でき、複数を選択できます。

- 「オペレーティング・システムの制限付き環境を有効にする(ネイティブ・サンドボックス)」(Windowsのみ、デフォルトで選択されない)

- 「ブラウザのキーストア内の証明書およびキーを使用する」

- 「ブラックリストの失効チェックを有効にする」

- 「認証のためのキャッシング・パスワードを有効にする」

- 「SSL 2.0互換のClientHello形式を使用する」(デフォルトでチェックされない)

- 「TLS 1.0を使用する」

- 「TLS 1.1を使用する」

- 「TLS 1.2を使用する」

ネイティブ・サンドボックス

ネイティブ・サンドボックス・オプションはWindowsでのみ使用可能です。ネイティブ・サンドボックスを有効にすると、サンドボックス・アプレットおよびJava Web Startアプリケーションはオペレーティング・システムによって提供される制限された環境で実行されます。all-permissionアプリケーションは影響を受けず、以前と同様に実行を続けます。

次の条件が適用されます。

- ネイティブ・サンドボックスは、例外サイト・リストに含まれているアプリケーションに対して、またはデプロイメント・ルール・セットが使用されている場合に無効化されます。

- Class-Pathマニフェスト属性のall-permissionsのJARファイルを含む、HTML appletタグでデプロイされたサンドボックス・アプレットは、ネイティブ・サンドボックスで実行されます。この場合、特別な警告ダイアログが表示され、そのようなアプレットがall-permissionのJARファイルにアクセスしようとすると、アプレットが正しく動作しない可能性があることをユーザーに通知します。

- ネイティブ・サンドボックスが有効化されているとき、次の場合にカスタム・プリローダーが無効化されます。

- サンドボックス・アプレットまたはJava Web Startアプリケーションが初期化中の場合、カスタム・プリローダーは無効化されます。デフォルトのプリローダーがかわりに使用されます。アプリケーションが初期化された後に、Java VMは有効化されたネイティブ・サンドボックスで再起動され、カスタム・プリローダーが使用されます。

- all-permissionのアプリケーションでは、カスタム・プリローダーがsandbox権限を持つJNLPファイルにある場合、ユーザーがアプリケーションに無制限アクセス(権限)を付与する「セキュリティ」ダイアログでアプリケーションの実行に同意するまで、カスタム・プリローダーが無効化されます。

その他

プラットフォームに応じて次の中から選択でき、デフォルトでは何も選択されていません。

- 「ローミング・プロファイルにユーザー設定を格納」(Windowsのみ)
デフォルトでは、ユーザー設定はuser_home\AppData\LocalLow\Sun\Java\Deploymentに格納されます。このオプションを選択すると、ユーザー設定がuser_home\AppData\Roaming\Sun\Java\Deploymentに格納されます。選択されている場合、deployment.propertiesファイルがRoamingディレクトリにコピーされます。選択が解除されている場合、ファイルはRoamingディレクトリから削除されます。さらに、このオプションが選択されている場合、次のアイテムがRoamingディレクトリに格納されます。

- ローカル・アプリケーション・プロパティ

- セキュリティ・ベースライン

- ブラックリスト証明書

- ブラックリストJARファイル

- ユーザー資格証明ストア

- 例外サイト・リスト

- 「システム・トレイにJavaアイコンを配置」

- 「Javaのインストールまたは更新時にスポンサのオファーを表示しない」
インストールまたは更新プロセス中にスポンサからのオファーが提供されないようにする場合、このオプションを選択します。

10 デプロイメント・ルール・セット

デプロイメント・ルール・セット機能は、Javaデスクトップ環境を直接管理する企業を対象にしており、JavaアプレットやJava Web Startアプリケーションのセキュリティ・ポリシーがかつてないほど厳しくなっている環境の下で、企業がレガシー・ビジネス・アプリケーションを使い続ける方法を提供します。この機能は、特定のアプリケーションに使用されるJREのバージョンを制御する機能も提供します。

注意:

デプロイメント・ルール・セット機能はオプションであり、制御された環境の組織で内部的にのみ使用されるものとします。ルール・セットを含むJARファイルが配布されたり、公的に入手可能になったりした場合は、そのルール・セットの署名に使用された証明書がブラックリストに登録され、Javaでブロックされます。

この項の内容は次のとおりです。

- デプロイメント・ルール・セットの概要

- ルール・セットの作成

- ルール・セットのパッケージ化

- ルール・セットのインストール

- アクティブなルール・セットの表示

- セキュリティに関する考慮事項

- 例

- Javaデプロイメント・ルール・セットのDTD

デプロイメント・ルール・セットの概要

デプロイメント・ルール・セット機能を使用すると、企業は、セキュリティ・プロンプトなしで実行できる既知のアプリケーションのホワイトリストを作成できます。

Javaアプレット、Java Web Startアプリケーション、およびブラウザに埋め込まれたりブラウザから起動されるJavaFXアプリケーションは、まとめてリッチ・インターネット・アプリケーション(RIA)として知られています。ユーザーを保護し、RIAが損なわれる可能性を最小限に抑えるために、RIAの起動時にセキュリティ・チェックが行われ、ユーザーにRIAの実行を許可するよう求めるプロンプトが表示されます。デプロイメント・ルール・セットによって定義されたホワイトリスト上のアプリケーションは、ほとんどのセキュリティ・プロンプトを表示せずに実行できますが、次のプロンプトは抑止されません。

- HTTPSのセキュリティ警告

- ユーザーに資格証明を入力して接続するよう要求する認証ダイアログ

- ショートカットや関連付けの作成といったアクションを実行する署名なしのJava Web Startアプリケーションからのセキュリティ警告

配備用のルールは、XMLファイルに定義され、署名付きJARファイルにパッケージ化されます。それらのルールは、RIAと一致するものが見つかるまで順次にテストされます。ルールに割り当てられているアクションに応じて、そのあとRIAはセキュリティ・プロンプトなしで実行されるか、実行がブロックされるか、または適用可能ないずれかのセキュリティ・プロンプトを表示するデフォルトの処理で実行されます。一致するルールがない場合は、デフォルトの処理が使用されます。それらのルールでは、RIAの実行に使用されるJREのバージョンを指定したり、古いJREの通知を抑止したりすることもできます。

システムにインストールされているアクティブなルール・セットは、Javaコントロール・パネルの「Webの設定」タブから参照できます。

ルール・セットの作成

ルール・セットはXMLファイルで、ruleset.xmlという名前を付ける必要があります。このファイルの作成には、任意のテキスト・エディタを使用できます。

ルールの定義

所属組織内でRIAを実行またはブロックするために必要なルールを定義します。ルール・セットの構文については、「Javaデプロイメント・ルール・セットのDTD」を参照してください。不明な要素または属性がルール・セットに含まれる場合、Javaコンソールに警告が書き込まれます。

次の要素が有効です。

- <ruleset>

- <rule>

- <id>

- <certificate>

- <checksum>

- <jnlp-checksum>

- <action>

- <message>

- <customer>

ルール・セットが無効な場合は、その問題について説明するエラーが表示され、すべてのRIAがブロックされます。RIAを実行できるようにするには、ruleset.xmlファイルを修正するか、DeploymentRuleSet.jarファイルをデプロイメント・ディレクトリから削除する必要があります(このディレクトリの場所についてはルール・セットのインストールを参照)。ルール・セットが無効と報告される場合は、表示されたエラーに基づいて、次の問題をチェックします。

- ファイルが読取り不可です。

- ファイルの構造が無効です。

- ルールが適切に定義されていません。

- runというアクションを持つルールに選択条件が指定されていないため、そのルールがすべてのRIAと一致します。

- JARファイルが有効な証明書で正しく署名されていません。

DeploymentRuleSet.jarファイルが削除された場合、RIAはデフォルトの配備プロセスによって処理されます。

ルール・セットの例については、「例」を参照してください。

<ruleset>

<ruleset>要素は、ポリシー・ファイルの最上位要素です。

有効な子要素は<rule>および<customer>です。

次の表は、有効な属性について説明しています。

表10-1 <ruleset>の属性

の属性" width="100%">

属性

説明

必須

version

このファイルの処理に必要なデプロイメント・ルール・セット仕様の最小バージョン。それ以降のバージョンも使用できることを示すには、プラス記号(+)を使用します(例: 1.0+)。JREが指定されたバージョンをサポートしていない場合、すべてのRIAはブロックされます。

はい

<rule>

<rule>要素は、ルールに指定された条件に一致するRIAまたはRIAのセットのために実行されるアクションを定義します。

この要素には、1つの<id>要素、1つの<action>要素およびオプションの<customer>要素が含まれます。ルールは、1つのルールが一致するまで順次に処理されます。一致するものが見つかると、それ以上のルールは処理されません。一致するルールがない場合は、デフォルトの処理が使用され、関連するセキュリティ・プロンプトまたは警告がすべて表示されます。

注意:

RIAに、別の証明書で署名されているか、別の場所にあるアーティファクトが含まれている場合は、ルール・セットにそのRIAのすべてのアーティファクトのルールが必ず含まれるようにしてください。混合コードのケース(異なる権限レベルを持つJARファイル間の呼出しや、JavaScriptコードから特権付きJavaコードへの呼出し)の場合は、混合コード用のルールの設定を参照してください。

有効な親要素は<ruleset>です。有効な子要素は<id>および<action>です。

この要素に属性はありません。

<id>

<id>要素は、ルールが適用されるRIAまたはRIAのセットを識別します。一致と見なされるには、RIAが、存在しているすべての属性および子要素と一致する必要があります。属性または子要素が存在しない場合、ルールはすべてのRIAと一致します。

注意:

ルールのアクションがrunの場合は、少なくとも1つの属性または子要素が存在する必要があります。

有効な親要素は<rule>です。有効な子要素は<certificate>、<checksum>および<jnlp-checksum>です。署名付きJARファイルには<certificate>要素を使用します。署名なしのJARファイルには、デプロイメント・ルール・セット1.2以上の<checksum>要素を使用します。署名なしのJNLPファイルでセキュアでないプロパティを使用できるようにするには、場所ベースの実行ルールとともにデプロイメント・ルール・セット1.3以上の<jnlp-checksum>要素を使用します。

次の表は、有効な属性について説明しています。

表10-2 <id>の属性

の属性" width="100%">

属性

説明

必須

location

RIAのソースのURL。JNLPを使用するRIAの場合、この値はメインJNLPファイルのhref属性、またはアプレット・タグのjnlp_hrefパラメータと一致します。href属性またはjnlp_hrefパラメータが指定されていない場合、locationとともに<jnlp-checksum>要素を使用します。JNLP拡張の場合、この値はmainアーティファクトのresource要素に含まれるextension要素の場所と一致します。JNLPを使用しないRIAの場合、この値はHTMLファイルのURLと一致します。パスは大文字と小文字が区別され、UTF-8エンコーディングが使用されるものとします。

潜在的なman-in-the-middle攻撃を回避するために、HTTPSプロトコルの使用を強くお薦めします。

場所の一致は、次のガイドラインに基づいて行われます。

- 指定する場合は、それらのプロトコルが完全に一致している必要があります。

- ホスト名はアスタリスク+ドットおよびホスト名の部分文字列(*.host-name-substring)で始めることができ、そのドットの後に指定されたホスト名の部分文字列で終わるどのホストとも一致します。たとえば、*.example.comはhost.example.comおよびhost.test.example.comと一致します。ホスト名はアスタリスクのみにしたり、ホスト名の部分文字列を含まないアスタリスク(*.comなど)にすることはできません。

- 指定する場合は、それらのポート番号が完全に一致している必要があります。

- 指定する場合は、それらのパスの先頭が完全に一致している必要があります。location属性にパスが含まれていない場合は、そのホストからのすべてのパスが一致しているものと見なされます。たとえば、host.example.com/samplesはhost.example.com/samplesおよびhost.example.com/samples/testと一致しますが、host.example.com/testとは一致しません。しかし、host.example.comはhost.example.com/samples、host.example.com/samples/test、およびhost.example.com/testと一致します。

location属性が存在しないか、その値がnullの場合、場所はすべてのRIAと一致します。

いいえ

title

JNLPファイルのtitle要素に使用される文字列、またはJava Plug-inによって使用される文字列。title属性が存在し、その値がnull以外の場合、その値はRIAのタイトルと完全に一致する必要があります。title属性が存在しないか、その値がnullの場合、タイトルはすべてのRIAと一致します。

ルールのアクションがrunまたはdefaultであり、title属性が存在する場合は、別のid属性または子要素をtitle属性で指定する必要があります。そうしないと、そのルールが無効になります。

いいえ

<certificate>

<certificate>要素は、RIAの署名に使用された証明書を識別します。hash属性が必須です。

有効な親要素は<id>です。この要素に子要素はありません。

次の表は、有効な属性について説明しています。

表10-3 <certificate>の属性

の属性" width="100%">

属性

説明

必須

algorithm

hash属性の値の生成に使用されるハッシュ・アルゴリズムを定義する文字列。現時点では、セキュリティ・ハッシュ・アルゴリズムSHA-256のみがサポートされています。その値がnullの場合は、SHA-256が使用されます。

いいえ

hash

コード署名証明書のハッシュ値を表す16進数の文字列。この値は、algorithm属性に指定されたハッシュ・アルゴリズムに基づいています。使用する値の取得方法については、「証明書のハッシュを取得する」を参照してください。

はい

<checksum>

<checksum>要素は、署名なしのJARファイルのチェックサムを識別します。hash属性が必須です。この要素はデプロイメント・ルール・セット1.2以上で使用可能です。

有効な親要素は<id>です。この要素に子要素はありません。

次の表は、有効な属性について説明しています。

表10-4 <checksum>の属性

の属性" width="100%">

属性

説明

必須

algorithm

hash属性の値の生成に使用されるハッシュ・アルゴリズムを定義する文字列。現時点では、セキュリティ・ハッシュ・アルゴリズムSHA-256のみがサポートされています。その値がnullの場合は、SHA-256が使用されます。SHA-256以外の非nullの値が使用されている場合、警告が発行されてSHA-256が使用されます。

いいえ

hash

圧縮されていない形式のJARファイル(圧縮レベル0)のチェックサムのハッシュ値を表す16進数の文字列。この値は、algorithm属性に指定されたハッシュ・アルゴリズムに基づいています。

はい

<jnlp-checksum>

<jnlp-checksum>要素は、JNLPファイルのチェックサムを識別します。hash属性が必須です。この要素はデプロイメント・ルール・セット1.3以上で使用可能です。

有効な親要素は<id>です。この要素に子要素はありません。

<id>要素のlocation属性がnullの場合、<jnlp-checksum>要素は無視されます。複数の<jnlp-checksum>要素を指定できます。JNLPファイルのチェックサムがルール内のいずれかの<jnlp-checksum>要素のhash属性と等しい場合、ルールは一致します。次の表は、有効な属性について説明しています。

表10-5 <jnlp-checksum>の属性

の属性" width="100%">

属性

説明

必須

hash

チェックサムのハッシュ値を表す16進数の文字列。この値は、algorithm属性に指定されたハッシュ・アルゴリズムに基づいています。

はい

<action>

<action>要素は、ルールと一致するすべてのRIAに対して実行されるアクションを定義します。

有効な親要素は<rule>です。有効な子要素は<message>です。

次の表は、有効な属性について説明しています。

表10-6 <action>の属性

の属性" width="100%">

属性

説明

必須

permission

実行されるアクション。有効な値はblock、defaultおよびrunです。

block - RIAは実行されません。メッセージがユーザーに表示されます。カスタム・メッセージを表示するには、<message>要素を含めます。

default - デフォルトの処理を使ってRIAが実行され、適用可能ないずれかのセキュリティ・プロンプトが表示されます。デフォルトの処理でRIAがブロックされるときにカスタム・メッセージを含めるには、バージョン1.2以上のデプロイメント・ルール・セットを使用して<message>要素を含めます。

run - 次の種類のRIAがプロンプトなしの実行を許可されます。

- 信頼できる認証局からの有効な証明書で署名されているもの

- 期限切れの証明書で署名されているもの

- 自己署名付き

- 署名なし

- 必要なJARファイル・マニフェスト属性が含まれていないもの

runアクションでカスタム・メッセージを含めるには、バージョン1.2以上のデプロイメント・ルール・セットを使用して<message>要素を含めます。

はい

version

RIAの実行に使用するJREのバージョンを識別する文字列。この属性は、permission属性の値がrunである場合にのみ適用されます。特定のRIAとの互換性を確保するために古いJREが必要な場合に、version属性を使用します。version属性が存在しない場合、RIAは入手可能な最新のJREで実行されます。

有効な値は次のとおりです。

- プラットフォーム・バージョン(1.7、1.7+、1.8、9など)。プラットフォーム・バージョンは、指定されたプラットフォーム(バージョンの後にプラス記号(+)が続く場合は指定されたプラットフォームまたはそれ以降)のすべてのバージョンの使用を要求します。

- 実装バージョン(1.7.0_40、1.8.0_20など)。実装バージョンは、特定のバージョンの使用を要求します。

- SECURE。SECUREキーワードは、セキュリティ・ベースライン以上のすべてのバージョンの使用を要求します。

- SECURE-version。ここで、versionは有効なプラットフォーム・バージョンです(SECURE-1.8など)。SECURE-versionキーワードは、指定されたプラットフォーム(プラットフォームの後にプラス記号(+)が続く場合は指定されたプラットフォームまたはそれ以降)のすべてのセキュアなバージョンの使用を要求します。

使用されるJREのバージョンは、次の優先順位によって決まります。

- JREの現在のバージョンが入手可能で、version属性と、RIAによって要求されたバージョンの両方と一致する場合は、それが使用されます。

- 入手可能なJREの最新バージョンがversion属性と、RIAによって要求されたバージョンの両方と一致する場合は、それが使用されます。

- JREの現在のバージョンが入手可能で、version属性と一致する場合は、それが使用されます。

- 入手可能なJREの最新バージョンがversion属性と一致する場合は、それが使用されます。

それらの基準を満たすバージョンが入手できない場合、そのRIAはブロックされ、メッセージがユーザーに表示されます。カスタム・メッセージを表示するには、message要素を含めます。

いいえ

force

version属性に指定されたJREをRIAの実行に使用する必要があるかどうかを示すブール値。この属性をtrueに設定した場合、ルールで指定されたJREは、RIAにより要求されたJREをオーバーライドします。ルールで指定されたJREを使用できない場合、RIAはブロックされます。デフォルトは、falseです。

たとえば、RIAが1.7ファミリ(1.7*)のJREを要求し、企業で実行されているJRE 8のバージョンのみを保護する必要がある場合、version属性にSECURE-1.8を指定するルールを作成し、force属性をtrueに設定できます。このルールは、1.8ファミリのセキュアなバージョンでのみRIAを実行するよう強制します。

この属性は、デプロイメント・ルール・セットの1.1以降のバージョンで使用できます。

いいえ

<message>

<message>要素は、ユーザーに表示されるカスタム・メッセージを定義します。このメッセージを使用して、RIAがブロックされる理由を説明したり、追加情報をユーザーに提供することができます。

プレーン・テキストのみを使用でき、HTMLタグやその他の特殊フォーマットはサポートされていません。この要素が存在しない場合は、RIAがブロックされたときにデフォルトのメッセージが表示されます。デプロイメント・ルール・セット1.2以上では、実行するように設定されたアクションのあるルールに対してこの要素が存在する場合、追加のダイアログがユーザーに表示されます。複数のロケールをサポートするには、ロケールごとにmessage要素を含めます。

locale属性を指定しない場合は、message要素が指定されていないすべてロケールに対してそのメッセージが使用されます。ユーザーのロケール用のmessage要素が指定されず、ロケールのないmessage要素も存在しない場合は、デフォルトのメッセージが表示されます。

メッセージが表示されるダイアログ・ボックスが画面に収まるようにするには、メッセージを1024文字未満に保ち、指定されたすべてのロケールをテストします。

有効な親要素は<action>です。この要素に子要素はありません。

次の表は、有効な属性について説明しています。

表10-7 <message>要素の属性

要素の属性" width="100%">

属性

説明

必須

locale

メッセージが適用されるロケール。

いいえ

<customer>

<customer>要素に指定された情報は、トレースおよびコンソールが有効な場合はデプロイメント・トレース・ファイルおよびJavaコンソールに書き込まれます。この要素を使用して、デバッグ情報を提供したり、カスタム・データをルールまたはルール・セットと関連付けます。

<customer>要素に、プレーン・テキストまたは有効なXMLとして任意の情報を入力できます。ルールに固有の情報を指定するには、そのルール内に<customer>要素を含めます。ルール・セットに関する情報を指定するには、ルールの外側に要素を含めます。デプロイメント・ルール・セット1.2よりも前では、この要素は無視されます。デプロイメント・ルール・セット1.2以上では、この要素からの情報は、トレース・ファイルおよびJavaコンソールが有効な場合はそれらにコピーされます。

有効な親要素は<ruleset>および<rule>です。この要素に子要素はありません。

この要素に属性はありません。

JavaScriptコード(LiveConnect)からの呼出しのルールの設定

JavaScriptコードからRIAへの呼出しを行う必要がある場合は、次のガイドラインに従ってそれらの呼出しがブロックされないようにします。

- ルール・セットに、RIAと一致する、runというアクションを持つルールが含まれている場合、そのルール・セットには、JavaScriptコードの場所と一致する、runというアクションを持つルールも含まれている必要があります。

- ルール・セットに、RIAと一致する、defaultというアクションを持つルールが含まれている場合、またはRIAと一致するルールがないためにデフォルトの処理が使用される場合は、次のいずれかが当てはまる必要があります。

- ルール・セットに、JavaScriptコードの場所と一致する、runというアクションを持つルールが含まれています。

- ルール・セットに、JavaScriptコードの場所と一致する、defaultというアクションを持つルールが含まれています。

- JavaScriptコードの場所と一致するルールがないため、デフォルトの処理が使用されます。

JavaScriptコードが特権付きコードを呼び出していて、混合コードの警告を抑止する必要がある場合は、「混合コードのルールを設定する」を参照してください。

混合コード用のルールの設定

ルール・セットを作成するときは、RIAに関連付けられているすべてのアーティファクトのルールが必ず含まれるようにしてください。異なる権限レベルを持つコード間の呼出し時、またはJavaScriptコードから特権付きJavaコードへの呼出し時に生成される混合コードのセキュリティ警告を抑止するために、追加のルールが必要になることがあります。

混合コードのセキュリティ警告を抑止するには、次のRIAの要件に基づいたルールをルール・セットに含めます。

- 異なる権限レベルを持つJavaコード間で呼出しを行うには、呼び出されるコードと一致する、runというアクションを持つルールを追加します。
たとえば、次のルールでは、サンドボックス・コードから、https://host.example.com/appsに置かれた特権付きコードへの呼出しで混合コードのプロンプトが表示されないようにします。

<rule>
<id location="https://host.example.com/apps"/>
<action permission="run"/>
</rule>

- JavaScriptコードから特権付きJavaコードへの呼出しを行うには、JavaScriptコードの場所と一致する、runというアクションを持つルールを追加します。
たとえば、次のルールでは、https://host.example.com上のいずれかのページに置かれているJavaScriptコードから特権付きJavaコードへの呼出しで混合コードのプロンプトが表示されないようします。

<rule>
<id location="https://host.example.com/"/>
<action permission="run"/>
</rule>

ルール・セットに、JavaScriptコードの場所と一致する、runまたはdefaultというアクションを持つルールが1つも含まれていない場合、JavaScriptコードからの呼出しはブロックされます。JavaScriptコードからの呼出しで適用可能ないずれかのセキュリティ・プロンプトが表示されるようにする場合は、JavaScriptコードの場所と一致する、defaultというアクションを持つルールを定義する必要があります。

このセクションに示されている、混合コードのプロンプトを抑止するためのルールが、そのルールと一致するRIAのほかのセキュリティ・プロンプトも抑止することに注意してください。必要な制御を行うために必要とされる順序でルールが定義されていることを確認してください。

証明書のハッシュの取得

証明書のハッシュを使用してRIAと一致させるルールを定義する場合は、正しい16進数の文字列を取得する必要があります。次の手順を実行します。

1. 次のコマンドを使用して、JARファイルの証明書情報を出力します(その際、myjar.jarを自身のJARファイルの名前に置き換えます)。

keytool -printcert -jarfile myjar.jar | more

2. その出力の先頭で、Signer#1を見つけます。

3. Signer#1の下のCertificate fingerprintsセクションで、SHA256から始まる行を見つけます。

SHA256識別子に続くテキストには、コロンで区切られた32ペアの16進数が含まれています。この文字列はcertificate要素のhash属性に使用します。文字列はコロンありまたはコロンなしで使用できます。

ルール・セットのパッケージ化

ruleset.xmlファイルに定義されているルール・セットを、DeploymentRuleSet.jarという名前の署名付きJARファイルにパッケージ化する必要があります。このJARファイルは、信頼できる認証局からの有効な証明書で署名されている必要があります。

JARファイルの作成と署名については、「Javaチュートリアル」の「Packaging Programs in JAR Files」レッスンを参照してください。

ルール・セットのインストール

ルール・セットは、Javaアプリケーションを実行する必要があるすべてのシステムにインストールする必要があります。

DeploymentRuleSet.jarファイルをユーザーのシステムの次のディレクトリにインストールします。

- Windowsプラットフォームでは、そのファイルを<Windows-directory>\Sun\Java\Deploymentディレクトリ(c:\Windows\Sun\Java\Deploymentなど)にインストールします。

- SolarisおよびLinuxプラットフォームでは、そのファイルを/etc/.java/deploymentディレクトリにインストールします。

- macOSプラットフォームでは、そのファイルを/Library/Application Support/Oracle/Java/Deployment/ディレクトリにインストールします。

アクティブなルール・セットの表示

一度にアクティブにできるデプロイメント・ルール・セットは1つのみです。アクティブなルール・セットはJavaコントロール・パネルから表示できます。

アクティブなルール・セットを表示するには、次の手順を実行します。

1. Javaコントロール・パネルを起動します。

2. 「Webの設定」タブに移動します。

3. 「デプロイメント・ルール・セット」タブに移動します。

ルール・セットがアクティブな場合、ルール・セットへのリンクが表示されます。アクティブなルール・セットが存在しない場合は、メッセージが表示されます。

4. 「アクティブなデプロイメント・ルール・セットの表示」リンクをクリックします。

セキュリティに関する考慮事項

デプロイメント・ルール・セット機能を使用すると、ユーザーに潜在的なセキュリティ・リスクを通知せずにRIAを実行できます。次のセキュリティ上の考慮事項を確認して、ルール・セットの使用に伴うリスクを認識し、提示されるすべての推奨事項に従ってください。

- id要素のlocation属性は、次の情報と比較されます。

- HTMLファイルの場所(JNLPを使用しないアプレットの場合)

- JNLPファイルのhref属性の値(JNLPを使用するJava Web Startアプリケーションおよびアプレットの場合)

- アプレット・タグのjnlp_hrefパラメータの値(JNLPを使用するアプレットおよびJNLPファイルでhref属性を指定しない場合)

一致した場合は、HTMLファイルまたはJNLPファイル内のすべてのコンテンツが信頼できるものと見なされます。ただし、そのファイルをホストするWebサイトがクロスサイト・スクリプティング攻撃に脆弱である場合は、悪意のあるコンテンツがHTMLファイルやJNLPファイルに注入される可能性があります。

- JNLPを使用するアプレットの場合、HTMLファイルの場所がチェックされないため、アプレットがどこからでも起動される可能性があります。

- ルールをRIAと一致させるためにlocation属性を使用しない場合は、RIAの起動に使用されるHTMLファイルまたはJNLPファイルが損なわれる可能性があります。location属性を使用することをお薦めします。

- サーバー全体を信頼する場合、実行のアクションを含むルールのlocation属性でのパスのみを含めます。サーバー上の他の場所が信頼されない可能性がある場合、実行ルールでパスを使用すると、セキュリティ・リスクが発生することがあり、お薦めしません。

- location属性にパスが含まれる場合は、可能であれば、複雑なパスやマルチバイト文字の使用を避けてください。パスは大文字と小文字が区別され、UTF-8エンコーディングが使用されるものとします。サポートされていない文字、デコード・エラー、または長すぎるエンコーディングが検出されると、セキュリティ例外が発生します。Webサーバー、ファイル・システム、またはブラウザがそのパスを別々に正規化した場合は、location属性に基づいたルールが予期しない結果を返す可能性があります。

- 特定のURIのブロッキング・ルールは、堅牢なセキュリティ施行メカニズムになるよう意図されていません。たとえば、ドメイン名を使って作成されたルールは、ユーザーが代わりにIPアドレスを使用すればパイパスできます。識別子が1つもなく、ブロックというアクションを持つ最終ルールをルール・セットに含めることが推奨されます。RIAをセキュリティ・プロンプトなしで実行するか、デフォルトの処理で実行するために必要なルールを定義し、ほかのすべてのRIAを最終ルールで一致させることで、それらの実行をブロックします。

- すべての場所に対してHTTPSプロトコルを使用することをお薦めします。

- デプロイメント・ルール・セット内のルールの順序は、きわめて重要な意味を持ちます。ルールは、ファイルの先頭から順次に処理されます。一致するものが見つかると、それ以上のルールは処理されません。最終ルール・セットを確認し、肯定的なケースと否定的なケースの両方に目を向けて、それらのルールが管理する予定のRIAをカバーし、不明なRIAとの一致を許可しないようにします。

- 複数のJARファイルやJNLP拡張など、RIAのすべてのアーティファクトにルールが必要です。アーティファクト用のルールを定義するときは、そのルールと一致するほかのRIAの実行を間違って許可しないように注意してください。

- デプロイメント・ルールでは、互換性を確保する必要がある場合にRIAが古いバージョンのJREで実行されることを許可しますが、古いバージョンにはセキュリティに関する既知の問題が含まれている可能性があります。可能なかぎり最新のJREを使用し、version属性をSECUREまたはSECURE-versionに設定します。古いバージョンのJREを使用する必要がある場合は、古いバージョンを要求するルールをできるだけ限定的なものにすることで、そのルールと一致し、古いバージョンで実行されるRIAを制限してください。この場合は、識別子location、title、およびcertificate hashをすべて使用することをお薦めします。

- runというアクションを持つルールがRIA用に存在する場合、そのRIAは、RIAの署名に使われた証明書の有効期限が切れている場合でも実行されます。

例

デプロイメント・ルールを使用してアプリケーションの実行をブロックまたは許可する方法を示すために、サンプル・デプロイメント・ルール・セットが提供されています。

例10-1 単一の場所からのRIAの実行

この例では、https://host.example.com/からのすべてのRIAがセキュリティ・プロンプトなしで実行されることを許可します。ほかの場所からのRIAはそのルールと一致しないため、デフォルトの処理が使用され、該当する場合はセキュリティ・プロンプトが表示されます。

<ruleset version="1.0+">
<rule>
<id location="https://host.example.com" />
<action permission="run" />
</rule>
</ruleset>

例10-2 一致しないすべてのRIAのブロック

ルール・セットによってすべてのRIAが確実に処理されるように、前のルールで一致しなかったすべてのRIAと一致する最終ルールを指定できます。このルールのアクションは、blockまたはdefaultのどちらかにする必要があります。この例では、https://host.example.com:8080からのすべてのRIAがセキュリティ・プロンプトなしで実行されることを許可し、他のすべてのRIAをブロックします。カスタム・メッセージは指定されないため、RIAがブロックされると、デフォルトのメッセージが表示されます。

<ruleset version="1.0+">
<rule>
<id location="https://host.example.com:8080" />
<action permission="run" />
</rule>

<rule>
<id />
<action permission="block" />
</rule>
</ruleset>

例10-3 ルールの順序は重要

ルールは、それらがルール・セットに表示される順序で処理されます。一致ルールに複雑なパターンを定義するには、それらのルールを正しい順序で並べます。この例では、https://host.example.comからのRIAには、セキュアなバージョンのJava 1.7プラットフォームを使用してセキュリティ・プロンプトなしで実行されることを許可しますが、https://host.example.com/gamesからのRIAには、適用可能なセキュリティ・プロンプトが表示されるデフォルトの処理を使用します。ほかの場所からのRIAはどちらのルールとも一致しないため、デフォルトの処理が使用されます。

<ruleset version="1.0+">
<rule>
<id location="https://host.example.com/games" />
<action permission="default" />
</rule>

<rule>
<id location="https://host.example.com" />
<action permission="run" version="SECURE-1.7" />
</rule>
</ruleset>

例10-4 特定のRIAの管理

この例では、例10-3のルール・セットを変更し、デフォルトの処理で実行するにはhttps://host.example.com/gamesからのSolitaireという名前のRIAのみを必要とします。https://host.example.comからのほかのRIAは、セキュアなバージョンのJava 1.7プラットフォームを使用してセキュリティ・プロンプトなしで実行されることが許可されます。ほかのすべてのRIAはブロックされ、カスタム・メッセージが表示されます。

<ruleset version="1.0+">
<rule>
<id title="Solitaire" location="https://host.example.com/games" />
<action permission="default" />
</rule>

<rule>
<id location="https://host.example.com" />
<action permission="run" version="SECURE-1.7" />
</rule>

<rule>
<id />
<action permission="block">
<message>Blocked by corporate. Contact J. Smith, smith@host.example.com, if you need to run this app.</message>
</action>
</rule>
</ruleset>

例10-5 署名証明書に基づいたRIAの管理

複数の場所からの複数のRIAの実行を許可し、すべてのRIAが同じ証明書で署名されるようにするには、場所とタイトルごとにルールを作成するかわりに、certificate要素を使用して1つのルールでそれらのRIAを識別できます。この例では、Oracleが使用する証明書で署名されているすべてのRIAが、セキュアなバージョンのJavaプラットフォームを使用してセキュリティ・プロンプトなしで実行されることを許可します。example.comで終わるホストからのRIAは、デフォルトの処理で実行されることが許可されます。ほかのすべてのRIAはブロックされ、カスタム・メッセージが表示されます。

<ruleset version="1.0+">
<rule> <!-- allow anything signed with company's public cert -->
<id>
<certificate hash="794F53C746E2AA77D84B843BE942CAB4309F258FD946D62A6C4CCEAB8E1DB2C6" />
</id>
<action permission="run" version="SECURE" />
</rule>

<rule>
<id location="*.example.com" />
<action permission="default" />
</rule>

<rule>
<id />
<action permission="block">
<message>Blocked by corporate. Contact J. Smith, smith@host.example.com, if you need to run this app.</message>
</action>
</rule>
</ruleset>

例10-6 特定のJREの使用を強制

特定のJREを強制的に使用するには、action要素のforce属性を使用します。この属性は、デプロイメント・ルール・セットの1.1バージョンで導入されました。この例では、https://host.example.com/appsからのRIAがバージョン1.8_20のJREを使用してセキュリティ・プロンプトなしで実行されることを許可します。RIAによって要求されたバージョンは無視されます。バージョン1.8_20を使用できない場合、RIAはブロックされます。ほかのすべてのRIAはブロックされ、カスタム・メッセージが表示されます。

<ruleset version="1.1+">
<rule>
<id location="https://host.example.com/apps" />
<action permission="run" version="1.8_20" force="true" />
</rule>

<rule>
<id />
<action permission="block">
<message>Blocked by corporate. Contact J. Smith, smith@host.example.com, if you need to run this app.</message>
</action>
</rule>
</ruleset>

例10-7 ルール・セットに顧客データを含める

customer要素を使用すると、コメント、デバッグ情報、またはルールおよびルール・セットに関するその他のデータを提供できます。デプロイメント・ルール・セット1.2以降では、この情報は、デプロイメント・トレース・ファイルおよびJavaコンソールが有効な場合はそれらに書き込まれます。この例は、ルール・セットおよび2つのルールに対する顧客情報を示しています。customer要素で使用されているXML要素は説明のためのものであり、任意の有効なXMLを使用できます。

<ruleset version="1.2+">
<rule>
<id location="https://host.example.com/verified-apps" />
<action permission="run" />
<customer>Allowing applications from https://host.example.com, which has been validated as a secure site</customer>
</rule>

<customer>
<warning font=bold>Run rule not matched.</warning>
<text>Application will either be blocked or will show security dialogs.</text>
</customer>

<rule>
<id location="*.example.com" />
<action permission="default" />
</rule>

<rule>
<id />
<action permission="block">
<message>Blocked by corporate. Contact J. Smith, smith@host.example.com, if you need to run this app.</message>
</action>
<customer>
<warning font=bold>Blocked</warning>
<text>No rule matched, application blocked by final rule.</text>
</customer>
</rule>
</ruleset>

Javaデプロイメント・ルール・セットのDTD

次の例は、デプロイメント・ルール・セットのバージョン1.3のDTDを示しています。バージョン1.3は、8u72以上でサポートされています。バージョン1.2は、JRE 8u60以上でサポートされています。バージョン1.1は、JRE 8u20以上でサポートされています。バージョン1.0は、JRE 7u40以上でサポートされています。バージョン1.0の後で導入されたアイテムが記載されます。

<!ELEMENT ruleset (rule*, customer*)>
<!ATTLIST ruleset version CDATA #REQUIRED>

<!ELEMENT rule (id, action, customer*)>

<!-- checksum introduced in 1.2, jnlp-checksum introduced in 1.3 -->
<!ELEMENT id (certificate?, checksum?, jnlp-checksum*)>
<!ATTLIST id title CDATA #IMPLIED>
<!ATTLIST id location CDATA #IMPLIED>

<!-- jnlp-checksum introduced in 1.3 -->
<!ELEMENT jnlp-checksum EMPTY>
<!ATTLIST jnlp-checksum hash CDATA #REQUIRED>

<!ELEMENT certificate EMPTY>
<!ATTLIST certificate algorithm CDATA #IMPLIED>
<!ATTLIST certificate hash CDATA #REQUIRED>

<!-- checksum introduced in 1.2 -->
<!ELEMENT checksum EMPTY>
<!ATTLIST checksum algorithm CDATA #IMPLIED>
<!ATTLIST checksum hash CDATA #REQUIRED>

<!ELEMENT action (message?)>
<!ATTLIST action permission (run | block | default) #REQUIRED>
<!ATTLIST action version CDATA #IMPLIED>
<!ATTLIST action force (true|false) "false">  <!-- force introduced in 1.1 -->

<!ELEMENT message (#PCDATA)>
<!ATTLIST message locale CDATA #IMPLIED>

<!ELEMENT customer ANY>

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。