1

マルチコンポーネント Java Web Start アプリケーションがあるとします。このアプリケーションは、メイン アプリケーションの JAR を参照する JNLP と、他の複数の JNLP をcomponent-desc.

何らかの理由で、1.7.0_21 バージョン (Java SE 7 Update 21) 以降、Web Start はこれらすべて (メイン JAR またはメイン JNLP - およびエントリとしてリストされているすべての JNLP) のインストール要求をユーザーに要求するようですcomponent-desc。 、一方、以前のバージョンの Web Start は、メイン コンポーネント (「メイン」JAR を含む最上位の JNLP) をインストールするようユーザーに求めるだけのようでした。

ご想像のとおり、これは深刻な問題です。高度にモジュール化されたアプリケーションや、サード パーティのコンポーネントに依存し、独自の JNLP にリンクしているアプリケーションは、多くのクリックを要求される可能性があるため、使用者にとって非常に友好的でないスタートアップ プロセスになるからです。アプリケーションを起動する前にダイアログの数。

何故ですか?

4

1 に答える 1

3

なぜこれが起こったのか何週間も疑問に思った後、最終的にこの動作を引き起こした1つのことを突き止めたので、私は自分の答えを直接投稿しています. ディスカッションに追加するために、自由に独自の回答を投稿してください。

根本原因

Java SE 7 Update 21 以降、Web Start ランチャーは、JNLP の起動時にホスト名に大文字と小文字を使用してリモート サーバーを異なる方法で処理します。

したがって、次の代替スペルを使用して JNLP を起動すると、さまざまな動作がトリガーされます。

  • [EVIL]大文字を使用すると、質問に記載されている動作がトリガーされます (例: http://MYDOMAIN.COM/webapp/webstart.jnlp)

  • [良い]小文字を使用すると、期待どおりに機能し、意図したとおりに機能します (例: http://maydomain.com/webapp/webstart.jnlp)

注:この背後にある理由は、1.7.0_21 のリリース ノートでは説明されていません。

ソリューション

Web Start 経由で JNLP プロトコルを介してロードされるリソースをリンクするときは、大文字を使用しないでください。

システムで大文字のホスト名が使用されている場合 (何らかの理由で、これはおそらく有効なものではありません。以下の次のセクションを参照してください)、Web Start ランチャーを呼び出す前、または起動に使用する URL を構築する前に、それらを小文字に変換してください。

ホスト名の大文字と小文字を区別しない

したがって、 RFC952はホスト名を想定していることに注意してください(強調は私のものです)

「名前」(ネット、ホスト、ゲートウェイ、またはドメイン名) は、アルファベット (A ~ Z)、数字 (0 ~ 9)、マイナス記号 (-)、およびピリオド (.) から抽出される最大 24 文字のテキスト文字列です。 ピリオドは、「ドメイン スタイル名」の構成要素を区切るのに役立つ場合にのみ許可されることに注意してください。(背景については、RFC-921、「ドメイン ネーム システムの実装スケジュール」を参照してください)。名前の一部としてブランクまたはスペース文字は使用できません。大文字と小文字の区別はありません。 最初の文字は英字でなければなりません。最後の文字は、マイナス記号またはピリオドであってはなりません。ゲートウェイとして機能するホストには、名前の一部として「-GATEWAY」または「-GW」が必要です。インターネットゲートウェイとして機能しないホストは、名前の一部として「-GATEWAY」および「-GW」を使用しないでください。DoD ホストの場合、TAC であるホストには、ホスト名の最後の部分として「-TAC」が必要です。1 文字の名前またはニックネームは使用できません。

システムで何らかの理由で大文字が必要な場合は、何か問題があります。残念ながら、どうやら 1.7.0_21 の時点で Web Start もそうです。


現時点では、Oracle のデータベースのバグ レポートを見たことがなく、認識していないことに注意してください。また、この問題のシグナルはオンラインではかなり低いように思われるため、他の条件がこの動作を引き起こす可能性があります。単純なテストケースはまだ作成していません。

于 2013-08-12T15:25:11.590 に答える