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

19 ブラウザでのデプロイメント

このトピックでは、配備ツールキットdtjava.jsを使用して、ブラウザでJavaおよびJavaFXアプリケーションをデプロイする方法について説明します。APIの概要、コールバック・メソッドに関する情報、および典型的な使用例を提供します。

配備ツールキット・ライブラリを使用して、JavaまたはJavaFXアプリケーションをWebページに埋め込んだり、ブラウザから起動したりします。アプリケーションのWebデプロイメントを簡略化し、アプリケーションの起動時のエンド・ユーザー操作を改善するために、配備ツールキットはJavaScript APIを提供します。

JavaまたはJavaFXアプリケーションをWebページに挿入するために必要なHTMLタグを追加する機能を提供するだけでなく、配備ツールキットは次のアクションも提供します。

  • ユーザーの環境がサポートされているかどうかを検出する。

  • JREのインストールを提案する(必要な場合)。

  • アプリケーションのロード中、ユーザーに視覚的なフィードバックを提供する。

  • 予期しないエラーをユーザーにレポートする。

  • デプロイメントおよびWebページとの統合を簡略化するために使用できる他のヘルパーAPIを開発者に提供する。

配備ツールキットを使用するには、https://java.com/js/dtjava.jsにある共有の場所から配備ツールキットJavaScriptファイルをインポートします。

この方法では、アプリケーションは常に、最新で推奨の方法を使用してWebページに統合します。共有の場所を使用できない場合、<fx:deploy> AntタスクのincludeDTオプションを使用することによって、必要なファイルをアプリケーションに含めることができます。

単純な使用事例の大部分では、デプロイメントに必要なコードは、Javaパッケージ化ツールによって生成されます(5.3.1項「Javaパッケージ化ツール」を参照)。コールバックを使用して、デフォルトの動作をさらに調整できます。さらに柔軟性が必要な場合、配備ツールキットAPIを直接使用できます。

この節の内容は以下のとおりです。

19.1 APIの概要

配備ツールキットAPIは、次の重要なメソッドを提供します。

  • dtjava.embed(app, platform, callbacks)

    指定されたアプリケーション記述子に基づいて、アプリケーションをブラウザに埋め込みます。JREのインストールが必要な場合、配備ツールキットは、デフォルトでユーザーにJREをインストールするよう要求するか、インストーラをダウンロードできるページにリダイレクトします。

  • dtjava.launch(app, platform, callbacks)

    指定されたアプリケーション記述子に基づいて、ブラウザの外部にデプロイされるアプリケーションを起動します。JREのインストールが必要な場合、配備ツールキットは、デフォルトで次のアクションを実行します。

    • JREインストーラの起動を試行する。

    • ランタイムの自動化されたインストールが不可能な場合、ユーザーが手動でインストールするためのポップアップ要求が表示されます。

  • dtjava.install(platform, callbacks)

    プラットフォーム要件に応じて、必要なコンポーネントのインストールを開始します。

  • dtjava.validate(platform)

    ユーザーの環境がプラットフォーム要件を満たしていることを検証します(たとえば、必要なバージョンのJREが使用可能であることを確認するなど)。問題を記述したPlatformMismatchEventを返します(存在する場合)。

  • dtjava.hideSplash(id)

    指定されたIDのアプリケーションのHTMLスプラッシュ画面を非表示にします。スプラッシュ画面が存在しない場合、このメソッドは影響がありません。JavaFXアプリケーションの場合、アプリケーションの準備ができると、このメソッドは自動的に呼び出されます。

これらのメソッドに必要な引数の詳細は、次の各項を参照してください。

19.1.1 アプリケーション記述子(dtjava.App)

アプリケーション起動記述子は、dtjava.Appオブジェクトのインスタンスです。起動記述子には、起動に必要なものを記述したすべての詳細が含まれています。dtjava.Appコンストラクタは、次のパラメータを受け取ります。

dtjava.App(url, {attribute_map});

