第11章 アプリケーションのデバッグ

本セクションでは、ローカルデプロイメントとリモートデプロイメントの両方で、Thorntail ベースのアプリケーションをデバッグする方法を説明します。

11.1. リモートのデバッグ

アプリケーションをリモートでデバッグするには、まずデバッグモードで開始するように設定してから、デバッガーを割り当てる必要があります。

11.1.1. デバッグモードでのアプリケーションをローカルで起動

Maven ベースのプロジェクトのデバッグ方法の 1 つが、デバッグポートを指定している間にアプリケーションを手動で起動し、その後にリモートデバッガーをそのポートに接続することです。この方法は、少なくとも以下のアプリケーションのデプロイメントに適用できます。

  • mvn thorntail:run ゴールを使用してアプリケーションを手動で起動する場合。
  • mvn thorntail:start ゴールを使用して終了を待たずにアプリケーションを起動 するとします。これは、統合テストを実行する場合に特に便利です。
  • Thorntail に Arquillian アダプターを使用する場合。

前提条件

  • Maven ベースのアプリケーション

手順

  1. コンソールで、アプリケーションでディレクトリーに移動します。
  2. アプリケーションを起動し、-Dthorntail.debug.port 引数を使用してデバッグポートを指定します。

    $ mvn thorntail:run -Dthorntail.debug.port=$PORT_NUMBER

    ここで、$PORT_NUMBER は未使用のポート番号です。リモートデバッガー設定のこの番号を覚えておいてください。

11.1.2. デバッグモードでの uberjar の起動

アプリケーションを Thorntail uberjar としてパッケージ化することを選択した場合は、以下のパラメーターを使用してアプリケーションを実行してデバッグします。

前提条件

  • アプリケーションによる uberjar

手順

  1. コンソールで、uberjar のディレクトリーに移動します。
  2. 以下のパラメーターで uberjar を実行します。行上の uberjar の名前の前に、すべてのパラメーターが指定されていることを確認してください。

    $ java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$PORT_NUMBER -jar $UBERJAR_FILENAME

    $PORT_NUMBER は未使用のポート番号です。リモートデバッガー設定のこの番号を覚えておいてください。

    JVM を一時停止してリモートデバッガー接続を待つ場合は、アプリケーションを起動する前に suspendy に変更します。

11.1.3. デバッグモードでの OpenShift でのアプリケーションの起動

OpenShift で Thorntail ベースのアプリケーションをリモートでデバッグするには、コンテナー内で JAVA_DEBUG 環境変数を true に設定し、リモートデバッガーからアプリケーションに接続できるようにポート転送を設定する必要があります。

前提条件

  • アプリケーションが OpenShift で実行している。
  • oc バイナリーがインストールされている。
  • ターゲット OpenShift 環境で oc port-forward コマンドを実行する機能。

手順

  1. oc コマンドを使用して、利用可能なデプロイメント設定を一覧表示します。

    $ oc get dc
  2. アプリケーションのデプロイメント設定の JAVA_DEBUG 環境変数を true に設定します。これにより、JVM がデバッグ用にポート番号 5005 を開くように設定されます。以下は例になります。

    $ oc set env dc/MY_APP_NAME JAVA_DEBUG=true
  3. 設定変更時に自動的に再デプロイするように設定されていない場合は、アプリケーションを再デプロイします。以下は例になります。

    $ oc rollout latest dc/MY_APP_NAME
  4. ローカルマシンからアプリケーション Pod へのポート転送を設定します。

    1. 現在実行中の Pod を一覧表示し、アプリケーションが含まれる Pod を検索します。

      $ oc get pod
      NAME                            READY     STATUS      RESTARTS   AGE
      MY_APP_NAME-3-1xrsp          0/1       Running     0          6s
      ...
    2. ポート転送を設定します。

      $ oc port-forward MY_APP_NAME-3-1xrsp $LOCAL_PORT_NUMBER:5005

      ここで、$LOCAL_PORT_NUMBER はローカルマシンで選択した未使用のポート番号になります。リモートデバッガー設定のこの番号を覚えておいてください。

  5. デバッグが完了したら、アプリケーション Pod の JAVA_DEBUG 環境変数の設定を解除します。以下は例になります。

    $ oc set env dc/MY_APP_NAME JAVA_DEBUG-

関連情報

デバッグポートをデフォルト 5005 から変更する場合は、JAVA_DEBUG_PORT 環境変数を設定することもできます。

11.1.4. アプリケーションへのリモートデバッガーの割り当て

デバッグ用にアプリケーションが設定されている場合は、選択したリモートデバッガーを割り当てます。本ガイドでは、Red Hat CodeReady Studio について説明していますが、他のプログラムを使用する場合も手順は同じようになります。

前提条件

  • ローカルまたは OpenShift 上で実行し、デバッグ用に設定されたアプリケーション。
  • アプリケーションがデバッグをリッスンしているポート番号。
  • Red Hat CodeReady Studio がマシンにインストールされている。Red Hat CodeReady Studio ダウンロードページ からダウンロードできます。

手順

  1. Red Hat CodeReady Studio を起動します。
  2. アプリケーションの新規デバッグ設定を作成します。

    1. Run→Debug Configurations をクリックします。
    2. 設定のリストで、Remote Java アプリケーション をダブルクリックします。これにより、新しいリモートデバッグ設定が作成されます。
    3. Name フィールドに、設定に適した名前を入力します。
    4. アプリケーションが含まれるディレクトリーへのパスを Project フィールドに入力します。便宜上、Browse…​ ボタンを使用できます。
    5. Connection Type フィールドを Standard (Socket Attach) に設定していない場合は、これを設定します。
    6. Port フィールドを、アプリケーションがデバッグをリッスンしているポート番号に設定します。
    7. Apply をクリックします。
  3. Debug Configurations ウィンドウの Debug ボタンをクリックしてデバッグを開始します。

    初めてデバッグ設定を迅速に起動するには、Run→Debug History をクリックし、一覧から設定を選択します。

関連情報