|
完全な環境と実行環境は
Get the JDK download からダウンロードできます。 |
|
Java SE 6 Update 10 > 新しい Java Plug-In > JNLP サポート 目次はじめに次世代の Java Plug-In テクノロジ (以下、「Java Plug-In」) は、JNLP ファイルからのアプレットの直接起動をサポートします。以前は、Java Web Start のみが Java アプリケーションを起動するために JNLP ファイルを利用していました。現在は、同じメタ記述子を使用して Java アプレットを記述できます。 この新機能には多くのメリットがあります。
このドキュメントでは、JNLP を使用してブラウザ内の Java アプレットを記述する際のわずかなセマンティクスの違いについて説明し、JNLP 経由での簡単なアプレット配備と高度なアプレット配備の例を紹介します。 使用法
JNLP ファイルからアプレットを起動するには、
<applet width="300" height="300" code="com.mycompany.MyApplet">
<param name="jnlp_href" value="my_applet.jnlp">
</applet>
この例では、my_applet.jnlp がアプレットの JNLP 記述子です。その内容は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<jnlp href="my_applet.jnlp">
<information>
<title>My Applet</title>
<vendor>My Company, Inc.</vendor>
<offline-allowed />
</information>
<resources>
<j2se version="1.4+"
href="http://java.sun.com/products/autodl/j2se" />
<jar href="my_applet.jar" main="true" />
<extension name="SomeExtension"
href="http://some.server.com/some_extension.jnlp" />
</resources>
<applet-desc
name="My Applet"
main-class="com.mycompany.MyApplet"
width="300"
height="300">
</applet-desc>
</jnlp>
Java Web Start を使用したことがある開発者には、JNLP ファイル形式は既に馴染みのあるものでしょう。JNLP を初めて使用する開発者は、仕様については JSR-56 を、説明については『★Java Web Start Developers' Guide★』のアプリケーション関連の記述を参照してください。 セマンティクス
コードベース処理仕様
JNLP ファイルでは、コードベースは Java Plug-In では、明示的に指定される、または HTML ドキュメントの場所から暗黙的に取得されるため、コードベースは常にブラウザによって提供されます。これにより、JNLP ファイルで相対 URL を使用できます。これは、サーバー間でコンテンツのツリー全体を移動する場合に非常に便利です。
JNLP ファイルはツリー構造内の他の JNLP ファイルを参照します。JNLP アプレットのルート JNLP ファイルは、 コードベース計算のルールは次のとおりです。
簡単な Java 表現では、これは次のように表すことができます。 URL new_codebase = new URL(current_jnlp_dir, current_jnlp_codebase); このコードベース計算は、JSR-56 の拡張ではありません。 JSR-56 では、コードベースが絶対コードベースに制限されないため、相対コードベースが可能です。 例例 1:
this JNLP's location: http://www.sun.com/this.jnlp
this JNLP's codebase: http://www.foo.com/test/
resulting codebase for
parsing this JNLP: http://www.foo.com/test/
例 2:
this JNLP's location: http://www.sun.com/test2/this.jnlp
this JNLP's codebase: <none>
resulting codebase for
parsing this JNLP: http://www.sun.com/test2/
例 3:
this JNLP's location: http://www.sun.com/this.jnlp
this JNLP's codebase: codebasedir
resulting codebase for
parsing this JNLP: http://www.sun.com/codebasedir
例 4: 相対パスは、HTML ファイルのツリーで行うのと同じように、入れ子の各 JNLP を参照するために使用されます。
www.sun.com/html/my_applet.html
refers to: my_applet.jnlp
codebase: www.sun.com/html
my_applet.jnlp:
codebase not specified
inherits "www.sun.com/html"
references JNLP extension "jogl/jogl.jnlp"
jogl/
jogl.jnlp
codebase not specified
inherits "www.sun.com/html/jogl"
(the directory containing jogl.jnlp)
references gluegen-rt/gluegen-rt.jnlp
gluegen-rt/
gluegen-rt.jnlp
codebase not specified
inherits "www.sun.com/html/jogl/gluegen-rt"
(the directory containing gluegen-rt.jnlp)
ベストプラクティス以下のいずれかをお勧めします。
<jnlp> タグで相対コードベースを使用すると、わかりづらくなります。
例シーングラフデモシーングラフ開発チームから無料提供されたシーングラフデモアプレットは、アプレット内から JNLP 拡張を使用する方法、アプリケーションとアプレットの両方で再利用が容易なコードを構築する方法を示します。 各シーングラフデモは、任意の種類のコンテナに配置可能な単なるコンポーネントです。アプリケーションとして実行される場合、デモはトップレベルフレームに配置されます。アプレットとして実行される場合、デモはアプレットに配置されます。アプレット自体がコンテナです。 また、ほとんどのシーングラフデモは、特定のスタイルで記述されています (引数のないパブリックコンストラクタを持つ)。これにより、汎用アプレットおよび JNLP ファイルテンプレートを使用してデモを配備し、実行するデモンストレーションをアプレットへのパラメータとして指定できます。
以下は、Egg Timer デモ用に記述された
<applet width="200" height="200"
codebase="http://download.java.net/javadesktop/plugin2/scenegraph/"
code="demo.applet.DemoApplet" archive="BackwardCompatibility.jar">
<param name="jnlp_href" value="scenario-applet.jnlp">
<param name="demo.classname" value="demo.alarm.EggTimer">
</applet>
BackwardCompatibility.jar には、Java Plug-In の古いバージョンのユーザーにこのコンテンツが新しい Java Plug-In を必要とすることを通知し、ダウンロードページへと導く、小さなアプレットが含まれています (そのソースコードはここでダウンロード可能)。現時点では、
アプレットのリソースは
<jnlp href="scenario-applet.jnlp">
<resources>
<!-- Want some extra RAM since we aim to run
all of these in the same JVM -->
<j2se version="1.6+"
href="http://java.sun.com/products/autodl/j2se"
max-heap-size="128m" />
<extension name="Scenario-0.5"
href="http://download.java.net/javadesktop/scenario/releases/0.5/Scenario-0.5.jnlp"/>
<extension name="AppFramework"
href="http://download.java.net/javadesktop/scenario/demos/lib/AppFramework.jnlp"/>
<jar href="Scenario-Demos.jar" main="true" />
</resources>
<applet-desc
name="Scenario Demo Applet"
main-class="demo.applet.DemoApplet"
width="300" <!-- overridden by applet tag -->
height="300"> <!-- overridden by applet tag -->
</applet-desc>
</jnlp>
注意が必要な要素:
このインフラストラクチャーでは、実際の
public class DemoApplet extends JApplet {
public void init() {
try {
Class c = Class.forName(getParameter("demo.classname"));
Object o = c.newInstance();
add((Component) o);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
単に demo.classname パラメータを受け取り、それに基づいて名前付きクラスをインスタンス化し、それを自身に追加します。各デモは主要設計要素であるコンポーネントとして記述されています。コンポーネントにより、コードをアプレットとアプリケーションの両方で容易に再利用できます。 JavaFX Script アプレットデモ
JavaFX の技術リーダー Chris Oliver から無料提供された JavaFX アプレットデモンストレーションは、アプレットでの JavaFX Script コンテンツの配置方法を示します。ベース
バイトコードにコンパイルされたら、アプレットの配備は簡単です。
<applet width="250" height="280" code="TimerApplet" archive="BackwardCompatibility.jar">
<param name="jnlp_href" value="TimerApplet.jnlp">
</applet>
下位互換 jar の説明については、上記の例を参照してください。 アプレットの JNLP ファイルは、アプレットのリソースを参照します。
<jnlp href="TimerApplet.jnlp">
<resources>
<jar href="TimerApplet.jar" main="true" />
<jar href="javafxrt.jar" />
<jar href="Scenario-0.5.jar" />
</resources>
<applet-desc
name="JavaFX Timer Applet"
main-class="TimerApplet"
width="300"
height="300">
</applet-desc>
</jnlp>
近い将来、 NASA World Wind JavaWorld Wind Java 開発チームの Patric Murris から提供された NASA World Wind Java アプレットの例は、NASA World Wind Java などの最先端ライブラリを配備する方法、および JavaScript を使用して Web ページで HTML と Java コンテンツを効果的に組み合わせる方法を示します。
Web ページは、カスケード山脈に関する情報 (出展: ウィキペディア) を含み、World Wind Java をアプレットとして埋め込んで、山脈内の山の位置を示します。World Wind を Web ページに組み込むことは非常に簡単です。以下は、World Wind をページに埋め込む
<applet id="wwjApplet" width=600 height=380
code="gov.nasa.worldwind.examples.applet.WWJApplet"
archive="BackwardCompatibility.jar">
<param name="jnlp_href" value="WWJApplet.jnlp">
</applet>
以下は、
<jnlp href="WWJApplet.jnlp">
<resources os="Windows">
<property name="sun.java2d.noddraw" value="true"/>
</resources>
<resources>
<j2se href="http://java.sun.com/products/autodl/j2se" version="1.4+"/>
<jar href="worldwind.jar" main="true" />
<extension name="jogl"
href="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp" />
</resources>
<applet-desc
name="WWJ Applet"
main-class="gov.nasa.worldwind.examples.applet.WWJApplet"
<!-- Overwritten by the surrounding web page -->
width="100"
height="100">
</applet-desc>
</jnlp>
注意が必要なアイテム:
Web ページ上の HTML リンクは、アプレットと対話して適切な山へとナビゲートする JavaScript 関数を呼び出します。以下は、これらのリンクの 1 つの例です。 <a href="javascript:gotoLocation(MOUNT_RAINIER);">Mount Rainier</a> (southeast of Tacoma, Washington) ...
リンクがクリックされると、JavaScript 関数
function gotoLocation(locationString) {
var params = locationString.split(';');
if(params.length == 3) // Lat/lon
getWWJApplet().gotoLatLon(parseFloat(params[1]),
parseFloat(params[2]));
...
}
山の位置は、Web ページの HTML に JavaScript 文字列としてエンコードされます。緯度、経度、およびその他の表示情報は、これらの文字列から解析され、アプレットに渡されます。 この例の詳細については、ページの HTML ソースコードを参照してください。
既に説明したように、World Wind Java をアプリケーションまたはアプレットに組み込む方法として推奨されるのは JNLP 拡張です。これにより、World Wind コードリソースを、この拡張を組み込む Web 中の多くのアプリケーションまたはアプレット間で共有することができます。World Wind JNLP 拡張を参照するには、アプリケーションまたはアプレットの JNLP ファイルの
<extension name="worldwind" href="http://worldwind.arc.nasa.gov/java/0.4.1/webstart/worldwind.jnlp"/>
<extension name="jogl"
href="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp"/>
World Wind 拡張 JNLP にはバージョンがあるため、World Wind のマニュアルを調べるか、フォーラムにアクセスして、JNLP から参照する最新バージョンを確認する必要があります。World Wind Central サイトは、World Wind に関する最新情報を得るのに便利な場所です。
World Wind と拡張として使用することは、
class MyWWJApplet extends WWJApplet {}
これをクラスパス上の Jake2:Java の Quake IIJake2 アプレットの例は、インターネット経由でのゲーム配布の将来を示しています。Jake2 は、Bytonic Software によって開発された Java プラットフォームへの id Software の Quake II のポートです。今まで、Jake2 は、Java Web Start アプリケーションとして非常に効果的に配備されてきました。新しい Java Plug-In により、完全なハードウェア加速化と堅実な信頼性を備えて、ゲームを直接 Web ページに配備できるようになりました。 この例は、高度な 3D ゲームコンテンツのブラウザへの配備だけでなく、多くの Web 開発者にとって重要な、Web ページとアプレットの外観およびブランドを完全にカスタマイズする方法も示しています。
<applet id="jake2Applet" width="800" height="600"
archive="BackwardCompatibility.jar"
code="jake2.Jake2Applet">
<param name="jnlp_href" value="jake2applet.jnlp">
<param name="image" value="ajax-loader.gif">
<param name="boxborder" value="false">
<param name="centerimage" value="true">
<param name="boxbgcolor" value="#000000">
<param name="boxfgcolor" value="#ffffff">
<!-- Require our own JVM instance for better robustness -->
<param name="separate_jvm" value="true">
<!-- Parameters for the backward compatibility applet -->
<param name="compat_bgcolor" value="#000000">
<param name="compat_fgcolor" value="#ffffff">
</applet>
前と同様、Jake2 リソースは JNLP ファイル
この Web ページでは、背景を黒にし、デフォルトの Sun ロゴではなく、アプレットが実行できる状態になる前にカスタムロードインジケータを使用したいと考えます。ページの背景色は、ページの HTML で設定されます。Ajax スタイルのアニメーション GIF (黒地に白) は、
Jake2 は、当初はアプリケーションとして設計されたもので、ネットワーキングコードなどではグローバル状態をセットアップします。コードの 2 つのコピーが同じ JVM で起動される場合には適切に動作しません。これは、Java Web Start の配備では問題ありませんが、アプレットは通常、同じ JVM インスタンスを再利用します。Jake2 のアプレットとしての再配備を容易にするために、新しい
<jnlp href="jake2applet.jnlp">
<resources os="Windows">
<property name="sun.java2d.noddraw" value="true"/>
</resources>
<resources>
<j2se href="http://java.sun.com/products/autodl/j2se" version="1.4+"/>
<jar href="jake2.jar" main="true"/>
<extension name="jogl"
href="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp" />
<extension name="joal" href="http://download.java.net/media/joal/webstart/joal.jnlp" />
</resources>
<applet-desc
name="Jake2"
main-class="jake2.Jake2Applet"
<!-- Overridden by the web page -->
width="100"
height="100">
</applet-desc>
</jnlp>
World Wind アプレットの例と同様、Jake2 は JOGL を使用するため、 OpenGL で高速化された 3D グラフィックス用の JOGL 拡張および OpenAL による空間オーディオ用の JOAL 拡張は、アプレットの JNLP ファイルでそれぞれ 1 行で取り込まれます。 結論Java Plug-In での JNLP サポートの導入により、アプレット配備に関する多くの新しい可能性が開かれ、ブラウザの内外での Java コンテンツの配備の統一が大きく前進します。★Java Plug-In forum★で、この新しい機能についてのフィードバックをお寄せください。 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||