最初のパラメータは、必須のurl属性で、JNLPファイルへのURLまたは相対リンクが含まれています。2番目のパラメータは、次のリストで説明する属性のサブセットです。

  • id

    アプリケーションの識別子。識別子はWebページ上で一意である必要があります。識別子がnullの場合、識別子は自動生成されます。後で、識別子を使用して、JavaScriptコード内のアプリケーションのハンドルを取得できます。

  • jnlp_content

    (オプション) BASE64エンコーディングでのJNLPファイルのコンテンツ。

  • params

    アプリケーションに渡す名前付きパラメータのセット(存在する場合)。この属性の形式は次のとおりです。

    params: { variable: 'value' }

  • widthおよびheight

    埋込みアプリケーション用の領域の予約に使用されるディメンション。値は、絶対的(ピクセル)に指定することも、相対的に指定することもできます(例: 50、50%)。

  • placeholder

    アプリケーションの埋込み先のDOMノードへの参照またはDOMノードの識別子。

  • toolkit

    使用されるUIツールキットを識別します。JavaFXアプリケーションにはfx、Swingアプリケーションにはswingを使用します。値が指定されない場合、パラメータはfxにデフォルト設定されます。


注意:

widthheightおよびplaceholder属性は、ブラウザで実行するアプリケーション(つまりdtjava.embed()メソッドを使用するアプリケーション)には必要ですが、他のデプロイメントのタイプ(dtjava.launch()メソッドを使用するアプリケーションなど)には必要ありません。

例19-1は、ブラウザで実行するアプリケーションのアプリケーション起動記述子コードの例を示しています。

19.1.2 プラットフォーム(dtjava.Platform)

アプリケーションの起動のためのプラットフォーム要件は、dtjava.Platformオブジェクトによって定義されます。次のattributeがサポートされています。

  • javafx

    JavaFXの最小バージョンが必要です。デフォルトはnullです。

  • jvm

    JREの最小バージョンが必要です。デフォルトは1.6+です。

  • jvmargs

    要求されたJVM引数のリスト。デフォルトはnullです。

バージョン文字列は、次のルールに従って処理されます。

  • nullのバージョン文字列は、インストールするための要件がないように扱われます。検証では、このコンポーネントをインストールするかどうかを渡します。

  • バージョンのパターン文字列の形式は#[.#[.#[_#]]][+|*]で、"1.7""2.2*"および"1.7.0_25+"などの文字列を含みます。

  • アスタリスク(*)は、このファミリ内の任意のバージョンを意味します。ファミリは接頭辞で定義されます。

  • プラス記号(+)は、指定されたバージョン以上の任意のバージョンを意味します。

  • バージョンのパターンに4つのすべてのバージョン・コンポーネントは含まれていないが、アスタリスクまたはプラス記号で終わっていない場合、これはアスタリスクで終わっているのと同じように扱われます。

違いを明確にするために、次の例を考えてみます。

  • "1.6.0*"は、1.6.0_25には一致しますが、1.7.0_01には一致しません、一方、"1.6.0+"または"1.*"はどちらにも一致します。

  • "2.1""2.1*"と同等で、"2.1"で始まるどのバージョン番号にも一致します。

  • アスタリスクとプラス記号の両方のパターンは、コンポーネントのどのインストール済バージョンにも一致します。ただし、コンポーネントがインストールされていない場合、検証は失敗します。

例19-2は、dtjava.Platformオブジェクトを示しています。

プラットフォーム要件を満たさない場合、validate()メソッドからの戻り値として、またはonDeployErrorコールバックに渡されて、dtjava.PlatformMismatchEventが返されます。このオブジェクトは、次のヘルパー・メソッドを指定して、根本原因を特定します。

  • javafxStatus()

    JavaFXランタイムがないことが原因でエラーにならなかった場合、okを返します。それ以外の場合、このメソッドは、問題を特徴づける次のいずれかのエラー・コードを返します。

    • none

      JavaFXランタイムがシステムにないことが検出されました。

    • old

      JavaFXランタイムのバージョンが検出されましたが、プラットフォーム要件に一致しません。

    • disabled

      JavaFXランタイムの一致するバージョンが検出されましたが、無効になっています。

    • unsupported

      JavaFXは、このプラットフォームではサポートされていません。

  • jreStatus()

    JREがないことが原因でエラーにならなかった場合、okを返します。それ以外の場合、このメソッドは、問題を特徴づける次のいずれかのエラー・コードを返します。

    • none

      JREがシステムにないことが検出されました。

    • old

      JREのバージョンが検出されましたが、プラットフォーム要件に一致しません。

    • oldplugin

      一致するJREが見つかりましたが、非推奨のJava Plug-inを使用するよう構成されています。

  • canAutoInstall()

    欠落したコンポーネントのインストールを自動的にトリガーできる場合、または欠落したコンポーネントがない場合は、trueを返します。

  • isRelaunchNeeded()

    アプリケーションをロードする前にブラウザを再起動する必要がある場合、trueを返します。これは、インストールを実行する必要があるときにtrueになることがよくあります。

  • isUnsupportedBrowser()

    現在のブラウザがサポートされていない(たとえばブラウザが古い)場合、trueを返します。

  • isUnsupportedPlatform()

    このプラットフォームが、サポートされているプラットフォーム要件を満たさない場合、trueを返します。たとえば、JavaFXアプリケーションは、サポートされていないSolarisで起動しようとします。

  • javafxInstallerURL (locale)

    JREの必須バージョンを手動でダウンロードおよびインストールするページのURLを返します。一致するJREがすでにインストールされているかサポートされていない場合、戻り値はnullです。

  • jreInstallerURL (locale)

    Javaの必須バージョンをインストールするためにアクセスするページのURLを返します。一致するJREがすでにインストールされているかサポートされていない場合、戻り値はnullです。

