コラム: Java Web Startのリモートデバッグ



Java Web Startのリモートデバッグ  江里口 温

本コラムの対象:
Java Web Startを利用してプログラミングをしている方。Java Web Startの基本を理解している方。

※本コラムでは、Java Web Startの基本的な説明はしていません。

0.Java Web Startのデバッグ法

このコラムでは、Java Web Startで動作するプログラムをリモートデバッグする方法を紹介します。
 具体的には、サンプルのJava Web Startプログラムをeclipseでデバッグする手順を紹介しましょう。
 このコラムの構成は以下の通りです。

今回の内容
◆ 1.サンプルを動作させるための準備
デバッグ対象となるプログラムと、それを動作させる環境の説明です。動作可能なプログラムと環境を持っている方は、この章を飛ばしてもらってもかまいません。

◆ 2.Java Web Startのデバッグ用起動
Java Web Startをリモートデバッグするための起動コマンドを紹介します。本コラムのメインです。

◆ 3.eclipseのデバッグ設定
eclipseでデバッグ用の設定を行い、デバッグを行います。


1.サンプルを動作させるための準備

 まずこの章では、このコラムで用いるサンプルプログラムの内容、Apacheの設定、Java Web Startの設定を示します。次の章で行うデバッグは、この章の内容を前提に行います。
 動作可能なJava Web Startのプログラムと環境を持っている方は、この章を読み飛ばしてもらってもかまいません。 次章のJava Web Startのデバッグ用起動から読んでください。

準備の概要は以下の通りです。

1-1.環境

サンプル環境は、以下のような構成とします。

  • J2SE1.4がインストールされている。
  • Apache HTTP server(Windows版)がインストールされている。
Apache HTTP serverとeclipseを動作させるマシンは同一とします。
以下、Apacheインストール先は"C:\Program Files\Apache Group\Apache2"であるとします。

1-2.サンプルアプリケーション

以下のソースをコンパイルしてjarにします。jarのファイル名はhello.jarとします。

import javax.swing.*;

public class HelloJWS extends JFrame
{
    public HelloJWS()
    {
        String labelString = "HelloJWS";
        JLabel label = new JLabel(labelString);
        getContentPane().add(label);
        pack();
        setVisible(true);
    }

