Deadlock Eclipse(R) には、デバッガなど複数の設定ツールがあります。 デバッガは、プログラムの実行中にユーザーがプログラムをコントロールすることを可能にします。 また、潜在的なバグを見つけたり、プログラムがどのように機能するかを理解するためにもデバッガの使用は最適な手段です。 デバッガは、Wrapper上で実行しているJVMにリモート接続でき、段階的に何が起こっているかを確認することができます。 次の解決策では、簡単にデバッガをセットアップする方法を確認することができます。

解決策

前提条件:Java Service Wrapperのダウンロード

この例ではWrapperの最新バージョン:3.5.26を使用します。 お使いのプラットフォームにWrapperをダウンロードし、ディスクに保存してください。 例:/home/tanuki/wrapper-3.5.26/

Wrapperソースコードのダウンロード

Java Service Wrapperのソースコードは、SourceForge介してアクセスすることができます。 前のステップでダウンロードしたバージョンのソースコードをダウンロードしてください。 この例では、3.5.26バージョンのソースコードを使用します。

ソースコードをダウンロードし、ディスクに保存してください。例:/home/tanuki/wrapper_3.5.26_src

注意

JavaのソースコードはWrapperの全エディション(コミュニティ、スタンダード、プロフェッショナル)で共通です。

Eclipseファイル

/home/tanuki/wrapper_3.5.26_src/src/javaフォルダに次の2つのファイル(Eclipseで使用)を作成してください。

.classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="."/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>
.project
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>wrapper-code</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
</projectDescription>

Eclipse

EclipseにJavaのソースコードをインポートしていきます:

  • Eclipseを起動
  • fileをクリック
  • 続けて、importをクリック
  • General > Existing Projects into Workspaceを選択
  • 次へ進む
  • /home/tanuki/wrapper_3.5.26_src/src/javaフォルダを選択
  • Finishをクリック

フォルダをインポートするとすぐにEclipseでエラーが表示されます。 このエラーを修正するには次の手順を行ってください:

  • org.tanukisoftware.wrapper.WrapperInfo.java.inファイルから.in 拡張子を削除します。
ファイルを開き次の変更を適用します:
  • @version.root@3.5.26に変更
  • @build.date@20131212に変更
  • @build.time@1200に変更

My application

EclipseにJava Service Wrapperで起動するアプリケーション"MyApplication" を作成します。 このプロジェクトのためのフォルダは、/home/tanuki/workspace/MyApplicationです。

my.app.test.HelloWorldクラスを作成する。

HelloWorld.java
package my.app.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.tanukisoftware.wrapper.WrapperManager;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Enter your name: ");

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String name = "";

        try {
            name = br.readLine();
        } catch (IOException ioe) {
            System.out.println("Could not read your name!");
            System.exit(1);
        }

        System.out.println("Hello, " + name + "!");
		
        String version = WrapperManager.getVersion();
        System.out.println("Wrapper Version: " + version);
    }
}

EclipseはWrapperManagerに関するエラーを幾つか表示する場合があります。 解決するにはMyApplicationのPropertiesフォルダを開きビルドパスに wrapper-codeを追加してください。

Java Service WrapperをMyApplicationに接続

/home/tanuki/wrapper-3.5.26/conf/wrapper.confファイルを開き、 次のプロパティを設定してください:

wrapper.conf
# information to run MyApplication
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

# set the path to your application
wrapper.java.classpath.3=/home/tanuki/workspace/MyApplication/bin
wrapper.app.parameter.1=my.app.test.HelloWorld

# set the Wrapper in debug mode
wrapper.java.additional.1=-Xdebug
wrapper.java.additional.2=-Xrunjdwp:transport=dt_socket,address=8001,server=y,suspend=y

注意

ポート8001は、後ほどEclipseで使用されます。

この例では、 MyApplicationをJava Service Wrapperと統合するためにIntegration Method 1を使用します。

Java Service Wrapperの実行

次のコマンドを使ってJava Service Wrapperを実行してください:

TestWrapper Example Application
bin/testwrapper console console

プロセスがフリーズしたように見えます。

デバッガ
Listening for transport dt_socket at address: 8001
実際には、デバッガがWrapperに接続されるのを待っています。

デバッガの実行

Eclipseでリモートデバッガを作成するには次の手順を実行します:

  • メニューのデバッグ->デバッグ構成...->リモートJavaアプリケーション選択します。
  • 新規構成を作成します。
  • 名前を設定します。(例「RemoteWrapper」)
  • wrapper-codeプロジェクトを選択します。
  • ホストにlocalhostを設定します。
  • ポートに8001を設定します。(同じ値がwrapper.confにも設定されています。)
  • ソースタブをクリックします。
  • 追加をクリックし、Java projectを選択し、 MyApplicationwrapper-codeの両方を選択します。
  • 最後にデバッグをクリックします。

この時点からEclipseのデバッガは、MyApplicationとWrapperに接続されています! ターミナルを見ることでMyApplicationが動いているのが確認できるかと思います。 ソースコードに戻ると、ブレイクポイントの追加やアプリケーションのデバッグができます。 また、どの行が実行されているのかも確認することができます。