19.2 コールバック

配備ツールキットでは、起動動作のカスタマイズに使用できる一連のフックが提供されます。このフックを使用するには、開発者はコールバック関数を指定する必要があります。次のフックがサポートされています。

  • onDeployError: function(app, mismatchEvent)

    プラットフォーム要件が満たされていないときに呼び出されます。

  • onInstallFinished: function(placeholder, component, status, relaunchNeeded)

    インストールを手動で開始した場合を除き、必須コンポーネントのインストールの完了後に呼び出されます。

  • onInstallNeeded: function(app, platform, cb, isAutoinstall, needRelaunch, launchFunc)

    アプリケーションの埋込みや起動で追加のコンポーネントをインストールする必要がある場合に呼び出されます。

  • onInstallStarted - function(placeholder, component, isAuto, restartNeeded)

    必須コンポーネントのインストールをトリガーする前に呼び出されます。

次のフックは、埋込みアプリケーションに固有のものです。

  • onGetNoPluginMessage function(app)

    Java Plug-inがインストールされておらず、どのコールバックも役に立っていない場合、アプリケーション領域で表示されるコンテンツを取得するために呼び出されます。

  • onGetSplash: function(app)

    埋込みアプリケーションの場合、スプラッシュ画面のコンテンツを取得するために呼び出されます。

  • onJavascriptReady: function(id)

    アプリケーションがJavaScript呼出しを受け入れる準備が整った後で呼び出されます。

  • onRuntimeError: function(id)

    アプリケーションが起動に失敗した場合に呼び出されます。

19.2.1 onDeployError

このハンドラを利用して、エラー処理動作(ユーザーの言語でメッセージを表示するなど)をカスタマイズできます。onDeployErrorハンドラの例は、19.3.8項「サポートされていないプラットフォームのハンドラの作成」の例を参照してください。

現在のプラットフォームが指定されたプラットフォーム要件に一致しないため、アプリケーションをデプロイできない場合に、コールバック関数が呼び出されます。また、プラットフォームに互換性がないため、欠落したコンポーネントをインストールする要求を完了できない場合にも呼び出されます。

関数シグネチャ:

onDeployError : function(app, mismatchEvent)

問題には、致命的なエラーと、一時的な問題(再起動が必要など)があります。詳細は、提供されるmismatchEventから抽出できます。次に、一般的ないくつかの組合せを示します。

  • Javaではブラウザがサポートされていません。

    mismatchEvent.isUnsupportedBrowser()trueを返します

  • アプリケーションを起動する前にブラウザを再起動する必要があります。

    mismatchEvent.isRelaunchNeeded()trueを返します

JRE固有のコード:

  • JREは、このプラットフォームではサポートされていません。

    mismatchEvent.jreStatus() == "unsupported"

  • JREが検出されなかったため、インストールする必要があります。

    mismatchEvent.jreStatus() == "none"

  • JREのインストールされているバージョンは、アプリケーション要件に一致しません。

    mimatchEvent.jreStatus() == "old"

  • 一致するJREが検出されましたが、非推奨のJava Plug-inが使用されています。

    mimatchEvent.jreStatus() == "oldplugin"