    public static void main(String[] args)
    {
        HelloJWS frame = new HelloJWS();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

1-3.JNLP ファイル

hello.jnlpというファイルを作成します。以下のようにXML形式で記述します。 codebaseの値などは環境にあわせて書き換えてください。

<jnlp spec="1.0+"  codebase="http://localhost/jws" href="hello.jnlp">
    <information>
        <title>WebStart Test</title>
        <vendor>eriguchi</vendor>
        <offline-allowed/>
    </information>
    <resources>
        <j2se version="1.4"/>
        <jar href="hello.jar"/>
    </resources>
    <application-desc main-class="HelloJWS"/>
</jnlp>

1-4.Webサーバのアクセス権限設定

先ほど作ったhello.jarとhello.jnlpをクライアントからアクセス可能な場所にコピーします。
C:\Program Files\Apache Group\Apache2\htdocs\jws\に以下の2ファイルをコピーします。

  • hello.jar …アプリケーションを含むJAR
  • hello.jnlp …設定ファイル
1-5.MIMEタイプの設定

JNLPのMIMEタイプを設定します。
C:\Program Files\Apache Group\Apache2\conf\.htaccessに記述してください。

AddType application/x-java-jnlp-file jnlp

設定は以上で終了です。Apacheを起動し、ブラウザで以下のアドレスにアクセスして、サンプルが起動することを確認してください。

http://localhost/jws/hello.jnlp 

2.Java Web Startのリモートデバッグ用起動

ここからは、実際のデバッグ手順について説明します。
 
Java Web Startをデバッグ起動しましょう。通常のリモートデバッグとJava Web Startのデバッグで異なるのは、以下に示したコマンドです。以下のコマンドでプログラムを起動させてください。

 Java Web Startリモートデバッグ用起動コマンド:

set JAVAWS_HOME=C:\Program Files\Java Web Start
set JAVA_HOME=C:\j2sdk1.4.1_01
%JAVA_HOME%\bin\java.exe" "-Djnlpx.home=%JAVAWS_HOME%" "-Djnlpx.heapsize=NULL,NULL" "-Djnlp
x.jvm=%JAVA_HOME%\bin\java.exe" "-Djnlpx.vmargs=-Xdebug -Dnoagent -Djava.compile
r=NONE -Xrunjdwp:transport=dt_socket,server=y,address=8118"
"-Djava.security.poli
cy=file:%JAVAWS_HOME%\javaws.policy" "-DtrustProxy=true" -classpath "%JAVAWS_HOME%\javaws.
jar;%JAVAWS_HOME%\javaws-l10n.jar" com.sun.javaws.Main http://localhost/jws/hello.jnlp

太字で示した箇所が、リモートデバッグ用起動コマンドの重要な部分です。

  赤い文字で示した二箇所は、動作環境、プログラムにあわせて書き換えてください。意味は以下の通りです。

設定項目 上のコマンドでの値 意味
デバッグ用ポート番号 8118 デバッグ用ポート番号を指定します。他の番号と重複しなければ、番号付けは任意です。後にアタッチする際、この番号を設定値として用います。
起動アドレス http://localhost/jws/hello.jnlp サンプルプログラムを起動するためのURLです。

2-1.通常のリモートデバッグ手法が通じない理由

Java Web Startでプログラムを起動させようとした場合、実際には以下の2つのプログラムが起動します。

  1. ユーザプログラムを起動するランチャ
  2. ユーザのプログラム
上のJava Web Startリモートデバッグ用起動コマンドは、1のランチャを起動するためのコマンドです。よってこのJavaコマンドにオプションを指定しても、それはランチャに対するオプション指定になってしまいます。これが、通常の指定法ではJava Web Startにリモートデバッグオプションを指定できない理由です。

2-2.解決法

そこで、太字で示した指定が必要になります。-Djnlpx.vmargs=(オプション文字列) で、(オプション文字列)を2のユーザプログラムに渡すことができます。(オプション文字列)にリモートデバッグのオプション指定を行うことで、Java Web Startで動作するプログラムをリモートデバッグできます。

3.Eclipseのデバッグ設定

3-1.プロジェクトの作成

 2章のコマンドでJava Web Startプログラムをデバッグ起動したら、Eclipseからアタッチしましょう。
 アタッチのためには、デバッグするプログラムを含んだプロジェクトが必要になります。ここではJava Web StartTestという名前のプロジェクトを作成することにします。

プロジェクトを作成することでアタッチが可能になる
図1: HelloJWSクラスを含んだプロジェクトの作成

3-2.eclipseからプロセスにアタッチする

 「実行」→「デバッグ」→「リモートJavaアプリケーション」を選択し、新規ボタンを押します。

デバッグの設定画面
図2: リモートデバッグの設定画面

「プロジェクト」は、Java Web Startで動作中のプログラムソースが入ったプロジェクトを選択します。
「ポート」には、2章の起動コマンドで指定したポート番号(今回の例では8118)を入力してください。

 以上の設定を終えてから「デバッグ」 ボタンを押すことで、デバッグを開始させることができます。

デバッグ画面
図3: デバッグ画面

4.まとめ

 以上が、Java Web Startプログラムをリモートデバッグするための手順です。
 通常のJavaオプションの指定法では、Java Web Startプログラムにオプションを指定することができません。しかし -Djnlpx.vmargs=(オプション文字列) という指定法を用いることで、Java Web Startプログラムにオプションを指定することができます。この手法でリモートデバッグオプションを指定すれば、あとは通常のデバッグ手順を実行できます。

Page Top
アンケートフォーム

このページに掲載されていた情報は役にたちましたか?

  • とても役に立った
  • 役に立った
  • あまり役にたたなかった
  • 役にたたなかった
ご意見、ご感想

注意:本文書の内容に誤りがあり、またこの文書によって不利益を被っても、
Acroquest Technology 株式会社は一切関知いたしません。

  • 現象別Index
  • 原因別Index

Find Bugsバグ詳細

Find Bugs Bug Descriptions日本語版

RSSで更新情報を取得する

RSSとは、ホームページの更新情報を配信する為のフォーマットです。
RSSを利用すると、登録したページの情報が更新された場合に、更新情報を自動的に受け取る事ができます。

詳細

弊社小森が執筆致しました

Javaでオブジェクト指向開発

Javaプログラミング言語習得において、新人プログラマーの最初の障害は「オブジェクト指向の壁」です。
本書は、Javaのソフトウェア開発を中心に事業を発展させてきたAcroquest社の新人教育セミナーを加筆・書籍化したもので、大卒の新人に対して、ゼロからJava言語を教えてきた実績をフィードバックしています。

メールマガジン配信中

Javaトラブルシューティングのメルマガをはじめました!是非ご購読ください

詳細