JavaFX固有のコード:

  • JavaFXは、このプラットフォームではサポートされていません。

    mismatchEvent.javafxStatus() == "unsupported"

  • JavaFXランタイムがないため、手動でインストールする必要があります。

    mismatchEvent.javafxStatus() == "none"

  • JavaFXランタイムのインストールされているバージョンは、アプリケーション要件に一致しません。

    mismatchEvent.javafxStatus() == "old"

  • JavaFXランタイムはインストールされていますが、無効になっています。

    mismatchEvent.javafxStatus() == "disabled"

デフォルトのエラー・ハンドラは、アプリケーション起動エラーと埋込みコンテンツの両方を処理します。

19.2.2 onGetNoPluginMessage

Java Plug-inがインストールされておらず、どのコールバックもこの状況の解決に役に立っていない場合、アプリケーション領域で表示されるコンテンツを取得するために、このハンドラが呼び出されます。

関数シグネチャ:

onGetNoPluginMessag : function(app)

19.2.4 onInstallFinished

このハンドラは、必須コンポーネントのインストールの完了後に呼び出されます。インストールが手動モードで実行されている場合、このメソッドは呼び出されません。

関数シグネチャ:

onInstallFinished: function(placeholder, component, status, relaunchNeeded)

パラメータ:

  • placeholder: 視覚的なフィードバックを挿入するためにonInstallStartedに渡されたDOM要素。

  • component: 文字列"jre"または"javafx"

  • status: "success"、"error:generic"、"error:download"または"error:canceled"など、インストールのステータスを分類する文字列。

  • relaunchNeeded: インストールの完了にブラウザの再起動が必要な場合に指定するブール値。

19.2.5 onInstallNeeded

このハンドラは、アプリケーションの埋込みや起動で追加のコンポーネントをインストールする必要がある場合に呼び出されます。このコールバックは、何かをインストールする必要があることをユーザーに報告したり、install()を使用してインストールを開始したり、埋込みアプリケーションのためにスプラッシュ画面を非表示にしたり(必要な場合)するなどの状況を処理する役割を果たします。インストールが完了した後で、コールバック実装は、指定された起動関数を使用して、アプリケーションの起動を再試行できます。

プラットフォーム要件を満たしていない場合(たとえば、プラットフォームがサポートされていない場合、またはインストールが不可能である場合など)、このメソッドは呼び出されません。

デフォルトのハンドラでは、ブラウザに埋め込まれたアプリケーションに対して、クリックしてインストールの解決策を提供し、launch()を使用して起動されたアプリケーションに対して、追加の質問を行わずにインストールを実行しようとします。

ハンドラがnullの場合、無操作のハンドラとして扱われます。

関数シグネチャ:

onInstallNeeded: function(app, platform, cb, isAutoinstall, needRelaunch, launchFunc)

パラメータ:

  • app: アプリケーション起動記述子。埋込みアプリケーションの場合、app.placeholderは、視覚的なフィードバックに使用されるDOMツリー内の埋込みアプリケーション領域のルートを参照します。

  • platform: アプリケーションのプラットフォーム要件。

  • cb: インストール・プロセス中に使用されるコールバックのセット。

  • isAutoinstall: インストールを自動的に起動できる場合はTrueです。

  • needRestart: インストールの完了後にブラウザの再起動が必要な場合はTrueです。

  • launchFunction: インストールの終了後にアプリケーションの起動を再試行するために実行する関数。

19.2.6 onInstallStarted

このハンドラは、必須コンポーネントのインストールをトリガーする前に呼び出されます。手動インストールのシナリオでは、これはインストール・ページが開く前に呼び出されます。

このフックは、インストール中にユーザーに視覚的なフィードバックを提供するために使用できます。プレースホルダは、外観のために使用できる領域を指します。埋込みアプリケーションの場合、これは、アプリケーションが埋め込まれる領域です。nullの場合、呼び出されるオブジェクトは、単独で表示する場所を見つける必要があります。

インストールの自動的な起動の場合、onInstallFinishedは、インストールが完了した(成功または失敗)後に呼び出されます。

ハンドラがnullの場合、無操作のハンドラとして扱われます。

関数シグネチャ:

onInstallStarted: function(placeholder, component, isAuto, restartNeeded)

パラメータ:

  • placeholder: 視覚的なフィードバックを挿入するためのDOM要素。nullの場合、呼び出されるオブジェクトは、たとえばアプリケーションをWebページに埋め込むなど、単独で視覚的なフィードバックをドキュメントに追加する必要があります。

  • component: 文字列"Java"、"JavaFX"または"Java bundle"。

  • isAutoInstall: インストーラが自動的に起動される場合はTrueです。

  • restartNeeded: ブラウザの再起動が必要な場合に指定するブール値。

19.2.7 onJavascriptReady

このハンドラは、埋込みアプリケーションがJavaScript呼出しを受け入れる準備が整った後で呼び出されます。

関数シグネチャ:

onJavascriptReady: function(id)

19.2.8 onRuntimeError

このハンドラは、埋込みアプリケーションが起動に失敗した場合に呼び出されます。

関数シグネチャ:

onRuntimeError: function(id)

19.3

この項では、配備ツールキットを使用するデプロイメントの例を示します。


注意:

一部の配備ツールキット・メソッドは、Webページの本文がロードされる前に使用される場合、配備ツールキット・プラグインをインスタンス化できないため、完全には機能しない可能性があります。WebページのDOMツリーが構築される前に配備ツールキットを使用する場合、ページの<body>要素内でdtjava.jsをロードし、他の配備ツールキットAPIより前に呼び出す必要があります。

デプロイメントを開始するには、HTMLコンテンツがロードされた後で、onloadハンドラを使用してアプリケーションを追加します。その理由は次のとおりです。

  • アプリケーション・コンテンツが挿入されるとき、DOMツリーが存在する必要があります。HTMLコンテンツ・ページのロード後に、DOMツリーが作成されます。

  • 配備ツールキットの検出コードが、HTMLページをロードしないようにすることはありません。

  • 配備ツールキットは、ページに必要な他のリソースと同時にロードしないようにします。

19.3.1 DOMツリーの構築後に起動する埋込みアプリケーション

例19-3は、Webページに埋め込まれたアプリケーションのデフォルトのデプロイメント・シナリオを示しています。アプリケーションは、deployIt()関数でWebページに追加されます。この関数は、ページがロードされ、そのDOMツリーが構築された後で呼び出されます。アプリケーションのDOMツリーでの位置は、プレースホルダ・パラメータの値によって決定されます。この場合、アプリケーションは、id="place"<div>タグに挿入されます。

メイン・ページのロード後にアプリケーションをWebページに追加すると、埋込みアプリケーションを含む完全なWebページを取得し、高速にロードするのに役立ちます。これは、アプリケーションは、Webページに必要な他のリソースのロードと同時に起動するためです。

プレースホルダ要素の値には、コンテナDOMノードを指す文字列またはJavaScript変数を指定できます。そのノードがドキュメントDOMツリーから分離されている場合、親ノードがDOMツリーに追加されるまで、アプリケーションは初期化されません。

19.3.3 Webアプリケーションへのパラメータの受渡し

Webページからアプリケーションに動的パラメータを渡すことができます。これを行うには、名前付きパラメータのセットを、アプリケーション記述子のparams属性として追加する必要があります。

例19-7では、埋込みアプリケーションがWebページから2つの動的パラメータを取得します。JavaScript変数の値を使用して"zip"パラメータが割り当てられていることに注意してください。

ユーザーがJRE 7u6以降を所有している場合、Java Web Startアプリケーションの場合と同じアプローチが有効です。次はその例です。

アプリケーション・コードのパラメータにアクセスするには、次の例に示すように、アプリケーション・クラスのgetParameters()メソッドを使用します。

String zipcode = app.getParameters().getNamed("zip");

19.3.5 JavaScriptからのコードへのアクセス

JavaScriptからJavaまたはJavaFXアプリケーションにアクセスするには、アプリケーションを表すJavaScriptオブジェクトへの参照を取得する必要があります。例19-3に示すように、dtjava.embed()関数の最初の引数グループのidパラメータを指定します。

たとえば、idパラメータをmyに設定した場合、例19-10に示すスクリプトを使用して、アプリケーションのパブリック・メソッドにアクセスできます。

アプリケーションが初期化フェーズを終了するまで、アプリケーション・メソッドを呼び出そうとしても動作しません。起動フェーズの説明は、4.2項「アプリケーションの起動プロセス、操作およびカスタマイズ」を参照してください。アプリケーションのロード中にアプリケーションにアクセスするには、例19-11に示すように、onJavascriptReadyコールバックを使用します。

目次      

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